浅谈Attention-based Model【原理篇】

计划分为三个部分: 浅谈Attention-based Model【原理篇】(你在这里) 浅谈Attention-based Model【源码篇】 浅谈Attention-based Model【实践篇】

0. 前言

看了台大的李宏毅老师关于Attention部分的内容,这一部分讲的不错(其实李宏毅老师其它部分的内容也不错,比较幽默,安利一下),记录一下,本博客的大部分内容据来自李宏毅老师的授课资料:Attention-based Model。如发现有误,望不吝赐教。

1. 为什么需要Attention

最基本的seq2seq模型包含一个encoder和一个decoder,通常的做法是将一个输入的句子编码成一个固定大小的state,然后作为decoder的初始状态(当然也可以作为每一时刻的输入),但这样的一个状态对于decoder中的所有时刻都是一样的。 attention即为注意力,人脑在对于的不同部分的注意力是不同的。需要attention的原因是非常直观的,比如,我们期末考试的时候,我们需要老师划重点,划重点的目的就是为了尽量将我们的attention放在这部分的内容上,以期用最少的付出获取尽可能高的分数;再比如我们到一个新的班级,吸引我们attention的是不是颜值比较高的人?普通的模型可以看成所有部分的attention都是一样的,而这里的attention-based model对于不同的部分,重要的程度则不同。

2. Attention-based Model是什么

Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。

没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。

再引用tensorflow源码attention_decoder()函数关于attention的注释:

“In this context ‘attention’ means that, during decoding, the RNN can look up information in the additional tensor attention_states, and it does this by focusing on a few entries from the tensor.”

3. Attention

对于机器翻译来说,比如我们翻译“机器学习”,在翻译“machine”的时候,我们希望模型更加关注的是“机器”而不是“学习”。那么,就从这个例子开始说吧(以下图片均来自上述课程链接的slides)

对于“match”, 理论上任何可以计算两个向量的相似度都可以,比如:

现在我们已经由match模块算出了当前输入输出的匹配度,然后我们需要计算当前的输出(实际为decoder端的隐状态)和每一个输入做一次match计算,分别可以得到当前的输出和所有输入的匹配度,由于计算出来并没有归一化,所以我们使用softmax,使其输出时所有权重之和为1。那么和每一个输入的权重都有了(由于下一个输出为“machine”,我们希望第一个权重和第二个权权重越大越好),那么我们可以计算出其加权向量和,作为下一次的输入。

这里有一个问题:就是如果match用后面的两种,那么参数应该怎么学呢?

如下图所示:

再看看Grammar as a Foreign Language一文当中的公式:

4. 遗留问题

本来我们已经结束了,但是仔细想想,其实还有一个地方有所疑问。就是加入match是一个简单地神经网络或者一个矩阵,神经网络的权值和矩阵里面的值怎么来?

5. to be continued

最近在用双向LSTM加上attention做知乎的比赛,但目前效果不是很好,具体等待比赛结束之后再详细记录。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

百度校园招聘数据挖掘工程师面试题集锦(2013)

一、简答题(30分) 1、简述数据库操作的步骤(10分) 步骤:建立数据库连接、打开数据库连接、建立数据库命令、运行数据库命令、保存数据库命令、关闭数据库连接。...

39750
来自专栏Petrichor的专栏

论文阅读: Light-head R-CNN

“ Head ” 在文中指连接在basemodel后面的网络结构,包括以下两部分:

19240
来自专栏奇点大数据

Pytorch神器(3)

上次我们的连载讲到用最简便的方法,也就是pip方法安装Pytorch。大家都成功了吧。

13910
来自专栏AI研习社

如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)

引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用tensorflow...

67470
来自专栏机器学习算法工程师

朴素贝叶斯实战篇之新浪新闻分类

Python版本: Python3.x 作者:崔家华 运行平台: Windows 编辑:黄俊嘉...

71860
来自专栏大数据挖掘DT机器学习

决策树案例:基于python的商品购买能力预测系统

1 决策树/判定树(decision tree) ---- 1 决策树(Dicision Tree)是机器学习有监督算法中分类算法的一种,有关机器学习中分类和...

77270
来自专栏Petrichor的专栏

论文阅读: Soft-NMS

传统的NMS (Non-Maximum Supression)去重过程如下:

37620
来自专栏DHUtoBUAA

Ray-AABB交叉检测算法

  最近在解决三维问题时,需要判断线段是否与立方体交叉,这个问题可以引申为:射线是否穿过立方体AABB。   在3D游戏开发中碰撞检测普遍采用的算法是轴对齐矩...

67270
来自专栏AI研习社

基于 Tensorflow eager 的文本生成,注意力,图像注释的完整代码

我总是发现生成和序列模型令人着迷:他们提出的问题与我们刚开始学习机器学习时常遇到的问题不同。当我第一次开始学习ML时,我学了分类和回归(和大多数人一样)。这些帮...

15620
来自专栏技术翻译

Scikit-Learn: 机器学习的灵丹妙药

Scikit-Learn是python的核心机器学习包,它拥有支持基本机器学习项目所需的大部分模块。该库为从业者提供了一个统一的API(ApplicationP...

35110

扫码关注云+社区

领取腾讯云代金券