Ai目录:sheng的学习笔记-AI目录-CSDN博客
先看下这两个文章:
序列模型:sheng的学习笔记-AI-序列模型(Sequence Models),RNN,GRU,LSTM_音乐识别是一对多吗-CSDN博客
机器翻译
sheng的学习笔记-AI-自然语言处理(NLP),机器翻译,情感分类,词嵌入-CSDN博客
RNN的痛点
在机器翻译等RNN模型中,如果输入的时间步路径很长,会对更远的数据遗忘,举例子
像这样给定一个很长的法语句子,在你的神经网络中,这个绿色的编码器要做的就是读整个句子,然后记忆整个句子,再在感知机中传递。而对于这个紫色的神经网络,即解码网络(the decoder network)将生成英文翻译。
它对于短句子效果非常好,于是它会有一个相对高的Bleu分(Bleu score),但是对于长句子而言,比如说大于30或者40词的句子,它的表现就会变差。即便是GRU或者LSTM,也无法处理这么长的句子
注意力模型
用注意力模型,可以优化对长句子的理解,虽然这个模型源于机器翻译,但它也推广到了其他应用领域
大概流程
要将(法语)Jane visite l'Afrique en Septembre翻译成英语,
- 对于输出y1(jane),需要关注x输入的x1,x2,x3。。x5,用α<1,1>表示x1(jane)对y1的影响,α<1,2>表示x2(visite)对y1的影响,以此类推,所以在生成y1的时候,有α<1,1>,α<1,2>。。。α<1,5>来表示5个输入对y1的影响
- 生成y2(visits)的时候,也会考虑5个输入值,用α<2,1>表示x1(jane)对y2的影响,有α<2,1>,α<2,2>。。。α<2,5>表示5个输入对于y2的影响
- x<1>...x<5>作为输入,计算出α的过程,都是lstm或者GRU架构,然后输出a的部分都是编码器,以α为输入和s部分一起计算,得出y的部分,是解码器,这是一个编码/解码器模式的变种
- 对于生成y1,需要根据x知道a的矩阵作为输入,以及s<0>作为上一个节点的输入,在s<1>中做计算,生成y1
因为在生成每个y的时候,会考虑所有的输入,所以在长输入的时候也会表现的很好,并且对于每个输入x1,x2...xn会有α来表示这些输入对y的影响
总体框架
- 根据每个x计算出a的值,a<t>代表时间步骤t的a的值,比如x<1>的a就是a<1>,通过rnn架构(lstm或者gru,走双向循环神经网络,这部分内容在sheng的学习笔记-AI-序列模型(Sequence Models),RNN,GRU,LSTM_音乐识别是一对多吗-CSDN博客) 计算出a的矩阵
- 计算出α(注意,这是阿尔法,不是字母a),α<1,1>代表x1对于y1的影响
- 上下文c = ∑α * a 所有时间步的和,这里的意思是c<1>=∑α<1,t'> * a<t'> 其中t'的步骤和,并且注意力权重α将会满足非负的条件,所以这就是个0或正数,它们加起来等于1,意思是α<1,t'>的和为1
- 通过c1和s0计算y1,通过y1(t-1时间步的输出)和c2计算y2,这也是个标准的rnn模型
另找一个架构图,辅助理解
计算注意力权重
对 于如何计算注意力权重α,看下面的图
- 根据x算出a<t'>
- 根据整个模型的上一个状态s<t-1>,和a<t'>做一个小型的神经网络,计算出e<t,t'>,代表要生成t,需要花多少关注在时间t'上,比如要生成y1,需要花多少时间在x2上,那就是e<1,2>
- 将e在t'的值,除以所有时间步的e的和,就是a<t,t'> 在生成t需要花多少关注在时间t'上,注意公式中有exp(代表e的指数)