专栏首页算法工程师的养成之路《Attention Is All You Need》

《Attention Is All You Need》

本文是对Google2017年发表于NIPS上的论文"Attention is all you need"的阅读笔记.

对于深度学习中NLP问题,通常是将句子分词后,转化词向量序列,转为seq2seq问题.

  • RNN方案 采用RNN模型,通常是递归地进行yt=f(yt−1,xt)y_t=f(y_{t-1},x_t)yt​=f(yt−1​,xt​),优点在于结构简单,十分适合序列建模;缺点在于需要前一个输出作为后一个的输入参与运算,因此无法并行计算,速度很慢,且单向RNN只能获取前向序列关系,需要采用双向RNN才可以获取完整的全局信息.
  • CNN方案 采用CNN模型,则是通过一个窗口(卷积核)来对整个序列进行遍历,yt=f(xt−1,xt,xt+1)y_t = f(x_{t-1},x_t,x_{t+1})yt​=f(xt−1​,xt​,xt+1​)只能获取到局部信息,需要层叠来增大感受野.

本文提出了一种Transformer注意力机制,完全替代了RNN、CNN.

yt=f(xt,A,B)y_t = f(x_t,A,B)yt​=f(xt​,A,B)

将A、B都取为X时,则称为Self-Attention,即通过xtx_txt​和整个XXX进行关系运算最后得到yty_tyt​.

Attention层

Google给出了如下的Attention结构

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)=softmax(dk​​QKT​)V

其中,dkd_kdk​时keykeykey的维数,dvd_vdv​是valuevaluevalue的维数,Q∈Rn×dk,K∈Rm×dk,V∈Rm×dvQ\in R^{n\times d_k}, K\in R^{m\times d_k}, V\in R^{m\times d_v}Q∈Rn×dk​,K∈Rm×dk​,V∈Rm×dv​

当dkd_kdk​较小时,采用点积和加法注意力机制的效果时相同的,当dkd_kdk​较大时,点积的效果会下降很多,这是由于dkd_kdk​较大时,点积产生的值会很大导致softmaxsoftmaxsoftmax陷入了饱和区,因此这里除以了dk\sqrt{d_k}dk​​.

Yself=Attention(V,V,V)Y_{self} = Attention(V,V,V)Yself​=Attention(V,V,V) 通过self-attention,可以无视词之间距离直接计算远距离的两个词的依赖关系,从而能学习到整个句子的内部结构,并且相当于进行了句法分析.

Multi-Head Attention

多头注意力机制就是重复进行hhh次(参数不共享),即采用不同的参数进行hhh次,捕获不同子空间上的相关信息,将最后的结果拼接起来,会产生更好的效果. MultiHead(Q,K,V)=Concat(head1,…,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV) MultiHead(Q,K,V) = Concat(head_1,\dots,head_h)W^O\\ where\ \ head_i = Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1​,…,headh​)WOwhere headi​=Attention(QWiQ​,KWiK​,VWiV​)

其中,WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv,WO∈Rhdv×dmodelW_i^Q\in R^{d_{model}\times d_k}, W_i^K\in R^{d_{model}\times d_k}, W_i^V\in R^{d_{model}\times d_v}, W^O \in R^{hd_v\times d_{model}}WiQ​∈Rdmodel​×dk​,WiK​∈Rdmodel​×dk​,WiV​∈Rdmodel​×dv​,WO∈Rhdv​×dmodel​

Feed-Forward Networks

在encoder和decoder中,除了注意力子层之外还包含一个全连接的前馈网络,含有两个线性变换,并且在两者之间有一个ReLUReLUReLU激活函数.

FFN(x)=max⁡(0,xW1+b1)W2+b2FFN(x) = \max(0, xW_1+b_1)W_2 + b_2FFN(x)=max(0,xW1​+b1​)W2​+b2​

相当于两个卷积核大小为1的卷积层.

Positional Encoding

很容易发现,对于两个顺序不同词相同的句子,通过自注意力层最后得到的输出相同的,即这里的自注意力机制并不能捕捉到词之间的顺序关系,仅仅相当于一个词袋模型.

因此Google提出了Position Encoding,为每个词添加位置编码,与词序列作为共同输入.

这里采用的运算关系如下: PE(pos,2i)=sin⁡(pos100002i/dmodel)PE(pos,2i+1)=cos⁡(cos100002i/dmodel) PE_{(pos,2i)} = \sin(\frac{pos}{10000^{2i/d_{model}}})\\ PE_{(pos,2i+1)} = \cos(\frac{cos}{10000^{2i/d_{model}}}) PE(pos,2i)​=sin(100002i/dmodel​pos​)PE(pos,2i+1)​=cos(100002i/dmodel​cos​)

pospospos是位置,iii是维度,采用sin函数,对于任意的偏移kkk,PEpos+kPE_{pos+k}PEpos+k​都可以描述为PEposPE_{pos}PEpos​的线性函数.

自注意力的优势

  • 计算复杂度/layer
  • 并行计算数量
  • 计算远距离依赖关系的路径长度

正则化

  • 对于每一子层都采取dropout操作
  • 对词序列和位置编码的和进行dropout

其他

  • 根据实验结果推测,可能存在一个更复杂的函数要比点积的效果更优.
  • 实验验证,学习过的位置嵌入与sin曲线效果相同.

在test集上,通过beam search 集束搜索来寻找解. 集束搜索是一种贪心算法,相当于一个约束优化的广度优先搜索,并不能保证一定可以找到最优解.

大致思路如下:

每一次都只寻找代价最低即可能性最大的前mmm(称为beams size)个解,直到遇到终止符位置.

参考文献

苏剑林-Attention is all you need 浅读

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Yoshua Bengio访谈笔记:用意识先验糅合符号主义与联结主义

    「对表征(representation)空间的依赖贯穿计算机科学乃至日常生活的始终。在计算机科学中,如果数据有精当的结构,辅以智能化的索引,那么搜索任务的速度可...

    机器之心
  • 简洁易用可扩展,一个基于深度学习的 CTR 模型包

    在计算广告和推荐系统中,CTR 预估一直是一个核心问题。无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛。

    用户1737318
  • 我的八年博士生涯

    下周一我就要开始在 Facebook 上班了。趁入职之前,我想写一写我博士生涯的感悟;再不写就要凉啦。

    AI科技大本营
  • 新手必看:深度学习是什么?它的工作原理是什么?

    我们都熟悉“人工智能”这个词。但你最近可能听说过“机器学习” ( Machine Learning )和“深度学习” ( Deep Learning ) 等其他...

    AI研习社
  • 还不会使用PyTorch框架进行深度学习的小伙伴,看过来

    今年初,Facebook 推出了 PyTorch 1.0,该框架集成了谷歌云、AWS 和 Azure 机器学习。学习本教程之前,你需要很熟悉 Scikit-le...

    机器之心
  • 警告!2019年人工智能的发展,科技大佬为何纷纷站队AI威胁论

    近几年,人工智能步入黄金发展期,舆论风暴更是一波接着一波。“人工智能距离威胁人类还有多远?”“八大现象论证人工智能威胁论真的存在”“AI警告!科技大佬为何纷纷站...

    一墨编程学习
  • 斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

    作为全球计算机四大名校之一,斯坦福大学的CS230《深度学习》课程一直受到全球计算机学子和从业人员的热烈欢迎。

    朱晓霞
  • ​吴恩达CS230深度学习课小抄来了,图多字少还免费下载 | 斯坦福出品

    4个小时前,一位网友在这个资源帖下面遗憾地回复。这份人气深度学习秘籍,看起来篇幅不长但内容精简,涵盖了吴恩达老师斯坦福大学的CS230深度学习课程重点。

    量子位
  • 问答 | 百度 PaddlePaddle 1.0 正式发布啦,感觉百度最近宣传势头挺猛的呀,有小伙伴用吗~

    社长为你推荐来自 AI 研习社问答社区的精华问答。如有你也有问题,欢迎进社区提问。

    AI科技评论
  • 中文教程《动手学深度学习》

    作为一名新手如何能够快速上手深度学习,在实践中使用深度学习呢?《动手学深度学习》是由亚马逊首席科学家、美国卡内基梅隆大学计算机博士李沐等人编著,带你从浅至深实践...

    昱良

扫码关注云+社区

领取腾讯云代金券