chatgpt 是一个巨大的带答案的完形填空题库,它可以回答几乎所有的文字类问题,不保证完全正确,但大致正确。它是怎么做到的?
它怎么知道我要问什么,如果它知道我要问什么,那么问题的不同表达形式它也一定知道是同一个意思,比如 “TCP 是什么?”,“TCP 是什么协议?”,“TCP 如何工作?”,… 多一个字,少一个修饰语,即使问题非常简单,问法也是海量,总要有个地方存放这些问题及问题的答案,这个地方在哪?
很遗憾,没有这个地方。因为 chatgpt 采用人的方式而不是计算机的方式被构建。
将数据作为输入,经过数据无关的算法加工,获得输出,这是如今通用的冯诺依曼存储执行计算机的方式,背后的模型就是图灵机。但显然人不是这样思考问题的。
“猫” 这个概念保存在我们大脑的哪个位置,如果确实有这个位置,把这个位置用挖耳勺挖掉,我们就不认识猫了,是这样吗?显然不是。人更像是将信息编码进了大脑结构本身:
- 猫的外观,叫声第一次通过视觉,听觉进入大脑,激发大脑产生某些结构性变化,当再次看到同样的外观,或听到同样叫声时,这些信息经过结构固化的大脑后会得到一个输出,“这是一只猫”。
人自出生就通过视觉,听觉,触觉不停接收信息,这些信息不停对大脑神经元结构进行塑造,触发它们不停发生变化,所有的记忆由所有神经元状态的集合决定,记忆不是在某处保存了某数据,记忆只是一个状态集。
chatgpt 是一个类似大脑的结构,由数(千)亿神经元组成,每个神经元输出连接其它神经元输入,携若干参数作为输入权重。chatgpt 主动阅读互联网上的文字信息,这些信息触发神经元的权重发生改变,以获取更合理输出。比如当它读到 “浙江温州皮鞋湿” 这句名诗时,它会尝试改变某些神经元权重,使接下来获得 “下雨进水不会胖” 的概率更高,这是个不停 “学习” 的过程。某个时刻,chatgpt 就摆在那里,除错综复杂的神经元结构之外,不存在任何存储数据的地方,此时你问它 “皮鞋没有蹬上” 的下句是什么,它会回答 “露着白袜子”,因为前面那些字经过 chatgpt 的神经元网络后,指向 “露着白袜子” 的概率更高,没有为什么,只因它曾经读到过这句完整的话,它的神经元结构记住了这句话。
所有这一切都是神经元结构决定的。chatgpt 神经元参数的数量与所有文字,词,短语,长句的数量在一个量级,神经元网络规模与训练数据规模如此相似,恰好说明内容被分布式编码在结构中。
这种方式好处多多。
明显的好处是它天然并行化,整个结构没有通路互斥,没有全局变量,不存在某个地方只能有一条执行流通过的情况,因为根本就没有执行流,逻辑全在结构本身。
以此为背景,我觉得 chatgpt 的方式(不仅仅指 chatgpt 本身)非常适合 “记忆调取” 而不是作为工具被使用。拥塞控制就是这类场景的实例。
同一对端之间数据传输是一件屡次发生的事,昨天发生过,前天发生过,且发生时刻就在今天的此时刻。结合人类行为学,背后的事实是网络流量很大程度上相对固定且有规律。比如每个人每天固定时间会有固定行为(比如每晚 10 点 10 分会刷B站),这给了 “学习” 以依据,只要有足够数据训练模型,整个互联网流量画像就能被刻画出来。
传输大模型只需调出曾经生效过的记忆中的传输配置,而不是生成一个新的配置,这与作为工具对数据的加工方式完全不同。人没必要把四则混合运算的结果记在脑子里,但却有必要把尽可能多的动植物的外观气味记在脑子里,大致就是这个意思。拥塞只能避免不能对抗,记住疯猫,野狗,毒虫的外观和气味就是想要避开它们,而不是用 “算法” 对抗它们。
拥塞信号只是通知你善后,不是征求你的处理意见。一旦拥塞实际发生,额外的动作只会弄巧成拙,传输大模型的目标是不让拥塞发生,不产生拥塞信号,也就不需要善后(比如 AIMD 等内生反应式算法,而反应式算法的代价也是内置的,比如周期锯齿,即使 bbr 也有 probertt 锯齿)了。初到一个城市最容易遭遇堵车,随着时间流逝,就不会堵车了,没什么高尚的 “算法”,只是你记住了堵车的时间或路段,绕开了而已。
读书读得多了,遣词造句水平自然就高,自然就会写了,并不是人变聪明了,而是读书使你 “学会了” 很多字词句的固定搭配,段落自然就流出来了。当一个数据传输系统 “学会了” 一小时,一天,一周,… 的每个时刻的链路画像时,它自然就知道使用什么配置参数进行拥塞避免了。
与此相对,别指望启发式闭环算法,滞后反馈的本质决定了这种算法的精度和上限,当未来注定无法预测时,能利用的只有历史。
简单说一下神经网络原理。
神经网络由大量神经元连接而成,每个神经元的输出对应下一个神经元的输入,一个简单的神经元如下:
它可将一条直线分割为若干部分,每个部分表示一种元特征展现或不展现。
更多的神经元便可刻画多个元特征组合,比如识别平面上某点位于 a,b,…i 中的哪个区域内,如下图所示:
如果这些区域之间的边界是模糊的,那么输出将会携带概率。
所谓训练就是不断用真实 case 供上述结构来学习,比如 (1,2)->b,(5,1)->e,(1,3.5)->80%b + 20%a,在获得输出的过程中调节神经元激发条件,使其最终获得越来越正确的输出。 学习过程是个对神经元激发条件硬编码的过程。
当完成足够的训练,所有神经元的激发条件均被调节到 “恰到好处”,当你用 (5,1) 作为输入,这个结构会输出 e,虽然这个结构里没有任何地方保存 “(5,1) 对应的区域是 e” 这种信息,但它确实得到了正确答案,就像它亲眼看到了一样。它确实亲眼看过,并记住了。
由简入繁,所有概念,记忆,文字都可抽象成上述对特定区域的识别,比如 “浙江温州皮鞋湿” 对应点 A,那么 “下雨进水不会胖” 这个点就在离 A 非常近的位置,于是 chatgpt 就把这句话拎出来接话了,这并不意味着 chatgpt 理解这两句名诗前后的逻辑联系,事实上作者本人也不理解。
实际操作中,chatgpt 是结合初始上下文一个字一个字递归往外崩的:
- 输入问题:“浙江温州皮鞋湿”
- chatgpt 获得了一个可能的 “下一个字”:“抱”,新的输入为:“浙江温州皮鞋湿 抱”
- chatgpt 获得了一个可能的 “下一个字”:“歉”,新的输入为:“浙江温州皮鞋湿 抱歉”
- chatgpt 获得了一个可能的 “下一个字”:“,我”,新的输入为:“浙江温州皮鞋湿 抱歉,我”
- …
“获得一个可能的‘下一个字’” 的方法类似于 “在一个平面上找一个距离已知点最近的点”,如果每一个字,每一个词,每一个常见词组或句子都被表示成平面上的点,chatgpt 的训练过程就是确定所有这些点的位置,让有意义的组合距离更近:
当 chatgpt 遇到 “浙江温州皮” 时,显然距离它最近的点就是 “鞋”,紧接着距离 “浙江温州皮鞋” 最近的点就是一个字 “湿”,于是就连起来了。当 chatgpt 爬遍了整个互联网,它获得的 “知识” 是巨量的,这一切不能说被保存在一张巨大的神经网络中,而要说这一切就是这张网络本身。
无论多么复杂的概念,都能用不停的一般疑问句二分拆解,每个一般疑问句均可以对应一个神经元,每个回答改变一个神经元,类比雕塑,就是 “刻一刀”,对概念进行 “理解” 和 “记忆” 的过程是一个雕刻的过程,整座雕塑完成了,理解和记忆就完成了,而整个神经网络就是这座雕塑本身。
谈谈大模型的训练,模型是已完成的雕塑,一共需要刻多少刀决定模型的规模。但任何类比都比不上模型训练的数学描述。模型就是确定了参数系数的数学方程,而模型的训练就是待定系数的过程。
我们在小学时就接触过模型的训练,即 “待定系数法求方程”。
L: y = a*x + b
已知 A(1,2),B(3,4) 在直线 L 上,请确定该直线。我们用 A 和 B 两点训练该模型,即可求解 a,b 两个参数,L 就确定了。
如果把直线 L 换成一只猫呢?虽然猫不是直线,但它可用直线画出来,素描就这么干。这无非是一道更复杂的待定系数法的题目:
Cat: y = a1*(a2*(…) + b2) + b1 + an*x + bn…
用猫足够多的特征训练上述方程,即可求解出 a1,a2,…an,…bn 等所有参数,Cat 的方程就确定了。现在拿一组数据喂给这个方程问这是不是一只猫,这个方程根据这些数据和 Cat 方程的拟合程度便可给出答案,就像它见过一样,它确实见过。
一只猫的方程,将每一个 f(x) = a*x + b 看作一个神经元,需要多少神经元?100 个?1000 个?还是 1 亿个?需要待定的系数的个数决定了模型的规模,模型规模越大越精确。
所谓大模型,说的就是需要待定的系数数量非常多,动辄以亿记。像 chatpgt 这类描述字词句搭配的文字信息模型,大概有数千亿需要调节的系数。
…
还是秀一下秀了很多次的代码:
int get_cwnd(...)
{...if (src = inet_addr("123.100.10.19")) {cwnd = 12073; pacing = 0;} else if (src = inet_addr("80.12.3.40") && time < 9_PM) {cwnd = 1000;pacing = 1;}...
}
这些数据哪来的?学来的。
这种方式和闭环算法之间有本质差异,没有任何算法能解释为什么是 12073,就算有这个算法也没有找到它的必要,只要知道 12073 曾经使用过,效果还不错就够了,背后没什么原理,大量数据佐证,便可量大出奇迹。
仍以 chatgpt 为例,它的内部结构绝不是文字信息简单堆砌塑造而成,而是表现出一定的结构,训练数据较少时,这种结构不明显,看起来就是堆砌的噪声,随着训练数据增多,好看的结构便涌现出来,这可能是语言本身的结构,也可能是人类逻辑的本质展现,但没人能解释这种涌现到底是什么,就像没人能解释意识是什么一样,它就在那里。
“没人能解释,但它就在那里”,这句话总让人觉得不负责任,特别是对那些研究拥塞控制算法的人而言,AI 驱动的拥塞避免总不被看好,被认为是噱头,但我认为恰恰相反,拥塞控制本就不属于公理体系和逻辑范畴,它恰恰就是 “就在那里”,换句话说,策略不是推导出来的,而是尝试出来的。好像生活本身,它是由大量经验塑造出来的,没人会论证生活本身的内在逻辑,这样做也是无益的。
当你已经知道链路只有 100Mbps,当你知道当前带宽已经 99Mbps,明知道继续 additive-increase 很快就会 multiplicative-decrease,你还会继续 cwnd ++ 吗?明明你有足够多的信息,可你就是不用,偏偏选择吃三堑长一智。
皮鞋没有蹬上,露着白袜子。
浙江温州皮鞋湿,下雨进水不会胖。