语言模型-预训练模型(三)

预训练-BERT

传统方法与预训练方法的比较


思想解读: 预训练的概念就和我们人读书和工作一样;先是通过基础教育到大学毕业,学习了通用的基础知识,这个做大多数工作,我们都能够快速学习和上手。模型预训练同样如此;避免了每一个下游任务都从零开始训练模型

由于语言模型不需要特别的标注数据,所以非常适合做预训练的目标。

预训练方式 --BERT

Mask Language Model (MLM)

训练任务

1.完型填空

Bidirectional Language Model

a.依照一定概率,用[mask]掩盖文本中的某个字或词

b.通过遮住词两侧的内容,去预测被遮住的词

2.句子关系预测

Next Sentence Prediction

CLS\] 师徒四人历经艰险\[SEP\] 取得真经\[SEP\] -\> True \[CLS\] 师徒四人历经艰险\[SEP\] 火烧赤壁\[SEP\] -\> False **释义:** 通过上下两句话,去训练模型去判断是否为上下句子关系,即一个二分类任务。但是目前大家普遍不太使用该训练任务,因为这个规律模型比较容易学习到。 ### 模型结构 BERT主要包含两个部分,第一部分是embedding层,以及在embedding层后面的网络结构。 **与word2vec对比** 区别:`word2vec是静态的,而BERT是动态的`;在相同的文本输入后,word2vec输出的向量是固定的,BERT通过embedding后,还需进行后续网络层的计算,那么就能抓住输入的字与字、词与词;即token之间的关系。并能够进行计算输出。 #### BERT结构-Embedding **释义图:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a5d7dbd117994691a00bd736ef8d3813.png) **释义:** > 1.Token Embeddings就是传统的embedding;即将词或字转为对应的向量。所以它的大小:`Word-list _Size * Vector_size 即词表大小和向量空间的大小` > > 2.Segment Embeddings是由于训练任务中,需要区别两句话,前面我们说需要区分两句话是否为上下句;这里用`两个向量就能够去标记是两句话`,所以`大小为:2 * Vector_size` > > 3.Position Embeddings是对`输入的数据进行位置标记`,在初始版的BERT中,一条数据最多有512长度,即`标记的向量最多512个`;所以`该层大小为:512 * Vector_size` > > 4.加入 `[CLS] [SEP] 来标记文本起始位置` > > 5.上面3层embedding相加,就是整个embedding的结果;其大小为:World_Lenth(\<=Position_Size) \* Vector_Size > > 6.加和后会做Layer Normalization #### BERT结构-Encoder **介绍:** BERT的模型主体结构使用Google自己在17年提出的Transformer结构。 **如下图:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ae103cdfa2764926a1460cb507aa8b31.png) **详细释义:** > 1.embedding后得到输入X;这里的X1、X2可以理解为将输入复制了多份进入到自注意力模块训练 > > 2.自注意力计算完后,需要经过一个线下层;才会进入下一个模块 > > 3.`Add & Normailize 是残差计算`,这里会将自注`意力计算后的结果加上输入注意力计算前的值;`再过一个归一化层;这里加上原有值,即残差计算的目的:是为了使得模型搭的更深;因为self-attention会捕捉一些规律,但是也会遗失其他的信息;加上一个计算前的值(可以是前一层、也可以是前几层的值)就可以保留 > > 4.前馈网络Feed Forward就是`经过两个线性层;和一个激活层`;`注意点` 在基础的BERT中,进入前馈网络的结构为:World_Length\* Vector_Size;这里的两个线性层分别为:`Vector_Size * 4Vector_Size;和 4Vector_Size * Vector_Size;`所以第二个线性层计算后,输出仍然为:World_Length\* Vector_Size。 > > 5.最后再次经过一个残差计算,残差计算经过一个线性层计算后,就完成了一个基础的transformer结构 #### BERT结构-self-attention **示意图:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/23314d30c3b648db8ed4ae6efe928cf8.png) 其中Z的计算公式: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dcf6e456493b42c6a5d8bd783759fe36.png) **释义:** **1.我们先来`梳理矩阵计算`的情况** > a.图中,x就是我们Embedding输入,是`World_Length* Vector_Size` > > b.我们把x拆成3份,分别于`紫色、黄色、蓝色的线下层想乘(Q、K、V)`;我们最后计算的结果,对矩阵的形状是不变的;所以输出的形状需要为:`World_Length* Vector_Size`;那么线下层的形状就是:`Vector_Size * Vector_Size` > > c.公式中,Q、K进行相乘;那么`K需要进行转置`,即K左上角T的含义;转置后,K的矩阵形状:`Vector_Size * World_Length`;所以Q、K相乘的结果为:`World_Length * World_Length` > > d.Q、K相乘后,进行一些列操作,不影响矩阵的形状,继续与V相乘,结果Z的形状就是:`World_Length* Vector_Size`;即和输入的形状一致 **2.Q\*K.T和softmax的理解** Q\*K.T即:`World_Length * World_Length`;这个World_Length就是我们输入的文本长度。 所以我们展开可有下面**示意图** : ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d1281df2fdbb493dbae98d5215f39f60.png) **注意:** 矩阵中的数据,是不是就代表着,这个`词与该句子中其他词的关系紧密程度`呢。所以这行数据,就是这个字对这句话的注意力。 **softmax作用:** 就是归一化操作,即将字与句子中其他词的关系程度之和,归一化到1的区间中来。 **3.根号下dk的理解** 我们在前面说,Q、K、V是通过输入x和对应的线下层相乘得到的;其形状为:World_Length\* Vector_Size; **重点`关注`** 1.在进行后续Q、K.T相乘 和乘V的步骤之间,是对Q K V进行拆分的; 2.比如:基础版本BERT的Vector_size为768;这里拆分成12部分,即多头数量为12,;那么`每一个Q的形状:World_Length * 64` 3.上面拆分后,`V也会同样拆分`,分别进行计算,最后合并在一起得到:World_Length\* Vector_Size 4.最后合并的矩阵再进行 除于根号dk;再归一化的操作: **示意图:** ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1096d89c1f534a459182ea52ab4d2097.png) **注意、总结:** 在多个Q \* K.T中,不管Q、K的Vector_Size 拆分成多少份,即有多少个多头计算;但是在这里计算的结果都是:`World_Length * World_Length` ;我们上面说了,就是词与句子中其他词的关系紧密程度。 **`注意`核心理解比喻:** 这里的多头,造成有多个`World_Length * World_Length`的结果,其实就是模型在不同维度,去找句子中词与词之间的关系。多头1找的是名称关系紧密程度、多头2找的是动词的关系紧密程度... **dk的值** : 在基础版本的BERT中,dk是64,这个值是词向量维度:768与多头数量12的商。 **dk作用** : 因为softmax是将多个值的和归一化为1;根据softmax的函数特性,会出现在进行归一化的数中,有的`比较大`,归一化后`就接近1`;而小的数,就`接近零`了;这样对于模型的计算不好,这种`接近零的值要尽量避免`;所以先除于dk;使得`值的差距被缩放`;再进行归一化。

相关推荐
千宇宙航2 小时前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
onceco2 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
jndingxin5 小时前
OpenCV CUDA模块设备层-----高效地计算两个 uint 类型值的带权重平均值
人工智能·opencv·计算机视觉
Sweet锦5 小时前
零基础保姆级本地化部署文心大模型4.5开源系列
人工智能·语言模型·文心一言
hie988946 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
晨同学03276 小时前
opencv的颜色通道问题 & rgb & bgr
人工智能·opencv·计算机视觉
蓝婷儿6 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
大千AI助手6 小时前
PageRank:互联网的马尔可夫链平衡态
人工智能·机器学习·贝叶斯·mc·pagerank·条件概率·马尔科夫链
小和尚同志7 小时前
Cline | Cline + Grok3 免费 AI 编程新体验
人工智能·aigc
我就是全世界7 小时前
TensorRT-LLM:大模型推理加速的核心技术与实践优势
人工智能·机器学习·性能优化·大模型·tensorrt-llm