Transformer架构
一."编码层主要是将输入词序列映射到连续值向量空间进行编码,每个词编码由词嵌入和位置编码组成,由二者加和得到."如何映射?词序列和位置如何编码?
词嵌入:通过预训练的嵌入矩阵来得到一个固定长度的向量(在预训练中就定好了语义信息对应的向量,比如"你"可能就对应着唯一的向量).
位置编码:因为输入的序列仅包含语义,没有每个词的相对位置,所以需要将其位置信息也嵌入到向量中.那么如何将位置信息转化为编码形式呢?
首先声明三个变量. 代表该语义的位置,代表嵌入向量的维度,代表这个向量中的第个元素.
然后根据公式来进行编码
最后与词嵌入得到的向量进行加和,得到完整的词序列编码.
二.自注意力机制
自注意力机制(Self-Attention Mechanism)是Transformer架构中的核心部分,它允许模型在处理一个序列时,为序列中的每个元素分配不同的注意力权重。这意味着,当模型处理序列中的一个元素时,它可以集中注意力于序列中的其他元素
公式:
分别定义三个矩阵:查询矩阵Q,键矩阵K,值矩阵V,其特征矩阵分别为,则三个矩阵分别为
权重W由查询向量和键矩阵的点积决定
softmax函数:
其中x为注意力分数,在自注意力机制中:
这种x的计算方法被叫做缩放点积模型,代表特征维度(为了消除梯度消失的问题),类似的还有
原理:
注意力机制
在预测中,为了更好地整体地把握将预测的值与样本值之间的关系,引入三个变量,分别是q(预测时给出的变量),k(样本的参数),v(样本的结果). 我们的思路是在给出q时,对与q最接近的一些参数给予更多的权重(也就是注意力),对其他的参数给予稍少的权重.从而能够让输出值既能把握局部的特性,也能把握整体上的规律.
那么怎么做到这一点呢?
首先考虑以一维情况,在值作为一个一维数据被输入后,一般的想法就是在样本里找到一个大于的值和一个小于的值从而对其结果,进行加权平均得到的预测结果. 但是这样做会导致没有用到其他key值和value值的信息.
于是我们需要对特定的与每一个通过某种运算来得到一个权重,再乘以对应的,然后再相加得到最终的预测结果. 这样就能保证利用了样本全部的信息:
这种利用给出的与每一个得出权重值的运算可以是任意刻画相关性的函数.在transformer中主要运用softmax函数:
这样我们就可以做到完整地利用每一部分的信息来保证预测结果的精确性.
对于多维情况依然相同,查询矩阵与键矩阵做点积后除以特征维度(一般是矩阵的维度)得到注意力分数.
再与softmax函数进行运算得到每一个对应值对应的权重,然后与对应value值相乘进行加和得到最终预测结果:
自注意力机制
在自注意力机制中,我们将矩阵Q=K=V,也就是说三个矩阵全部相同,此时命名这个矩阵为.那么softmax函数可表示为:
但是在实际应用中,我们会将三个矩阵分别经过不同的线性变换
从而继续进行预测:
权重矩阵
通过反向传播和优化进行学习来得到. 获得的步骤如下:
1.随机初始化: 得到权重矩阵的初始形式,一般都是三个随机矩阵.
2.前向传播:输入词嵌入表示的序列,然后运用随机的权重矩阵来进行注意力训练(也就是运用softmax函数和QKV矩阵来预测).
与逻辑回归不同,权重矩阵的行代表嵌入词的维度,列代表转化后的QKV矩阵的维度,每一个元素代表一个参数.
整体上来说,词嵌入向量与权重矩阵的乘积代表着该向量在不同的空间(如Query空间)中的形式,而其形式不同就代表了最终的权重不同
(个人理解:假如在一维中,可以用长度表示权重的不同,如今线性变换只是利用权重矩阵在更高维度上进行权重的比较,从而得出不同的向量偏好)
3.计算损失
4.反向传播
5.权重更新
然后不停地迭代更新,得到最适合的权重矩阵