attention&transformer-袁源

没有免费的午餐定律:没有任何算法能在任何情况下都是最佳

注意力机制&神经机器翻译(袁源)

ELMo:上下文相关的词向量方式,基于BILSTM的

不用RNN可不可以做NLP,除了传统机器学习,还可以用深度神经网络做,即transformer,使用注意力机制

没有transformer时,机器翻译用的最多的方法是RNN:

Encoder:编码器

Decoder:解码器

关键在于RNN和其中的hidden station,一种语言编码成向量,解码后变成另一种语言

RNN的问题:梯度消失问题,根本原因是本质用了梯度下降

LSTM缓解了梯度消失,但未消除

梯度消失

Feed forward:前馈全连接层

Nx:循环很多次

右侧为最简单的一个encoder和一个decoder,重点讲解内部怎么工作的:

Encoder可以有6层或者12层,甚至更多

Encoder是将一个向量转换成另外一个向量的过程。先通过词嵌入生成词向量,一起输入self-attention,杂糅在一起,再分开进入全连接层,分别生成新的词向量。

这两个向量的区别就是:之前的词之间互相不知道,后来的词互相知道信息

以下为通过self-attention的过程:

自注意力机制,

queries:搜索关键词,查询(找别人)

Keys:键 (被找)& Values:值

认为是在做信息检索,将输入词联系起来了,这样就可以找到单词之间的联系。

将输入向量转换成三个不同的向量,转换方式为乘以矩阵做映射

矩阵是共享的,所有输入(x1、x2)都用同一个矩阵(权值Wq、Wk、Wv,是通过误差相互传递,学习出来的超参数)来转换,说明输入值之间已经有了某种联系。

一个输入需要做3次矩阵计算,代价较高

可用向量化方法提高效率,即将一个一个的计算转换成一个大的矩阵计算,将一个一个的排列,组成一个大矩阵。

比如有100个输入,原本需要300次矩阵计算,现在将100个输入组合成一个大矩阵,则只需要3次矩阵计算。

多头自注意力:用不同版本的权重Wq、Wk、Wv训练,可以得到多个结果,比一个好。

多头会产生多个结果,需要合成成一个:

不同的注意力注意到的内容不一样:

如it是动物,下图中不同颜色的attention注意到了不同的内容。如绿色是it怎么样了:累了,黄色是指代什么:动物。

还需要在输入里加入位置编码:

即不同的单词都有了自己的位置编码,而且有某种规律

其实不一定非要用这种sin、cos方法,可以训练一种方法,只要每个词都有自己的位置编码,而且可以相互分开就可以了。

如下图,自己和自己点乘得到的值是最大的(蓝色),离我越远的点乘后值越小。

这就是位置编码,是一种相对距离,看离我远不远,不是绝对位置。

这里用了残差网络,ResNet:跳跃连接,为了解决层数深的时候,传递的值越来越小的的问题,可将前几层的值直接跳跃传递到后面。

使用layer正则化避免过拟合:

归一化

批处理,为了充分地利用CPU

Batch:考虑全部的batch,做平均

Layer:不考虑别人,只考虑自己这一批次,可以避免相互之间的联系产生的问题


Encoder部分:

损失函数:交叉熵损失

训练技巧:

标签平滑,不用绝对的0、1,而是0.9,剩下的共享

学习率选择,先线性增加,再指数下降

编码、解码的权重乘上的值不一样

编码器用x,解码器用编码器产生的输出

优点:

1、比RNN计算复杂度低

2、向量化并行计算

3、动物过马路可解释

缺点:

1、复制即输入输出一致,做不到;如果位置编码未训练,也不可以

2、图灵完备,即现有的冯诺依曼网络结构下,任何算法用RNN全都可以模拟,transformer不一定能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容