Gumbel Softmax

2024-04-08 09:52
文章标签 softmax gumbel

本文主要是介绍Gumbel Softmax,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Argmax是不可求导的,Gumbel Softmax允许模型能从网络层的离散分布(比如类别分布categorical distribution)中稀疏采样的这个过程变得可微,从而允许反向传播时可以用梯度更新模型参数。

算法流程

  1. 对于某个网络层输出的 n \mathrm{n} n 维向量 v = [ v 1 , v 2 , … , v n ] v=\left[v_1, v_2, \ldots, v_n\right] v=[v1,v2,,vn],生成 n \mathrm{n} n 个服从均匀分布 U ( 0 , 1 ) \mathrm{U}(0,1) U(0,1) 的独立样本 ϵ 1 , … , ϵ n \epsilon_1, \ldots, \epsilon_n ϵ1,,ϵn
  2. 通过 G i = − log ⁡ ( − log ⁡ ( ϵ i ) ) G_i=-\log \left(-\log \left(\epsilon_i\right)\right) Gi=log(log(ϵi)) 计算得到 G i G_i Gi
  3. 对应相加得到新的值向量 v ′ = [ v 1 + G 1 , v 2 + G 2 , … , v n + G n ] v^{\prime}=\left[v_1+G_1, v_2+G_2, \ldots, v_n+G_n\right] v=[v1+G1,v2+G2,,vn+Gn]
  4. 通过softmax函数计算各个类别的概率大小,其中 τ \tau τ 是温度参数:
    p τ ( v i ′ ) = e v i ′ / r ∑ j = 1 n e v j ′ / τ p_\tau\left(v_i^{\prime}\right)=\frac{e^{v_i^{\prime} / r}}{\sum_{j=1}^n e^{v_j^{\prime} / \tau}} pτ(vi)=j=1nevj/τevi/r

Gumbel-Max Trick

Gumbel分布是专门用来建模从其他分布(比如高斯分布)采样出来的极值形成的分布,而我们这里“使用argmax挑出概率最大的那个类别索引”就属于取极值的操作,所以它属于Gumbel分布。

注意,极值的分布也是有规律的。

Gumbel-Max Trick的采样思想:先用均匀分布采样出一个随机值,然后把这个值带入到gumbel分布的CDF函数的逆函数得到采样值,即我们最终想要的类别索引。公示如下:
z = argmax ⁡ i ( log ⁡ ( p i ) + g i ) g i = − log ⁡ ( − log ⁡ ( u i ) ) , u i ∼ U ( 0 , 1 ) z=\operatorname{argmax}_i\left(\log \left(p_i\right)+g_i\right) \\ g_i=-\log \left(-\log \left(u_i\right)\right), u_i \sim U(0,1) z=argmaxi(log(pi)+gi)gi=log(log(ui)),uiU(0,1)
上式使用了重参数技巧把采样过程分成了确定性的部分和随机性的部分,我们会计算所有类别的log分布概率(确定性的部分),然后加上一些噪音(随机性的部分),这里噪音是标准gumbel分布。在我们把采样过程的确定性部分和随机性部分结合起来之后,我们在此基础上再用一个argmax来找到具有最大概率的类别。

Softmax

使用softmax替换不可导的argmax,用温度系数 τ \tau τ 来近似argmax:
p i ′ = exp ⁡ ( g i + log ⁡ p i τ ) ∑ j exp ⁡ ( g j + log ⁡ p j τ ) p_i^{\prime}=\frac{\exp \left(\frac{g_i+\log p_i}{\tau}\right)}{\sum_j \exp \left(\frac{g_j+\log p_j}{\tau}\right)} pi=jexp(τgj+logpj)exp(τgi+logpi)
τ \tau τ 越大,越接近argmax。


参考

  • CATEGORICAL REPARAMETERIZATION
    WITH GUMBEL-SOFTMAX
  • 通俗易懂地理解Gumbel Softmax

这篇关于Gumbel Softmax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885251

相关文章

word2vec 两个模型,两个加速方法 负采样加速Skip-gram模型 层序Softmax加速CBOW模型 item2vec 双塔模型 (DSSM双塔模型)

推荐领域(DSSM双塔模型): https://www.cnblogs.com/wilson0068/p/12881258.html   word2vec  word2vec笔记和实现 理解 Word2Vec 之 Skip-Gram 模型 上面这两个链接能让你彻底明白word2vec,不要搞什么公式,看完也是不知所云,也没说到本质. 目前用的比较多的都是Skip-gram模型 Go

Softmax classifier

Softmax classifier原文链接 SVM是两个常见的分类器之一。另一个比较常见的是Softmax分类器,它具有不同的损失函数。如果你听说过二分类的Logistic回归分类器,那么Softmax分类器就是将其推广到多个类。不同于SVM将  f(xi,W)  的输出结果 (为校准,可能难以解释)作为每个分类的评判标准,Softmax分类器给出了一个稍直观的输出(归一化的类概率),并且

keras 将softmax值转成onehot 最大值赋值1 其他赋值0

注意: 当使用 categorical_crossentropy 损失时,你的目标值应该是分类格式 (即,如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。 为了将 整数目标值 转换为 分类目标值,你可以使用 Keras 实用函数 to_categorical: from keras.utils.np_utils import

softmax解释

sigmoid函数只能分两类,而softmax能分多类,softmax是sigmoid的扩展 以下是Softmax函数的定义: 这个函数与hard max(即大家通常用的max函数)有相似之处,在其中某个x显著大于其他x时,返回值接近这个x,即max 下图为softmax(x, 0)和hardmax(x,0)的图形: 差别就在于softmax是连续可导的,消除了拐点,这个特

①softmax回归MNIST手写数字识别

Softmax在机器学习中有着非常广泛的应用,他计算简单而且效果显著。 假设有两个数a和b,且a>b > c 如果取max,结果是a 如果取softmax,则softmax(a) > softmax(b) > softmax(c),softmax把所有的选项都给出概率。 MNIST手写数字识别是一个使用softmax回归(softmax regression)模型

【Caffe】softmax和softmaxwithloss层的理解

softmax_axis_表示在那边切,当为1是,out_num_就表示batchsize,sum_multiplier表示通道数,scale相关的一般表示临时变量的存储,dim=C*W*H,spatial_dim=W*H,inner_num_如果fc层就为1,conv层就为H*W。 本文所举得例子是在mnist的基础上解说的,batchsize为128,类别为10。 首先看softmax求导

TensorFlow实现Softmax回归

原理 模型 相比线性回归,Softmax只多一个分类的操作,即预测结果由连续值变为离散值,为了实现这样的结果,我们可以使最后一层具有多个神经元,而输入不变,其结构如图所示: 为了实现分类,我们使用一个Softmax操作,Softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持可导的性质。 为了完成这一目标,我们首先对每个未规范化的预测求幂,这样可以确保输出非负。 为

Softmax与SoftmaxWithLoss原理及代码详解

一直对softmax的反向传播的caffe代码看不懂,最近在朱神的数学理论支撑下给我详解了它的数学公式,才豁然开朗 SoftmaxWithLoss的由来 SoftmaxWithLoss也被称为交叉熵loss。 回忆一下交叉熵的公式, H(p,q)=−∑jpjlogqj H ( p , q ) = − ∑ j p j log ⁡ q j H(p, q) = -\sum_j p_j\lo

深度学习基础—Softmax回归

通常对于二分类问题,大家熟知的模型就是logistic回归。那么对于多分类问题呢?如果要多分类,我们可以在网络的最后一层建立多个神经元,每个神经元对应一个分类的输出,输出的是某一个分类的概率,这些概率之和为1。要想做到上述分析,就需要由Softmax激活函数组成的Softmax回归模型来解决。 1.Softmax激活函数         其中,xi是输入,n是输入向量的

Cross_entropy和softmax

1. 传统的损失函数存在的问题 传统二次损失函数为: J ( W , b ) = 1 2 ( h W , b ( x ) − y ) 2 + λ 2 K ∑ k ∈ K w i j 2 J(W,b)=\frac 12(h_{W,b}(x)-y)^2+\frac \lambda{2K}\sum_{k \in K}w_{ij}^2 J(W,b)=21​(hW,b​(x)−y)2+2Kλ​k∈K∑​