预训练语言模型 – ENCODER
位置编码
使得每个句子,在其每个字的字嵌入维度上,根据维度的不同,将相邻的奇数和偶数维度组合,使得每个组合的编码周期逐渐增大,这样的纹理特性可以使模型学习到句子的时序信息。
自注意力机制
- 得到Q,K,V并切分成多头:首先将上一步得到的每个句子的位置嵌入和最初每个句子的字嵌入相加,然后将得到的结果分别做三个线性变换(变换矩阵都为字嵌入大小的方阵),得到Q,K,V。然后将每个变换的结果均按字嵌入维度切分,加入新的维度。
- 用切分后的Q和切分后K的转置相乘,得到结果的某行为句子中某个字和句子中所有字的自注意力大小,得到结果记得去除以切分后K的维度大小dk开根号(这里有些疑惑是哪个维度),即使原本放大了dk倍的方差得到缩小,最后再将刚刚计算的自注意力矩阵按最后一维去做softmax()归一化,使其依概率分布。然后用该结果对切分后的V加权求和,注意运算后V的大小没有变化,其每一行,都是这个句子中该字与所有字的自注意力值对所有字编码的加权求和,目的是让每个字编码都蕴含这个句子中所有字的信息。
- 注意Attension Mask,这个操作是因为每个batch喂入的时候都要确定句子的最大长度,不够最大长度的句子需要padding,而主要到在经过softmax()归一化时,0值也会变成有限值,所以要把所有的0加上一个很大的负数偏置,从而去除影响。Attension Mask就是0值的区域。
Layer Normalnization 和残差连接
- 残差连接:为了使梯度有捷径反传,在计算完Attension(Q,K,V)后,将其与之前的Xembeding相加,其维度是相同的!在之后的计算中都按照这个做,即把运算的结果和运算前的结果相加。
- Layer Normalization:把神经网络隐藏层归一为标准正态分布,起到加快训练速度,加速收敛的效果。即计算每一行的均值和方差,然后用每一行的每一个元素减去这行的均值, 再除以这行的标准差, 从而得到归一化后的数值, 𝜖 是为了防止除 0 ;
之后引入两个可训练参数 𝛼, 𝛽 来弥补归一化的过程中损失掉的信息, 注意 ⊙ 表示元素相乘而不是点积, 我们一般初始化 𝛼 为全 1 , 而 𝛽 为全 0 。
transformer整体结构
首先要提一下FeedForward,其就是两层线性映射加激活函数激活。
经过自注意力机制, 一句话中的每个字都含有这句话中其他所有字的信息, 那么我们可不可以添加一个空白字符到句子最前面, 然后让句子中的所有信息向这个空白字符汇总, 然后再映射成想要分的类别呢? 这就是BERT, 我们下次会讲到.
在BERT的预训练中, 我们给每句话的句头加一个特殊字符, 然后句末再加一个特殊字符, 之后模型预训练完毕之后, 我们就可以用句头的特殊字符的 ℎ𝑖𝑑𝑑𝑒𝑛 𝑠𝑡𝑎𝑡𝑒 完成一些分类任务了.