当前位置: 首页 > news >正文

隐私保护与生成模型: 差分隐私GAN的梯度脱敏方法

一、差分隐私是什么?

这篇文章以差分隐私和生成模型为主要研究对象,针对面临的问题,先介绍相关的背景知识和现有研究方法,后展示解决方案和实验结果。

机器学习模型的训练需要大量的数据喂食,而这些数据的应用就会涉及到个人隐私的问题。而随着数据规模越来越大,隐私问题也获得了更多的关注,而如何保护隐私也逐渐成为了比较热门的研究方向。一个直观的想法是能否利用生成模型来生成数据,既满足了隐私保障,不损害用户的个人隐私,也能满足模型训练对于数据规模的需求,还可以通过机器学习算法的验证。因此这篇文章的主要任务就是实现privacy preserving data generation,即隐私保护的数据生成,具体来说就是结合了差分隐私(differential privacy)和生成对抗网络(GAN),其中差分隐私可以提供严格的隐私保障,而GAN可以用于拟合数据分布,特别是拟合高维数据的数据分布。与传统的privacy preserving data generation方法需要对后续任务做假设相比,使用基于神经网络的生成模型可以避免对后续的任务做假设。鉴于传统方法往往只能处理简单的后续任务,使用GAN可以很好的避免这个局限。

综上所述,本文提出了一个满足差分隐私定义的生成模型训练方法,这个方法能够获得带有隐私保障的生成模型,进而获得生成数据。生成的数据可以用于后续的一系列操作和任务,例如训练机器学习模型,而且又不会损害个人隐私。

首先,我们来了解一下差分隐私的概念。差分隐私是目前机器学习领域用的最广泛的隐私的定义。上图显示了差分隐私的定义,可以看到差分隐私将隐私的概念抽象化成了数学语言,并且提供了量化指标。差分隐私把一个mechanism(算法)M,能提供的隐私保障能力,量化成了ε和δ两个数值。这两个数字都是非负的,数字越小就代表M能够提供的隐私保障越强。

具体来看定义公式,上述不等式两边的S和S’表示相邻数据集,即这两个数据集有且仅有一个数据点的差别。而公式两边的概率表示:当算法M输入不同的,且相应的数据集的时候,输出保持不变的概率。当ε和δ的值越小越接近于0的话,不等号两边的概率越接近。这意味着即便输入M的数据集有小的改变,但其输出依然很相似。

那么这又是怎样和隐私保护相关联的呢?通过上图来直观的解释一下,上下两个相邻数据集为算法的输入,其中只相差一个用户的数据,即其中绿色的部分。当算法的输出结果相近或相同的情况下就很难通过输出结果来判断输入的数据集是这两个中的哪一个,也就不可能得知是否包含绿色用户的隐私信息,这种情况下就保护了这个用户数据的隐私。

而上面的差分隐私的定义不等式对于所有可能相邻数据集都成立,这意味着无论输入的数据中相差的是哪一个用户的数据,都无法通过输出结果获得其输入的数据集,这样就实现了对用户数据的隐私保护。式中的算法M就是模型的训练算法,而输出的结果就是训练好的模型,而在本文中GAN就是训练好的模型。

二、GAN和差分隐私

在正式将GAN和差分隐私联系起来之前,先介绍一个常用的且比较简单的满足差分隐私的方法,Gaussian Mechanism,直观上理解就是给原始输出增加高斯噪声。在这之中重点在于sensitivity,指一个函数/算法f在相邻数据集上输出的最大的距离,并且这个距离通过二范数来衡量,即每一个用户对输出所能造成的最大影响。当确定了sensitivity之后就能对算法添加随机性,即添加足够大的噪声,换言之,噪声的大小需要与sensitivity成正相关。总的来说就是当噪声足够大的时候,就可以掩盖每个样本带来的影响,也就保护了样本个体的隐私信息。

接下来先介绍两个相关的基本性质。第一个是composition:当数据集被一系列算法处理之后,总隐私损失即为所有子算法隐私损失的总和。直观上,每对数据集进行一次操作,模型就有可能泄露一部分的隐私。利用这个性质可以统计迭代训练算法的总隐私损失值。第二个性质是post processing invariance,它代表的是对差分隐私算法输出结果做后处理时,如果不会重复使用数据集信息就不会泄露更多的隐私信息,即不会增加privacy risk。

然后回到问题,怎样把差分隐私和GAN结合起来。这里先不考虑隐私,了解一下GAN是如何训练的。

上图的左图展示了两个模块,左边是generator生成器,右边是discriminator判别器。Generator输入噪声,输出生成的数据样本。Discriminator输入生成的或真实的样本,其需要判断输入的样本是真还是假,同时把对应的gradient(梯度)回传给generator,用来更新generator的参数,然后使得generator生成的数据越来越逼近真实数据。

实现了GAN,要怎么满足差分隐私的需求呢?现有方法属于比较直接的Gauss mechanism应用,直接给梯度添加高斯噪声,称为Gradient Sanitization,即梯度脱敏/梯度去隐私化。其首先对梯度进行裁剪,使得所有样本的梯度二范数都小于clipping bound C,再给裁剪后的梯度添加足够大的高斯噪声,就能实现差分隐私。而clipping bound C相当于之前提及的sensitivity概念,即每个样本能引起的最大影响不会超过C,当给梯度添加了足够大的与C正相关的噪声,就能够使得样本被隐藏起来,满足差分隐私的要求。

这个方法中的难点在于clipping bound的确定,并且处于GAN这样的本身训练就不稳定的模型时,clipping bound的选择会很大程度地影响模型训练的效果。

分析上面的原理,虽然GAN有generator和discriminator两个模块,但是discriminator只有在模型训练时使用,而生成数据仅需要generator,所以只需要使得generator满足差分隐私的需求,即可得到满足隐私保护的生成数据。

针对以上特征,作者提出了保持discriminator正常训练,即不对discriminator的梯度做任何改变。而仅对discriminator传递给generator的部分梯度进行sanitization,这里利用了前面提到的post processing invariance性质。可以看到generator的参数可以写作两项乘积,其中第一项是discriminator传递的部分,也是sanitization的部分;第二项是generator自身的Jacobian,其不依赖于数据集。

另外一个重要操作是,当使用Wasserstein distance作为GAN的目标函数时,可以得到discriminator的一个Lipschitz property,而Lipschitz property可用于对梯度二范数进行估计。因此梯度裁剪的clipping bound就不需要通过手动选择,而是可以直接使用这个理论上的估值。

对比多种解决方法,图a是现有方法的处理梯度的二范数的分布,较大的方差意味着选择一个较好的clipping bound是比较困难的。图c则是本文提出的方法,其梯度二范数分布是比较接近理论值的。这表明使用理论上的估值避免了手动调参选择clipping bound的问题,实现方便且降低了clipping引入的bias(偏置)。

简单的总结一下,与现有方法相比,本文需要处理的梯度只有一个,即discriminator传递给generator的梯度,避免了对其他梯度进行操作造成额外的信息损耗。而且对梯度的处理直接利用了discriminator的 Lipschitz property,方便地获得了梯度的二范数理论估值,大大简化了获得clipping bound的过程和难度。并且由于估值是理论上的最优值,所以这一步带来的bias要比现有方法小。

接下来考虑Decentralized(去中心化)或federative learning(联邦学习)的setting。在这个情况下数据集分散于各个客户端,中心的服务器端训练模型时不会直接接触数据,而是利用各个客户端上传的梯度进行模型更新。面对这种情况,作者提出将generator和discriminator分别置于中心服务器端和客户端。具体来说,每个客户端维持一个local discriminator,即这个discriminator通过客户端的独立数据集以及服务器提供的生成数据进行训练和更新,之后将去隐私化的梯度上传给服务器端进行generator模型的更新。

综上所述,首先在这个框架下,客户端仅需将去隐私化的梯度传递给服务器,即便在服务器不可靠(untrusted)的情况下也能提供隐私保障。另外,传递的梯度实质上是对样本的梯度,其维度与模型参数梯度的维度相比低很多,与现有的联邦学习方法相比,可以有效提高传递效率。

三、差分隐私保护的效果

接下来是对模型效果的实验验证,为了验证其在高维数据集上的表现,本文在图像数据上进行了评估。评价指标中考虑了privacy和utility,其中privacy部分采用了两种量化指标,即ε和δ。而utility(样本的生成质量)考虑了两部分,首先是Inception score (IS), Frechet Inception Distance (FID) 这两个衡量样本真实性的指标。其次是样本对于后续任务的可用性:使用生成的数据集训练classifier(分类模型),后用真实数据做测试集评估classification accuracy,即评估能否仅使用生成数据训练分类模型。

首先是Quantitative Results on MNIST and Fashion-MNIST,可以看到在正常的中心化数据集上,在提供相同的隐私保障前提下,即所有的方法拥有相同的ε和δ值,本文的方法能够显著的提高生成样本的质量。

第二个是在去中心化的情况下,本文方法同样能够比较显著地提高生成样本质量,同时也能够比较明显的减低传递梯度的维度/规模,即提高了传递效率。此外这个提升效果在不同数据集上和所有评价指标上比较一致。

接下来是privacy-utility curve: 横坐标代表不同的privacy level,即不同的隐私保护程度。纵坐标为生成样本质量的指标,上图中上面部分是Inception Score(IS),其值越高越好,下面是FID,其值越低越好。可以看到在大多数情况下,代表本文方法的绿线能够比其他baseline方法表现要好。

最后是生成样本的可视化,可以看到本文方法生成样本的视觉效果比其他的baseline生成样本要清晰。但是也能看到给GAN加上差分隐私约束之后,生成质量很明显受到了影响。即便是在最简单的MNIST数据集上,生成质量都不算是完美。可以看到在privacy preserving data generation方向,特别是在高维数据类型方向依然有非常大的提升空间。

相关资料

论文链接:

https://arxiv.org/abs/2006.08265

模型链接:

https://github.com/DingfanChen/GS-WGAN
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35435.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

web前端开发学习路线图!

移动互联网时代,HTML5前端开发成为“抢手货”!各大招聘网站前端相关岗位空缺大、薪资高,很多人在学习前端开发,学习前端,我觉得最不缺少的一个是完善的系统的web前端开发/html5学习路线图,另一个就是好的课…...

树和二叉树——数据结构 (严蔚敏C语言版)

1.树 1.1树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n0);或为非空树,对于非空树T: (1)有且仅有一个称之为根的结点;(2)除根结点以外的其余结点可分为m (m>0)个互不相交的有限集T1, T2,…,Tm&#xff…...

P4173 残缺的字符串

P4173 残缺的字符串 题意: 有A,B两个串,每个串都有通配符,问A为模板串,对于 B 的每一个位置 i,从这个位置开始连续 m 个字符形成的子串是否可能与 A 串完全匹配? 题解: 我们定义…...

Linux 文件系统 整理

独栋别墅,容积率低 root 用户 高层。 用户组 用户 $more 预览 文件名 more /etc/group a.txt 文本 .java Java文件 Linux中不以后缀作为区分, 回车 :换行 空格:换页 q:退出 $tail: 尾巴 $tail -10 /etc/gr…...

cartographer_ros node (三)

上一次我们详细讲述了node_main中对应的开始轨迹的函数StartTrajectoryWithDefaultTopics,这次我们主要讲解在结束SLAM之后调用的node类中的两个函数FinishAllTrajectories和RunFinalOptimization() 首先是FinishAllTrajectories,这个函数用于结束所有处…...

day01_java常识丶环境搭建丶入门程序

Java语言发展历史 Java诞生于SUN(Stanford University Network),09年SUN被Oracle(甲骨文)收购。Java之父是詹姆斯.高斯林(James Gosling)。1996年发布JDK1.0版。 目前最使用最多的版本是Java8。 ​ Java技术体系平台 …...

Python numpy.unpackbits函数方法的使用

NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍一下NumPy中unpackbits方法…...

js-如何判断一个对象为空对象

<script> export default{name:demo,data(){return{}},methods:{checkObject(obj){if (JSON.stringify(obj) {}) {return false // 如果为空 返回false}return true // 如果不为空 返回true}} } </script>...

知乎热议:当代程序员应该去银行上班吗?一个985妹子用亲身经历告诉你们答案

前言 还愿邮储总行&#xff0c;写一下2020届秋招笔经面经&#xff0c;因为我主攻的国企&#xff08;银行和运营商&#xff09;&#xff0c;想去互联网的可以关掉啦 主要涉及邮储总行&#xff0c;浦发银行&#xff0c;农行&#xff0c;招商银行&#xff0c;成都银行&#xff0…...

C#不同状态的按钮 消失or显示

效果展示&#xff1a; 点击前 点击后 //而且 ”备注“ 变成可编辑状态 点击确定后 编辑成功 并变为初始 只有一个的” 编辑 “按钮 并在listView更改成功 列表样式 解决方案&#xff1a; 首先创建三个Button 都放在一个位置上 当然需要有一个按钮重合在编辑上面&#xff08;为…...

锋迷商城SpringCloud+Vue前后端分离2021微服务实战

锋迷商城项目是一个B2C商城&#xff0c;基于SpringCloud构建的大型千万级高并发电商系统。采用当下最主流的微服务分布式架构&#xff0c;前后端分离技术&#xff0c; 涵盖技术栈有&#xff1a;Vue、axios、Springboot、RESTful、mybatis、tkmapper、Swagger、任务调度Quartz/…...

力扣K神图解算法数据结构解析10

十、分治算法 剑指07&#xff0c;重建二叉树 //时间O(n)&#xff0c;空间O(n) //自己一直觉得这道题很难&#xff0c;没想到还是能够拿下&#xff0c;其实理论也清楚&#xff0c;前序遍历和中序遍历 //关键如下 //1.recur递归参数的确定&#xff0c;根节点在前序遍历中的索引&a…...

树莓派基于Linux内核驱动开发详解

一、驱动认知 首先理解Linux内核框图 文件系统认知&#xff0c;Linux内核框图 1、什么是驱动 linux内核驱动。软件层面上的驱动 广义上是指&#xff1a;这一段代码操作了硬件去动&#xff0c;所以这一段代码就叫硬件的驱动程序。狭义上驱动程序就是专指操作系统中用来操控硬…...

Access与Trunk

Access与Trunk的区别&#xff1a; Access模式:可以允许单个VLAN通过&#xff0c;可以用于交换机的间连接也可以用于连接用户计算机。通过Access接口不打标签。 Sys &#xff08;进入配置模式&#xff09; Interface GigabitEthernet 0/0/1 &#xff08;进入端口&#x…...

VG验证码识别框架2.2 免费识别验证码

该验证码服务端&#xff0c;可以免费识别常见数字、英文混合验证码&#xff1b; 功能亮点&#xff1a;通过http请求调用dll,可以识别验证码、自定义功能、可玩性极等&#xff1b; 压缩包里面有自定义功能插件案例&#xff0c;可以定制化自己需要的功能&#xff0c;需要有易语…...

Redis对象类型编码(补充内存篇)

欢迎大家观看之前的Redis系列文章 Redis安装和配置&#xff08;Windows和Linux&#xff09;Redis原来不止五种类型啊&#xff08;含常用命令&#xff09; Redis内存模型原来是这样的啊&#xff01; Redis对象类型编码&#xff08;补充内存篇&#xff09; 深入学习Redis持久化&a…...

6_游戏框架搭建

游戏框架搭建 目标 —— 使用 面相对象 设计 飞机大战游戏类 目标 明确主程序职责实现主程序类准备游戏精灵组 01. 明确主程序职责 回顾 快速入门案例&#xff0c;一个游戏主程序的 职责 可以分为两个部分&#xff1a; 游戏初始化游戏循环 根据明确的职责&#xff0c;设计…...

vue如何实现数据双向绑定,我的阿里手淘面试经历分享,看这篇文章准没错!

前言 全网唯一一份&#xff0c;对标阿里P7年薪60w的Android高级工程师学习进阶路线&#xff08;图未完全展开&#xff0c;怕大家看不清楚&#xff09;&#xff1a; 本篇文章都会围绕这份脑图来写&#xff0c;详细的介绍你处于哪个阶段该如何进阶&#xff0c;以及年薪层次高低对…...

LeetCode练习——其他(有效的括号)

给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 解法一&#…...

链表求和。

分析&#xff1a; 定义三个链表&#xff0c;两个链表负责两组数据的存储&#xff0c;第三个链表负责存储结果&#xff0c;前两个链表每个对应位置上的数据相加&#xff0c;注意进位处理&#xff0c;以及如果两个链表不等长的情况。 代码实现&#xff1a; class Solution3 {pu…...

洛谷P1449 后缀表达式进阶解法

#include<iostream> #include<stack> #include<string>using namespace std;stack <int> expr; string temp; char ch; int first, second;int main() {for (;;){cin >> ch;switch (ch){case(.):expr.push(stoi(temp));temp "";brea...

Python_Flask 模板复用 继承

这里写目录标题什么情况下使用模板继承标签代码基础模板&#xff1a;复用 模板继承 * include 宏 什么情况下使用模板继承 1.多个模板具有完全相同的顶部和底部 2.多个模板具有相同的模板内容&#xff0c;但是内容中部分不一样 3.多个模板具有完全相同的模板内容 标签 {% …...

C++ STL基本组成(6大组件+13个头文件)

STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成&#xff0c;其中后面 4 部分是为前 2 部分服务的&#xff0c;它们各自的含义如下表所示。 STL的组成含义容器一些封装数据结构的模板类&#xff0c;例如 vector 向量容器、list 列表容器等。算法STL 提…...

AndroidStudio自动下载 jxbrowser 卡住解决办法

最近更新了 Android Studio到 Arctic Fox 版本后&#xff0c;打开项目会自动下载 jxbrowser &#xff0c;但是这个插件是 Google 的&#xff0c;正常是不能下载成功的&#xff0c;虽然不影响开发&#xff0c;但一直出现下载状态挺难受 解决方法很简单 就是设置代理 找到设置 …...

RF高速电路的电源走线方式

作者&#xff1a;Roger Bremer&#xff1b;Tracey Chavers&#xff1b;Zhongmin Yu Maxim射频产品部 转自硬件十万个为什么公众号 射频(RF)电路的电路板布局应在理解电路板结构、电源布线和接地的基本原则的基础上进行。本文探讨了相关的基本原则&#xff0c;并提供了一些实用的…...

取消b站充电鸣谢!!!

按下F12在控制台输入&#xff1a; $(video)[0].onended()>{$(.bilibili-player-video-btn-next).click()}...

模拟电路笔记

Chapter 4 diodes Ideal Diode two modes on and offmode 1 reverse bias open cktmode 2 forward bias short cktshould be desing to limitcurrent flow & voltage across Rctifier ckt concert AC waves inot DC Assumed States Method Assume the diodes to...

2006年

Text 1 In spite of “endless talk of difference,” American society is an amazing machine for homogenizing people. There is “the democratizing uniformity of dress and discourse, and the casualness and absence of deference” characteristic of popular cultu…...

堆排序习题

写出下列关键字序列排序的结果&#xff1a;{15&#xff0c;21&#xff0c;6&#xff0c;30&#xff0c;23&#xff0c;6&#xff0c;20&#xff0c;17} 步骤&#xff1a;先对序列进行堆排队&#xff0c;之后将顶部元素与最后一个元素相交换&#xff0c;交换时候重新对剩下的再…...

安装activemq或者tomcat等启动时报错

问题描述&#xff1a; 在编写shell脚本安装mq和tomcat的时候&#xff0c;到了启动那一步出现了报错。报错内容如下&#xff1a; INFO: Loading ‘/opt/apache-activemq-5.13.2//bin/env’ ERROR: Configuration variable JAVA_HOME or JAVACMD is not defined correctly. …...

Android界面绘制流程

1.ViewRoot ViewRoot是连接WindowManager与DecorView的纽带&#xff0c;View的整个绘制流程的三大步&#xff08;measure、layout、draw&#xff09;都是通过ViewRoot完成的。当Activity对象被创建完毕后&#xff0c;会将DecorView添加到Window中&#xff08;Window是对窗口的…...

通过流程图来分析Android事件分发

写在前面 距离前一次写博客&#xff0c;已经过去接近一年&#xff0c;回想起来这一年确实很忙&#xff0c;否则不会连写博客都耽误了。然而忙归忙&#xff0c;也并没有停下学习的脚步&#xff0c;趁着今天有时间&#xff0c;把最近学习并实践于项目当中的知识点给梳理了&#…...

Android性能优化一绘制原理分析

Android应用启动慢&#xff0c;使用时经常卡顿&#xff0c;是非常影响用户体验的&#xff0c;应该尽量避免出现。 1.卡顿的分类 按照场景分可以分为&#xff1a; UI绘制 绘制刷新 应用启动 安装启动冷启动热启动 页面跳转 页面间切换前后台切换 事件响应 按键系统事件滑动 …...

Android-View绘制流程浅析

引 这段时间学习了下View的绘制流程&#xff0c;本着好记性不如烂笔头的原则&#xff0c;尝试将这些内容记录下来&#xff0c;用于巩固和总结。 这次学习的源码是基于Android SDK25来学习的&#xff0c;相比于之前版本的源码有了些许改变。 对于部分代码的功能和作用没有专门…...

PlantUML(程序员绘制流程图专用工具)

原文地址为&#xff1a; PlantUML&#xff08;程序员绘制流程图专用工具&#xff09;什么是 PlantUML PlantUML 是一个画图脚本语言&#xff0c;用它可以快速地画出&#xff1a; 时序图流程图用例图状态图组件图简单地讲&#xff0c;我们使用 visio 画图时需要一个一个图去画&a…...

浅析Android的绘制流程以及自定义流式布局实战

文章目录Android View的绘制流程以及自定义流式布局实战起点WindowPhoneWindow的创建DecorView的创建绘制的开始measurelayoutdrawStep 1, 绘制背景Step 3, 绘制自己Step 4, 绘制子view实战自定义View的构造onMeasureonLayoutgetWidth&#xff0c;getMeasuredWidth的区别最终效…...

Android中View的绘制流程

Android中View的绘制流程 一、 摘要 介绍Android中View的绘制流程&#xff0c;以及更新视图的两种方法&#xff1a;invalidate和requestLayout。 二、 ViewRootImpl 1. ViewRootImpl是什么 在API文档中如此描述ViewRootImpl&#xff1a; /*** The top of a view hierarchy…...

Android View 绘制流程总结

整理了一下 Android 上 View 绘制的流程&#xff0c;绘制流程图如下&#xff1a;...

Android之View的绘制流程解析

转载请标明出处:【顾林海的博客】 个人开发的微信小程序&#xff0c;目前功能是书籍推荐&#xff0c;后续会完善一些新功能&#xff0c;希望大家多多支持&#xff01; ##前言 自定义View在Android中占据着非常重要的地位&#xff0c;因此了解View的绘制流程对自定义View来说尤…...

Android中View绘制流程浅析

一个View&#xff0c;从无到有会走三个流程&#xff0c;也就是老生常谈的measure,layout,draw三流程; 我们都知道Android视图是由一层一层构成的层级结构&#xff0c;直白点说&#xff0c;就是父View包含子View而子View又可以包含子View。所以绘制流程是由最外层的View开始&am…...

android view 绘制过程,深入理解Android中View绘制的三大流程

前言最近对Android中View的绘制机制有了一些新的认识&#xff0c;所以想记录下来并分享给大家。View的工作流程主要是指measure、layout、draw这三大流程&#xff0c;即测量、布局和绘制&#xff0c;其中measure确定View的测量宽高&#xff0c;layout根据测量的宽高确定View在其…...

Android:从绘制一张流程图来体验View的自定义过程(一)

概述 自定义View向来不是一个轻松的话题。虽然对于android原生开发而言&#xff0c;这只能算是一项基本的技能&#xff0c;但真正当我们拿到一份需要我们自定义去实现的需求的时候&#xff0c;多少还会有点手足无措。具体是什么原因&#xff0c;我也不知道&#xff0c;也许&…...

【Android面试】View的绘制流程

目录View的绘制流程简介Activity和window和view 的关系Activity和Window是什么时候建立联系的呢&#xff1f;ViewRootImplView的绘制流程总结View的绘制流程简介 view的绘制流程主要为measure&#xff0c;layout&#xff0c;draw三个阶段 View与window的逻辑结构 对应于ViewR…...

Android View 绘制流程之三:draw绘制

Android View 绘制流程之三&#xff1a;draw绘制一.draw方法的整体流程二.drawBackground实现三.onDraw四.dispatchDraw的实现五.ScrollBar的绘制系列文章&#xff1a; Android View 绘制流程之一&#xff1a;measure测量 Android View 绘制流程之二&#xff1a;layout布局 And…...

PlantUML画类图、流程图、时序图使用详解

程序员难免要经常画流程图&#xff0c;状态图&#xff0c;时序图等。以前经常用 visio 画&#xff0c;经常为矩形画多大&#xff0c;摆放在哪等问题费脑筋。有时候修改文字后&#xff0c;为了较好的显示效果不得不再去修改图形。今天介绍的工具是如何使用 PlantUML 的插件画流程…...

Android WMS及绘制流程

主角&#xff1a;ViewRootImpl、Choreographer、Surfaceflinfer WMS扮演了什么角色? 作为协调者&#xff0c;协调view布局&#xff0c;绘制&#xff1b; 在ActivityThread中创建Actiivty后&#xff0c;调用activity.attach()时&#xff0c;创建一个窗体对象PhoneWindowPhone…...

Android视图绘制流程和原理分析

作为一个Android开发人员&#xff0c;我们每天开发工作都会与View打交道&#xff0c;Android提供的任何布局&#xff0c;控件都是直接或者间接的继承View的&#xff0c;如LinearLayout&#xff0c;RelativeLayout&#xff0c;TextView&#xff0c;Button&#xff0c;ImageView&…...

【TVM源码学习笔记】附录3 导出tvm源码编译中间文件的方法

在扒tvm源码的时候&#xff0c;会经常遇到各种宏&#xff0c;特别是一些函数宏&#xff0c;对阅读代码造成很多麻烦。我们可以使用C编译器的-E选项&#xff0c;得到源码编译中间文件&#xff0c;里面的所有宏都是已经自动替换后的。 在我们编译源码的build目录下&#xff0c;有…...

如何利用PyTorch实现一个Encoder-Decoder结构进行英法互译

数据集下载地址&#xff1a; https://download.pytorch.org/tutorial/data.zip​ download.pytorch.org 数据集在eng-fra.txt文件中&#xff0c;每一行是一对儿英语和法语之间的互译。 运行以下代码&#xff0c;请确保 PyTorch1.9.0 torchtext0.10.0 Encoder中的数据流&…...

深度学习入门8-RNN、注意力机制实现英译法的案例代码实现

文章目录一、案例介绍二、代码实现1.数据预处理2.编码器3.解码器4.基于注意力机制的解码器5.训练函数6.画图和评估函数总结一、案例介绍 今天要实现的一个案例是用RNN和注意力机制实现seq2seq的一个英译法的任务&#xff0c;将通过encoder和decoder对语言进行编码和解码。所使…...