Sampled Softmax

阅读了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),结果就会高度依赖于采样分布。

你可能感兴趣的:(机器学习,Sampled,softmax,Word2Vec)