社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

盘点深度学习中的不可导操作

机器学习算法与自然语言处理 • 3 年前 • 334 次点击  


MLNLP 机器学习算法与自然语言处理 )社区是国内外知名自然语言处理社区,受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。
社区的愿景 是促进国内外自然语言处理,机器学习学术界、产业界和广大爱好者之间的交流,特别是初学者同学们的进步。

本文转载自 | 极市平台

作者 | Houye@知乎

来源 | https://zhuanlan.zhihu.com/p/97465608


深度学习中的绝大多数模型都是靠求导梯度下降来进行参数更新。但是如果遇到不可求导的操作该怎么办? 这时候如何优化我们的模型呢?

本文盘点了深度学习中的不可导操作(次梯度和重参数化).

主要包括两大类


1

『次梯度』



深度学习算法通常需要反向传播来进行优化,这就涉及到求导的问题. 激活函数需要满足单调,处处可导,有界等条件. 如传统的sigmoid函数,但是现在很多激活函数并不是处处可导的.

如ReLU函数

其图像如下

很明显在 处不可导,那么如何实现反向传播和模型优化呢? 答案就是:次梯度

次梯度

对于ReLU函数, 当x>0的时候,其导数为1; 当x<0时,其导数为0. 则ReLU函数在x=0的次梯度是 ,这里是次梯度有多个,可以取0,1之间的任意值. 工程上为了方便取c=0即可.


2

『重参数技巧』



VAE中对高斯分布的重参数

这里是对连续分布的重参数.

VAE中隐变量z一般取高斯分布,即 ,然后从这个分布中采样.但是这个采样操作是不可导的,进而导致整个模型无法BP. 解决方法就是Reparametrization tricks重参数技巧.

我们首先从从均值为0,标准差为1的高斯分布中采样,再放缩平移得到Z.

这样从 只涉及了线性操作(平移缩放),采样操作在NN计算图之外,而 对于NN来说只是一个常数.


离散分布的采样Gumbel-softmax

Gumbel-Softmax Trick

VAE的例子是一个连续分布(正态分布)的重参数,离散分布的情况也一样,首先需要可以采样,使得离散的概率分布有意义而不是只取概率最大的值,其次需要可以计算梯度。那么怎么做到的,具体操作如下:

对于n维概率向量 ,对 对应的离散随机变量 添加Gumbel噪声,再取样

其中 是是独立同分布的标准Gumbel分布的随机变量,标准Gumbel分布的CDF为 .这就是Gumbel-Max trick。可以看到由于这中间有一个argmax操作.

上述的 argmax操作是不可导的. 所以尝试用softmax来代替, 即Gumbel-Softmax Trick. 这里我们假设argmax返回的是一个one-hot向量,那么我们需要找到argmax的一个显式且光滑的逼近. 这里的 可以利用 从均匀分布中采样得到,即 .

综上总体思路:

  1. 基于Gumbel Distribution采样来避免不可导问题
  2. 在1中引入了argmax又导致了不可导(Gumbel max)
  3. 又引入softmax函数来对argmax进行光滑近似,使得可导(Gumbel softmax)

具体步骤如下:

  • 对于网络输出的一个n维向量v, 生成n个服从均匀分布U(0,1)的独立样本
  • 通过 计算得到
  • 对应相加得到新的值向量
  • 通过softmax函数

这里 就可以实现对argmax的显式且光滑的逼近

温度参数 的影响: 越小(趋近于0), 越接近categorical分布; 越大(趋近于无穷), 越接近均匀分布

证明

常规的softmax形式为

其中, 是softmax之后得到一个概率密度函数. 那么有没有某个分布能够等价于上述的分布呢?

如果对每个 添加独立标准的gumbel噪声(位置为0,尺度为1),并选择值最大的维度输出,每次的输出结果有一个概率密度函数.这样一个概率密度同样为 .

化简

积分里面是 的gumbel分布,整个积分为1,则

结果与softmax的分布一致.

为什么需要gumbel-softmax

乍看起来(https://blog.csdn.net/jackytintin/article/details/79364490),gumbel-softmax 的用处令人费解。比如上面的代码示例,直接使用 softmax,也可以达到类似的参数训练效果。但两者有着根本的区别。原理上,常规的 softmax 直接建模了一个概率分布(多项分布),基于交叉熵的训练准则使分布尽可能靠近目标分布;而 gumbel-softmax 则是对多项分布采样的一个近似。使用上,常规的有监督学习任务(分类器训练)中,直接学习输出的概率分布是自然的选择;而对于涉及采样的学习任务(VAE 隐变量采样、强化学习中对actions 集合进行采样以确定下一步的操作),gumbel-softmax 提供了一种再参数化的方法,使得模型可以以端到端的方式进行训练。


参考文献

[1]https://arxiv.org/pdf/1611.01144.pdf
[2][知识点] Reparametrization tricks重参数技巧讲解及应用https://zhuanlan.zhihu.com/p/35218887
[3]https://casmls.github.io/general/2017/02/01/GumbelSoftmax.html
[4]https://lips.cs.princeton.edu/the-gumbel-max-trick-for-discrete-distributions/

[5]【Learning Notes】变分自编码器(Variational Auto-Encoder,VAE)https://blog.csdn.net/jackytintin/article/details/53641885

[6]http://amid.fish/humble-gumbel
[7]https://www.quora.com/How-do-we-compute-the-gradient-of-a-ReLU-for-backpropagation
[8]https://towardsdatascience.com/beyond-the-derivative-subderivatives-1c4e5bf20679


技术交流群邀请函

△长按添加小助手

扫描二维码添加小助手微信

请备注:姓名-学校/公司-研究方向
(如:小张-哈工大-对话系统)
即可申请加入自然语言处理/Pytorch等技术交流群

关于我们

MLNLP社区  机器学习算法与自然语言处理  ) 是由国内外自然语言处理学者联合构建的民间学术社区,目前已经发展为国内外知名自然语言处理社区,旗下包括  万人顶会交流群、AI臻选汇、AI英才汇  以及  AI学术汇  等知名品牌,旨在促进机器学习,自然语言处理学术界、产业界和广大爱好者之间的进步。
社区可以为相关从业者的深造、就业及研究等方面提供开放交流平台。欢迎大家关注和加入我们。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/136200
 
334 次点击