不易懂你打我!写给前端和小白的 大模型(ChatGPT) 工作基本原理!

872 阅读12分钟

本文承接上文打包票!前端和小白一定能明白的人工智能基础概念,强烈建议大家阅读一下,文章采用层层递进的超级白话的方式,让我们了解机器学习,神经网络和深度学习的关系和概念。

前言

实在是受够了很多文章写给小白的大模型工作原理的文章,看了还是觉得很多文章内部毫无逻辑可言,所以我觉得自己弄清楚后,写下这些留给跟我对这些文章同样一头雾水的伙伴!

从语言模型说起

首先大模型一定要有自己的语言模型,才能理解人类语言的基本逻辑关系,并且输出对应的回答也是我们能看懂的。那大模型的语言模型是什么呢?

这个语言模型简单来说就是:”预测下一个语素“(统计语言模型)。

什么意思呢,大家在使用输入法打字的时候,是不是很多时候,当你打一个字或者词的时候,输入法会帮你预测你下一个字是什么,这就是预测下一个元素,比如'鸡你太_',如果你是小黑子,就可能出现什么字呢,你猜猜。。。

你可能会疑惑: 我去,这么暴力?这还是 ai 吗?看起来不太聪明的样子?!回答就是,你还真别小看这个模型,小小手机能收集你的语言习惯,同理是不是当你给 ai 足够的训练资料的时候,ai 能学习到大部分人的语言习惯呢?

很多人肯定还是疑惑,人类语言这么巧妙,这种粗暴的方式真的有效?我们举个例子

假设这样一句话:他放下了书,因为它太_。

在太后面可能是“太重”,可能是“太难”等等常见搭配,也就是当大模型猜测,是重或者难的时候,很可能前面表达的内容表达的是一种让人很不舒服的感觉,也是从某种角度理解了重和难在现实中的意思。

我们再来想一下,这个"太"字,在大模型见过的语料够多后,它会慢慢发现,原来"太"这个字后面经常跟形容词,这算不算某种程度上学习到了人类语言的语言规律呢?

但这里问题来了,要大模型理解基本的词性之前,比如一个词是形容词,还是名词,是不是计算机起码先要做基本的分词,然后分词之后,然后建立一套模型,让这些词语之间建立联系,例如词性是什么,例如它跟其它词有什么关联。

这样才能在自己输出"太"字的时候,知道后面往往跟 或者其它意思。

在解释这些词如何建立联系的之前,我们必须弄清楚计算机本身是如何处理文本的!

计算机如何处理文本

计算机本质上就是计算器,它只能计算,无法理解文本,例如字母a,在ascii编码中,在计算机中用97来表示,比如让计算机算 字母a 和b的大小,只不过是在计算机内部比较了 9798 的大小而已。

同理,大模型也需要把文字转为数字来处理(为什么?因为计算机只能计算数字!),例如”人“在计算机中如何表示,是不是可以这样,用一个数字填充的数组:[0,175,60,20]

  • 数组第一位,0代表男生,1代表女生
  • 数组第二位,175代表身高
  • 数组第三位,60表示体重
  • 数组第四位,20表示年龄

这样就在 4 个维度描述了一个人,假设有这样一个数据,[0,170,50,20] ,在四维空间中其实跟上一个人产生了联系,因为他们都是人,只不过身高和体重不一样。

所以一些大模型让词之间产生了联系,有时候会得到类似有趣的反馈:

国王 - 男人 = 女王

也就是在数学维度上跟现实世界有了映射关系。

但因为现实世界特别复杂, 所以一个词的维度有非常多。我们这里只是很粗暴的用了 4 个维度,正常大模型可能认为一个词的维度能上千或者上万,这取决于大模型自己的算法如何理解这个世界。

我们刚才描述一个人用的一个数组 [0,175,60,20],我们就可以简单理解为这个值叫向量值。

接下来新的问题又来了。如何给某个词设置合适的向量值。

设置合适向量值的过程,专业术语叫嵌入(Embedding),目的提取文本的特征,这里有特定的算法来解决,因为我也不是这方面专业人员,这里不做过多介绍,有兴趣的同学可以去搜索词袋模型,TFFIDF

在给这些词语标注特定向量值的过程,使用的技术方法不同,最终效果也不同,比如 ChatGPT 使用了一种叫做“上下文词向量表示法”,这个方法标注的每个词的向量值不仅取决于这个单词本身,还取决于这个词在不同上下文中的意思。

例如 苹果 这个词讨论水果和电子产品(苹果手机)时的含义是完全不一样的。这就是很多文章说的自注意力机制

那解决了基本词语在计算机中如何展示,并且映射现实语义的情况下,我们就该开始训练大模型能解决实际用户提出的问题了。

这个过程就叫 预训练

gptp 就是 pre–trained,预训练的意思,也就是要通过大量语料来给它学习,然后通过训练让其找到语言中很多词语搭配的规律。然后生成答案,这就是 gpt中字母 g 的意思,generative的意思。

所以接下来,我们讲讲 预训练

预训练

我们刚才说了,这种统计语言模型,是靠猜下一个字是什么来生成文字给用户的。这个训练的目的,就是让大模型知道"在什么情况下,下一个字应该是什么"。

所以预训练的过程,还会不断调整 向量 的值,让大模型不断调整哪些词在哪些维度上是有关系的,所以才能正确预测出下一个词。

什么是预训练?

想象一下,我们要培养一个文学大师

预训练 = 让这个大师博览群书的阶段

在这个阶段,我们给模型喂食海量的文本数据——包括维基百科、新闻文章、小说、科技论文、论坛讨论等等。但注意:这时候我们不教它完成任何具体任务,比如回答问题或者写邮件。

我们只让它做一件事:不断地猜下一个字

预训练的具体过程

输入:"今天天气真"
目标输出:"好"  // 模型要猜出这个字

输入:"人工智能是"
目标输出:"未"  // 接着猜"来"等

输入:"中国的首都是"
目标输出:"北"  // 接着猜"京"

这个过程就很像完形填空,让 ChatGPT 不断的猜。

就这样,模型在数万亿个这样的例子上进行训练,逐渐学习到:

  • 语法规则:"的"后面通常跟名词
  • 常识知识:"北京是中国的首都"
  • 逻辑推理:"因为下雨,所以..."后面可能是"带伞"、"取消活动"
  • 文体风格:论文和社交媒体的语言风格差异

总而言之,不断地猜下一个字的过程中,逐渐掌握基本的语言规律和表达能力。

当然这些猜过程中,ChatGPT 肯定不会百分百的都能猜对,尤其是 ChatGPT 1.0 的时候,经常会猜错。所以预训练之后,还会有些一些调整,这时候就需要人来再次对 ChatGPT 填词结果进行纠正。

猜错的情况下,人(训练师)会告诉 ChatGPT 正确的结果,这样,ChatGPT 内部就会不断调整各种参数(权重),来让这些向量值回归到在各自维度更合适的值。

如果你看过我上一篇文章,一定要理解权重这个概念,其实chatGPT的训练过程,同样是在调节权重:

我们这里解释以下,权重大概在训练中的意义:

理解权重的例子

为了更好地理解“权重”的作用,我们举一个简单的例子。假设大模型正在学习“天气炎热时,人们倾向于吃什么”这个语言规律。模型需要判断“天气炎热时,我想吃___”这句话中空白处最可能的词。

模型内部可能会为每个候选词分配一个权重,表示这个词与“天气炎热”的关联程度。例如:

  • “冰淇淋”的权重可能是 0.9
  • “火锅”的权重可能是 0.1
  • “西瓜”的权重可能是 0.8

权重的意义
权重越高,表示模型认为这个词在当前语境下出现的可能性越大。比如“冰淇淋”和“西瓜”的权重高,是因为训练数据中“天气炎热”经常与这些词一起出现;而“火锅”的权重低,是因为它更常出现在寒冷天气的语境中。

训练如何调整权重
如果模型在预训练时输出了“火锅”,而人工纠正为“冰淇淋”,模型就会通过算法降低“火锅”的权重,同时提高“冰淇淋”的权重。这个过程反复进行,直到模型的输出符合语言规律。

这就是 ChatGPT 的训练过程(预训练)!

ChatGPT 训练时:

  • 输入大量文本
  • 预测下一个词
  • 如果预测错了 → 调整权重
  • 重复很多次次 → 输出符合语言规律的结果

可仅仅有这些依然解决不了一个问题,就是如何让大模型记住之前内容。什么意思呢,我之前举了例子,说手机打字程序能记住我们上一个词是什么,所以记住了我们经常输入的下一个词,也就是输入法记住的内容不多,也就跟我们当前输入相关的一个词。

这也是之前大模型的一个问题,就是它们无法联系更多的内容,因为 ChatGPT 实际上要联系的不仅仅是用户的提问,自己输出的内容,也要记住,这样才能保持自己输出内容都相关。

这个使用的 GPTtransformer 的来解决的。

ChatGPT 为什么突然这么聪明?

我们前面一直在说:大模型预测下一个字,用的是“上下文词向量表示法”,也就是一个词在不同上下文里的含义不同。

问题来了:

模型如何知道“上下文”?
也就是说,它怎么知道一句话里哪些词应该互相影响?

这就是 transformer 出场的时刻了。

GPT 里的 T = Transformer,它是这十年来让所有大模型突然变强的“关键武器”,可以说是整个大模型爆发的核心技术

下面我们用最简单方式讲明白它到底在干嘛。

Transformer 到底是啥?

Transformer 是一种让大模型“能记住很多内容、能理解上下文、能并行高效训练”的神经网络结构。

你可以把它理解为:让 ChatGPT 能理解长文本、保持上下文一致的重要原因

如果没有 Transformer,就不会有现在的 ChatGPT、Gemini 等等。

模型如何“记住”之前的很多内容?

比如你问:

小明吃了一个苹果。他觉得味道很好。请问“它”指什么?

模型需要记住 前面两句话 才能回答。

传统模型(RNN/LSTM)的问题是:

  • 每次只能看一点点上下文
  • 越往前的内容越容易“忘记”
  • 训练时必须一条条顺序读,很慢

于是 —— Transformer 出现了。

Transformer 的核心:自注意力机制

“注意力机制”本质是一句话:

让模型自己决定要关注句子的哪些部分。

比如一句话:

"他放下了书,因为它太重了。"

模型要判断 “它” 指啥,就会自动对“书”这个词分配更高的注意力权重;
要理解“太重”,就要关注“放下”和“书”。

这就像人阅读一样:

你的大脑会自动把相关的信息连起来。

Transformer 把这种“关注相关词”的能力数学化了。这个就跟我们之前的向量有关了,我们处理好了一个词在各个维度跟别的词的相关性,所以此时查询到底一个词跟当前已经输出或者输入的词关系最密切,就可以查询得到。

Transformer 的原理咋们不探究,理解其最核心的机制足以让小白理解为什么 ChatGPT 最开始火的那段时间,跟之前的大模型拉开很大差距的原因了。

同时,Transformer 极大的提高了模型的处理速度

以前的模型必须按顺序:
A → B → C → D

Transformer 不用顺序处理,一次就读所有词:
[A, B, C, D] 一起进模型

这让训练速度 提升百倍

小结

我相信文章内容虽然没有很多专业人士高大上的描述,但用于入门 ai 基础知识,算是足够白话了!感谢大家!

我的 ai 学习记录