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

更多查看:https://github.com/B-C-WANG/AI-Storage

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

4.1.1. 一、一个简单模型

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

4.1.2. 二、增加Attention

Decoder发生变化:

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

4.1.3. 详细过程:

  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得到词,直到得到

你可能感兴趣的:(AI学习)