TensorFlowLSTM注意⼒机制图解
TensorFlow LSTM Attention 机制图解
深度学习的最新趋势是注意⼒机制。在接受采访时,现任OpenAI研究主管的Ilya Sutskever提到,注意⼒机制是最令⼈兴奋的进步之⼀,他们在这⾥进⾏投⼊。听起来令⼈兴奋但是什么是注意机制?
基于⼈类视觉注意机制,神经⽹络中的注意机制⾮常松散。⼈的视觉注意⼒得到了很好的研究,虽然存在着不同的模式,但它们基本上都是以“低分辨率”感知周围的图像,以“⾼分辨率”的⽅式集中在图像的某个区域,然后随着时间的推移调整焦点。
注意⼒机制解决什么问题?
为了理解我们可以做什么,我们以神经机器翻译(NMT)为例。传统的机器翻译系统通常依赖于基于⽂本统计属性的复杂特征⼯程。简⽽⾔之,这些系统是复杂的,并且⼤量的⼯程设计都在构建它们。神经机器翻译系统⼯作有点不同。在NMT中,我们将⼀个句⼦的含义映射成⼀个固定长度的向量表⽰,然后基于该向量⽣成⼀个翻译。通过不依赖于n-gram数量的东西,⽽是试图捕捉⽂本的更⾼层次的含义,NMT系统⽐许多其他⽅法更⼴泛地推⼴到新句⼦。也许更重要的是,NTM系统更容易构建和训练,⽽且不需要任何⼿动功能⼯程。事实上,Tensorflow中的⼀个简单的实现不超过⼏百⾏代码。
tensorflow入门教程
⼤多数NMT系统通过使⽤循环神经⽹络将源语句(例如,德语句⼦)编码为向量,然后基于该向量来解码英语句⼦,也使⽤RNN来⼯作。
在上述图中,将“Echt”,“Dicke”和“Kiste”字馈送到编码器中,并且在特殊信号(未⽰出)之后,解码器
开始产⽣翻译的句⼦。解码器继续⽣成单词,直到产⽣句⼦令牌的特殊结尾。这⾥,h向量表⽰编码器的内部状态。
如果仔细观察,您可以看到解码器应该仅基于编码器的最后⼀个隐藏状态(上⾯的h_3)⽣成翻译。这个h3⽮量必须编码我们需要知道的关于源语句的所有内容。它必须充分体现其意义。在更技术术语中,该向量是⼀个嵌⼊的句⼦。事实上,如果您使⽤PCA或t-SNE绘制不同句⼦在低维空间中的嵌⼊以降低维数,您可以看到语义上类似的短语最终彼此接近。这太棒了
然⽽,假设我们可以将所有关于潜在的⾮常长的句⼦的信息编码成单个向量似乎有些不合理,然后使解码器仅产⽣良好的翻译。让我们说你的源语句是50个字。英⽂翻译的第⼀个词可能与源句的第⼀个字⾼度相关。但这意味着解码器必须从50个步骤前考虑信息,并且该信息需要以⽮量编码。已知经常性神经⽹络在处理这种远程依赖性⽅⾯存在问题。在理论上,像LSTM这样的架构应该能够处理这个问题,但在实践中,远程依赖仍然是有问题的。例如,研究⼈员已经发现,反转源序列(向后馈送到编码器中)产⽣明显更好的结果,因为它缩短了从解码器到编码器相关部分的路径。类似地,两次输⼊输⼊序列也似乎有助于⽹络更好地记住事物。
我认为把句⼦颠倒⼀个“⿊客”的做法。它使事情在实践中更好地⼯作,但这不是⼀个原则性的解决⽅案。⼤多数翻译基准都是⽤法语和德语来完成的,与英语⾮常相似(甚⾄中⽂的单词顺序与英语⾮常相
似)。但是有⼀些语⾔(如⽇语),⼀个句⼦的最后⼀个单词可以⾼度预测英语翻译中的第⼀个单词。在这种情况下,扭转输⼊会使事情变得更糟。那么,有什么办法呢?注意机制
使⽤注意机制,我们不再尝试将完整的源语句编码为固定长度的向量。相反,我们允许解码器在输出⽣成的每个步骤“参加”到源句⼦的不同部分。重要的是,我们让模型基于输⼊句⼦以及迄今为⽌所产⽣的内容,学习了要注意的内容。所以,在很好的语⾔(如英语和德语)中,解码器可能会顺序地选择事情。在制作第⼀个英⽂单词时参加第⼀个单词,等等。这是通过联合学习来整合和翻译的神经机器翻译所做的,看起来如下:
在这⾥,y是我们由解码器产⽣的翻译词,x是我们的源语句。上图说明使⽤双向循环⽹络,但这并不重要,您可以忽略反向⽅向。重要的部分是每个解码器输出字y_t现在取决于所有输⼊状态的加权组合,⽽不仅仅是最后⼀个状态。 a的权重定义为每个输出应考虑每个输⼊状态的多少。所以,如果a_ {3,2}是⼀个⼤数字,这意味着解码器在产⽣⽬标句⼦的第三个单词时,对源语句中的第⼆个状态给予了很⼤的关注。 a通常被归⼀化为总和为1(因此它们是输⼊状态的分布)。
关注的⼀⼤优点在于它使我们能够解释和可视化模型正在做什么。例如,通过在翻译句⼦时可视化注意⼒矩阵a,我们可以了解模型的翻译⽅式:
原⽂链接:
更多 Tensorflow 教程:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论