深度学习-推荐系统-CV-NLP机器学习和人工智能入门机器学习

采样softmax(Sampled softmax )

2019-05-23  本文已影响1人  manlier

Sampled softmax

原文:https://www.tensorflow.org/extras/candidate_sampling.pdf

假设有一个单分类问题。训练集中的每个样本(x_i, \{t_i\})包含一个上下文和一个目标类。将给定上下文x时,目标类为y写作概率P(y|x)

我们使用函数F(x,y)产生softmax logits,即对数化的概率:

F(x, y) \leftarrow \log (P(y | x))+K(x)

其中K(x)是一个不依赖y的函数。

在完整的softmax训练中,对于每个训练样本(x_i, \{t_i\}),都需要对所有的分类y \in L计算F(x_i,y)。如果分类集L非常大,该操作将变得非常昂贵。

而在“Sampled Softmax”中,对于每个训练样本(x_i, \{t_i\}),我们根据一个选定的抽样函数Q(y|x)来选择一个小的采样分类集S_{i} \subset L,其中的每一个分类y \in L都以概率Q(y|x_i)独立的存在:

P\left(S_{i}=S | x_{i}\right)=\prod_{y \in S} Q\left(y | x_{i}\right) \prod_{y \in(L-S)}\left(1-Q\left(y | x_{i}\right)\right)

我们创建一个候选集C_i,联合了目标分类和采样的分类集:

C_{i}=S_{i} \cup\left\{t_{i}\right\}

我们的训练任务是计算出,在给定候选集C_i的条件下,C_i中的哪一个分类是目标分类。

对于C_i中的每一个分类y,我们想要计算出当给定x_iC_i时,y的后验概率,记作P\left(t_{i}=y | x, C_{i}\right):

应用贝叶斯法则:
\begin{array}{l} P\left(t_{i}=y | x_{i}, C_{i}\right) \\ = \frac{P\left(t_{i}=y, C_{i} | x_{i}\right)}{P\left(C_{i} | x_{i}\right)} \\ {= \frac{P\left(t_{i}=y | x_{i}\right) P\left(C_{i} | t_{i}=y, x_{i}\right)}{P\left(C_{i} | x_{i}\right)} } \\ = \frac{P\left(y | x_{i}\right) P\left(C_{i} | t_{i}=y, x_{i}\right)}{P\left(C_{i} | x_{i}\right)} \end{array}

现在,来计算P\left(C_{i} | t_{i}=y, x_{i}\right),我们注意到要使这发生,y可能在也可能不在S_i中,S_i一定包含C_i中所有的其它(除y外)元素,并且不包含任何不在C_i中的元素,
因此:

\begin{array}{l} P\left(C_{i} | t_{i}=y, x_{i}\right) \\ =\prod_{y^{\prime} \in C_{i}-\{y\}} Q\left(y^{\prime} | x_{i}\right) \prod_{y^{\prime} \in\left(L-C_{i}\right)}\left(1-Q\left(y^{\prime} | x_{i}\right)\right) \\ = \frac{1}{Q(y|x_i)} \prod_{y^{\prime} \in C_{i}} Q\left(y^{\prime} | x_{i}\right) \prod_{y^{\prime} \in\left(L-C_{i}\right)}\left(1-Q\left(y^{\prime} | x_{i}\right)\right) \end{array}

\begin{array}{l} P\left(t_{i}=y | x_{i}, C_{i}\right) \\ = \frac{P\left(y | x_{i}\right) P\left(C_{i} | t_{i}=y, x_{i}\right)}{P\left(C_{i} | x_{i}\right)} \\ = \frac{P(y|x_i)}{Q(y|x_i)} \prod_{y^{\prime} \in C_{i}} Q\left(y^{\prime} | x_{i}\right) \prod_{y^{\prime} \in\left(L-C_{i}\right)}\left(1-Q\left(y^{\prime} | x_{i}\right)\right) / P(C_i|x_i) \\ = \frac{P(y|x_i)}{Q(y|x_i)} / K(x_i, C_i) \end{array}

K(x_i, C_i)是一个不依赖于y的函数,所以:
\log \left(P\left(t_{i}=y | x_{i}, C_{i}\right)\right)=\log \left(P\left(y | x_{i}\right)\right)-\log \left(Q\left(y | x_{i}\right)\right)+K^{\prime}\left(x_{i}, C_{i}\right)

这些是应该输入softmax分类器的相对logits,用于预测C_i中的哪一个候选类才是真正的分类。

既然我们试图训练函数F(x, y)来拟合log(P(y|x)),我们用神经网络中的层输出表示F(x, y),然后减去log(Q(y|x)),将结果传入一个softmax分类器来预测哪个候选是真正的分类。

Training Softmax Input=F(x, y)-\log (Q(y | x)

从分类输出中反向传播梯度到F,这就是我们所要的。

上一篇下一篇

猜你喜欢

热点阅读