概要
主流模型RNN或者CNN包括编码器和解码器
序列到序列的生产
简单,仅仅依赖于注意力机制
介绍
RNN是时序,一步一步进行,难以并行
transformer强大
背景
卷积难以对长的序列建模,要一层一层窗口叠上去
transformer一下就能全部看到,为了模拟神经网络多通道,它有多头注意力机制
自主注意力
模型结构
编码器,解码器结构
编码器将原始输入转换成机器能理解的向量,但解码器也是一个一个生成,过去时刻的输出是现在的输入,叫做自回归
编码器
LayerNorm(x + Sublayer(x)):为什么在变长的应用里面不适用batchnorm
我有个简单的记法:xxx-norm就是按xxx方向进行归一化,或者说按xxx方向切,还可以说是不分解xxx。对于二维和三维的xxx-norm都是适用的。
以batch-norm为例,二维就是顺着batch方向切,即纵切;三维需要注意,一定保留了序列方向不被分解,再结合按照batch方向切,就得出了蓝色框切法
因为变长,每次算出来的均值和方差抖动较大,训练更加稳定些
解码器
解码器训练的时候不应该看到t时刻以后的输入(在预测t时刻的输出时候),保证输入输出一致
注意力
query是用来查询别的词的,key是用来被别的词查询的,value是被查询得到一个权重然后乘起来给到那个词的
一种是加型,一种是点积。点乘比较高效,当dk比较大的时候,矩阵的值方差会比较大,再加上用的是softmax,大的概率更大,小的概率更小,最终使得梯度较小无法继续训练,所以除掉根号dk缩小他们的距离是一个不错的选择
多头注意力机制。并行计算注意力,每个头希望学到不一样的投影方式,保证模式的多样性。
拼接是看输出通道多少个,有8个头就每个头产生x/8长度的向量
代码中的应用:将输入映射为Q,K,V
这里编码器的输出作为key和value输入,然后解码器第一个attention的输出作为query
与RNN的区别:transformer可以看到整个序列的信息,RNN只能依靠上一时刻
Embedding and softmax
长度越大的向量经过正则化后值越小,所以要乘以一个根号dmodal
position encoding
时序信息
输入里面加入
用周期不一样的sin和cos函数算出来的
实验
byte-pair encoding:比如英语,有不同的时态。把词语的词根提取出来,那字典就会相较于小规模些。
tpu适合做大规模矩阵乘法
label smoothing:因为softmax出来的概率难以非常接近1,所以降低下标准比如说到0.9就行了
启发
如果有代码的话通常会把代码放在摘要的最后一句话
写文章时候,尽量把无关紧要的东西放在附录里,正文讲为什么,设计理念,你的思考
更广泛的归纳偏执,使得能够处理更一般化的信息。假设更一般,从数据抓取信息比较难,训练更加昂贵。