阅读大概需要5分钟
跟随小博主,每天进步一丢丢
作者:何之源
链接:https://zhuanlan.zhihu.com/p/28054589
来源:知乎
Attention机制理论
在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。Attention机制通过在每个时间输入不同的c来解决这个问题,下图是带有Attention机制的Decoder:
每一个c会自动去选取与当前所要输出的y最合适的上下文信息。具体来说,我们用衡量Encoder中第j阶段的hj和解码时第i阶段的相关性,最终Decoder中第i阶段的输入的上下文信息就来自于所有对的加权和。
举个栗子
以机器翻译为例(将中文翻译成英文):
输入的序列是“我爱中国”,因此,Encoder中的h1、h2、h3、h4就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文c1应该和“我”这个字最相关,因此对应的就比较大,而相应的 就比较小。c2应该和“爱”最相关,因此对应的就比较大。最后的c3和h3、h4最相关,因此、的值就比较大。
至此,关于Attention模型,我们就只剩最后一个问题了,那就是:这些权重是怎么来的?
事实上,同样是从模型中学出的,它实际和Decoder的第i-1阶段的隐状态、Encoder第j个阶段的隐状态有关。
同样还是拿上面的机器翻译举例,的计算(此时箭头就表示对h'和同时做变换):
的计算:
的计算:
以上就是带有Attention的Encoder-Decoder模型计算的全过程。
实例代码
之前我写的一篇实现机器翻译的代码和Attention机制公式详解的文章:
IELTS a bit
under way 进行中;航行中;在行进
dislodge vt. 驱逐;使...移动;用力移动
vi. 驱逐;离开原位
setting n. 环境;安装;沉落
v. 放置;沉没;使...处于某位置
replenish vt. 补充,再装满;把...装满;给...添加燃料
flourishing adj. 繁华的;繁茂的;盛行的
v. 茂盛
优质公众号推荐
主攻内容:Python基础巩固,进阶以及有趣应用
公号特色:全面发展,包括但不限于Python、Linux等。
功能简介:领域包括了「面向 Python 基础,进阶和有趣应用」的一站式技术分享,挖掘学习者在学习当中遇到的各类问题并分享经验,关注实用技能和有趣新闻,感兴趣的推荐关注。
笔者自述:号主是一个爱读书的码农,致力于打造一个有用、良心、走心的公众号。
【这个公众号博主是在我300粉丝的时候认识的,一句话总结:被技术耽误的大文豪O.O】
推荐阅读:
TreeLSTM Sentiment Classification
欢迎关注深度学习自然语言处理公众号,我会每天更新自己在机器学习,深度学习,NLP,linux,python以及各种数学知识学习的一点一滴!再小的人也有自己的品牌!期待和你一起进步!
长按识别二维码
点个赞呗