BC.Wang Welcome

理解ImageToCaption(图片描述)With Attention

2019-07-23
BCWang

阅读:

NLP

  • https://github.com/B-C-WANG/AI-Storage

    理解attention的image to caption(图片的文字描述)

    一、一个简单模型

    1. Encoder:使用预训练的CNN进行fine tuning,结束后截取出输入Image到一个 feature map flatten成的向量或者直接得到的特征向量的输出, 例如HeightWidth3的图片到20481414的向量
    2. Decoder:decoder在第一次时会输入Encoder给出的图片特征以及 和词向量一起concat过后的向量,输入到LSTM预测下一个词, 第一次过后每次LSTM就输入上一次得到的词的embedding, 输出下一个预测的词的向量,通过LSTM的输出然后softmax, 得到输出词的概率,转变成词语,直到到达end标记。 在此过程中,LSTM自己的隐藏层每次输出下一个h向量,然后下一步将上一步输出的h向量作为输入(RNN的特性)

二、增加Attention

Decoder发生变化:

  1. 原来LSTM每次输入上一个词的embedding,变为输入上一个词的embedding拼接上encoder给出的图片向量
  2. 但是每次拼接的encoder向量都是一样的,没有意义,于是使用Attention来修改这个向量,使其在一部分中有重点
    于是Attention出现
    Attention是给encoder结果加权重的,输入encoder结果以及LSTM的decoder输出的上一个结果,输出加了权重的encoder结果
    Encoder的输入(图片),以及Decoder的输出(词的onehot)都是明确的,而Attention如何优化,如何给出Image decode过后的权重,是需要关注的

详细过程:

  1. 输入Image,经过预训练的CNN得到feature map,作为encoder out,这个过程可能需要先通过迁移分类任务fine tuning后面几层
  2. encoder out将作为LSTM的内部权重h的初始(由于feature map是2维的,通过mean转成向量传入LSTM)
  3. LSTM的输出的decoder向量,将会经过softmax到vocab的大的维度,给出每一个词的概率(dim就是词库中词的数目)
  4. LSTM的输入是词向量(来自于上一个LSTM预测的词的embedding,或者初始的embedding)再拼接经过attention的feature map
  5. LSTM输出的decoder除了用于3中预测词,还用于给feature map加上attention,(用于LSTM的下一次显式输入)
  6. 给feature map加上的attention是和feature map同样长宽的,但是只有1个通道,里面的每个值都是softmax的结果
  7. 为了得到这个softmax,首先feature map的n通道通过Dense变为attention dim通道的特征,然后将这个特征与decoder向量经过Dense得到的attention dim长度向量的特征相加,最后Dense到1,然后softmax输出
  8. 最终输入Image,每次输出词的softmax,经过argmax得到词,直到得到

Similar Posts

Comments

0