Show Attend and Tell

编码 Encoder

输入是一张图片,输出是 caption,其中 caption 是长度为 C 的 K 维词向量

对于一张图片我们使用卷积神经网络来提取特征,总共提取 L 个特征向量,每一个都是 D 维的,对应这图像中的一部分

从低层的卷积层提取特征

解码 Decoder

使用 LSTM 解码

进行解码的 $\hat{z}_t$ 是通过一个机制 $\phi$ 来计算 $\mathbf{a}_i,(i<L)$ 得出的,每一个 i 对应着图片的不同的区域,对于每个u 区域 $\phi$ 生成一个整数权重 $\alpha_i$,代表用这个区域来聚焦能生成正确的下一个单词的概率。

RNN 每一次的迭代的值的变化和传递如下所示

首先对于每个区域我们生成它的价值:

这里面 t 是 RNN 中的第 t 次迭代,i 表示区域

然后就是生成概率了

最后生成 context 向量 $\hat{z}_t$:

最初的 $h_0$ 和 $c_0$ 是通过区域特征的均值来取得的

Hard Attention

首先定义一个 one-hot 向量,$s_{t,i}$ 这个向量的第 i 个元素为 1 ,说明,我们对于区域 i 进行了特征的提取,那么这个 one-hot 向量就是由 $\alpha$ 定义的多维分布:

然后 context 向量的生成方式就变成了: