Chatgpt 从零开始-深度学习网络BERT简介

写在前面

   上一篇 主要说了文本的表示方法,从最开始的以最简单粗暴的 one-hot 表示方法来表示一个句子,再到使用 word2vec 方法来表示一个句子,其中 word2vec 是只有单层神经元的网络,它接收一个长度为 N 的输入,然后进行自监督训练,得到一个权重参数矩阵,这参数矩阵可以用作文本表示。然而毕竟 word2vec 网络只有单层,它对文本表达的效果虽然在较小的语料库上能表现良好,但遇到更多的数据时已经不足以容纳更多的信息,如 Chatgpt 所训练的语料库,严格地说 word2vec 的信息容纳量连 Chatgpt 的 0.0001% 都不及,如何理解这句话?当你有 3 个 3 种颜色的球,进行不同数量、颜色的组合,你能给出 3+3+1 = 7 种组合,这就是 word2vec,当你有10000种颜色的10000个球,你能给出的组合就是天文数字,你能表达的信息就更多。要想提高一个神经网络的表达能力,最简单的方法就是加深网络的层数、增多神经元的个数——这就是我们经常所说的深度学习。
   接下来会逐步介绍 Bert,一种基于深度学习的网络和方法。要想了解 Chatgpt 的原理,个人认为 Bert 还是要了解一些。(PS:计算机视觉领域何恺明大神这两年刚出了一篇 Masked 图像的论文,即视觉里的 Bert,相当 nb)

相关概念

自监督训练:简单地说就是训练有没有用人标注的数据。一般的分类、回归问题都有人为标注的真实值对网
		   络进行训练,例如,某次训练迭代时输入猫的图片,开始的网络参数没收敛,可能输出的结果
		   是狗,但是我们标注这张图片是猫,因此在这次迭代训练里面网络的损失函数值较大,能够进
		   行收敛,训练结束后权重参数能够趋于正确值,这叫监督训练。而自监督训练则是没有人为对
		   数据进行标注,我们使用一些策略,来让网络自己决定你训练的数据中哪个是正确的,以此进
		   行收敛。上文的 word2vec 就是这种训练方式。

文本任务:我们训练网络肯定是以任务为目的,比如我们想训练网络能够判别这段话是什么情感,这个新闻
		 是在说体育还是电影信息,或者我们想在这段话中找出时间、地点、人物相关的字词(命名实体识
		 别)任务。诸如此类。

self-attention:简单说是一种神经网络实现的方法,实现后就是一个小块的神经网络,只不过算法的形式
			    上有些区别,梯度下降训练的本质不变。

Transformer:不是变形金刚,这是一种基于 self-attention 模块的网络,即这个网络中用了大量的 sel-
			 f-attention 模块。

特征:你可以理解为网络的某一层或某几层对输入数据进行计算、变换后的结果。
			 

1. Bert 总体认知

   Bert 本质上是基于 self-attention 机制实现的,其训练主要分为两个阶段,第一阶段是以自监督训练为主,得到较好的文本表达权重参数。第二阶段则是依据训练好的参数进行微调,即下游文本任务的训练,将 Bert 输出的特征再接入一个其他浅层的网络进行不同文本任务的应用。Bert 模型有 Base、Large 两种不同参数数量的模型,其实就是 transfomer 模块数量的多少,Base 参数量有 1.1 亿,Large 参数量为 3.4 亿,相同词数量下 word2vec 顶多只有几百万的参数,是不是很多?但是在 Chatgpt 面前仍旧不够看。它可以理解成网络层数很多的 word2vec(虽然这不咋正确)。

  上图为 Bert 的总体结构,我们逐个解析。其中 Ex 表示嵌入层,E 为 embedding,x 表示下标,它对每个文字/词等会进行下标表示,这里有点类似于 one-hot,只不过从一个很长的向量变成了一个下标 index。这里的嵌入层内容分为3个部分:

1. 每个词都有自己的一个初始向量,每个向量的维度是768,这里的一个向量也被称为一个 token
2. 每个词需要进行位置编码,比如对句子里的每个字词赋不同的值,具体的赋值方法较为复杂,你暂且认
   为每个词的位置都是独特的
3. 输入 Bert 的句子可能有一句,也可能有两句,因此还需要加入一些标识,如 [cls]、[sep]、[mask]
   等,我们可以暂时先不考虑这几个标识,总之它是输入的一部分,想深究的同学可以进一步查阅。途中
   每个字词都会被标记为 0 或 1,例如 [cls] my dog is cute [sep] 会被标记为 0,表示这是第一句
   话的内容,之后的内容会被标记为 1,表示这是第二句话的内容

在这里插入图片描述
以上三部分会作为嵌入层的输入来进行训练,这里我们发现,加入了位置关系后,在后续的训练当中网络能够依据每个词所在的位置来判断他们所具有的语义,如“打我” 和 “我打” 这两个组合,肯定意义上有很大差别,位置关系在这里就充分体现出来了。
第二个是不同句子的 0 1 标记,训练时 bert 会把相关或者不相关的两个句子放在一起,那如果是两个不相关的句子,那训练时显然得让参数认出来这两个句子的词毫不相关,例如上图中的两个句子关联性不大,因此在这个样本中的 dog 和 likes 不能有大的关系。

Trm 即 transformer 模块,主要基于 attention 机制实现,它还有 layer_normal、feed_forward 层等
T1, T2,网络输出得到的新 token,这些新的 token 可用作新任务的输入特征

2. Self-attention 机制

   涉及的过程较为复杂,我们可以简单地说下它所作的事情

  1. 首先对于每个 token(即嵌入层的输入),attention 首先会对 token 与 3 个参数矩阵进行非线性变换,也就是每个词经过变换后会变成 3 个新的矩阵(命名为 q, k, v),所以假设原来有 n 个词,这里就会有变成 3n 个矩阵
  2. 这 3 个矩阵中的 q 矩阵,会和其他所有 token 的对应 k 矩阵进行内积运算,所以这里总共需要进行 n2 次的计算,得到一个值,再进行归一化操作、softmax操作,得到一个新的矩阵
  3. 新矩阵再和 v 矩阵运算,得到一次 self-attention 的输出矩阵,该矩阵可作为输入,进入到一个全连接层或其他形式的神经网络层,得到一组新的 token

  上述内容为在3个参数矩阵进行线性变换的情况,通常以 3 个为一组,成为一个 head,叫做单头注意力机制,当有 6 个参数矩阵则为 二头注意力机制(这名字我瞎取的),当参数矩阵个数为 3n,可以称为多头注意力机制,我们主要训练的就是这些(q, k, v)矩阵中的参数以及attention模块后的连接层参数。
   看完感觉云里雾里?没事,你只要知道原先的 1 个 token 变成了 3 个 token,或者 3n 个 token,然后自己的 token 和别人的 token 计算、交换一次信息,这样就能够让你知道自己和其他词 token 的关系,这层关系里还带着位置关系,其实际效果就是,“中午”、“我”、“吃饭”,“下午”、“上课” 这些词当中,“吃饭” 和 “上课”两个词的向量内积就比较小,即关系不大,但是 “我” 和 “上课” 的内积就很大,有很强关系,也能分辨 “打我” 和 “我打” 这些词。需要进一步了解的同学可以根据上述内容,参阅这篇内容加深理解。

3. Bert 训练策略

   在 word2vec 中的训练策略是一句话中删去一个词,或者输入一个词预测周围所有词,而在 Bert 中则是覆盖 15% 的 token,这些 token 中又 80% 使用 [mask] 标识代替,10%随机替换一个词,10% 保持不变。为什么要用这种形式训练?因为它总归要训练,最好是要遮盖掉一部分词,让网络自监督训练,但是如果又不小心覆盖了一些起到重要作用的词,那这次训练就无效了,所以尽管这次训练出错了,下次能够有概率不让这些重要的词被覆盖掉,给网络训练增加纠错的机会,这就是那10%和10%的作用。

4. 通过 Bert 我们获得了什么

   前文也说过,本质上 Bert 和 word2vec 很像,但它的神经网络结构更为复杂,无论是参数还是对数据的拟合能力都是远远超过 word2vec 的,它一共有 12 层或 24 层的 transformer 结构,但它本质上还是经过训练后得到一些词的新 token,这些新 token 完全可以被当作文字的表示方法来使用。
  也就是说,我们从 Bert 获得的正是这些词的 768 维度的向量。由于 Bert 经过了大量的数据训练,每一层的输出都是具备较好的特征表达能力的,因此可以用作词向量表达方法,来进行一些下游文本任务,如文本分类等。有没有这个问题,它这么多层的输出,用哪一层的结果用来做词向量最好?或者该如何利用这些网络层的输出?Bert 论文的作者确实做了这方面的比较,根据论文表格中的数据,将最后4层网络进行 cat(连接) 的特征用来做其中一个命名实体识别任务的效果是最好的(concat last four hidden):
在这里插入图片描述
但个人认为,具体哪一层或者哪种形式来利用 Bert 的输出是根据任务决定的,也许在其他任务中其他层的特征可能会更好。

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值