迁移学习(Transfer Learning)用一句话概况就是把已经训练好的模型迁移到类似任务中,帮助新模型的训练。
传统的神经网络构建流程
迁移学习
主要分为两个步骤。
- 利用一些大型的公开数据集训练出一个“通用”的 model 。这个阶段称为 Pre-training 阶段。
- 用到它们发布的公开模型正对于我们的任务对模型进行微调(fine tuning)。这一阶段也称为fine tuning阶段。
使用不恰当就会产生“负迁移(negative transfer)”
Pre-training 模型一定需要:
- 大量的数据训练。
- 模型有足够的泛化能力。
word2vec缺陷:
- word2vec 还是把单词压缩到一维向量中,维度太低没有损失了过多的信息。
- 无法区分多义词,例如“bank”这个词,有“银行”和“岸边”两个截然不同的意思,然而因为权重矩阵是静态的,bank 无论在句子中是什么意思,只会对应一个一维向量。
BERT 结构其实就是把 GPT 单向网络结构改成了双向。
BERT 的 Pre-training
无监督学习策略,上下文训练语言模型。策略主要分为两部分。
单词级别 把语料数据集(Google 采用了 33 亿个单词的文本)随机分为两份A、B。A 占比 85%,B 占比百分之 15%。把数据 B 做类似与 CBOW 模型的操作,就是根据上下文去猜被遮挡的词(mask)。但是具体细节不同。BERT 继续把 B 拆分成B1(80%)、B2(10%)、B3(10%)进行 Mask 操作
句子级别 把语料中的句子随机划分。然后进行两两预测,预测句子二是否为句子一的下文。
Transformer模型结构
BERT 模型主要使用了 Transformer。Transformer 起初是为了解决 RNN 的长程记忆退化问题的。所以没有使用 RNN 结构。
Encoders
Encoder(8个)
Self-Attention(MulitiHead) Add&Normalize Feed&Forward
Decoders
Decoders
Decoder(8个)
Self-Attention(MulitiHead) Add&Normalize Feed&Forward Encoder-Decoder Attention
Base-Attention
Ct 是attention score 的求和
Self-Attention
Base-Attention 中主要是找源句中的词与目标句中词的注意力权重。而 Self-Attention 是找本句中的词与其余所有词的一个注意力值。
结构图:
其中 Q、K、V 都是一个权重矩阵,本网络目标就是求这三个权重矩阵。
计算过程:
- 第一步 Q矩阵与K矩阵相乘。
- 防止数据的相差过大需要做一下尺度缩放,dk是K的维度。
- Mask(opt.)是一个遮挡操作,实际上这一步在输入的时候完成的。
- SoftMax把数据弄成0~1的概率数值。
- 与V矩阵进行点乘
Self-Attention(MulitiHead)
在 Transformer 中用的是 Self-Attention 的“多头版”。所谓得“头”就是一组 Q、K、V。多头就是多组 Q、K、V。
Add&Normalize
Add
借助了残差这一思想。
深度残差网络(Resnet)
Normalize
数据的标准化。数据通过一个公式进行平移,缩放进行分布调整。在 Transformer 中使用的是 Batch Normalization。
Encoder-Decoder Attention
与 Self-Attention 思路完全一样,只不过它的 Q 矩阵和 V 矩阵来源于 Encoder,而不再是初始化得到的。
Positional Embedding
在 Input 输入到 Transformer 的时候还做了一个 Positional Embedding 的操作,这是因为纯 Attention 是没有办法知道句子中单词的输入顺序的。所以需要把单词输入之前的位置信息给神经网络。