ChatGPT 的本质
函数的本质
在中学时我们都学过函数,通常都是给定一个输入 x,然后通过某种规则 f 进行计算,得到输出 y,即 y = f(x)。
而 ChatGPT,从数学上的层面来看,也是一个函数:回答 = ChatGPT(问题)
问题 -> x,ChatGPT 执行计算 -> f, 返回回答 -> y
但 ChatGPT 有一个区别,上面的函数里的参数通常只有几个,比如 y = 2x + 3 里只有两个参数:系数 2 和常数 3。而 ChatGPT 有 1750 亿个参数。(GPT-3 版本为例, 后面的版本不再公开参数细节)
可以把这 1750 亿个参数想象成有一个巨大的控制面板上有 1750 亿个可调节的旋钮,每个旋钮都会影响最终的输出,这 1750 亿个旋钮(参数)共同决定了 ChatGPT 如何理解语义、如何组织逻辑、如何选择措辞。
回答 = f(问题, 参数1, 参数2, 参数3, ..., 参数175000000000)
也就是本质上是一种确定性的输入-输出映射关系,只是极其复杂。
参数是什么
参数是存储知识的容器。
- 有些参数记录了“主语后面通常跟动词”。
- 有些参数记录了“苹果公司是一家科技公司”。
- 有些参数记录了“悲伤的情绪通常用某些词汇表达”。
参数/参数的组合编码了语言的某种规律。
每一种语言现象,每一点世界知识,都需要一些参数来存储和表达。
为什么需要这么多参数
为什么需要这么多参数呢?因为语言太复杂了,每一个维度,都需要大量参数来捕捉。
语言的世界里,近义词之间有微妙的差异,同一个词在不同语境下意思完全不同。
还有成语俗语背后的文化典故,医学、法律这些专业领域的术语。
以及说人说话时的那种感觉,褒义贬义、正式口语,模型都得学会分辨。
有人做过一个粗略的估算:人类语言中有数十万个词汇,数百万种常见的词语搭配,数千万个事实性知识,数亿种可能的句子结构……要让模型"理解"这一切,1750 亿个参数,可能还不够。
语言复杂性的几个例子:
- 一词多义
“这本书很重” -> 重量大
“这件事很重要” -> 重要
同一个重字,在不同语境下,意思完全不同。人类能够理解的意思,模型需要参数来捕捉这种微秒的差异。
- 指代消解
指代消解,就是判断代词(比如:“他”、“它”、“这个”等等)具体指代什么。
比如:“小明买了一个苹果手机。它的屏幕很大。”
它指的是苹果手机,不是小明,也不是水果苹果,这对于人类很容易理解,而模型需要参数来追踪这种指代关系。
- 隐含的常识
“他把玻璃杯掉在地上,碎了。”
这里指的是玻璃杯碎了,不是地板碎了,这需要常识:玻璃杯易碎、地板不易碎。模型需要参数来存储这些常识。
- 语用学
“你能把窗户关上吗?”
这里表面上是一个疑问句,实际上是一个请求,甚至隐含着不耐烦的情绪。模型需要参数来理解这些语用规则,甚至需要结合上下文,来推测出是否有不耐烦的情绪。
可以解方程吗
既然 ChatGPT 是一个函数,有 1750 亿个参数需要确定,那为什么不能像我们在学校学的那样,用解方程组的方法来求解这些参数呢?
有以下几种原因:
- 方程太复杂
相对于中学的方程组而言,中学的方程组是线性的如:2x + 3y = 10
而 ChatGPT 的“方程”是 96 层嵌套的非线性系统:
输出 = 第 96 层(...第 2 层(第 1 层(输入)))
其中每一层都有数十亿个参数,且包含 ReLU 这样的非线性转换。
这是一个极度复杂的非线性系统,没有公式可以直接算出答案。
线性:输入和输出成正比关系,如:买 1 斤苹果 5 元,买 2 斤 10 元 -> 成正比。
非线性:输入和输出的关系有转折,如:
- 学习时间与成绩:从 0 小时到 1 小时,成绩大幅提升;但从 10 小时到 11 小时,可能几乎不增长了。
- 药物剂量:1 粒没效果,2 粒有效,3 粒可能中毒 → 不是简单的翻倍关系。
- ReLU 函数:负数全部变成 0,正数保持不变 → 在零点有个"拐弯"。
为什么 ChatGPT 需要非线性?
因为语言规律不是简单的正比关系。比如"喜欢"这个词:
- 在"我喜欢你"里是亲密
- 在"我喜欢吃苹果"里是偏好
- 在"我喜欢得很"里是讽刺
同一个词,不同语境意思完全不同。这种复杂关系必须用非线性函数来表达。
- 计算量无法承受
即使理论上能列出方程组,求解 1750 亿个未知数的方程组:
传统方法(如高斯消元法)的计算复杂度是 O(n^3)。对于 1750 亿,就是 (1750 亿)^3 的计算量。
这个数字大到宇宙中的原子数都不够用来计数,更何况随着大模型的更新,参数量可能还会更加的庞大。