RNN
循环神经网络
编码器和解码器
编码器即把自然语言转化为向量(一般为二维),解码器即把特征向量转化为人类可阅读的语言
Attention
注意力机制到底是什么——基于常识的基本结构介绍 - 李鹏宇的文章 - 知乎
用于自动学习中计算数据对输出数据的贡献大小,即有选择性地处理信号
特征工程就是选择和目标最有关系的特征,减少工作量。一般的特征工程为各个特征赋予固定权值,而注意力机制让模型自己学习如何分配注意力(特征加权)。
注意力机制位于编码器和解码器之间,用于计算各个输出向量对解码器每一个输出的影响程度
$W_1 = (w_{1,1},w_{1,2},w_{1,3},w_{1,4})$
$w_{i,j}=g(y_i,z_j)$
$C_1=\begin{bmatrix}W_1\W_1\W_1\W_1\end{bmatrix}*\begin{bmatrix}z1\z2\z3\z4\end{bmatrix}$
$y_1=f_{de}(c1,y_0)$
直到解码器输出了<end>标签。
让解码器根据自身历史输出计算$y_i$与$Z$的相关性,即可得到$W$矩阵
可以看出,注意力机制增加了额外的运算量,降低了推理速度。
Transformer
BERT大火却不懂Transformer?读这一篇就够了 - 数据汪的文章 - 知乎
https://zhuanlan.zhihu.com/p/54356280
用放大镜看Transformer——总体和各个模块的结构到底是什么样的 - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/122977440
Transformer结构示意图
编码-解码器结构,其中编码器和解码器都利用了类似RNN的时间循环结构。由编码组件、解码组件和它们之间的连接构成。
Transformer会利用上一时刻的输出和当前时刻的输入
编码组件由一堆编码器构成,解码组件由相同数量的解码器构成。
编码器结构上相同,之间未共享参数。每个编码器都可以分解成两个子层:前馈神经网络层和自注意力层。
输入是向量列表,列表大小是可以设置的超参数。
自注意力曾中,各个词有互相连接,互相影响;前馈神经网络曾无相互连接和相互影响,可以并行进行。每一个单词的前馈神经网络完全相同。
自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。
计算自注意力
- 使用输入词嵌入后的向量$X$承三个矩阵生成 查询向量、键向量和值向量$Q,K,V$
- 被打分查询向量$K_s$与每一个键向量$Q_i$点积即得到对应分数
- 将分数除以维数的平方根,之后使用softmax归一化
- 将每个值向量$V_i$乘softmax分数
- 对加权值的向量求和
可以用矩阵运算以加快运算速度
这样得到的向量就可以传给前馈网络了
注意力头:使用几个不同的查询/键/值矩阵,计算不同的结果,然后使用一定的方法合并输入到前馈层
使用位置编码表示序列的顺序
使用正弦函数进行位置编码
残差连接
每个编码器中每个子层之间都有一个残差连接,并且都跟随着一个层归一化步骤。相应地,解码器也有这些结构。
解码器
编码器通过处理输入序列开启工作。顶端编码器的输出之后会变转化为一个包含向量K(键向量)和V(值向量)的注意力向量集 。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适
解码器最终输出一个实数,然后会进行线性变换,再到softmax层W
GPT
GPT——生成式预训练Transformer - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/125139937
BERT
基于Transformer的双向编码器表示(BERT)——结构和训练 - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/125655365