这是鼎叔的第一百二十篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。

生成式 AI(Generative artificial intelligence)是目前最热门的领域,通过一段时期的学习,我想继续以零门槛的方式,介绍对生成式 AI 的学习感悟,主要是对概念的理解原理延展,不会对具体的公式、算法和工程进行展开。
学习到 AI 背后的原理可以带来很多乐趣,也可带来宝贵的启发,对其他知识领域同样有作用。
前文聊聊 ChatGPT 的本质https://mp.weixin.qq.com/s?__biz=MzkzMzI3NDYzNw==&mid=2247484573&idx=1&sn=00fbef27488ebdd8b5b45b16ff494eb2&scene=21#wechat_redirect
聊到了对大语言模型的一些认知判断,这篇会详细聊聊它是如何生成内容的。大语言模型是生成式 AI 的一种,ChatGPT 又是大语言模型中的一个产品,也是这两年全世界最火的,值得持续挖掘。
定义生成式 AI
AI 似乎并没有明确的精准定义,每个人对 AI 的想象都不一样,只要能让机器产生智能行为就可以算 AI。
生成式 AI 可以理解为 “如何让机器生成复杂而有意义的格式化内容”。
这些内容具体就包括文章,图片,音频,视频等。格式化意味着这些内容都是由具体元素构成,如文字,像素,声音采样点等。这里的复杂意味着 “不可能穷举”,如果只是想” 量大 “,那传统程序也可以生成。
比如,写一篇文章,可能产生的结果有无穷种可能,传统程序似乎没法展示生成内容的 “创意” 和 “快速”。
对应的,什么样的 AI 不属于生成式 AI?
那就是在有限的选项中做选择。比如分类判断(如垃圾邮件判断),识别某个动物是猫还是狗等等。
机器学习属于 AI 的一个分类,机器学习的本质就是从一大堆数据中自动算出一个函数公式的各个参数。

但生成式 AI 背后的函数可能有海量的参数,没有办法把所有参数精准计算和展示出来。比如,我们输入一张图片,要对它做 AI 处理,很显然这里面有海量的输入参数,因为图片的信息量太大了。海量参数的 “处理函数”,人是难以想象该如何计算的,但机器可以通过大量训练数据把它们找出来,就是把函数表示成类神经网络然后求解各个参数,这种 AI 学习也叫深度学习。

我们可以把 AI 当成目的,机器学习就是手段,而深度学习就是这些年新发现的手段,对生成式 AI 起到决定性的作用。

ChatGPT 回答问题的原理
大型语言模型 ChatGPT,就是这样一个有上亿参数的函数,根据用户的输入,能输出 “从没见过” 的内容,因此可以被认为它有创造力的。
从生成文本的角度来看,这个创造过程就像是玩 “文字接龙”:
比如输入 “中国最长的江河是” 什么?
1 回答第一个高概率的字是 “长”,然后把这个字加在问题末尾,输入 “中国最长的江河是长” 什么?
2 再随机产生一个高概率的字 “江”,然后把这个字加在问题末尾,输入 “中国最长的江河是长江” 什么?
3 这时产生的高概率结果是结束符,ChatGPT 就完成了接龙过程,最终回答 “长江。”
文字接龙产生的每个字就是一个分类过程,ChatGPT 回答问题就是把无限可能的选择变成了一系列的有限分类问题。

正因为 ChatGPT 每次接龙都是一个概率,所以生成的答案可能经常不一样。例如:

生成文本是一个序列符号,每一个符号就是 Token,这也是 ChatGPT 主要的计费单位。

我们以英文 Token 为例,不像很多人以为的那样 - 一个单词就是一个 Token。一个单词有可能按词根分为多个 token,比如 Unbreakable,会被拆分为 “un”,"break","able",这是 3 个 Token。
这样定义的原因是,英文单词无法被穷尽,现代社会不断有新词冒出来,而词根是相对稳定的。
不同语言模型的 Token 定义也是不一样的。部分语言模型会把中文的每个方块字设为一个 Token,但不是全部模型都这样。

为什么要基于概率接龙的方式生成答案?
能不能每次都直接使用训练语料中出现最高次数的字作为接龙答案?这样效果会不会更好?
科学界的答案是否定的。
每次用出现次数最高的字来接龙,生成文本虽然从语法上看都很严谨,但是不符合人类正常使用的习惯,因为它缺乏语言的多样性,不符合人类语言的内在属性。
语言模型通常会给格式良好的文章打高分,但是较长的生成文本往往是通用的、重复的和尴尬的。
自然语言很少连续出现高频使用词汇,它会不断转向低频且信息量更大的词汇,自然语言也不会陷入重复循环。
人类倾向于不陈述显而易见的事情,因此 “让每个词都尽量可预测” 是不受欢迎的算法。
其实,大语言模型也可以用参数(Temperature)来手动控制是否采用最高概率出现的词来作为接龙结果:
这个参数接近 0 时,就尽可能采用语料中接龙出现次数最多的词,生成的文本就更确定更保守,这种设置适合希望答案比较单一的场景。
它接近 1 时,就是标准的语言模型按概率生成的逻辑。
当它大于 1 时,模型就选择更随机的结果,倾向于探索低概率的接龙词,生成文本的多样性和创造性(或者说荒谬性)更高。

此外,最低概率的部分长尾生成结果也不建议使用,效果很差,建议直接废弃。这部分低概率结果数量庞大(数以万计),它会导致文本不连贯,上下文几乎无关。
最新研究也表明,GAN(对抗网络)生成的文本,在质量和多样性上也无法达到语言模型的生成水平。
参考论文:The Curious Case of Neural Text Degeneration

这就是 ChatGPT 为什么喜欢瞎扯的原因
因为它是基于概率的文字接龙游戏,因此对自己说出的内容不承担责任。
提问者如果在问题中有意误导它(比如根本不存在的节日),它也会侃侃而谈描述一大堆,中间的部分信息就是错误的(幻觉)。
参考:聊聊大模型的幻觉问题
那么,ChatGPT 做文字接龙时,怎么会知道历史信息呢?因为 ChatGPT 是一个多轮对话系统,它会把对话中过去收到的问题和已输出的答案,都放在一起进行接龙。
到今天,chatGPT 可以一口气读进的输入内容已经非常惊人了。

类似的我们也可以生成图片,图片就是由一系列像素构成,对像素接龙就可以产生图片。
这种按照固定顺序生成的策略叫做 Autoregressive Generation。
生成式 AI 的应用也不是今天才有,十几年前的谷歌翻译就可以被认为是一种生成式 AI。

ChatGPT 如何训练生成概率
简而言之,网络上取之不尽的所有文本都可以用来训练。ChatGPT 读到训练语料的每一句话里的每个字,都会提升这个字在接龙中出现的概率,并降低其他字的概率。比如读到 “你好美”,那么 “美” 的出现概率就会提升,其他可能出现的字(如高,壮,吗)的概率就会下降。

语言模型背后就是一个类神经网络 Transformer,拥有上亿个参数,它的作用就是对输入的句子输出一个几率分布。Transformer 内部的各个计算单元就是在做矩阵和向量计算(线性代数)。
在 ChatGPT 过往的版本演进过程,就是不断增加模型参数量的过程,也是不断阅读海量训练资料的过程。前者决定了 AI 的天赋,后者决定了 AI 的后天经验,两者缺一不可。

只学习海量网络资料有什么缺点
如果一个语言模型的训练仅仅只是大量学习网络资料,只做自监督学习(预训练),可能产生什么问题?
这就像一个只会读书,从来没有考试过的学生一样,在各类任务考试中成绩平平。因为掌握大量信息不代表理解用户(出题者)的意图,也就不能正确回答各类问题,这样大模型就无法实现 “安全地遵循用户指示 “的目标。
比如早期的 GPT,学到了网络上的各种考试资料,让它回答一段编码问题,它就 “以为” 要接龙出四个选项作为答案,而不是直接给出运行结果。
图片
因为 GPT 的回答效果差强人意,所以 Open AI 公司启用人类作为老师调教模型的阶段,直接提高人类认为满意的答案的权重,而不是不回答或者随意回答。
参考论文:Training language models to follow instructions with human feedback。

引入人类的强化学习
我们把早期的 GPT 模型叫做 “基石模型”,把人工监督调整到 ChatGPT 这个形态的过程叫做 “微调”,发生的改变非常小,但效果非常显著。就好像天资再好的选手,如果没有教练的指导,在激烈竞争中也很难有大的突破。
基于预训练的监督式学习,并不需要大量的人工投入和训练资料,就可以完成很多扩展任务,比如在很多不同语言中完成同一任务。基于上下文的学习能在模型的参数范围内吸收许多技能和任务,因此学习能力可能会随着规模的扩大而显示出类似的强劲增长。人类标注员基于一万笔训练资料就可以起到画龙点睛的作用。
除了监督式学习,人类标注员还可以使用增强式学习来提升模型效果,就是不提供完整的正确答案,而是给出 “好” 和 “不好” 的评价即可。依赖人类的增强式学习就叫 RLHF。

总结,GPT 的训练依次是预训练,监督式学习,RLHF。
语言模型需要具备足够的能力才适合进入第三步的微调,因为如果模型提供的答案总是很烂,人类无法挑选出相对亮眼的结果。
人类毕竟精力有限,但那么多问题都需要被标注,怎么提高效率呢?
其实人工标注员的标注习惯,可以被另一个模型来同步模拟。我们在数据集上训练一个奖励模型(Reward Model),以预测我们的标注员更喜欢哪个输出。当这个奖励模型足够准确时,就可以取代人工标注员的工作了,语言模型根据奖励模型输出分数的高低,来增大或减小对应答案的生成概率。

学术界把上面的第二,第三个步骤合起来起了一个名字:对齐(alignment),意思就是要对齐人类的需求(想起了阿里巴巴的黑话 - 对齐颗粒度 😊),这是 ChatGPT3.5 采用的核心步骤。论文里形象地把对齐中耗费的算力叫为 “对齐税”。
GPT4 和 GPTs
后面发布的 ChatGPT4 强化了视觉能力,能够看得懂图中的含义,并能够逐步推导,还能够自己生成代码和执行。

Open AI 开放了 GPTs,方便用户和企业搭建专属于自己的 ChatGPT,用户在 GPTs 后台上传了自己的背景知识文档,这个定制化的 GPTs 可以回答让通用引擎觉得莫名其妙的私人问题。

突然冒出一个灵感
智慧的生成是一个概率过程,正因为每次概率计算结果都不一样,才能产生有创意的内容,值得让人学习,而不是把人困在信息茧房里。


↙↙↙阅读原文可查看相关链接,并与作者交流