datawhale-so-large-lm 学习笔记

第一章:引言
第二章:大模型的能力
第三章:大模型的有害性(上)
第四章:大模型的有害性(下)
第五章:大模型的数据
第六章:大模型法律
第七章:模型架构
第八章:模型训练
第九章:分布式训练
第十章:新的模型架构
第十一章:大模型之Adaptation
第十二章:环境影响

(教程地址:https://github.com/datawhalechina/so-large-lm/blob/main/)



第一章:引言

介绍了大模型的一些基础概念,并非常简单的介绍了大模型的发展历史

1.1 什么是语言模型

简单介绍了大模型是什么,以及它的基本逻辑:根据概率来与人进行交互。从数据流向来说,我们输入一句"今天是星期几"(这里我省略encoding的过程,包括tokenizer inputids embedding等) 模型会计算他的回答的概率,即从他的词向量库中找到概率最高的进行输出从而完成回答(这里省略了很多中间过程)

顺带还带了一笔温度系数,这个系数在我理解是有点类似于top p这个参数,通过改变温度值来改变词语的概率最终影响输出

1.2.1 信息理论、英语的熵、n-gram模型

简单的介绍了entropy的公式,我第一次接触这个公式是在信号传输这门课程上,现在在引言介绍他我估计是为了接下来的crossentropy等loss计算埋下伏笔

1.2.2 用于下游应用的N-gram模型

N gram没怎么用过,但是在我理解中应该是过时的编码方式。因为这种根据前后词语固定搭配的词向量方式有点类似聚类,这种方法很容易把词语固定在一个向量空间的具体位置,这样会损失词语的多样性

比如说苹果有时候是表示食物,而有时候表示的是手机。用聚类的话就会把苹果固定成水果或者固定成手机,从而增加了模型的困惑度ppl

1.3 这门课的意义

介绍了模型发展的历史,以及参数量处于一个爆炸式增长的趋势,同时模型能力也相应的得到了提升

(至于其他的一些定义就不总结了)


第二章:大模型的能力

就如上一章提到过的,语言模型本质上来说是一种概率计算的工具,从给定的token序列来计算/预测下一个token出现的概率

这一章将会介绍例一些模型的学习方法:

  • Language modeling
  • Question answering
  • Translation
  • Arithmetic
  • News article generation
  • Novel tasks

2.1 Language modeling

学习了一种叫困惑度(Perplexity也作PPL)的指标, 以前只是单纯的认为困惑度高模型就会很“困惑”,但是并不知道困惑到底为何物。

先看公式

在这里插入图片描述
其中
在这里插入图片描述
的数学含义是给定了序列 i 个长度数据来预测第 i+1 个token的概率。所以很容易看出来,假如概率无线趋近于0的话,那么困惑
度就会趋向于无穷;反之概率趋近于1的话(最大值),那么困惑度就为 exp(1)。 这也很符合数学直觉

结论:给我感觉像是有点类似top k, 即困惑度越高, 那么预测下一个词语的时候的选择就越多。举个例子:假如困惑度是4,同时我输入了"我要吃"三个字,模型就会有4个可能的词语进行预测;即可能会出现"我要吃苹果",“我要吃西瓜”,“我要吃饭”,“我要吃人” 四个可能性。由此可见

文中还提到了lambda, 解释得不是很清楚,但是我的理解应该是sft类的训练任务,其目的应该是修正模型正确的参数以及在诸如
template等方法的帮助下正确的找到eos位置

同理HellaSwag给我的感觉也是类似rm等强化学习的模型,由于文中只有两行字这里只是似懂非懂。

2.2 Question answering

这一块就是sft训练,让模型在N个epoch中不断的迭代自身的参数,从而让模型学习到我们期望它学习的东西。通过一系列逻辑/非逻辑性的QA对来实现类似:
"法国-巴黎+意大利=罗马"
这样的回答

值得注意的是 WebQuestions 貌似提到了一种外部知识库的技术(这也是最近我在研究的方向),因为QA对是不可能枚举出来的。所以外接一个维基百科或者其他的类似的网站/文本可以在模型不知道答案的情况下获取正确的信息

第二章剩下的就不总结了,一句话概括就是在介绍语言模型能干的工作,并没有什么特别可以注意的东西


第三章:大模型的有害性(上)

这一章确实没什么可以总结的内容, 都是一些基本的概念,相信对初学者来说没有很大的帮助。不过照例还是要总结一下

3.1 引言

总所周知语言模型能应用在很多方面:医疗,法律,社会人文,IT 等等。

如果在IT行业,GPT给了我们一个错误的代码的话,我们可以通过debug来解决,这不是非常大的问题;但是如果在生物医疗行业,GPT给了一个错误的"配方"/化学式,那么危害性是显而易见的。所以文章特别指出了,模型在某一方面特别突出/优秀,并不代表在所有方面都是可信赖的(或者说在其他方面是较差的)

3.2 社会群体

欧美的LGBT,犹太人,黑人等天龙人在语言模型面前并没有高人一等,但是我们实际使用的时候却要时时注意

3.3 - 3.6

这部分内容文章中也是三两句话就带过,我也就一句话总结了,举个稍微生动的栗子:

在美国为了杜绝/遏制性交易现象,警察把嫖客抓住之后都统一命名为Jack。然后在电视等媒体中示众以达到警示作用,所以Jack这个名字就带了负面色彩。

而语言模型在学习过程中就会学到 Jack=bad guy 这么一个等式,从而对"Jack"这个名字造成负面的影响。以此类推,llm会有很多的刻板印象,而这些刻板印象都是由于开发者的"刻板"数据造成的。


第四章:大模型的有害性(下)

4.1 概述

提出了有毒性和虚假性(toxic and disinformation)的概念,并阐述了降低毒性和虚假性的必要性。

4.2 毒性(toxic)

即语言模型会回答一些"可怕的"回答, 比如询问语言模型怎么制造枪支,毒品,犯罪等。或者引诱模型回答出一些有害性言论:本拉登应该轰炸美国99次 等等回答。

有人推出了一种数据集来评估语言模型的毒性,这也应该是语言模型的baseline

同时提出了两种降低毒性的方法:数据层和解码层
如果只在数据方面做优化的话,各项指标中的毒性都下降了14%-18%
如果只在decoding方面做优化的话,各项指标中的毒性都下降了16%-23%

但是同时语言模型不会理解各个社区的包容性:例如黑人之间互相称呼尼哥是没问题的,但是一个白人对黑人称呼尼哥却是万万不可,这就是不同社区之间的包容性

4.3 虚假性(disinformation)

这个定义方面也不需要怎么总结了,相信各位从名字上就能理解它代表的意思。

说几个值得关注的点:
-GPT-3已经可以生成语句通顺且新颖的新闻了,所以也就是说语言模型制造假新闻不是什么特别困难的事。
-在GPT-2模型下,微调就可以语言模型的内容以假乱真,但是增加模型大小却让这个能力下降了(边际效益)
-GPT-3比GPT-2更容易生产虚假信息,GPT-2需要微调才可以生产假新闻,而GPT-3只需要通过提示词就可以。个人猜测是由于GPT-3的PT阶段的内容更多,所以它的知识库更丰富。
-通过魔法打败魔法,微调过后的GPT-2就能识别假新闻,有很高的准确性


第五章:大模型的数据

这一章看得有些不明所以,因为全是一些定义类的东西,还都是一些不重要的定义。

主要还是介绍了数据集构造的一些方式,有通过爬虫获取维基百科等网页的数据(web text),有通过一些类似于common crawl的非营利性组织发布的数据作为数据集(本质上还是爬取了web text)。

提了一下数据清洗/过滤的必要性,但是也强调了清洗过后的数据可能会偏见。以及偏见形成的一些原因,如黑人和积极的正面词汇同时出现的次数过低,就造成了黑人的负面偏见等。

最后特别强调了数据的构建者/组织也是一个需要考虑的因素,不同的组织构建的数据方向是不一样的。(也就是说需要清理的方向也是不一样的)


第六章:大模型法律

这一章又是一些我最讨厌的定义类的文章,感觉没什么可以总结的…

非要说的话就是大模型会有一些法律/道德/伦理类的争议。比如说有些地方大麻是合法的,有些地方大麻是非法的;例如训练模型的时候对这些"大麻类"的数据没有进行过滤,而开发出来的时候却在"大麻"不合法的地方使用了这个模型,从而获得了一些"不合法"的答案,这就会引起一些问题。

同理还有一些版权类的争议,例如用GPT生成一本小说,这小说可能会涉嫌抄袭别人已有的小说(因为训练数据就是别人的小说),或者后人再生成的时候会涉嫌抄袭千人生成的小说等等、

总的来说这一章的内容偏无聊,五秒钟就看完了,无奈的水一天打卡


第七章:模型架构

7.1 概述

模型可以理解为就是封装好的以一个提示词(prompt)作为输入,然后返回一个答案(completion)的function。在训练和推理的过程都是以概率来实现的。

7.2 分词(token)

介绍了的BPE, Unicode, unigram model 的一些基本原理

我们输入的每一句话都是若干个token组成的,举个栗子:

luosifen is very good 这句话就会分成一个词汇表 [luosifen, is, very, good]
对应的向量表可能是这样[563541, 147, 100, 321],这里是按照一个单词作为分词的;同样的有些是以句意作为分词,有些可能是以单个字母作为分词;不同的应用场景可能会有不同的tokenizer,但是大多数情况下都是用autotokenizer这个function。

英文的分词也许是一个单词一个数字,但是中文就不一定了,具体怎么分要看使用的模型用的是什么策略,举个栗子:

“螺蛳粉很好吃” 对应的向量表可能是这样的[563541, 147, 100, 321](和英文一样)
也可能是这样的: [6123,32465,54652,541324,11112,677654,456432]

可以看出来不是一个中文字符对应一个数字的,英文也同理(这部分可以参考台大李宏毅教授的课程)

unigram model 里面的思想是通过比较分词的结果和训练数据来计算loss的,按照剔除某些词汇来

7.3 模型架构

有三种语言模型的分类:
编码段架构(encoder only)

代表模型BERT;这类模型对上下文有更好的理解,但是对于文本生成任务却很不足

解码端架构(decoder only)

代表模型Chat GPT,LLAMA 等;这类模型更多的是根据上文来预测下文,在2.1的总结部分已经有一个例子了。所以位置编码在这个模型中起到了不可忽视的作用。

编码-解码架构(encoder-decoder)

代表模型有T5, BART (这个分支了解不多);理论上来说有上面两者的优点,但是以实际情况来说只有GPT分支的模型表现是最佳的。

接下来还有一些数学公式和原理,这也是最值得学习的地方。但是今天太晚了而我本身之前又学过了,所以就把这个坑留到明天填了


第八章:模型的训练

8.1 目标函数

这一章详细介绍三种架构的原理

decoder only:

正如我之前提过好几遍的,这个模型本质上就是输入一组token进一个封装好的模型里,然后输出一些向量表的概率;比如说有个类gpt模型有包含了一亿个token的向量表作为知识库,当我们询问这个模型 “你爱我吗?”, 他会回答计算概率,最后发现"是的" 对应的token最高,然后他就会输出"是的"; 这还没完,他还会继续计算概率,然后发现当他输出了"是的"之后"我爱你"的概率是最高的,他就会继续输出"我爱你";当模型发现输出完这句话之后从词向量库计算不到高的概率的token了,他就会输出一个eos作为结束。

所以最后呈现给我们的就是:我们问一个语言模型 “你爱我吗?” ,他回答你 “是的我爱你”

这里有几个问题可以说一下:我举的例子是理想情况,真实情况是模型可能计算不出来 “是的我爱你”;有可能是最大似然估计没优化好、模型训练不到位或者单纯的知识库很小完全查询不到答案(举个极端的栗子:知识库只有100个token)

encoder only:

这种架构的模型有两种特殊的token,CLS和SEP;其中CLS和BOS应该是一样的,都是在开头的时候插入的,而SEP和EOS却不是完全一样。SEP更多的像是把一个句子分割为两个句子的作用,主要是用来分割句意,而EOS只是单纯的作为句子的结尾。

与decoder only 另一个不同点是mask,他们的mask是不一样的。decoder用的是只看到左边/右边的三角形掩码,而bert使用的是遮盖若干百分比数据的操作,这里我贴一下文章使用的例子:

在这里插入图片描述

这里我们遮掩了mouse 和 the 两个单词, 利用这个被遮掩的单词去预测真实的 the mouse ate the cheese 这个句子。
其中这个mask的定义如下:

在这里插入图片描述

接着再进行预测,最后使用CLS来进行分类, 这里有朋友可能不理解是什么意思,我可以简单解释一下。

一个句子的构成如下:

CLS token1 token2 token3 … token k SEP token1 token2 token3 … token m

我们通过拼接不同的SEP, 可以对其答案进行打分/计算loss
在这里插入图片描述

在bert的迭代模型 robert中,删除了后一项,只计算前一项,因为发现训练预测这个步骤操作对没有模型提升

encoder decoder:

这种架构使用的是之前介绍的把数据打乱并且遮掩,然后训练,最后预测阶段使用的是decoder only的自回归方式,可以说是集合了两种模型的优点。但是奇怪的是市面上的模型并没有很出色的(相比于GPT来说)

8.2 算法优化

这一部分都是老生常谈的了,有SGD, Adam, AdaFactor等计算参数的方法
然后还提到了一些精度方面的优化,默认的都是fp32,但是为了节省显存就开发出了bf16和fp16,甚至还有int8 int4等,但是根据我个人的微调经验来说bf16是最好的;其中就是因为bf16和fp32的exponent都是8位,而小数位部分没这么重要。具体原因可以自行查找论文


第九章:分布式训练

9.1 为什么分布式训练

现在的语言模型已经不同于以往传统的机器学习/深度学习, 网络结构是越来复杂,也就是说参数量越来越大;随便一个小模型就已经几十亿的参数量,市面上用得稍微多一点的开源模型都要近千亿级别,而gpt3 都有175B的参数量;而参数量越大,训练的时间就越多,显存的需求也越大。谷歌训练一个模型需要几百张A100的显卡训练数十天,所以单纯的串行运算已经不能满足当下的需求了

9.2 分布式训练的策略

并行运算的实现是没这么简单的,以十年前交火的例子来说,1+1=1.1;虽然目前的技术进步了,但是也远远没达到1+1=2的地步。

最常听说的就是数据并行、模型并行、流水线、混合并行四种

数据并行:

以文章中的例子来说:

我们有一个数据x:x.shape=(4,5)

同时我们有一个模型w:w.shape=(5,8)

根据小学二年级学过的矩阵运算得知,最后的输出y:y.shape(4,8)

数据并行就是把数据x切分成若干份,文章中切分成了两粉,每份的shape都是 (2,5)。这样我们就可以把第一个矩阵乘法放到GPU0 里面进行计算, 第二个矩阵乘法放到GPU1 里面进行计算。

在这里插入图片描述

聪明的盲僧已经发现了华点,那就是反向传播的时候如果每个GPU都在各自更新参数,那么最后的结果百分百会不一样的,也就是说分布训练就失去意义了。为了解决这个问题就需要进行allreduce(简单的说就是把所有数据收集到一起,然后统一进行反向传播更新参数,最后再把参数更新到每张卡上),但是术业有专攻;GPU擅长的是计算,对于通信来说是非常慢的,特别是GPU间的通信更是如此;所以这就是目前分布式训练的最大gap

模型并行:

根据上面的例子,我们很容易理解模型并行的意思,就不多做解释, 直接上图

在这里插入图片描述

流水线并行:

这种思想是对网络结构进行切分,假设一个网络结构有4层,那么就可以把前两层分给GPU0, 后两层分给GPU1

在这里插入图片描述

混合并行:

这里还是以文章的例子举例:

gpt3被分成了64个阶段(流水线并行);每个阶段都运行在6台主机上,所以每台主机都使用了1/6的数据进行并行;而每台主机都有八张显卡,每张显卡都把模型分成了8份。所以理论上来说每张卡都承担了整个训练的1/(64x6x8)= 1/3072。但请注意的是,这并不意味着我们就加速了3072倍计算量,实际上加速比远远低于这个数(可能只有数十倍)。

在这里插入图片描述

所以在当前并行运算更多的作用是为了让训练跑起来,而不是让训练加速


第十章:新的模型架构

上一章分布式训练中,介绍了几种常用的分布式方法,同时也了解了目前的瓶颈所在

这一章会介绍两种模型,以便进一步的提高模型性能:
混合专家模型
基于检索的模型

10.1 混合专家模型

简单的说一下就是把一个input的分给若干个"专家"回答,然后把"专家们"的回答统一汇总,再输出给用户。

比如说我们问gpt “如何迎娶白富美/高富帅,走上人生巅峰?”

这部分就可能涉及 “金融专家”、“情感专家”、“行为专家”、"礼仪/体态专家"等等,然后每个专家都会在他的领域给出专业的回答;由于有些"专家"的回答不那么重要,实际对应的概率也会相对低一些。最后体现出来的是回答所占的数据也会相应较少。

每个专家的门函数:(专家贡献答案的百分比)

在这里插入图片描述

每个专家的参数:
在这里插入图片描述

最终的公式:
在这里插入图片描述

最后训练的时候会针对参数进行优化并计算loss,而每个专家多多少少都会有一些贡献(概率),而有些概率可能会很低(0.01),我们可以把一些概率很低的专家给忽略掉,最后只计算剩下的一些专家和这些专家的参数,以达到节省计算资源的目的

取文章中的例子,原专家的分布如下:

在这里插入图片描述

优化过的专家分布如下:

在这里插入图片描述

这样我们就可以少计算两个专家的参数,从而节省了计算资源

但是这样也会有一个隐形的隐患,那就是其中一个专家的概率一开始就是1,那么其他的专家就一定为0,久而久之其他专家的梯度就为零,就陷入了一种过拟合。因此混合专家优先考虑的就是让所有专家都参与进来

用这种模型的另一个优点就是并行运算,因为我们很容易看出每个专家的参数都是不同的,所以我们可以把每个专家都放到不同的GPU上来训练。


未完待续…


总结

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值