Sampled Softmax

本文深入探讨了在大规模多类别问题中,如何利用Sampled Softmax算法减少计算复杂度。通过对TensorFlow官方文档的解读,文章详细解释了该算法的基本原理,包括采样过程、条件概率的计算以及对数似然的推导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读了TensorFlow官方文档Candidate Sampling Algorithms Reference,写一下自己关于Sampled Softmax的理解

在多类别问题中,我们常常使用softmax输出各个类别的概率。当类别数量很大时,使用softmax计算量很大。例如,我们的问题是预测一句话中的一个词,那么类别数量就是vocabulary大小。

为此,这篇论文提出了Sampled Softmax的概念。其基本思想就是仅采样一部分类别来做softmax。


假设每个训练样本 ( x i , { t i } ) (x_i, \{t_i\}) (xi,{ti})包含一个上下文 x x x和一个目标类别 t i t_i ti,所有类别的集合记为 L L L。对于每个训练样本,我们从 L L L 中选择一个小的集合 S i S_i Si S i S_i Si中的元素是根据一个采样函数 Q ( y ∣ x ) Q(y|x) Q(yx)选择的, Q ( y ∣ x ) Q(y|x) Q(yx)表示上下文是 x x x 的条件下选择类别 y y y 的概率 ,各类别被独立选择。

有了 S i S_i Si,定义候选集合 C i C_i Ci
C i = S i ∪ { t i } C_i = S_i\cup\{t_i\} Ci=Si{ti}

如果用前面说的softmax(也就是Full softmax),针对每个 y ∈ L y\in L yL,要计算 P ( y ∣ x ) P(y|x) P(yx),即给定上下文 x x x,目标类别是 y y y的概率。
而在Sampled Softmax中,仅针对 y ∈ C i y\in C_i yCi,计算这样的概率。但要注意,这里计算的是 P ( t i = y ∣ x , C i ) P(t_i = y|x,C_i) P(ti=yx,Ci),条件概率的条件多了一个,即给定上下文 x x x以及候选集合 C i C_i Ci的条件下,目标类别是 y y y的概率。

通过贝叶斯法则:
P ( t i = y ∣ x i , C i ) = P ( t i = y , C i ∣ x i ) / P ( C i ∣ x i ) = P ( t i = y ∣ x i ) P ( C i ∣ t i = y , x i ) / P ( C i ∣ x i ) = P ( y ∣ x i ) P ( C i ∣ t i = y , x i ) / P ( C i ∣ x i ) P(t_i = y|x_i,C_i) = P(t_i = y,C_i|x_i) / P(C_i|x_i)\\ = P(t_i = y|x_i) P(C_i|t_i = y, x_i) / P(C_i|x_i)\\ = P(y|x_i) P(C_i|t_i = y, x_i) / P(C_i|x_i) P(ti=yxi,Ci)=P(ti=y,Cixi)/P(Cixi)=P(ti=yxi)P(Citi=y,xi)/P(Cixi)=P(yxi)P(Citi=y,xi)/P(Cixi)

其中, P ( C i ∣ t i = y , x i ) = ∏ y ′ ∈ C i − { y } Q ( y ′ ∣ x i ) ∏ y ′ ∈ L − C i ( 1 − Q ( y ′ ∣ x i ) ) P(C_i|t_i = y, x_i) = \prod_{y'\in C_i−\{y\}} Q(y' |x_i ) \prod_{y'\in L-C_i}(1- Q(y' |x_i )) P(Citi=y,xi)=yCi{y}Q(yxi)yLCi(1Q(yxi))

从而:
P ( t i = y ∣ x i , C i ) = P ( y ∣ x i ) ∏ y ′ ∈ C i − { y } Q ( y ′ ∣ x i ) ∏ y ′ ∈ L − C i ( 1 − Q ( y ′ ∣ x i ) ) / P ( C i ∣ x i ) = P ( y ∣ x i ) Q ( y ∣ x i ) ∏ y ′ ∈ C i Q ( y ′ ∣ x i ) ∏ y ′ ∈ L − C i ( 1 − Q ( y ′ ∣ x i ) ) / P ( C i ∣ x i ) = P ( y ∣ x i ) Q ( y ∣ x i ) / K ( x i , C i ) P(t_i = y|x_i,C_i) =P(y|x_i) \prod_{y'\in C_i−\{y\}} Q(y' |x_i ) \prod_{y'\in L-C_i}(1- Q(y' |x_i )) / P(C_i|x_i)\\ =\frac{P(y|x_i) }{Q(y|x_i) }\prod_{y'\in C_i} Q(y' |x_i ) \prod_{y'\in L-C_i}(1- Q(y' |x_i )) / P(C_i|x_i)\\ =\frac{P(y|x_i) }{Q(y|x_i) }/ K(x_i, C_i ) P(ti=yxi,Ci)=P(yxi)yCi{y}Q(yxi)yLCi(1Q(yxi))/P(Cixi)=Q(yxi)P(yxi)yCiQ(yxi)yLCi(1Q(yxi))/P(Cixi)=Q(yxi)P(yxi)/K(xi,Ci)

其中, K ( x i , C i ) K(x_i, C_i ) K(xi,Ci)是与 y y y无关的函数。取对数:
l o g ( P ( t i = y ∣ x i , C i ) ) = l o g ( P ( y ∣ x i ) ) − l o g ( Q ( y ∣ x i ) ) + K ′ ( x i , C i ) log(P(t_i = y|x_i,C_i)) = log(P(y|x_i)) − log(Q(y|x_i)) + K'(x_i,C_i) log(P(ti=yxi,Ci))=log(P(yxi))log(Q(yxi))+K(xi,Ci)

这个式子就是要送入softmax的(所谓logits)。


我们希望神经网络的最后一层输出 F ( x , y ) F(x, y) F(x,y)代表 F ( x , y ) = l o g ( P ( y ∣ x ) ) + K ( x ) F(x, y) = log(P(y|x)) + K(x) F(x,y)=log(P(yx))+K(x),因此,训练的时候,手动计算 l o g ( Q ( y ∣ x ) ) log(Q(y|x)) log(Q(yx)),然后相减,得到下式送入softmax:
T r a i n i n g S o f t m a x I n p u t = F ( x , y ) − l o g ( Q ( y ∣ x ) ) Training Softmax Input = F(x, y) − log(Q(y|x)) TrainingSoftmaxInput=F(x,y)log(Q(yx))

如果让 F ( x , y ) F(x, y) F(x,y)直接表示 l o g ( P ( y ∣ x ) ) − l o g ( Q ( y ∣ x ) ) + K ( x ) log(P(y|x)) − log(Q(y|x)) + K(x) log(P(yx))log(Q(yx))+K(x),结果就会高度依赖于采样分布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值