BERT-框架
Bert将Transformer左半边的Encoder拿出来进行单独训练,来生成预训练模型。GPT是将Transformers右半边Decoder拿出来进行预训练。整体的框架如下:
1. 输入:
词嵌入Bert选择了WordPiece进行子词词元化。
[CLS] : 在训练前,每个句子开始时都有CLS预示输入的开始,同时也不包含任何含义。在训练后,它汇总了句子所有的特征,可以用来继续下游的分类任务等,更加公平的融入后面的语义信息。
1.1 标记嵌入:
[CLS]句子[SEP]
1.2 分段嵌入
[CLS]句子1[SEP]句子2[SEP]
1.3 位置嵌入
给出词序的具体位置信息
最后将上面的三个特征进行相加,即为输入特征,输入到Bert中。
Embedding的数学本质,就是以one hot为输入的单层全连接。
也就是说,世界上本没什么Embedding,有的只是one hot。
2. 训练
使用多伦多预料库和维基百科语料库。
- 抽取句子对:保证下一句与非下一句的比例为1:1
- 抽取的句子进行Word Piece分词
- 随机这样15%的词
- 参数:
批大小 | epoch | 学习率 | 预热 | Dropout | 激活函数 |
---|---|---|---|---|---|
254 | 1000000 | Adam | 10000 | 0.1 | GeLU |
GELU :
ReLU会确定性的将输入乘上一个0或者1(当x<0时乘上0,否则乘上1),Dropout则是随机乘上0。而GELU虽然也是将输入乘上0或1,但是输入到底是乘以0还是1,是在取决于输入自身的情况下随机选择的。
所以,GELU的优点就是在ReLU上增加随机因素,x越小越容易被mask掉。
预热:
1)这样可以使得学习率可以适应不同的训练集合size
实验的时候经常需要先使用小的数据集训练验证模型,然后换大的数据集做生成环境模型训练。
2)即使不幸学习率设置得很大,那么也能通过warmup机制看到合适的学习率区间(即训练误差先降后升的关键位置附近),以便后续验证
3. 结果
名字 | L-编码器层数 | A-注意力头数 | H-隐藏神经元个数 | 总参数量 |
---|---|---|---|---|
BERT-base | 12 | 12 | 178 | 0.11B |
BERT-large | 24 | 16 | 1024 | 0.34B |
优点:
- CBOW:将中心单词周围的n个单词(固定的片段)作为输入,然后预测中心单词。BERT使用整句预测[MASK]标记
- Word2vec:只考虑局部上下文。无上下文模型,同时生成的嵌入向量与上下文无关
- Transformers:引入可训练位置编码
缺点:
- 训练参数并非最优。–> Roberta
- 训练过程中掩码的引入和下游任务掩码的缺失有冲突 -->XLNet:使用自回归代替自编码。
- 同时为了解决这个问题引入的的下一句预测也并不能很好处理。–ALBERT
- Token处理不完全 -->全词掩码
- 只执行一次掩码 --> Roberta(动态掩码)
- 只能处理2个句子对。
- 长度限定在512个字符内
BERT-框架
http://example.com/2023/12/09/BERT-框架/