一种观点认为:GPT 4这种LLM模型仅仅学会了语言中的单词共现等浅层的表面统计关系,其实并未具备智能,只是类似鹦鹉学舌的语言片段缝合怪而已
支持者:AI圈子里的大佬代表是LeCun,语言学界代表人物是乔姆斯基
另外一种观点则认为:GPT 4不仅学会了语言元素间的表面统计关系,而且学到了人类语言甚至包括物理世界的内在运行规律,文字是由内在智能产生的,所以LLM具备类人智能。
支持者:OpenAI、Hinton、马斯克
一个数据压缩的假想实验:地球与火星间数据传输问题
假设小帅和小美分别住在地球和火星,现在小帅获得一批机密数据 $D=(x_1,x_2,...,x_n)$,需要以最小传输成本传送给远在火星的小美,小帅计划通过 LLM 模型比如 GPT 来对数据进行压缩,然后把压缩后的数据传给小美,以此来减少传输数据数量。同时,他希望信息压缩是无损的,也就是说,小美要能够根据拿到的压缩数据,利用一定方法完整恢复原始数据 $D$,不能有任何差异。
这个事情看似不太容易做到,怎么办呢?首先,小帅把 GPT 模型的代码 $f$:包括代码本身、初始化方法以及随机种子等信息传给小美。小美根据小帅传过来的 GPT 模型的信息,利用同样的代码、初始化方法以及随机种子,复制并初始化了一份自己的 GPT,以此来让自己手上的 GPT 模型和小帅手上的模型在初始状态保持一致。
接下来,小帅以 Next Token Prediction 作为任务,以 $D=(x_1,x_2,...,x_n)$ 作为训练数据,启动 GPT 模型的训练过程,训练过程本身其实就是数据压缩过程。我们假设小帅已经对数据 $\lt x_1,x_2,...x_{i - 1}\gt$ 通过 GPT 进行了压缩,对应的压缩数据为 $\lt z_1,z_2,...z_{i - 1}\gt$,并将这批压缩数据陆续传给了小美,现在准备传送数据 $x_i$。我们在这里按下慢放键,仔细观察下 GPT 是如何对数据 $x_i$ 进行压缩编码和解码的。
我们的目的是利用 GPT 压缩 $x_i$ 数据。小帅以$<x_1,x_2,\dots,x_{i - 1}>$作为 GPT 的输入,利用当前版本的 GPT 模型 $f_{i - 1}$做一次 Next Token Prediction。假设 Token 词典是 $V$,则 GPT 模型经过 Next Token 预测,产生了词典 $V$ 中每一个单词的生成概率,$V$ 中有些单词生成概率大,有些生成概率小,所有单词的生成概率之和为 $1$,于是形成$|V|$的概率分布 $P_i$。若设原始数据 $x_i = Hello$,此时,可以利用某种数据压缩算法,比如算术编码(Algorithm Coding,AC),根据 $x_i$ 和 $P_i$,将 $x_i$ 压缩成数据 $z_i$(至于算术编码如何运作,稍后会说明),即 $z_i = AC(x_i,P_i)$,于是小帅可以把得到的压缩编码 $z_i$ 传给小美。
另外,如果 GPT 根据上文$<x_1,x_2,\dots,x_{i - 1}>$做 Next Token 预测得到概率最大的单词不是标准答案 $x_i = Hello$,说明模型训练得还不够好,于是小帅让 GPT 执行一次反向传播,来修正 GPT 模型参数,希望以后 GPT 遇到类似上文能够更准确地做出预测。经过反向传播,模型参数发生变化,GPT 模型从 $f_{i - 1}$修正到了 $f_i$ 版本。
可以看出,上述过程,其实就是针对某个 Token 做的一次标准的 GPT 训练步骤,只不过我们平常训练 GPT 的时候,不会将根据 Next Token Prediction 得到的分布概率 $P_i$ 以及算术编码来获得 $x_i$ 的压缩编码 $z_i$ 记录下来而已。如果你愿意,完全可以在训练过程中一步步产生每个 $x_i$ 对应的 $z_i$ 并把它们记录下来:这样就会获得数据 $D$ 的一份无损压缩编码版本。
接收到小帅传来的压缩编码 $z_i$ 后,小美希望利用自己手上的 GPT 模型来恢复原始数据 $x_i$。她也可以用算术编码来逆向对 $z_i$ 进行解码,但是,若想解码 $z_i$ 信息不足,除了 $z_i$ 外,还需知道 $x_i$ 对应的词典 $V$ 中单词的概率分布 $P_i$,但是小帅并没有把 $P_i$ 传过来,因为这个信息量太大,传过来很不合算,如何是好?
小美可以用自己手上的 GPT 来产生缺失的词典单词概率分布 $P_i$:她把之前已经解码出的 $<x_1,x_2,...,x_{i - 1}>$作为模型的输入,让自己手上的 $f_{i - 1}$版本 GPT 模型做一次 Next Token 预测:于是 GPT 模型产生了单词概率分布 $P_i$,这个与小帅的概率分布 $P_i$ 是一样的。得到 $P_i$ 后,小美可以利用算术编码对 $z_i$ 解码,即 $x_i = AC(z_i,P_i)$,这样就恢复出原始数据 $x_i = Hello$。类似的,如果小美手上的 GPT 此次 Next Token 预测最大概率单词不是 $x_i = Hello$,她也让 GPT 执行一次反向传播,修正模型参数,将 GPT 模型从 $f_{i - 1}$版本修正到 $f_i$ 版本。只有这样,小美才能保证自己手上的 GPT 模型和小帅在传输过程中始终保持一致。
可以看出:解码过程,其实就是小美也同步进行 GPT 的一次训练步骤,并利用 Next Token Prediction 得到的词典单词概率分布 $P_i$,来帮助从压缩数据 $z_i$ 解码到原始数据 $x_i$。如此这般,小帅和小美就通过两人同步进行 GPT 在 $D$ 上的模型训练过程,完成了对数据 $x_i$ 的压缩和解压,只要不断重复上述过程,小帅就能把 $D$ 中所有数据无损地传送给小美,实现了通过 LLM 对数据的无损压缩和解压。所以我们可以说,GPT 模型的训练过程,其实就是对训练数据的无损压缩过程,只不过我们平常训练的时候跳过了这个步骤而已。
1. A 和 B 同步一下初始状态: f=(code of GPT, config (including vocabulary V) of GPT, random seed, initial hyper-parameters)
2.
def encode(f_0=f, D=(x_1, x_2, ..., x_n)):
D_z = []
for x_i in D:
P_i = f_{i-1}(x_1, ..., x_{i-1})
z_i = AC(x_i, P_i)
f_i = f_{i-1} with one-step loss(x_i, P_i) optimization
yield z_i # we only send z_i, not P_i or f_i
D_z += [z_i]
return D_z
def decode(f_0=f, D_z=(z_1, z_2, ..., z_n)):
D = []
for z_i in D_z: # recieving z_i
P_i = f_{i-1}(x_1, ..., x_{i-1}) # using D
x_i = AC(z_i, P_i) # using D_z
f_i = f_{i-1} with one-step loss(x_i, P_i) optimization
D += [x_i]
return D