徐慧志的个人博客

2024-04-05 大型语言模型修炼史(第一、二阶段)

发布于 2024年04月05日  •  5 分钟  • 2478 字
Table of contents

背景知识

大模型的本质是文字接龙。输入一个未完成的句子,输出这个未完成的句子的下一个token。

大模型可以看成是一个函数。$$ f(未完成的句子)= 下一个token $$这个函数是一个有数十亿个未知参数的函数。

1. 那么怎么找出这些未知参数呢?需要训练资料。

通过训练资料找出参数的过程叫 training 或者 learning。

找出未知参数之后,通过函数来完成文字接龙的过程叫 testin 或者 inference。

最佳化 optimization:把大模型比作机器,机器训练前需要设定一些参数(例如学习率),这些参数叫超参数hyperparameter。通过这些超参数,机器可以找到最佳的参数。

2.贝叶斯思想

训练可能会失败,这意味着找到的参数不符合训练资料,例如,输入”床前明月“,函数输出的不是”光“。那么,就需要换一组超参数再训练一次。

也有可能出现,训练成功,但是测试失败,这就是Overfitting。

下面这段话是训练大模型的中心思想。 模型开始训练之前,除了要设置超参数,还要设置初始参数。一般来说,这些初始参数是随机化设置的。那我们也可以尝试给初始参数一些信息,这些初始参数是先验知识,我们给的先验知识越好,模型最后找到的参数会越接近我们想要的。

语言模型的三个阶段

把训练语言模型的历史分为三个阶段: (李宏毅教授除了用动漫举例子还会用武侠啊!!!)

  1. 自我学习,积累实力
  2. 名师指点,发挥潜力
  3. 参与实战,打磨技巧

第一阶段:自我学习,积累实力

训练资料的组成部分

需要多少训练资料语言模型才能学会做文字接龙呢?

这些训练资料,需要包括两方面,第一是语言知识——语法。根据研究表明,一亿个词就可以掌握语法。

第二是世界知识,也就是一些物理世界的知识。例如水的沸点是摄氏100度,而不是50度。(尽管50度也符合语言知识。)根据研究表明,300亿个词也不一定能掌握世界知识。

训练细节

  1. 训练资料哪里有:网络
  2. 训练方法:自监督学习:机器自己教自己,不需要人工介入。(训练语料同时也是Label)
  3. 提到了两篇论文

模型效果

在chatGPT之前的GPT系列:

参数量代表着模型的复杂程度,语料大小代表着模型接收的语料数量。

YEAR MODEL PARAMETERS DATA SIZE 模型效果
2018 GPT1 117M (1亿) 7000 books 一般
2019 GPT2 1542M(15亿) 40GB 一般
2020 GPT3 175B 580G(300B tokens,哈利波特全集30万遍) 一般

第一阶段的局限性

在这个阶段,语言模型根据网络资料学习了很多东西,却不知道使用方法。GPT1、GPT2和GPT3可以回答问题,但是经常胡言乱语,不受控制。

接下来就到了第二阶段:名师指点,发挥潜力。

第二阶段:名师指点,发挥潜力

通常的教学中,学生与老师的问答如下。

学生:世界上有几大洲?
老师:七大洲
学生:世界上有几大洋?
老师:四大洋

第二阶段是通过这种问答的方式,让模型学会如何回答问题。

训练细节

第二阶段与第一阶段有一个显著的变化:在语料方面,不再是无人工的自监督学习,而是变成了Instruction Fine-tuning。
Instruction Fine-tuning是指人类提供一些指令,机器学会怎么按照这些指令来做正确的回应。

这种语料中有label的学习,叫做监督式学习 Supervised Learning。

格式如下:

输入:"User:世界上有几大洲?AI:"
输出:"七"
输入:"User:世界上有几大洲?AI:七"
输出:"大"
输入:"User:世界上有几大洲?AI:七大"
输出:"洲"

为什么要标注哪句话是User的,哪句话是AI的?

如果不标注的话,就会变成下面这样。

输入:"世界上有几大洲?七大洲"

模型处理的时候,有两种情况。

  1. 用户提问”世界上有几大洲“,AI回答”七大洲“。

  2. 用户提问”User:世界上有几大洲?七大洲“,AI要回答”对“。

这两种情况输出是不一样的。


输入:"User:世界上有几大洲?AI:七大洲" 输出:"[END]"

输入:"User:世界上有几大洲?七大洲 AI:" 输出:"对"

第二阶段的局限性

模型能正确回答,但是人工标注很贵,如果只靠语料标注的话,无法覆盖所有的场景,模型无法理解整个物理世界。

第三阶段:参与实战,打磨技巧

总结一下第一阶段和第二阶段:

第一阶段:通过网络上任何语料学习而来的,叫做预训练Pretrain。

第二阶段:通过人类标注的学习,叫做Instruction Fine-tuning。

如何克服第二阶段的局限性呢?关键是用第一阶段的参数作为初始参数。

第三阶段的训练细节

(贝叶斯的思想这不就来了嘛!)

所以就到了第三阶段,第三阶段是由第一阶段和第二阶段组合而成的:

用第一阶段的参数作为第二阶段的初始参数,继续训练,让模型既拥有第一阶段的知识,又能正确回答。

两个问题:

  1. 第二阶段的最佳化这个过程找出来的参数和初始参数很不一样怎么办?

用Apapter, 例如LoRA方法。 Adapter是指固定或者插入参数。 Lora是这样做的:假设已经有初始参数,在做最佳化的时候,初始参数完全不变,只在模型后面多加几层,第二阶段的最佳化是找这几层的参数。

  1. 为什么会在意这个事情?

因为第一阶段之后,模型的能力很好:在多种语言上做预训练,只要教某一个语言的某一个任务,自动学会其他语言的同样任务。所以我们不希望模型的参数有很大的变化。

大模型 Finetune 的两个路线

目前大模型Finetune有两个路线:

注:以上笔记内容来自李宏毅教授的课程: INTRODUCTION TO GENERATIVE AI ,此篇文章内容包括第6讲和第7讲。

Sein heißt werden, leben heißt lernen.

Der einfache Weg is immer verkehrt.