文章大纲如下:
引言
第一部分:人工智能的起源
第二部分:实现人工智能的两种思路
第三部分:神经网络:强大的学习黑箱
第四部分:如何训练神经网络
第五部分:泛化能力
第六部分:深度学习的局限性
第七部分:GPT与大语言模型
第八部分:AI会让我们失业吗
前方预警:本文大概有2.87w字左右,内容非常的干,生动有趣,图文并茂,想了解人工智能的过去和未来和局限性是一篇很不错的材料,废话不多说,看完文末有彩蛋
引言
人工智能、机器学习、神经网络,这些听起来高大上的词汇,你是否还一知半解?GPT、大语言模型、生成式AI,这些频繁出现在商业报道乃至日常生活的前沿技术,你是否好奇它们的发展渊源和基本原理?万物皆可AI的时代,你是否担心被割韭菜或者被动失业? 这篇文章耗时一个礼拜打磨,专为零基础的小伙伴打造,用大白话讲明白人工智能的来龙去脉。
我是深耕互联网7年互联网老兵,我的梦想是让每个有想法、有行动力的超级个体都能拥有专属的AI智能体,提升效率,放大价值。目前正在从事深度学习理论的研究,AI提效方面的,还望点赞多多支持。看不完可以收藏或者关注我,之后慢慢看。
以下内容根据一个清华大学人工智能专业在油管很火的一个up主的视频内容整理而成,可能会有一些错别字,如有发现还请斧正,旨在为零基础的观众系统性地梳理人工智能、机器学习、神经网络、GPT和大语言模型以及扩散模型的来龙去脉与核心原理。我们将通过清晰的结构和图文结合的方式,带您走进AI的世界。
第一部分:人工智能的起源
达特茅斯会议:AI的起点
1956年,一群科学家齐聚达特茅斯,开了一场会。这场会议持续一个多月,一共只有十来个人参加,但个个都是大佬。他们包括:达特茅斯的数学系教授麦卡锡、哈佛大学数学与神经科学研究员明斯基、IBM主管罗切斯特、信息论发明人香农等人。
但就是这样一场很小的会议,深刻地改变了几十年后世界的样貌。八年前战胜李世石的AlphaGo,如今能帮我们解决各种日常问题的GPT,本质上都起源于这场会议所发起的研究:如何制造出一种可以不断学习并模拟人类智能的机器呢? 这个领域在2018年拿到图灵奖之后,又在2024年一举斩获了诺贝尔物理奖和化学奖。
是的,这个领域就叫人工智能,而这场会议也被视为开创人工智能的起点——达特茅斯会议。
什么是智能?
人工智能,说白了就是人工搭建起一套智能。要实现这个目标,首先就要回答一个非常根本的问题:
什么是智能? 我们想想,生活里什么时候我们会觉得一个物体有智能呢? 比如说,我们跟狗狗说话,让它坐它就会坐下,让它叫它就会叫两声。你骂它两句,它就会一脸委屈地盯着你。此时我们会觉得,哎,这只小狗很聪明,有灵性。有灵性本质上就是说狗是一种有智能的生物,和石头什么的都不一样。你无论怎么叫一块石头,它都无动于衷,所以是一个死物。 正因此,尽管有关智能的定义千千万,但它们都逃不开这样的核心:智能本质上就是通过收集信息,对于不同的情景做出针对性的反应。
中学有一个很有意思的小实验,那就是观察草履虫的应激行为。在另一端滴上肉汁,草履虫就会跑过去;而加上几粒盐,它们就会四散逃跑。正是这种针对环境的变化、趋利避害的运动,让我们相信这些水中的小颗粒是一种有智能的生物,而不是无生命的灰尘。 事实上,如果你看到有一些草履虫没有了趋利避害的反应,这就说明一个很简单的道理:它们死了,智能随着生命消失。
人工智能的本质
既然智能说白了就是看情况做事,那么所谓人工智能,同样就是搭建起一个根据不同的环境信息,给出针对性的输出和回应的系统。这个输出可以是动作、语言,也可以是一种判断和预测。 比如说:
•人脸识别可以根据不同的人脸,针对性地反馈出不同人的身份信息•AlphaGo可以对于各种不同的复杂棋局的情况,给出最佳的下法,争取胜利
•GPT可以根据上文不同的问题和任务的要求,针对性地跟你说话并解决问题 因此,它们都是智能。
设想一下,如果人脸识别把所有的人都认成了张三,AlphaGo在棋盘上到处乱下,GPT的回答牛头不对马嘴,那这个AI的全称应该叫Artificial Idiot(人工智障)。 总而言之,智能的本质就是一个不会乱来的黑箱,或者用数学一点的说法:智能就是找到情景信息的输入和我们想要的聪明的行为输出之间的函数对应关系。 这里给大家听一段来自美国的老爷子Thomas Garrity激情四射的演讲,相信你会对这个函数有更深的体会:
"The world, everything is described by functions. The sound of my voice on your eardrum, function. The light that's kind of hitting your eyeballs right now, function. The entries you put in your random matrices, function. It's all function. Different classes in mathematics, different areas in mathematics study different kinds of function. High school math studies second degree one variable polynomials. Calculus studies smooth one variable functions. And it goes on and on. Functions describe the world."
从这个角度,你也能更好地理解图灵测试。因为图灵测试它就在说:如果人无法区分是在跟人还是AI聊天,那么这个AI就实现了人的智能。它本质上正是在说,所谓AI本质上就是它所定义的输入到输出的黑箱的函数关系。它跟你回应的话和人没有任何区别,那么这就是一个类似于人的智能。
第二部分:实现人工智能的两种思路
问题来了:该怎么做这样一个聪明的黑箱呢?
科学家针对这个问题提出了很多思路。例如,有一批人从数学的形式化推理体系中得到灵感,主张智能可以用符号的逻辑推理来模拟。这就是符号主义(Symbolism)。
符号主义
举个例子:
•A表示阴天•B表示湿度大于70%•T表示将要下雨
那么知识是一条逻辑规则:如果A和B是真的,那么T就是真的。所谓智能就是看到阴天和湿度很大,明白A和B都对,那么利用这条规则推出T是真的,从而预测到可能将要下雨。 这些人类的推理和思考都可以从这些符号和规则当中,像算术一样计算出来。因此,符号主义相信智能正是一套像这样处理符号和规则的计算系统。它把人类的知识和逻辑用"如果A那么B"这样的规则存储下来,然后不断进行符号推演,就可以实现接近人类的智能。 这套思路最成功的典范就是曾经的专家系统。它咨询人类的医学专家,什么样的病可能会有什么样的症状,接着把这些规则全部记录下来。只要利用这些规则,就可以根据已有的信息给出预测,实现一个智能的黑箱。
这套系统一度在疾病诊断和金融咨询领域获得了很大的成功。但随着时间推移,它也逐渐暴露出致命的缺陷: 首先,很多时候现实世界没有那么清晰的规则。即使询问人类专家,出现某个症状是不是得了某个病,或者股票走势长成这个样子应该是买还是卖,他们给出的回答往往都并不一致。你的系统只能选择一个,到底该听谁的呢? 更要命的是,这套系统完全是在复制人类经验,所以它的能力上限就是专家的水平,无法做到比人更好。而且从你设计完成这套系统开始,它就永远是静止不变的水平,很难像人一样随着经验和时间的增长,水平不断继续提升。

机器学习的兴起
机器学习的强大之处
1.一个强大且有学习能力的黑箱
2.足够多的数据
举个例子:
假设你想要一个能够识别数字的智能黑箱,那么只需要准备一个具有学习能力的机器,然后收集很多数字的图片,
人工标注出每张图片里的数字是什么。接下来,你只需要像训狗一样,
把一张张图片展示在机器面前,让它预测里面的数字到底是什么。如果它预测对了,你就给它奖励;错了,你就给它惩罚,让这个机器不断的自我调整。当它见过的图片越来越多之后,就能够神奇地做到正确识别这个图片里的数字是什么了。
第三部分:神经网络:强大的学习黑箱
问题:哪来的黑箱这么神奇?
相信你现在心里肯定有一个疑问:哪来的黑箱这么神奇,能够像狗和人一样越学越机灵?而且给狗奖励是喂狗粮、摸摸头,给机器奖励和惩罚又是怎么一回事呢?难不成是多给点电吗?而且狗的条件反射和学习过程那么复杂,人搭建起来的一个机器又是怎么自我调整和学习的呢? 问得非常好。这三个问题其实就分别对应于机器学习的:
1.模型结构2.损失函数3.训练过程
接下来会详细解答这些问题。
让我们先解决第一个问题:
怎么搭建起一个有学习能力的黑箱机器呢?
有没有一种万能的、超级强大的黑盒,无论什么样的对应关系,它都能表示和学会呢?
连接主义
理解连接主义:从苹果识别开始
感知机:最简单的黑盒
感知机的灵活性
而这个玩意儿就是人类在1956年最早提出的一种模式识别的算法模型——感知机。
感知机与符号主义的关系
感知机与神经科学的巧合
感知机的历史
计算机视觉的挑战
感知机的过度乐观
连接主义的寒冬
这套故事在一开始提出的时候野心勃勃,而且实现了感知机这样了不起的成就。但连接主义一度陷入寒冬,甚至被整个世界耻为骗子。 在最一开始的时候,就有很多学者反对连接主义。他们觉得这只是机械地模拟了生物的构造,而且神经元建模的也太简单了。而且他们觉得连接主义期待在一通乱联当中发生魔法。 1969年,马文·明斯基写了一本叫做《感知机》的书。正如给你伸大拇指的人不一定是夸你,也可能是想拿炮打你,他这本书可不是要推广感知机,而是要给感知机下死刑,把棺材板上的钉子钉死。 明斯基在书中指出了这样一个事实:有一个逻辑电路里非常基本的操作,叫做异或(XOR)。简单来说,就是当输入的两个特征一样的时候,输出是0;而输入的不一样的时候,输出是1。就是这么非常简单的一个对应关系,感知机却无法完成。
为什么感知机无法实现异或?
为什么会这样呢?我们仔细看感知机的函数形式就会发现,它本质上是在计算w1x1 + w2x2 - b的符号。
假如我们把所有的这样的(X, Y)输入划在二维平面的坐标系上,那么能够让感知机激活的所有输入满足W_1·X + W_2·Y - B > 0。
中学的小伙伴可能会很熟悉,这其实就是一个线性规划。所以说,能够激活的、满足条件的输入和不激活的分界线永远是一条直线。 然而,对于异或问题,你会发现需要激活的这两个点和不激活的这两个点是这样分布的:你永远没法用一条直线将这两种点恰好分在直线的两边。所以就不存在一台感知机能够直接实现这个简单的异或运算。
明斯基在这本书里直接毫不客气地说,罗森布拉特的论文没有什么科学价值。他本人在童年获得图灵奖,这本书也因此将整个连接主义打入冷宫。 在之后的二三十年间,神经网络这个名字仿佛就是骗子的代名词,是连异或这个操作都做不好的无用的玩物。在当时图灵奖得主的带头唱衰下,神经网络一度陷入了极度的寒冬。所有人都认为它是垃圾和骗子,基金资助大为减少,研究者纷纷转行,AI研究也因此陷入长达几十年的寒冬。 你看,人类又是这么容易悲观。一个小小的反例就自暴自弃,放弃了充满潜力的研究方向。
拯救神经网络:多层感知机
但与此同时,依然有一批研究者在坚持。
他们最后守得云开见月明,成为了后来深度学习的奠基人,并获得图灵奖。 他们是怎么拯救神经网络的呢?回到刚才异或的例子,他们想:既然一个神经元不行,那么多来几个可不可以呢? 比如说,我们将这些感知机的输出一个一个地拿出来,然后在后面再连接到接一层感知机,作为它们下一个感知机的输入。我们一套啊套啊,一层又一层,出来一个新的感知机。 这样,我们就可以让中间一层的两个神经元分别只被(0,1)和(1,0)激活。
比如说第一个神经元,它的组合系数是(1, -1),此时呢就只有(1,0)这个输入能给它最强的刺激,大小为1,其他的都不超过0。所以,我们如果再设置一个1的阈值,就可以让它只在(1,0)这个输入的时候激活。 同理呢,我们也可以对另一个神经元在(0,1)的情况下才会激活。设置方式是系数(-1, 1)。这样的话,两个中间的神经元就可以分别关注两个我们想要激活的位置。 接着,我们再把这两个神经元的输出直接加在一起,大于0的时候给出最终的激活。这样,整个模型就可以刚好在(1,0)和(0,1)的时候激活,而在(0,0)和(1,1)的时候不激活,
从而实现异或功能。 而这就是后来大名鼎鼎的MLP(Multi-Layer Perceptron),全名多层感知机。
这里中间层当然可以不止两个神经元,层数也可以不止两层。
当这些神经元层层叠叠的时候,就是大名鼎鼎的神经网络。 这里的每一根连线都标志着两个神经元之间的连接强度,是一个可以调节的参数系数。
神经网络的强大能力
计算机科学家证明,只要这个神经网络的深度和宽度都足够大,那么理论上它可以拟合任何一种函数,表达任何一种智能所需要的输入到输出之间的对应关系。 换言之,只要你有一个超大的神经网络,那么任何一个你想要的智能黑箱的功能,都一定可以通过设定一套参数实现。
如何理解神经网络的强大能力?
还记得我们前面说过吗?我们用不同的属性、概念组合在一起,就得到了一个可以识别苹果的感知机的智能。而如果我们在感知机上继续套娃,就可以不断地把原本简单基础的概念组合成更复杂的概念。 例如,在数字识别的神经网络中,最前面的神经元就负责识别一些非常基础的笔画和边缘,
而往后层的神经元就负责将这些基础的特征组合,识别出一些更复杂的概念,比如说圆形、横线、竖线、折线等等。 接着,更深的神经元可以组合这些线条、图形,识别出复杂的数字。比如说9就是一个环形加上右下角的尾巴。
随着层次的加深,神经网络逐渐从简单的这些特征推导出复杂的整体形态,最终准确地识别一个复杂的概念。而整个这个过程不需要任何人类专家知识的介入,是它自动完成的。而这正是神经网络的强大之处。
神经网络结构的演进
随着时间的推移,神经网络的技术也不断地进步。前面我们看到的多层感知机只是最经典、最基础的一种。如何设计更好、更强大的模型结构,一直是深度学习的重要课题。 比如,真实世界里动物的视觉神经系统的神经元不需要和前一层的所有神经元全都稠密地连接,而只需要和局部的几个神经元连接就行。而且每个神经元和前一层连接的参数结构又都是类似的。那么,我们设计神经网络的时候也可以借鉴这一点,从而减少参数和运算量,提升神经网络的性能。
这就是大名鼎鼎的卷积神经网络(CNN)。 后来研究人员发现,卷积层堆得多了,训练起来有困难,又增加了一种跳跃式的连接,这就是残差网络(ResNet)。
或者你可以把任何两层都跳跃连接起来,这就是DenseNet。
再到今天,GPT的基础框架Transformer,
也就是Attention,它们本质上都是某种网络的基础框架结构,然后有大量的参数需要去决定。
一个好的结构可以让黑盒学得更快,需要的数据更少。而这就是深度学习曾经一个非常重要的领域——神经网络结构设计。
第四部分:如何训练神经网络
神经网络如何自主发现数据中的结构?
你肯定会问:神经网络这么强大,可以自主地发现数据中蕴藏的结构、理解概念,它究竟是怎么做到这一点的呢? 答案就是用数据训练,通过奖励和惩罚来引导神经网络形成智能。但我们应该究竟怎么奖励、惩罚一个神经网络呢? 其实,从GPT到AlphaFold,再到Midjourney和各种强化学习,各种复杂又先进的人工智能模型,几乎无一例外地都在使用着同一种算法来训练网络,
找到最好的参数。而这个算法就叫做梯度下降。
特此说明:这一部分内容的数学知识很多,而且技术性很强,但因为它实在是太重要了,所以我们必须要讲。因此,你实在听不懂也没有关系。具体地,我将沿用油管博主Arton Kisakov的视频和思路,为大家讲解。
回顾前面的内容
在讲解梯度下降之前,先让我们简单回顾一下前面的内容。 我们首先提到,智能的本质是一个黑箱。这个黑箱能够从数据中找到输入和输出之间的对应关系。换言之,在数据驱动的机器学习和统计学习眼里,所谓的智能本质上就是给你一堆点,然后用一个函数拟合它们之间的关系罢了。 这里的X和Y可以是任何你关心的两个量。只要学会了一个可以刻画这些点趋势的函数,我们就可以获得任何一个输入对应的合理输出。
换言之,实现了智能。
如何找到数据点所勾勒出的底层规律?
根据前面的内容,你可能会想到神经网络。这当然是一个办法。不过,这里为了理解梯度下降,我们先用一个简单一点的方法找到这个函数。 比如说,我们线性组合常数、X、X平方、X三次方、X四次方、X五次方这几个简单的单项式模块。
换言之,我们想要找到一个五次多项式来刻画这些数据变化的规律。我们需要找到K0到K5这六个参数最好的组合。
损失函数:衡量拟合好坏的标准
那什么样的参数是一个好的组合呢?我们需要一种定量的方式来度量一组系数所对应的多项式到底拟合得好不好。而这就是损失函数。
其实大家早就见过损失函数了。中学学过最小二乘法,其实就是用一个简单的y = kx + b的线性函数来搭建黑箱。对每个数据点,线性函数的预测和实际结果都会有偏差。我们把这些偏差的平方加在一起,就得到 了这根直线的损失函数。 在复杂的非线性里,损失函数也是一样的道理。我们同样把函数预测的数值和实际数据点的数值误差平方加到一起,就得到了这个函数的损失函数。
你可以看到,当这个函数的预测越是贴合这些数据点的趋势时,损失函数加在一块就会比较小;
而反之,损失函数就会比较大。
大体来说,损失函数就是在衡量一个模型预测的和真实的结果之间的偏差程度。只需要记住:掌握规律就等于损失函数很小就可以了。
两种函数:拟合函数和损失函数
请注意,这里出现了两种函数,大家不要混淆: 第一种是我们用来拟合数据点的这根曲线,我们叫它拟合函数,
也就是那个五次多项式。它的输入是x,输出是y。我们需要决定这六个参数。输入到输出的可能函数有无穷多个,我们想要找到最好的那一个。 而什么叫最好呢?为此,我们提出了损失函数。它衡量一个拟合函数到底好不好,是一个打分机器。它的输入是多项式的这六个系数。
接受到这些系数之后,它会先构造出拟合的曲线函数,然后逐一比对,计算在所有数据点上的偏差,将它们平方加在一起之后,就会得到最终的损失函数的输出了。 我们只需要找到使得损失函数很低的输入参数组合k0到k5,我们就可以找到一个出色的拟合函数。而有了拟合函数之后,我们就可以把拟合函数机器拿过来,输入任何一个我们关心的x,得到一个符合数据规律的合理的y。
调参游戏
你可以理解为,我们在玩这样一个游戏:每一个参数K是一个旋钮。它们通过设置这个系数,会产生一个不同的多项式曲线。
而你的目标就是调节这些旋钮,让拟合函数的曲线和数据点比较贴合。 事实上,神经网络干的事情本质上也是完全一样的。只要把这里的k改成神经元之间的连接系数和阈值b,那么训练神经网络同样也是一个调节参数旋钮来降低损失函数的游戏。
问题的难点:参数太多
这个游戏难点在于,旋钮实在是太多了。你看,这个五次多项式有六个参数旋钮,已经让人非常头大。而神经网络的参数个数更是多到离谱。 举个例子,GPT-3一共有1750亿个参数。
换言之,你要同时调好1000多亿个旋钮,并且让这些旋钮组合起来的设置可以很好的性能,能够跟你对话、解决问题。是不是听起来很不可思议呢?这几乎是一件不可能的事情。 在数学上,这个问题叫做非凸优化求解,它的难度是臭名昭著的大。这个问题也一度困扰着连接主义的研究者们,也是神经网络这一派研究一直没有真正发展起来非常重要的原因。 因为一旦你的模型做大做复杂,你虽然觉得它很强大,但是你找不到好的参数让它实现这种强大。
梯度下降的提出
直到后来,1970年由Sippel-Linamen提出了一个巧妙的算法——梯度下降
并在1986年由David Rumelhart、Geoffrey Hinton和Ronald Williams共同提出了反向传播算法,才算真正解决了这个问题。
从最简单的情况开始
让我们先从最简单的地方开始。假设这里除了k1之外的5个旋钮都已经被固定好了,我告诉你已经有人把它设置在了最好的位置上。现在你只需要去考虑把k1这个旋钮调好,那么到底该怎么办呢? 我们可以调节它,观察损失函数的变化。此时,你会发现损失函数就从原来的6个输入变量变成只有一个变量k1。
这是一个一对一变化的函数,我们很容易做图做出来。做出来的图大概长这样。我们的目标就是找到它的最低点。 不过,不要被这里的图误导了。我们是为了解释方便,所以直接把这个图像画出来。但实际上,我们并不知道这个整个图像。我们知道的只是某一个具体的K1下,这个拟合函数长什么样,然后算出来这个k1对应的损失函数有多大。 所以说,我们只能得到一系列离散的点。对于每一个输入点,知道函数值是多少。而在这些点中间的位置,
损失函数到底是怎么变化的,我们是全然不知的。
优化问题的困难
你会发现,优化神经网络甚至比求损失函数的最小值更复杂,因为你没有办法看到整个损失函数的全貌。这就好比把你放到了一片地形高低起伏极其复杂的山地上。每个参数的数值就好比是经纬度,而海拔高度是损失函数的大小。周围大雾弥漫,你只能看到自己脚下的地形。你该如何下山,走到一个海拔比较低的地方呢?
导数:知道变化方向
还是用这个k1的例子。刚才我们有一句话说得其实不是很对,那就是我们知道的信息其实还是比纯粹的损失函数大小要多一点。 具体来说,我们还可以知道,在某一个位置下,损失函数到底随着k1的增大是增大还是减小。用数学一点的说法,就是我们可以获得损失函数在这一点切线的斜率,更专业的说法是导数。 这个方法大家调洗澡水和收音机的时候其实都用过,那就是你可以把旋钮先往某一个方向转一点点Δx,看看是更好还是更差。 比如说这里,我们初始在x0的位置,损失函数是y0,然后增加了Δx,到了x1的位置之后,我们再看看损失函数变成了y2。所以我们就会发现损失函数增加了一个Δy,也就是说它变差了。
这个时候你就知道洗澡水应该往反方向调。 所以,当我们的调节变化量Δx无限小的时候,Δy和Δx变化量的比值会接近于一个定值,那就是损失函数在这一个点切线的斜率。而这就是函数在这一点的导数。 在变化很小的时候,函数值y的变化量正比于x的变化量,而这个比值就是导数。
梯度下降的精神
所以,我们就用一句话来概括一下梯度下降的精神,那就是:每次减小一点点。 我们每次看看要减小损失函数,我们现在的位置应该往哪边走,然后就往这个方向走一个很小的距离。接着再看导数,再走,不断重复上述流程。这样,我们就可以不断地缩小损失函数,直到最后停在底部,参数基本不再变化。此时,我们就成功地将损失函数减小到一个很低的程度。
扩展到多个参数
现在我们已经清楚了怎么调节一个旋钮。但这有一个非常不现实的前提,那就是其他5个旋钮已经调到了最优的状态并被固定住。现实中,你要同时调节好多旋钮,而且所有的旋钮都没有调好,这个方法有什么用呢? 诶,有用。事实上,刚才我们的这个方法可以非常容易地拓展到更一般、更复杂的情况。 比如说,假设你现在要同时调节k1和k2两个旋钮。此时,损失函数变成一个输入是两个实数、输出是一个实数的二元函数。它可以表示成一个二维的曲面。
诶,这就是很多人经常听到的损失曲面。 这里k1、k2的损失曲面看起来就像一个碗。
偏导数:多变量函数的导数
且慢,二元函数的导数是啥呢?现在有两个旋钮,所以调节的方向出现了歧义。到底是只调k1,还是只调k2,还是都调呢? 这里就涉及到偏导数的概念。我们可以固定k2,而只变化k1,此时我们就得到了损失函数对k1的偏导数。或者反过来,固定k1,只变化k2,此时就得到了对k2的偏导数。
它对应于我们固定k2或者k1当中的一个,然后单独地调节另一个旋钮时,对损失函数输出的影响。 几何意义上,这意味着我们用两个垂直于坐标轴的截面和曲面相交,截面会切出一根曲线来,然后我们再求这根曲线的导数。将这两个导数拼在一起,我们就得到了那个你经常听说但可能不知道是什么的东西——梯度。
梯度:函数值变化最快的方向
梯度说白了,就是在某个给定位置,函数值变化最快的方向,也是曲面在局部最陡峭的方向,是一个二维版本的求导。
有了它,我们就可以重复刚才的流程:每次向着局部损失函数下降最快的方向前进。我们完全就可以用刚才类似的方法,愉快地同时调节两个旋钮了。这个方法就是大名鼎鼎的梯度下降。
扩展到任意多个参数
你想,既然两个可以,那么这套方法就可以应用到任意多个旋钮。这个问题里,完整的损失函数是一个复杂的六维曲面,
但我们还是可以如法炮制:对每一个旋钮,我们都固定其他的旋钮,然后单独看这个旋钮和损失函数之间,它的变化关系是什么样的,增加它损失函数是增加还是减小。 这样,我们就能得到每个旋钮的偏导数,拼在一起得到了一个六维的梯度。接下来,我们只需要让每个旋钮都向着对应的方向不断迭代,去减小损失函数,从而拟合出这些数据底层的规律了。
如何计算梯度:反向传播
现在我们知道梯度下降法可以优化网络,找到损失函数比较低的参数。可是,面对一个层层堆叠的、非常复杂的神经网络,我们怎么计算出这个梯度呢? 这个问题非常专业,答案是反向传播(Backpropagation)。这是一个专门用于计算复杂的神经网络梯度的算法,也是很多人学习深度学习被劝退的第一步。
这里我们不详细展开反向传播具体的细节,只告诉你它最精髓的思想。
反向传播的核心思想
不管是神经网络,还是刚才我们的多项式拟合,本质上我们都是用一些非常简单的基础运算,比如说加减乘除啊、平方啊、指数啊之类的,不断地组合、复合、迭代,形成了一个超大的、复杂的函数。 它们就像我们用一个个基础的积木一样,拼接成一个庞大的机器。
我们关心的无非是每个旋钮参数的梯度。用最直白的话说,我们关心每个旋钮动一点点,最后面的损失函数随之变化的关系。而这个信息是可以由后到前层层传递的。 为什么呢?因为每个基本的积木的求导我们都很清楚,而积木在组合过程当中,梯度是怎么样组合、变化、传递的,我们也很清楚。
求导的基础法则
你看,中学我们就学过了求导的基础法则:
•加在一起求导等于各自的导数相加•乘在一起求导呢,则是这个结果 除了上面说的相加和相乘,还有一个最重要的性质,那就是链式法则。
链式法则
链式法则的直观理解
反向传播算法
总结:训练神经网络的方法
第五部分:泛化能力
神经网络如何举一反三?
在前面的内容中,我们详细讲解了智能就是搭建黑箱,以及神经网络这个强大通用的黑箱的构造和由来是什么,还有如何训练一个神经网络。 不过,这里还有一个非常重要的问题:这个神经网络的黑盒是怎么举一反三的呢? 你看,我们只是收集了一些数据,然后训练它。在我们收集的数据中,对于见过的输入,比如说这张数字图片,它要输出成我们想要的输出6。
那它见过这些东西,能够把它正确识别成6,并不奇怪。但是,对于从来没有见过的其他图片,训练好的网络是怎么能够同时认出其他的数字的呢? 这就好比你给一个人做了很多题,它能够把你给它的练习册的题做对,不奇怪。
但是,它是怎么样学会这些解题的方法,在新的题上考试也能考好的呢?
泛化:机器学习能够成立的重要问题
这个问题其实很深刻,它涉及到机器学习能够成立的一个非常重要的问题——泛化(Generalization)。 这个名字看起来很高端,但正如我们刚才所说的,它的本意就是推广、举一反三、活学活用。
从曲线拟合理解泛化
我们还是从前面的最小二乘法和曲线拟合思考这样一个问题:对于中间这个位置输入的x,我们没有任何y的数据,但你还是会觉得它应该就在这个范围里。为什么呢?
没错,因为这些零散的数据点勾勒出了一种趋势。当我们用这样的一个连续、平滑的函数准确地刻画出这种趋势之后,就可以利用这个函数推测数据中我们没有见过的某一个输入下,对应的合理的输出大概应该是多少。
这其实就是一种最简单的泛化。我们将这种关联的趋势理解,并且推广到我们没有见过的一些输入数值,通过理解底层规律,在未知情境下给出合理的预测和输出。
神经网络的泛化能力
那同样的,神经网络也有泛化能力,而且是很强的泛化能力。虽然在训练数据中,它没有见过一模一样的图片,但是它可以在训练过程中发现这些输入的图片和标签之间的趋势和这种微妙的关联性。 这种关联就跟我们前面的曲线拟合的时候,中间断开的那一部分看起来应该要这样连线,所以你可以预测那其中的函数值一样。只不过,在我们现实的数据里,
这个趋势可能非常抽象,不如刚才的曲线拟合这么直观。 而这正是神经网络强大的地方:你只需要提供数据,那么底层抽象的趋势和规律,只需要交给神经网络,它自己学就可以学明白了。
深度学习的通用性
很多行业和学科其实都面临着这类问题:在不同的情境里,有一种感觉和规律。这种感觉和规律难以用简单清晰的数学来计算和描述。 比如说:
•围棋里这一块棋形看起来好不好、能不能活,有经验的棋手一眼能看出来,行话叫做"味道不好"。但是怎么样学会这种感觉和味道,却非常复杂。
•还有在说话这个问题上,一句话前面的语境下,后面该接上一个什么样的话,也是一种复杂和微妙的语感。但是怎么学,很难说。•更不用说从氨基酸序列里分析出整个蛋白质结构,
这种极为抽象复杂的规律。 曾经,我们需要非常专业的知识来模仿人类的聪明智慧,而且模仿得还不好。而有了深度学习,你可以不管三七二十一,只需要找一个架构合适的神经网络,收集数据,训练拟合,然后这个神经网络就能领会数据当中你所描述的输入和输出间微妙的联系,并举一反三应用到任何潜在的、它没有见过的情景输入中。很多时候做得比人都好。 这种公式一样的解决方案非常通用,因而席卷了各个领域,引发了这些年的人工智能革命。
第六部分:深度学习的局限性
神经网络和深度学习是万能的吗?
但是,神经网络和深度学习是万能的吗?答案当然是否定的。 每当有一个很厉害的方法可以实现以往不可思议的任务时,人类就有把它当成魔法的倾向。尽管深度学习的确模仿了大脑的神经元结构,但是它和真正的人类智能还有很大的区别。
相关性与因果关系的混淆
我们都见过这样的梗图:
该怎么区分柴犬和面包?说它们看起来有很多相似之处,比如说都是黄色的、长条形的,什么难以区分。 这原本是一个玩笑梗,但对于一切机器学习算法来说,这都是一个根本且致命的问题。因为你看,这个模型它一直就是通过各种图像的特征输入和你要它的标签来理解图片的内容的。所以,它在训练当中所理解的事情就是:一个黄色的、长条形的物体是面包。 因此,当你给它一个在训练集以外的柴犬图片时,它会因为这个柴犬符合面包的各种特征而产生错误的判断。 这本质上是概念之间的相关性和因果关系之间微妙的区别,它没有把握。而这个问题在收集数据、训练模型的这一套方法论中永远无法避免。
算法偏见问题
这就是为什么有很多用神经网络算命或者预测犯罪几率的应用广受批评。因为模型会错误地把数据集里的共同出现当成必然联系。
比如说,看到黑人就觉得一定会犯罪这个样子。 更糟糕的是,你可能永远不知道强大的神经网络黑盒究竟领会了什么神秘的联系。因为神经网络太过强大和复杂,所以我们几乎无法理解它的内部是如何运作、给出我们想要的合理预测的。
对抗样本:神经网络的脆弱性
一个典型的例子是对抗样本。这是两张图片,你能看出它们有什么区别吗? 但如果让一个准确率非常高的、最先进的神经网络来看,第一张图片它觉得是熊猫,但第二张图片,它以99%的信心认为是一只乌龟。 仔细看,你会发现第二张图片相较于第一张添加了一些十分微小的噪声。而这些噪声可不是乱来的,它经过了特别的设计,专门用来欺骗神经网络。
这种图片就叫做对抗样本。 对于它的理解和研究,直到现在还在进行,而我们依然没有彻底理解它。大家一般认为,它触发了神经网络底层某些神奇的开关。这些在人眼看来杂乱无章的噪声,在神经网络看来却有着强烈的乌龟的特点和相关性。
看到这里,你还觉得神经网络无所不能吗?
第七部分:GPT与大语言模型
语言大模型的革命
从ChatGPT开始,语言大模型进入我们的生活:写文案、读论文、写代码,样样精通,成为有史以来最接近人的AI。人类第一次触摸到了通用人工智能(AGI)的雏形。 可是,语言大模型是怎么拥有如此神奇的能力的呢?今天,我将会用我的专业知识,从整个AI对语言最基础的研究讲起,
通俗但不简单地帮你透彻理解GPT的底层原理以及它的局限。准备好了吗?让我们上车。
大模型是如何说话的?
当我们在和大模型聊天的时候,它会一点一点地说话。这看上去就像是一个活生生的人也在向我们打字一样。 问题来了:大模型是否真的是按照人类的思维在说话呢?严格来说,其实不是这样的。
人类说话的方式
大家想想,我们是怎么说出一句话的?在英语课上,老师会告诉我们主谓宾定状补。我们说出来的句子遵循一定的语法和一定的词汇含义。虽然日常生活中没人会严格按照语法说话,但大致上,我们仍会把一些词串联成句。在说出这句话之前,也已经对它有一个大概的感觉和组织的结果了。
大模型说话的方式
但大模型说话的方式则非常不一样。它的做法是每次接话尾,属于是"脚踩西瓜皮,滑到哪里算哪里"。 当大模型一句话说到半截的时候,它根本不知道后面的内容是什么。它每次都会根据已有的内容,想想下一个字该说什么。 大家可以来感受一下,这是一种什么样的说话方式。比如说这半个句子:"下一个字是什么?"我想大家都能看出来,应该是一个"太"字。 再往下是什么?有些小黑子可能会一口咬定了应该填"美"。但是其实只看这句话的话,还有不同的词语都可以填进去,比如说"抽象"什么的。想要确定这里究竟是什么词,那就需要更多的语境来确定这里的意思。 比如说,加上这样一句之后,我们就知道应该只能是"美"字了。再往下,好像已经说完了,我们就写个句号。
完形填空式的生成
所以,某种意义上,大模型其实一直在努力地接话和做完形填空一样。这种生成思路和人类的语言有非常明显的不同,但是它一样可以生成出非常逼真的语言,甚至在你和它对话的时候,没有感觉到有任何的不对。
大模型如何理解语言规律?
问题来了:大模型并没有完全模仿人类的思维方式,却又可以完成几乎任何一个语言任务。它是如何洞悉人类语言的规律的呢? 在回答这个问题之前,我们得先搞明白:什么叫语言的规律?是刚才说的语法吗?不,竟然。
语言规律的本质
语言从远古时期出现以来,它最主要的作用是沟通。所以,语言规律的本质在于如何传递信息和意义。不同的语言、不同的词汇都只是符号,专业的说法叫做token(语言学上对应的概念叫做语素)。 而语言的信息蕴含在这些token的序列之中。所以,语言的规律本质上就是理解每个token在现实世界中对应的含义,以及它们以什么样的内在规律一个接一个地出现。这种出现的序列整体传递了一个什么意思。
语言模型
比如说,如果我写下"4×5等于",你知道后面应该要接一个"20"。这是算出来的。 所以,我们能不能像计算机算数一样,能算出来一个句子后面会接一个什么样的词比较对呢?诶,这就是计算语言学的核心问题。 这套规律有一个更专业的名词,叫做语言模型。
语法:简单的语言模型
我们的语法本质上就是一个描述词性和搭配要求的简单语言模型。比如说这个句子到这里,我们知道应该填一个形容词,所以你不会填一个什么"篮球"这样的名词。这就体现出你在一定程度上理解了语言的某种规律。
语言模型的威力
语言模型的威力在于,只要有了它,即使这个世界上从来没有出现过某个特定的句子,我们仍然可以说出它来,并且让所有人都能理解其中的含义。这就是语言的力量。 大家学英语的时候,英语老师这么重视语法,就是因为这样学可以举一反三、触类旁通。
为什么AI不按照语法来造句说话?
既然语法这么厉害,为什么AI不按照语法来造句说话呢?答案是:人类的确试过,但是行不通。 在上世纪的五六十年代,语言学家和人工智能学家尝试了很久,通过这种语法树的方式来拆分句子,并让程序通过建立这个树的方式学会说话、翻译等等任务。 但是,语法只是规定了一些最基本的规则,它本身并没有理解词语以及将它们连成有意义的
大模型的"说话"方式
当我们和大模型聊天的时候,它会一点一点地说话,这看上去就像是一个活生生的人也在向我们打字一样。问题来了,大模型是否真的是按照人类的思维在说话呢?
严格来说,其实不是这样的。大家想想,我们是怎么说出一句话的?在英语课上,老师会告诉我们主谓宾定状补,我们说出来的句子遵循一定的语法和一定的词汇含义。虽然日常生活中没人会严格按照语法说话,但大致上我们仍会把一些词串联成句,在说出这句话之前也已经对它有一个大概的感觉和组织的结构了。
但大模型说话的方式则非常不一样。它的做法是每次接话尾,属于是"脚踩西瓜皮,滑到哪里算哪里"。当大模型一句话说到半截的时候,它根本不知道后面的内容是什么。它每次都会根据已有的内容,想想下一个字该说什么。
大家可以来感受一下这是一种什么样的说话方式。比如说这半个句子:"下一个字是什么?"我想大家都能看出来应该是一个"太"字。再往下是什么?有些小黑子可能会一口咬定了应该填"美",但是其实只看这句话的话,还有不同的词语都可以填进去,比如说"抽象"什么的。想要确定这里究竟是什么词,那就需要更多的语境来确定这里的意思。比如说加上这样一句之后,我们就知道应该只能是"美"字了。再往下好像已经说完了,我们就写个句号。
所以某种意义上,大模型其实一直在努力地接话,和做完形填空一样。这种生成思路和人类的语言有非常明显的不同,但是它一样可以生成出非常逼真的语言,甚至在你和它对话的时候没有感觉到有任何的不对。
大模型如何洞悉人类语言的规律
问题来了,大模型并没有完全模仿人类的思维方式,却又可以完成几乎任何一个语言任务,它是如何洞悉人类语言的规律的呢?
在回答这个问题之前,我们得先搞明白什么叫语言的规律。是刚才说的语法吗?不。既然语言从远古时期出现以来,它最主要的作用是沟通,所以语言规律的本质在于如何传递信息和意义。不同的语言、不同的词汇都只是符号,专业的说法叫做token,语言学上对应的概念叫做语素。而语言的信息蕴含在这些token的序列之中。
所以语言的规律本质上就是理解每个token在现实世界中对应的含义,以及它们以什么样的内在规律一个接一个地出现。这种出现的序列整体传递了一个什么意思。比如说,如果我写下"4×5等于",你知道后面应该要接一个"20"。这是算出来的。所以我们能不能像计算机算数一样,能算出来一个句子后面会接一个什么样的词比较对呢?
诶,这就是计算语言学的核心问题。这套规律有一个更专业的名词,叫做语言模型。我们的语法本质上就是一个描述词性和搭配要求的简单语言模型。比如说这个句子到这里,我们知道应该填一个形容词,
所以你不会填一个"篮球"这样的名词。这就体现出你在一定程度上理解了语言的某种规律。
语言模型的威力
语言模型的威力在于,只要有了它,即使这个世界上从来没有出现过某个特定的句子,我们仍然可以说出它来,并且让所有人都能理解其中的含义。这就是语言的力量。大家学英语的时候,英语老师这么重视语法,就是因为这样学可以举一反三、触类旁通。
为什么AI不按照语法来造句说话?
既然语法这么厉害,为什么AI不按照语法来造句说话呢?答案是:人类的确试过,但是行不通。
在上世纪的五六十年代,语言学家和人工智能学家尝试了很久,通过这种语法树的方式来拆分句子,并让程序通过建立这个树的方式学会说话、翻译等等任务。但是,语法只是规定了一些最基本的规则,它本身并没有理解词语以及将它们连成有意义的句子的能力。
著名的语言学家Chomsky举了一个经典的例子,叫做"Colorless green ideas sleep furiously"(无色的绿色点子狂暴地睡觉)。这是一句完全符合语法但狗屁不通的句子。这说明语法不足以描述一个语言的本质。
更何况人类使用的自然语言实在是太灵活了。且不说不同语言有不同的语法,就是同一个语言的语法也在不断地变化,对吧?你看看如今这些网络流行语,简直了。语法很难面面俱到,而且每次出现新的用法就要人为地加入一条新的语法规则,这也太费劲了。所以这种语言的建模方法在上世纪就被淘汰了。
GPT是如何成功实现语言理解的?
今天的GPT本质上也是一个语言模型,而且是迄今为止最成功的语言模型。它是怎么成功实现语言的理解的呢?
刚才我们其实已经说了,大模型GPT学习的一个事情叫做"接话尾"。这有点像输入法的联想。你有没有刷过这种视频?它让你随便输入某一个字,然后一直点击第一选项,输入法看起来是不是就像在说话了?但很显然,我们试过都知道,它说出来的话完全不通顺。每个局部都是连接得很好的、搭配的词,但合起来不知所云。
事实上,输入法的这种联想就是一种最简单的语言模型,专业名词叫做one-gram model,意思是每次只看最前面一个相邻的词或者字,然后接上一个最常见的、紧跟着它的搭配。你也可以增加查看上文的长度,比如说如果看两个字生成第三个字,每次这样重复就是2-gram model。
看N个就是N-gram model。
这种基于某一个长度的上文,使用一种统计的方法来预测下一个词的模式,就是人类探索出的另一条建模语言的道路,被称作统计语言模型。要知道它刚提出来的时候,颠覆了整个语言学界的认知。大家觉得这个方法太"脏"了,人类的语言那么巧妙,怎么可能用这种方式就能理解呢?
诶,但有趣的事情是,正是统计语言模型才带来了今天GPT的强大。早在GPT之前,人类就已经试过了很多不同的预测算法,比如说隐马尔可夫模型、循环神经网络以及LSTM等等。每一种都可以算作是一种统计语言模型。
GPT的核心秘密
这样我们就拆解了大模型最核心的秘密,就是每次找语言的规律,根据上文来预测下一个词的过程。这个训练的过程就对应于GPT里的P(pre-trained)。而最前面的G的含义是generation(生成),表示模型做的是生成语言的任务。T则是具体用来训练并预测后面那个词是什么的模型——transformer。
它具体的原理很复杂,大家如果有兴趣可以去看3Blue1Brown的视频。你只需要知道,作为深度学习最强的模型之一,它可以举一反三地从训练数据中学习输入到输出的规律。比如说输入是一些图片,它可以识别出规律,这里面的内容是什么。输入是之前所有的这些词,它就可以学习到一个合理的、接下来的词应该是什么。
这里还要涉及到怎么把一个词汇转化成一个向量,以及怎么运算这些向量。这些东西都超出了这期视频的范畴,我会在之后详细讲解。
GPT大模型之所以这么强,一个很重要的原因就是transformer非常强大。
另一方面,大模型比输入法可复杂太多了。它用来预测下一个词的信息,远远不止前一个或者两个词,而是之前说过的所有内容。这种一个一个往外蹦字的过程叫做next token prediction,即预测下一个语素。
接话尾游戏的不简单之处
无数科普都提到了这种预训练的方法,但几乎没有人回答这样一个问题:训练大模型以这种"钻头不管屁股"的方式,只是一个劲地往后说,也不管后面可能是什么,是怎么形成这么强大的语言理解能力,变得像今天这么有用的呢?
大家可千万不要小看这个简单的接龙游戏。只靠训练预测下一个字,模型可以学习到难以置信的语言的深层规律,直到理解整个语言,像人类一样说话,还有解决问题。
我们来看几个例子。像是这句话:"人类会从语法上分析应该填一个形容词,而从语义上看,这里应该是书对人造成的影响,而且是负面影响,
所以应该是一个'重'或者'难'这样的词。"而大模型它不管三七二十一,就学习怎么把前面的内容当成输入,然后试图算出来这个地方应该是"重"或者"难"这些词。
来,你暂停品味一下。当你训练大模型在这个语境下明白要接上"重"或者"难"这个词的时候,它实质上以一种非常复杂且微妙的方式理解了"重"和"难"这两个词的含义,即这是一种让主体不太舒服、想要放下来的感觉。同时,在其他浩如烟海的这些文本当中,它也会发现"太"这个词后面往往跟的是一个形容词。于是大模型也自动学会了某种语法结构,也就是副词"太"之后往往要跟上一个形容词。
诶,这就是看起来简单的接龙游戏不简单的地方,也是你每次都做不对完形填空的原因。正确接话尾这个任务,它蕴含着对于这个词语的含义、对于整个句子的语法,以及它在文化以及现实世界含义里是否合理的深刻理解,真的一点都不容易。
类似的例子还有很多。比如说这个句子,大模型通过阅读大量人类说过的话,就会理解"热"和某些动作高度相关,于是它就会知道这里应该跟"开空调"、"开电视"、"吃冰棒"之类的内容联系起来,实现说出有意义的句子。
自回归生成
本质上大模型就是这样学习的。它见多识广,知道前面什么样的语境,后面往往应该跟什么样的词。于是通过学习预测下一个词,便极为深刻地洞悉了人类语言的规律。
一旦完成了这样的学习,大模型就可以从某段内容出发,根据前面所有的内容,不断往后接词,就像说话一样。这种把前面自己生成的输出变成新的输入的条件的方式,叫做自回归生成。你从一个问题开始,自回归生成就可以解决这个问题。这就是大模型极为巧妙的一点。
所以你看,仅仅通过预测下一个词这样的任务,一个没有生命、没有意识的程序,居然就能理解文字背后人类复杂的感情和逻辑,同时像模像样地完成续写、对话和回答,理解自然世界的常识,拥有通用的智能。这就是这波大语言模型革命带来的最大震撼,也是人类第一次看到通用人工智能(AGI)的曙光。
训练数据和算力
话说回来,既然有了好的语言模型,那么接下来我们要干什么呢?没错,就是让它见足够多的数据了。
不知道你有没有注意到一件事情,刚才我们所说的这套接话尾的训练方式,根本不需要任何人为的标注,对吧?你只需要把一堆文本给它,然后遮住后面的字,让它每次猜新蹦出来的那个字是什么了。所以你只需要收集大量的文字,然后让它去学就可以了。
因此,研究者收集了大量人类语言的数据,比如说书籍、新闻、网站等等。这些都是人类表达过的语言,学名叫语料。你把语料库喂给大模型,就可以让它自己去找规律。像我们现在用的这个GPT,它保守估计使用的语料大概是TB量级的。这是个什么概念?要知道我们一本60万字的《三国演义》,如果你用纯文本存储下来,大概也就两兆不到。而几百万字的网文小说也就十几兆的存储。所以说这个TB级别的训练数据,就相当于上亿本《三国演义》,可能比一个人几百辈子读过的书都多。
除了训练的数据多,大模型的运算量也顾名思义的大。你知道吗?GPT-3每说出一个字,需要动用1750亿个参数,电脑要进行10的15次方次浮点运算。所以说,如果用你的笔记本来跑拆的GPT,那么保守估计生成一个字大概需要大半个小时,就问你受不受得了。GPT-4的参数量虽然没有公布,但应该是翻了将近10倍,更是需要大量的GPU支持运算。
你现在可能可以理解为什么它们叫大模型,以及为什么这一波的AI革命引起了算力战争了吧。
想想看,只是让它说话都这么费劲,训练一个GPT得多么烧钱呢?GPT-4的训练过程让超级计算机夜以继日地算了好几个月,这个花销至少是上亿美金。
大模型真的理解语言了吗?
所以让我们回到最开始的那个问题:大模型理解语言了吗?答案是肯定的。它并没有死记硬背,机械地重复数据,几率已经有的那些东西,而是在理解了语言的深层规律之后,不断创造出全新的内容,以及回答我们每个人个性化的问题。
但是大模型真的聪明到可以超越人类吗?目前来看还不太清楚。它甚至无法完成一些很简单的要求,比如说你们都可以试试,让它说出一句恰好有20个字的话,这是做不到的。原因自己想想。
如果你问它一些专业知识,它就会胡编乱造。这种现象有一个专业术语,叫做幻觉(Hallucination)。像大模型这样的语言模型,自始至终都只是在语言的符号中来回。尽管它通过接话尾的方式,一定程度上理解了词语的含义,但更多的还是一种"见到风就是雨"的相关性联想。GPT可能稍微高级一些,理解了一点逻辑,但终究在本质上,它从来没有在这个真实的世界里活过。
所以它难以检验一个信息来源的真假,也难以处理复杂的数学、因果。它就像柏拉图知名的洞穴之喻那样,
现实世界在洞穴之外,大模型处理的语言符号就宛如现实世界投影在墙上的这些语言的影子。大模型靠着这些符号的影子,总结出了很多规律,但距离透彻地理解整个现实世界,解决各种各样千奇百怪的问题,还有距离。
但话说回来,其实这也没有什么。因为它现在好歹已经会说话了。只要不是涉及那些十分深入、专业的知识,它就是当今世界上知识最渊博的大师。在一定程度上,它是每个人最好、最方便的老师。我们可以像问身边人那样询问大模型我们不知道的问题,得到一个大体满意的回复。另一方面,对很多人来说,大模型是自己最好的助手。
RLHF:让大模型更有用
话说回来,仅仅是接话尾的大模型,究竟是怎么做到这么有用的呢?这里其实还有两个训练过程我们没有详细展开。
简单来说,首先你要让大模型在某些特定的领域去再单独训练一遍接话尾的事情,让它去熟悉某个特定领域的接龙游戏,熟悉这个领域里的词汇和知识。
接下来还有一个非常重要的环节,叫做RLHF,也就是人类反馈的提升。简单来说,你让大模型它的回话越来越接近于对人类有帮助的、友善的那种。基本上就是,如果它做得很好,你就奖励它,调整它的参数,让它变得更接近于这个状态。如果做得不好,就给它一个惩罚。在这样不断的训练当中,大模型就可以越来越有用了。
Sora的震撼
继ChatGPT之后,OpenAI又祭出了震撼世界的新作品——Sora。在此之前,人类难以想象,这些看起来极其逼真的画面,居然都是AI虚拟生成的。你是否也好奇和疑惑,这些图片和视频究竟是怎么来的?它背后到底有什么神奇的技术原理呢?
如果你确实好奇,那么千万不要错过这期视频。今天这期视频专业对口,我将会给你一个深入但人人都能听得懂的科普,保证你无论是小白还是研究者,都能从这期视频里收获关于AI底层原理的知识。
扩散过程:从一滴墨水开始
AI模型究竟是怎么生成这些栩栩如生的图片和视频的呢?别急,让我们先从它的名字——扩散模型开始说起。故事将从水里的这一滴墨水开始。
墨水晕开,其实就是初中物理学过的扩散过程,英文Diffusion Process。
一团分子做无规则的热运动,会从原本局限的初始位置渐渐扩散开来,直至弥漫整个空间。一滴墨水会染黑整杯纯净透明的水,电梯里有一个人放屁,整个电梯都会闻到,本质上都是扩散过程。
初中物理还说,扩散过程证明了物质是由分子组成的。你现在可能还看不出来,一堆粒子在那扩散,和我们最终的目标——生成图片和视频有什么关系。但请耐心看完这个视频,你会恍然大悟的。
布朗运动与高斯分布
每一个时刻,每个粒子都会向着完全随机的方向做热力学运动。这个过程在数学里被称作维纳过程,
在物理里表现为经典的布朗运动。当时布朗发现,一粒放入水中的花粉,因为水分子热运动无法做到绝对的均匀,所以花粉可能某一个时刻受力不均,就会被撞得向某一个地方突然动了一下。这个方向在不断地改变,而且是随机的。
于是你就看到花粉在那里到处乱跑,这就是我们熟知的布朗运动。
让我们把很多花粉都一开始放在某个特定的位置上,比如说一个点、一条线段或者一个笑脸,
然后让它们各自独立地扩散运动。每一个时刻它都会随机地往一个地方跑一步。盯着它们到处乱动的过程,
你发现了什么?
一个最明显的特点就是原有的结构被破坏了。
无论一开始这些点排成了什么图案,经过了足够长的时间之后,你会发现它们都变成了差不多的一团。这并不是偶然。最终这个看似杂乱无章的一团的分布,其实就是大名鼎鼎的高斯分布。
这是概率论和统计里一个非常经典的结论。
比如在一维情况下,如果每次粒子都随机向左或者向右移动一个单位,那么经过足够久之后,这些粒子在不同位置的可能性就满足钟形的曲线,而它正是大名鼎鼎的高斯分布。有一个著名的高尔顿板就演示了这个实验,小球每次撞到钉子会随机向左或者向右移动,
最后呈现出来的分布就是高斯分布的形状。是不是很神奇?其实这就是概率论一个经典结论——中心极限定理。
这个结论不仅对一维空间成立,如果这个粒子是在二维空间当中,每次向一个随机的方向乱走,那么它的分布就会变成二维的高斯分布,大概长成这个样子。
如果你对概率论感兴趣,那么我这个频道之后还会有很多有关概率论讲解的视频,记得关注哦。
扩散过程本身并不足为奇,它只是一个纯粹、没有任何目的的物理过程而已。
在物理中,研究扩散过程的物理学叫做Langevin Dynamics。
扩散生成模型:时光倒流的奥秘
但是2020年有一篇横空出世的天才论文,
创造性地利用了扩散过程,
竟然将它变成了一个可以用来生成图片的算法。而这,就是扩散生成模型。它的奥秘用一个词来概括,就是"时光倒流"。
为了说明扩散生成模型背后的原理,我们考虑一个最简单的情况 :粒子所有的初始位置都来自于同一个点,然后在随机过程当中逐渐扩散到整个空间,就像这样。
现在请大家思考这样一个问题:在左下角A这一小块的粒子,
它们在之前一小会的时刻大概在哪儿呢?由于我们是使用代码模拟的,所以我们可以很容易地追踪每个粒子的路径,然后把时间倒退几步。我们可以看出,尽管它们的路径都不太一样,但整体有一个共同的显著特征,那就是有一定的方向性。大致上,它们都是沿着中心点渐渐地靠近A。时间越靠前,它们的位置就越接近于初始的中心点。
所以我们知道,时间倒退一点点,它们的位置大概是在更接近于中心点的这个区域。
事实上,这个规律对于其他的小区域也是成立的。
所以总的来说,每一个位置的粒子,如果时光倒流一会儿,你就会发现它们在平均意义上都会向着初始的位置靠近了一些。
正向扩散与反向过程
这就体现出扩散过程在时间上正向和反向的区别了。正向的扩散是机械无脑的热力学过程,无论是什么时候,在任何一个位置的粒子,它下一个时刻的去向都是乱七八糟、均匀地向周围渐渐摊开。但是反向过程则不一样。反向过程的粒子不是乱动的,它的演化会从一团混乱的高斯分布中重建出原有的结构。也就是说,它是从混乱变成有秩序。这是一个有信息、有方向的过程。这就是熵增和熵减的差别。
评分函数(Score Function)
于是在任何一个时刻T,我们都可以给空间上的每个位置画出一个向量的箭头,它表示这个位置的粒子在delta t时间之前,平均应该在哪。于是你就会看到这些向量组成了一幅这样的画面。
这个向量场有一个专业的名字,被称作评分函数(score function)。不得不说这个名字起得实在是有点差劲,乍一看你还以为是个打分的函数,但它其实是一个向量场。
我们可以沿用之前气味扩散的例子来理解评分函数。它就好像一只狗,沿着气味越来越浓的方向追踪发出味道的来源。本质上,它可以被看成一个越来越接近于粒子初始位置的导航。它就嗅着这个味道,哪里更浓,上一个时刻这个气体分子大概是从哪来的。
无论我们初始结构是一个点、一条线段或是一个笑脸,
我们都可以用数学来严格计算出这个评分函数。它会从空间各个地方指引着粒子如何一步步组成最一开始的对称结构。换而言之,我们只需要知道每个时间的评分函数,就可以让粒子沿着评分函数的导航,从高斯分布开始,不断靠近一开始的结构形状。这样不断重复下去,就能让时光一路倒流,一直回到最一开始。此时,一团杂乱无章的粒子就神奇地排成了最一开始的那个结构。
也就是说,评分函数的箭头以一种非常微妙却又深刻的方式,蕴含了你最一开始扩散的时候源头的形状。是不是很神奇呢?
生成图片的本质
看到这里,你可能会问:花了这么大功夫,却只为了找到扩散的源头,把一堆粒子排成一个对称,这有什么用呢?这跟生成一个图片又有什么关系呢?
其实这就涉及到另一个深刻的问题:所谓生成逼真的图片,本质上就等价于让粒子排出一个特定的结构和对称。你可能会有些懵,别急,让我先问你一个问题:当我们说一张图片看起来像是真的,数学上它到底意味着什么呢?
用一句话概括就是:这张图片的像素点不是乱来的,它得满足一些条件。在计算机的世界里,图片的本质是一串数字,或者说一个向量。因为组成图片的一个个像素信息,本质上就是RGB三个颜色的数值。所以我们可以把每个像素的RGB一个个写下来,一张图片本质上就变成了一长串数字的列表。
这些数字是有结构的。比如说,相邻的数字表述的是图片上相邻的像素。所以我们可以把每个数字当成一个坐标,于是一张图片就变成了一个向量。这些向量所在的空间叫做像素空间。你可以随时取像素空间的一个向量,把它的坐标一一转化成颜色,把它翻译成一张照片。
流形假设(Manifold Hypothesis)
在像素空间中,要知道绝大部分的向量对应的图片都是毫无意义和毫无规律的噪声,就像老式电视机收不到信号时的雪花点一样。在这个空间中,只有极少部分位置的向量,其坐标转换成图片之后看起来是有意义的,像是一张照片。
这是因为图像具有结构性。一张自然图片通常是一团一团的色块。所谓色块,就是大部分情况下,一个像素相邻区域的像素颜色都差不多。这就对这些像素之间的数值构建起了约束,就像方程一样。随机生成的像素通常来说不会满足这些约束,所以整体看起来就完全是乱七八糟的噪声了。
当然了,色块只是众多复杂约束当中的一种。一张图片要像真的,除了色块,还有结构、透视、色彩、光影等等方面的要素。但AI最神奇的地方在于,它不需要像美术生那样练基本功。在它眼里,所有这些复杂的要求,无非就是说只有极少部分的向量对应的图片是看起来真实和有意义的。它们就像这个高维空间当中一条隐藏的金色的矿脉,只有那些位置是有矿的。
我们在真实世界下拍下图片并做成数据集,就相当于在这条矿脉里零零散散地挑出了一些位置,然后告诉AI说:"看,这些就是有矿的地方。"所以真正重要的,就是这条矿脉在像素空间里,它的特定的形状和结构究竟是什么样子。
这在计算机科学里是一个非常重要的观点,
它被称作流形假设(manifold hypothesis)。意思是,所有看起来很真实的图片,本质上等价于看它是不是在像素空间中满足一个特定的形状结构,在一个流形(manifold)之上。只有满足这个流形的结构特点,站到了这个流形的结构上,你翻译出来的图片才是看起来有意义的。
所以换句话来说,只要你从空间上的任何一个位置,可以一路走到流形之上,找到矿脉上的某一个点,那么你翻译出来的图片就是真实的,你就完成了一个真实图片的生成过程。
深度学习:学习评分函数
这里还有最后一个问题:我们到底该怎么知道这个评分函数呢?之前的例子里,我们画出的箭头是因为我们知道整个数据的分布是什么,然后我们去用数学计算出来。但是在真实的世界里,我们只有一些零散的采样的点,也就是我们拍出来的真实图片而已。
而这就不得不提深度学习这项技术了,它可是这一波人工智能革命的核心技术。简单来说,深度学习仿造人类大脑的结构,构建起一个人工的神经网络。你只需要收集一堆输入,比如说不同数字的图片,以及每个输入你希望预测的输出,比如说这个图片里的数字到底是几,然后你训练这个神经网络,它就可以学习到输入和输出之间的关系,对于全新的输入给出合理的预测。
当然了,这个描述还是太过简单,有关深度学习和神经网络,之后我会出视频单独深入讲解,感兴趣的观众千万不要错过。
在刚才的比喻里,如果把输入定义成某个时刻粒子的位置,把输出规定为上一个时刻它的位置,那么训练神经网络,
本质上就是学习这个评分函数了。
当这个神经网络训练好之后,我们就可以预测扩散的前一个时刻,这个图片应该在像素空间的什么位置。这个前一个时刻的位置,噪声会稍微小一点,图像的内容会更加清楚一些。
去噪模型
所以这就是为什么这个模型叫做去噪模型。
顾名思义,沿着评分函数在像素空间移动,一点一点地去除原本的噪声,于是在像素空间中就会越来越接近于真实图片流形的那条矿脉。最终,我们就可以把一团乱麻变成丰富多样的、栩栩如生的图片了。
Sora:从静态图片到动态视频
最后,我们再来回答一个问题:Sora究竟是怎么做的呢?它为什么这么让人震撼?
答案是,它突破了之前静态的图片生成,变成了动态的视频。
但其实,如果你认真理解了刚才我们所说的这些,就会发现本质上换汤不换药。视频无非就是在图像的基础上加了一条时间的维度。归根结底,一段视频本质上是一系列图片,它进一步也只是一个超大的向量而已。
而满足看起来很真实条件的视频,虽然相比图片多了更多的限制,但本质上还是那个找金矿的思路,只不过现在空间更大、更难找罢了。
Sora最让人震撼的地方就在于,除了静态的扩散模型所具有的图像清晰、真实的优点之外,它还在时间上形成了出色的连贯性和理解力。比如说,你看这个视频中,小狗被挡住了,但当人走开的时候,它知道这个狗还应该在哪里。每个物品都不会凭空出现或者消失。这,视频生成的核心难点,也叫做长程依赖。但Sora看起来做得很好。
当然了,Sora也不是很完美。在时间维度上发生较为突兀的变化时,比如说吹生日蛋糕上的蜡烛,这些蜡烛会突然灭掉,或者玻璃杯突然碎掉,
这些逻辑Sora生成起来还是力不从心。
不过,相信随着技术的进步,这些问题之后都会进一步地解决。
第八部分:AI会让我失业吗?
AI对就业的影响
有关AI,很多人关心的切身问题是:它会让我失业吗?
总的来说,深度学习和神经网络提供了一套全新的智能思路。你只要收集数据,再用梯度下降的方法训练一个好的神经网络,就能让这个超级黑箱理解数据中的规律,从而举一反三,对任何未知的情景输入给出智能的预测。这的确是一场革命。它让AI解决了很多曾经只有人类才能完成的、非常微妙、复杂、数据庞大的任务。
因此,如果一个工作它数据充足、模式固定,其中机械性、按部就班的性质比较强,那么你就很容易收集大量的数据用于训练AI,就可以在基础的日常使用中相当程度上替代人工。
从这个角度上来说,文秘、插画、摄影、翻译、财务,甚至是底层程序员,这些职业都会在未来面临极大的冲击。
AI的局限性
然而,正如前面所提到的那样,如今的人工智能绝非万能,相反,很多时候它还是"人工智障"。
即便是现在的大模型,依然在很多复杂的问题上表现得不够理想。AI在面对超出训练数据范围的全新问题时,往往还是难以做出合理的判断。
实际上,我认为AI的发展更有可能改变工作的性质,而不是完全取代它。比如说,文秘工作可能会因为AI的介入变得更加高效,人类将在监督和决策的层面上进行管理,而并非亲自处理那些琐碎的事务。
同样,设计和创意类的工作,比如说插画、广告等等领域,尽管AI可以为你生成一些初步的作品和基础的素材,但真正打动人心的创意和灵感,目前还是需要人类的参与。
同样的,它可以帮助科研人员写文章、改PPT,甚至是进行一些简单的公式推导和代码撰写,但是真正的科研的idea还是得自己去想。AI生成的内容往往缺乏人类情感的深度、模糊和复杂性,这也是它在某些领域难以超越人类的根本原因。
更重要的是,目前的AI还缺少在现实世界中交互的能力。自动驾驶、机器人这些领域,AI的发展速度远不如大众想象的那么乐观。
总结:适应变化,与AI协同
所以总而言之,AI的确会对一些职业造成影响,尤其是那些重复性高、模式固定的领域。但同时,它也会带来新的机遇。未来的关键在于如何积极地适应这种变化,提升自身的技能,以便更好地与AI协同工作,而不是被它所替代。
人类的创造力、情感和智慧,依然是AI无法模拟和完全超越的。你也可以投入AI的潮流中,就以这篇文章为起点开始学习,多看几遍。"打不过就加入"嘛,也不视为一种好的策略。
以上就是这期文字的全部内容。制作真的很不容易,还希望大家点赞收藏,多多支持。如果你以后想看到更多类似的深度科普,记得关注我的公众号,我们下期再会。

