你们是如何与外星人交流的?
如何将自己的语言教会他们?
我们教孩子们学习的方法正确吗?
向量空间
在继续向下讲之前,需要提前解释一个在机器学习中非常重要的概念。通常,我们要将所有输入(图像,声音,单词等)都表示为向量,来方便后续的处理。你也可以将这个长度为n的向量看做n维空间中的一个点。但是为什么要将图像和单词用向量表示?因为我们理解向量空间,我们理解向量空间中的距离。例如。我们知道点(1,0,0)比三维空间中的点(0,5,0)更接近点(0,0,0)。如果我们可以在较高维度空间中用点表示两个单词,我们可以通过计算这些点在较高维度空间中的距离,来获取它们在意义或上下文中的相似程度。
从概念上理解,将图像和单词表示为较高维空间中的点,听起来不错。困难的部分是弄清楚如何做到这一点。
通过提取任何现有流行的卷积网络结构的倒数第二层(分类层之前)输出,可以将图像表示为特征向量。比如VGG-net,GoogleNet等。
对于单词,我们希望这种表示能够在单词的意义上相近或者上下文可以落在相近的向量空间中。将单词转化为向量的方法称作word2vec,这是如今比较流行的一类方法。word2vec的灵感来自于这句著名的谚语:You shall know the word from the company it keeps”,通过这句话所传达的意义来学习词汇的表示。
word2vec的学习通过一个与我们工作的领域相关的语料库来完成。我们以域“computer vision”为例。另\(w_{1}, w_{2}…w_{M}\)为语料库中不重复的唯一的单词,\(S_{w_1},S_{w_2}…S_{w_M}\)为对应的我们需要寻找的单词向量。为了确定单词向量,word2vec训练一个可以预测给定单词的上下文单词的系统。上下文单词被定义为在该单词两边的给定大小的窗口(这里是2)中出现的单词。比如,将如下的三句话当成我们的语料库。(这只是为了演示的目的。在真实的应用程序中,语料库应该非常大,以获得有意义的表示。)
This blog is about deep learning and computer vision.
We love deep learning.
We love computer vision.
给定单词”computer”,我们的任务是从第一句话中学习并预测上下文单词”learning”,”and”和”vision”并且从最后一句话中学习预测”we”,”love”和”vision”。因此,训练目标是使得给出“computer”一词的这些上下文单词的对数概率最大化。公式如下:
$$
Objective = Maximize\sum _{t=1}^{T}\sum _{-m \geq j \geq m}\log P\left( s_{w_{t}+j}|S_{w_t}\right)
$$
上式中,m为上下文窗口大小(这里是2),t将整个语料库的单词循环一遍(在这里是将所有句子的单词循环一遍)。
\( P(S_{w_{t+j} | S_{w_t}})\)由上下文向量和中心词向量之间的相似度或內积来建模。对于每个单词,都有两个向量与之相关联。当它作为上下文或中心词时分别由R和S来表示。
所以\( P(S_{w_{t+j} | S_{w_t}})\)被看做\( \frac {e^{R^T_{w_{t+j}}}} {\sum _{i=1}^{M} e^{R^T_i S_{w_t}}} \)。这里分母是将中心词向量与词汇表中每个其他单词的上下文向量的相似度进行归一化,使得概率相加和为1。
将每个单词的中心向量当做其向量表达,并同RNN在公式3中使用。
真实世界图片中的噪声处理:注意力机制
当场景混乱时,简单的系统就很难生成复杂的图像描述。我们,人类,通过一睹图像的全局来排除干扰。当我们继续描述图像时,我们的焦点将转移到图像中的不同区域。对于计算机,已经提出了类似的注意机制来模拟人的行为。这种注意机制只允许图像中的重要特征在需要时出现在我们面前。在每个步骤中,确定图像的显着区域并将其馈送到RNN中,而不是使用来自整个图像的特征。系统从图像中获得关注的视图,并预测与该区域相关的单词。需要基于之前生成的单词来确定此步需要关注的图像区域。否则,新生成的单词可能与图像区域对应,但不会是我们的图像描述中所需要的。
到目前为止,图像卷积层全连接层的输出作为RNN网络的输入。该输出对应于整个图像。那么,我们如何获得一个只对应一个图像的小部分的特征?卷积层的输出编码本地信息,而不是图像混乱的原始信息。卷积层的输出是2d特征图,其中每个位置受到与卷积核大小(感受野)相对应的图像区域的影响。要理解这一点,请看图4,其展示了一个卷积神经网络的样子。在输出层之前,有一个完全连接的层,就像一个伸展开的向量,代表整个输入图像,而卷积层的输出(全连接层之前的所有层)更像多维的2d图像。在某个特定位置的单个特征图中通过所有维度提取的向量表示图像的一个局部区域特征。
在每一步中,我们需要确定特征图上与当前步相关的特征区域。相关位置的特征向量将被馈送到RNN。所以,我们基于先前生成的单词来生成各个位置上对应的概率分布。\(L_{t,i} = 1\)意味着第i个位置被用来在第t步中生成当前的词汇。让\(a_i\)为从卷积特征图中提取的第i个位置所对应的特征向量。
我们需要的值为:
$$ p(L_{t, i} = 1 | I, S_0, S_1…S_{t-1} ) \approx p(L_{t, i} | h_t) = \beta_{t, i} \propto \alpha^T_i h_t $$
在这里,选择位置\(\beta_{t, i}\)的概率被转化成正比于上式中的点乘,即该位置的特征向量与RNN隐藏向量的相似度。
现在在概率分布的基础上,可以使用与具有最大概率的特征位置相对应的特征向量进行预测,但是使用根据概率加权的所有位置向量的聚合向量可以使训练更简单快速地收敛。所以我们另\(z_t\)作为输入RNN的上下文或聚合向量。
$$ z_t = \sum _{i=1}^{n}\beta_{t, i}\alpha_i $$
所以公式2变为
$$p(S_t | I, h_t) => p(S_t | z_t, h_t)$$
因此,这种机制模拟人的行为,在描述图像的过程中将注意力集中在图像的不同位置,而且,通过这种集中的视角,可以为图像生成更加复杂的描述,甚至可以满足图像中更复杂的细节。图5展示了在文献1中的标注示例。
所有这些小部件就像现在最流行的图像标注系统的基岩。有许多图像标注领域的论文围绕着这些中心思想,而在这大多数论文中,大部分的不同或多或少的集中在以下几个方面:
- 单词的特征向量如何学习。(例如:GloVe便是另一种单词特征向量的生成方式)
- 反向传播是否应用于图像以及word2vec的训练之中。
- 使用LSTM(长短时记忆单元)来代替RNN,从而解决RNN中的梯度消失问题。
- Stochastic vs soft attention: 在这里,我们讨论了Soft attention机制,其中不同的位置向量是根据其个体的概率进行聚合的。在stochastic mechanism中,基于概率分布对单个位置进行采样,并仅将采样位置的特征向量用于到RNN单元之中。
Implementation
如果你想学习Show attend and tell模型的源代码,可以参考我的Github的一个简单实现show_attend_and_tell.tensorflow。当然我只是fork了某位大神的源代码, 并将代码更新到Tensorflow的1.0版本。此外,基于我自己的简陋的机器配置,进行了简单的优化。
References
- Xu, J. Ba, R. Kiros, A. Courville, R. Salakhutdinov, R. Zemel, and Y. Bengio, Show, attend and tell: Neural image caption generation with visual attention
- Vinyals, A. Toshev, S. Bengio, and D. Erhan, Show and tell: A neural image caption generator