职贝云数AI新零售门户

标题: 这大概是我读过关于AI大模型最片面、好读又易懂的文章了 [打印本页]

作者: SP0u    时间: 6 天前
标题: 这大概是我读过关于AI大模型最片面、好读又易懂的文章了


作者:白玉光



正如李飞飞在她的自传中的说的:人工智能算法不是像传统算法那样,被告知该做什么,而是经过数据来学习该做什么,这也是本文想要表达的核心内容。

导读:

推开AI的门,你是站在门外怕迟到的人。很多人害怕迟到,害怕在众目睽睽之下,被视作一个犯错的先生。就好像,AI“呼的一下”就来了,并且发展迅猛,很多人也怕被它甩在后面,而我就是其中之一。 神经网络是了解AI大模型无法绕过的话题,是古代大模型的基石。但是别看它如今风光,在过去的半个多世纪,却是无人问津,甚至备受争议,以致于等到它再次复出时,不得不被迫改名换姓,叫作深度学习。我在第一个部分将围绕神经网络基本概念,并将本人学习过程中的疑问,融入到文章内容,希望有着异样疑问人也能有所播种。 第二部分,我会应用前文的神经网络的知识,为大家勾勒大模型的大致轮廓,先是大模型的推理,而后是大模型训练。由于GPU与大模型相生相伴,我也将在其后,分享一些AI浪潮下,它对基础设备有哪些新要求。大多数人其实很少会直接接触到大模型,而更多是经过Agent来运用它,因此在文章的最后,会简单分享一下人们是如何运用大模型的。


1.你有没有想过

当第一次体验到大模型带给你的惊喜时,你有没有想过,它到底是怎样思索的?你或许繁忙、疲惫,连思索“它是怎样思索的”都来不及去思索。可是在过去的很长工夫里,模型参数、token、向量化、蒸馏、温度系数等层出不穷的新概念,不断地融入你的工作和生活,你也许曾经习以为常,日用而不知。

我也时常在想:大模型的 “思索” 过程,和这些概念到底有着怎样的关联?有没有一条明晰的主线,能把这些零散的知识点串联起来?答案……其实就在我们常听到的神经网络里。神经网络既是大模型的思索“内核”和“骨架”,又是大言语模型的核心思想来源,以神经网络为终点,开启本文,我觉得该当比较合适。提到神经网络,我便会想起过去的一件大事儿。

2.即便是十几年后

即便是十几年后的明天,我也会时常记起,曾经教过我的一位计算机教师,他个子不高,身体匀称,戴着小框眼镜。在一次课堂上,他抛出了一个让我耳目一新的概念-神经网络。但是他对此却颇有微词,以为人类在连神经是怎样回事儿都没搞明白的状况下,提出这个实际就是故弄玄虚。虽然我一头雾水,但这种观念此后不断影响着我,当有人在我面前讲出一个“花里胡哨”的新名词时,我的第一反应总会下看法浮现“故弄玄虚”这四个字。

直到参加工作后,随着阅历的增长,我逐渐地发现,吃老婆饼的人,也并不是全都有老婆。甚至有的制造老婆饼的小作坊老板,也有单身多年的。于是,面对新事物,我的态度逐渐从“故弄玄虚”转变为“先学习看看”。

(, 下载次数: 2)

当然,让我下决计研讨神经网络的缘由,远不止于此。更为关键是,“神经网络”这四个字外面藏着“网络”两个字。在网络这个行当从业多年,职业的惯性,让我对这两个字极为敏感,以致于在我第一次做胃镜,看到又黑又粗的胃镜管时,第一个想到的就是,网络光缆被挖断时,夹带着泥土的黑色的网络光缆。

3.既不是神经也不是网络

3.1.输入层、隐藏层、输入层

人们常常会“谈神经网络色变”,缘由就在于,当你正预备了解神经网络时,有的人会劝你,要先掌握好矩阵运算,也有人会告诉你,要你懂点微积分、懂点链式求导。可是像我这样数学功底并不扎实的人来说,常常因此就望而生畏了,况且我还是个内行。

(, 下载次数: 2)

本文也正是基于这样的出发点,尝试经过梳理本人在学习过程中,对一些基本概念的了解,来为大家勾勒出大言语模型的大致轮廓。尽量达到“虽然我不知道怎样计算,但我知道为什么要算”的效果。

神经网络之所以叫网络,单纯从它的长相来看,它确的确实是由不同的层组成,每一层又有多个不同的节点,相邻层之间的节点停止了全互联(也称full-mesh),看着就像是一张“网”。

在我初次接触神经网络时,这样的架构让我喜上眉梢,让我产生了神经网络也“不过如此”的错觉。由于作为一名计算机网络从业者,“接入层交换机-汇聚层交换机-核心层交换机”这种网络分层的设计思想,对我而言,早已熟稔于心。

(, 下载次数: 2)

假如把发送流量的服务器A作为信息输入,把接收流量的服务器B作为信息输入,那么按照神经网络的定义,服务器A上联的接入层的网络交换机,就叫输入层;而接收流量的服务器B,其上联的接入层网络交换机就被称为输入层。位于输入层与输入层之间的这些层,在神经网络的实际中,把它称为为隐藏层。它叫什么当然不重要,你也可以把它称为透明层,或者黑盒层。重要的是,当别人提到隐藏层时,你心里要很清楚,其实它的结构和输入层、输入层没什么两样,只是由于它夹在中间罢了。
3.2.正向传播

从服务器发送出来的信号,进入接入层交换机后,经过汇聚交换机A-核心交换机层-汇聚交换机 B,到达目的服务器上联的接入交换机后,最终传递给接收该信号的服务器。但网络通讯向来讲究是“双工”:接收信号的服务器也有很大概率会发送信号,异样本来发送信号的服务器,也会天经地义地允许它接收信号。这样一来,车头变车尾,所以当我们讨论网络输入层时,其实也是在讨论输入层,反之亦然。

(, 下载次数: 3)

但很惋惜,“双工”的实际并不适用于神经网络。由于神经网络严厉规定了输入层就是输入层,它永远不能够变成输入层。并且信号只能从输入层单向传递到输入层。在神经网络中,人们把信号从输入层,逐层经过隐藏层后层,传递到输入层的过程,称为正向传播(也称前馈)。

这种严厉定义数据流向的概念,在我所熟知的网络范畴,也是屡见不鲜。人们最常听说的就是下行带宽和下行带宽。下行也就是下载,指的是运营商网络到家庭网络的这个方向。我们刷短视频时,流量始发于数据中心中的短视频服务器,然后经过运营商网络再进入到家庭网络。所以,对于家庭用户来说,这类流量就是下行流量;相反,对于短视频服务提供商来讲,它们流量的次要方向就是下行。

运营商可以针对不同方向的带宽策略,组合成不同的商业化产品,完成产品和收益的分层。比如家庭宽带产品往往是下行带宽远低于下行带宽,而企业宽带产品往往是下行带宽和下行带宽保持分歧。

(, 下载次数: 2)

因此,我们不得不思索,在神经网络中,严厉区分信号传播的方向,能否也像下行带宽或者下行带宽那样,有着很强的目的性?背后能否有着它不为人知的深意呢?
3.3.神经元

到目前为止,我只提到了神经网络中的“网络”,而忽略了“神经”,这对于懂行的人来说,几乎就是舍近求远。没错,要回答上述的疑问,这个时分就不得不提“神经”了。神经网络之所以叫神经网络,由于它确的确实发源于人体神经这个学科。这也就是为什么,你不能把“神经网络”简称为“经络”,由于经络是另外的人体学科,常常需求推拿。

当我在网上搜索有关神经网络的来源时,我诧异地发现,人工神经网络在我爸爸的哥哥还没出生时,就曾经被提出了。“神经”这个词源自于大脑神经元。在神经元上有两类“东西”:一类听说可以接收信号,人们把它叫作树突;另一类听说用来衔接其他的神经元,可以传递信号,人们把它叫作轴突。从命名上你也可以看出,树突像树的根须一样,用来感知人世冷暖,被以为是大脑信号感知器。而轴突,就像车轴一样,用于衔接其他神经元和传递信号。

(, 下载次数: 2)

有意思的是,大脑神经元也有着不同的分工,担任接收信号的神经元被称为感觉神经元、担任传递信号的神经元则被称为联络神经元、担任输入信号的神经元被称为运动神经元,分别对应着神经网络的输入层、隐藏层、输入层的节点。

我们大脑的感觉神经元从树突接收到信号,经过神经元上的轴突,再传递到联络神经元,最后由运动神经元输入,整个过程都是单向的。就好像一个美丽姑娘的视觉信号,传入你的大脑神经之后,你信口开河一句“哇塞”一样,就是这么自但是然。这了解起来似乎不是太难,由于你真实是很难想象相反的过程是怎样发生的。正如我很难想象人体的消化系统逆向消化是怎样发生的一样。

神经网络满含着人们对于“高度模拟大脑”的等待,就这样诞生了。正由于大脑神经元信号传递的不可逆,所以神经网络的信号传递也严厉要求不可逆,信号只能从输入层向输入层方向传递。可想而知,对于神经网络中的节点被称为神经元这件事,你也就不足为奇了吧。
3.4.线性与非线性

不过有一件事情,你必须了解,大脑神经元从树突搜集到信号后,并不是直接交给轴突传递给其他神经元。在一次与同事的闲谈中,有人说我们的大脑神经元,有能够写满了if...else语句。我觉得这很有意思,由于听说神经元有很大的自在度,当它收到信号后,可以自在选择输入或者不输入给下一个神经元。神奇远不止于此,即便是它选择输入,输入的信号强度也是不一样的。我姑且将神经元的这些行为,统称为信号加工。

(, 下载次数: 2)

异样,神经网络中神经元对于信号输入,也是要经过层层加工的,这是与网络分层通讯模型(指网络拓扑而非TCP/IP)最本质的区别之一。在网络通讯中,不同层级的网络设备只对业务信号停止转发,是彻彻底底的信号“搬运工”。这是由于网络设备最忌讳的就是对业务信号停止“加工”。只要在网络设备出现缺点时,才有能够让信号失真。所以,在网络通讯中,假如你发送给张三的红包金额是10元,无论中间的网络有多少层、多少节点,张三也一定且必需要收到10元。这种输入与输入的关系,用数学函数表示就是:y=x(x为信号输入)。那么,通讯网络中的输入和输入看起来就是一个线性关系(输入值等于输入值的常数倍,其对应的函数属于线性函数)。假如我们寻求,用一种线性函数来表达一件事的输入和输入的关系,这个过程也被称为线性回归或者叫线性拟合,比如你用大量线性组合对股价走势做拟合时,最终却能够得到一个非线性的结果。没错,虽然这听起来很奥秘,但了解起来就是这么简单。

(, 下载次数: 2)

而对于由上百亿个“自主决策停止信号加工的”的神经元组成的大脑来讲,至少在直觉上,大脑神经元输入不会是简单的对输入的一种“搬运”。大脑的输入和输入必定是一种非线性的关系。只是这种非线性的关系,人类至今还没有找到一个数学函数或者运算来准确表达。但我想,有时我说话很直接,偶然会想到什么就会说什么,用我们老家话描画就是“一根筋”,那我的大脑不会是线性的吧。
3.5.激活函数与激活

既然这样,与其说神经网络是对大脑神经元的模拟,还不如说是,神经网络所追求的是一种对大脑非线功才能的数学表达。那么,神经网络是如何试图做到这一点的呢?

成绩的关键就在于神经元对输入信号的处理上。人类虽然并不完全知晓大脑神经元是怎样停止大脑信号加工的,但至少知道经过大脑神经元加工后的信号与加工前的信号并非简单的线性关系。受此启示,人们便末尾在神经网络中的神经元接收信号之后,输入信号之前强迫停止某种非线性的变换。执行这个非线性的变换的“工具”就被称为神经网络的激活函数。也就是说神经网络中的神经元在接收到输入后,要经过激活函数计算后,才能转换成正式的输入。或许很多人对于激活函数的多有耳闻,觉得很奥秘,但理想上,它的目的就是这么的单纯。

(, 下载次数: 3)

既然我们口口声声说,激活函数就是用来停止非线性的变化,进而来模拟大脑神经元,那为什么激活函数不叫非线性变换函数呢?我们该如何去了解“激活”这两个字?

在神经网络诞生前,人类发现并不是恣意的信号进入大脑神经元都可以转换成输入的,而是仅仅达到某个阈值后才能转换成有效输入,这个超过阈值进而“点亮”神经元的过程就被自但是然地称为“激活”,就像有些人喝咖啡要至少3杯以上才能激活工作形态一样,这里的三杯就是一个激活阈值。于是激活函数的名字就被顺理成章的沿用至今了。

激活函数只是对普遍运用在神经网络中,可以停止非线性转换的一切数学函数的统称。从神经网络诞生至今,人们在神经网络中采用过多种不同的类型的激活函数。最早运用的激活函数名为“阶跃函数”,虽然它名字听起来很“生僻”,但假如我告诉你,输入信号经过阶跃函数的变换后,只会输入0或者1两个数字,想必你一定会觉得它还是很“咄咄逼人”的。

阶跃函数并非单单由于足够简单才被运用到神经网络中的,而是由于阶跃函数完美契合了前文中提到的人类对于大脑神经元的了解:大脑神经元超过某个阈值后才会输入有效电波(可以用“1”表示),低于某个阈值就不输入电波(可以用“0”表示)。

(, 下载次数: 4)

假如把阶跃函数比作安装在神经元上的“水龙头”,那么水龙头只要流水或者不流水这两种形态。人们越来越觉得它所能表达的输入信息很有限,很难模拟非常复杂的人类大脑。于是后来人们更换了另一个“水龙头”,这个水龙头不只可以完全开启和完全闭合,而且可以控制水流大小。它的名字叫“Sigmoid函数”(当然也是非线性函数),外形是平滑流利的S型,也被称为S型函数,可以输入0-1之间恣意的延续数值。这样一来,它就可以精准表达神经元的‘激活强度’,而非单纯的‘激活/未激活’,进而能拟合更复杂的非线性关系。

(, 下载次数: 3)

在神经网络不同的发展阶段,都有着不一样的激活函数在被运用或者被尝试,采用什么样的激活函数,既有上述提高输入丰富度、拟合复杂成绩的思索,也与神经网络本身的计算复杂度、计算成本有关。更重要还是“莫看广告看疗效”,哪个激活函数在实践训练过程中更能拟合人类大脑,不会产生各种各样成绩,哪个就是最好的。虽然这听起来有点像废话,不过还请稍安勿躁。
3.6.权重和偏置

关于神经元的非线性输入,我们讨论了很长工夫,却忽略了最后的信号输入环节。这会让人误以为信号输入是自然发生的、是“天经地义”的事情。实践上并非如此,输入层的每一个神经元会将本人的信号传递给相邻隐藏层的一切神经元,这意味着隐藏层的单个神经元会同时接收到上一层多个神经元的信号输入。

假如你化身为神经元,对于多个信号输入,你会怎样处理呢?摆在你们面前的能够会有两个选择:其中一个选择是先对每一个单独的信号运用激活函数,停止非线性变换,然后将每一个变换后的结果“综合”起来,再传递到下一层;而另一个选择是先将一切的输入“综合”成一个结果,再针对这一个结果运用激活函数停止非线性的变换。由于后者仅仅需求一次综合运算,一次非线性变换,单从计算量上看,先综合后变换,计算成本较低。理想上,神经网络采用的也正是后者。

可是神经网络采用“先综合后变换”的缘由,远不止于此。关键缘由是非线性变换前先停止综合,有助于神经元可以捕捉不同输入之间的复杂关系。这句话虽然了解起来有点难,但是我觉得我总结的却是恰如其分。正如我给客户常常输入2-3个可选的网络方案一样,经过比对它们之间的优劣之后,再给出最佳的方案建议。综合的过程实践上就是捕捉它们之间关系(例如方案A比方案B技术复杂高)的过程。假如在综合之前,我先对不同方案分别停止了加密处理,那么我就很难捕获它们之间的优劣。虽然加密和非线性变换不可等同来看,但这有助于你加深对它的了解。

(, 下载次数: 3)

接上去就该聊一下“综合”的详细完成了,这和我们整合客户方案的思绪有点相似:根据客户需求,为不同产品在整个方案中分配不同比重,然后与客户停止分享和交流。神经网络中的神经元,异样会为不同的输入分配不同的权重(用w表示)。假如用x1和x2分别表示第一个信号输入和第二个信号输入,用y表示综合后的结果,那么y=w1x1+w2x2(其中*表示乘以)。与此同时,你也可以看到,**y与x也是线性关系**,由于线性函数加上线性函数最终还是线性函数,用稍微专业一点的话来讲就是:**加权求和本质就是线性组合**。接上去,我们将综合后的结果y,代入到激活函数停止非线性的变换后,再传递到下一层的一切神经元。这听起来是多么的自然。

(, 下载次数: 2)

聪明的你能够曾经发现,我写的公式好像和别人的不一样,别人的书籍里写的普通是:y=wx+b。那么我把这个b藏到哪里去了?其实。这是由于我还没有写完。前文我们聊到激活函数之所以叫激活的缘由时,我们提到了阈值的概念。神经元将不同输入用权重加权求和后,还要和阈值停止比对后,才能被代入到激活函数。假如用t表示阈值,那么当激活函数为阶跃函数时,仅当y`-t>0时,经由阶跃函数计算后,输入才会是1,否则就是0,0就表示神经元没有被激活。

神奇的时辰到了,假如t表示阈值,-t就是你所看到的b。这里的b,在神经网络中被称为偏置,它的作用就是用来表示神经元被激活的难易程度。如你所愿,下面才是神经元从输入到输入的残缺公式:y=f(wx+b)(y表示输入,f表示激活函数,w表示权重,x表示输入,b表示偏置)。虽然这个公式是到目前为止最长的一个函数,但我置信你对它曾经豁然开朗了。
3.7.神经网络的参数

权重和偏置是组成神经网络最基本的参数,它们是神经网络的“内核”。因此我们日常提到的模型参数,常常指的便是这些神经元的权重和偏置。神经网络中的每个神经元都具有独立决策才能,不同的神经元对待上一层相反节点的输入并非是厚此薄彼的。相反,不同的神经元会给来自相反神经元的输入,分配不同的权重。那么,假如一个神经网络有很多、很多层(隐藏层层数多了当前就叫深度神经网络)、每一层节点很多,那么这个神经网络的权重数量自然就会添加,添加到足以让你惊叹的规模。例如GPT-3的参数规模就达到了1750亿,而最新发布的deepseek V3.2的参数规模曾经打破了6700亿。

(, 下载次数: 3)

了解神经网络的冤家们,能够还听过叫作“超参数”的东西。“超”是什么意思?是超级凶猛、超级牛掰的“超”吗?其实它依然是非常简单,只是由于超参数常常与神经网络或者模型的训练相关,所以我打算将它放在下个章节与大家分享。
3.8.权重与参数、变量、数据

在一次和同事闲谈时,我们都产生了一个疑问:一个动辄几十 GB 的大言语模型文件,难道外面装的全是冷冰冰的数字?这些数字又如何最终转化为人类能读懂的文字?模型文件的主体的确就是参数。不过当时我们忽略了一点,模型文件里还藏着一个叫词表的东西。神经网络输入的数值,都会被映射到词表外面的词,转换成我们能看懂的文字。想通这一点后,我瞬间豁然开朗。

此外,初学者很容易把参数和变量混为一谈。究其缘由,是神经网络的参数在训练过程中会不断更新,看起来是 “可变” 的,于是觉得它是变量。但是在神经网络中,无论是学习阶段(模型训练阶段),还是后续的验证、运用阶段(推理阶段) ,权重和偏置这些参数本质上是 “被不断调优的常量”。它们虽然会在训练中随着数据迭代不断调整,但一旦训练结束、模型固化,这些参数就会固定上去,成为模型的 “固有属性”(重新训练意味着要修正成千亿的参数,成本较高)。而真正的变量,指的是模型接收的输入数据 ,当然这些数据也会被提早转换为数字的方式。

(, 下载次数: 3)

4.神经网络的学习

4.1.神经网络与矩阵运算

假如你此时手里有只笔,不妨简单勾勒一下,我们前文中提到的几个基本概念:在一个由一个输入层、一个隐藏层、一个输入层组成的神经网络架构中,每层都有两个神经元。两个信号被传递到隐藏层的每个神经元,经过加权求和,被送入到激活函数停止变换,然后传递到输入层,这便是神经网络的全貌了。

假如隐藏层数量较多,那就叫深层神经网络,至于“较多”到底是多少,我置信你不是特别关怀。你能画出三层神经网络架构,也就可以画出30层,只是多耗费写笔墨而已。关键不在于如何去画,而是在于如何去算?但你也不必太过担心,由于它的计算过程依然非常简单,如图所示(图中省略了偏置b),无非就是输入值乘以一个权重值或者分数值,再停止求和而已。

(, 下载次数: 3)

可是假如摆在你面前的是一张拥有1750亿个权重深层神经网络,你的感受又是如何呢?我们当然可以说:“反正也是交给计算机去计算,我无需在乎”。但成绩的核心恰恰就在于此:我们用笔从左往后右、以“拓扑展开”的方式,层层递进,逐神经元分步运算的计算过程,如何才能转换为计算机可以了解的方式去计算呢?

我虽然试图把复杂的技术讲得粗浅,但在数学面前,就算我再怎样“巧舌如簧”,也没办法改变它的严谨和笼统。所以我不得不坦诚的讲:这个转换的过程实践上就是数学中的矩阵运算。假如你学过简单的矩阵运算,你就会说:哦,原来如此。

(, 下载次数: 3)

1)把隐藏层第一个神经元到上一层一切神经元的权重,放在一行(行向量):(w1,w3)

2)把输入层一切信号,放在一列(列向量):[数学公式]

3)隐藏层第一个神经元的输入=行向量乘以列向量

4)假如隐藏层有 2 个神经元,权重就会组成一个 2×2 的矩阵,输入信号还是 2×1 的列向量,一次矩阵乘法就能算出隐藏层一切神经元的加权和

不论你能否看的懂,你只需明白,神经网络正向传播的过程,本质上就是多个不同矩阵按序相乘的过程。我们要做的仅仅是把这些权重(偏置等)矩阵分发给GPU停止并行计算即可(我将在后面的章节简单分享GPU的并行计算方式)
4.2.预测值、目的值、神经网络学习

神经网络的本质是对大脑的模拟,其正向传播则是模拟大脑神经元的思索过程,而正向传播的输入则是神经网络的思索结果。可是模拟毕竟只是模拟,如何评价输入结果的好与坏是最先要思索的。于是,必须设定一个评价标准,给定一个参考值是必不可少的。假如神经网络的输入与预设的参考值之间的误差很小,甚至可以忽略不计,那么这个输入就被以为就是好的。反之,假如输入与参考值误差很大,那么这个的输入是不好的。好或者不好都是人类意志的表现。在神经网络以及大模型范畴,人们把输入称为预测值,而把预设的参考值称为目的值,人们也把标注目的值的过程称为打标签,我也不知道为什么非要叫这个名字。

假如一个输入信号经过神经网络层层计算,最终的输入与目的差不多接近,那么我们就会说:好吧,干的不错;假如输入与目的不分歧,那么我们就会想方设法的更新权重和偏置,不停地尝试,减少与目的的差距。这个不断尝试更新权重的过程,我们就称它为神经网络学习。很分明可以看出,这个学习不是自主停止的,而是被人工标记的“目的值”监督停止的。
4.3.照进神经网络的光

这个世界是需求我们感知它的冷暖与悲欢的,我们靠皮肤感受阳光的暖和、靠眼睛发现人们愁容里的灿烂,用嗅觉感受着凡人心外面的烟火气……这一切最终会成为大脑神经元的输入信号。

可是,我下面提到的“输入值”、“预测值”、“目的值”听起来是如此的“不近人情”、如此的“冷冰冰”,这些笼统的东西和人世的人情冷暖又有何干?

人类对此早已有了回答,随着技术的提高,我们曾经可以把文字、图片、视频、语音用一串串的数字来表示,这些技术曾经在过去,都各自发展成了独立的学科,并走进了我们的生活。人工智能也是伴随着这些多学科的发展而发展的。神经网络的输入层所接收的信号,便是这些范畴数字化后的数学表示。因此,不论是输入还是输入都可以从“理想照进神经网络”,变成一串数字,停止计算。比如说,大言语模型中的“token向量”,实践上也是一种对于输入停止数字化的一种方式,对于token和向量,我们也将在后面的章节展开讨论。

(, 下载次数: 2)
4.4.损失函数

前文曾提到,神经网络的学习实践上根据“输入值与目的值之间的差异”来停止学习的,我们也把预测值与目的值之间存在的差额,称为误差或者叫损失。例如,在大言语模型中,我们把“恭喜”这个单词转换为数字,输入到神经网络中,假如输入的结果是“发财”的数字化表示,那么这个预测结果还不错;假如输入的结果是“春节”的数字化表示,那么这个预测结果就很难让人称心。此时我们就会拿着“恭喜”与“春节”之间的差额,经过更新神经网络参数,来逐渐逼近“恭喜”。

这里需求留意一个关键成绩:神经网络的计算误差时,常常需求叠加多个训练样本(即训练数据)产生的偏向。假如直接用简单的减法计算单个误差,那么一切样本中得到的结果就会有正有负。在误差叠加的过程中,这些正负误差很能够会互相抵消,比如一个 +3 的误差和一个 -3 的误差叠加后结果为 0,这会让模型误以为 “没有偏向”,进而有失公允,无法有效完成学习。

hi,bro,你也看到了,神经网络的研讨范畴还是比较广的,单单是一个误差的计算就有这么多门道,为了处理正负相抵的成绩,有的人想出了用“相对值“函数去掉误差的负号,也有的人想出了用”平方”函数取消误差的符号,这些函数也被统称为损失函数,你也可以叫它误差函数,随你怎样叫。特地提一句,在古代大言语模型中,常常运用一个叫作交叉熵的损失函数来计算误差,这是由于言语模型本质上是一个概率模型(我们将在大言语模型中揭示这一点),而交叉熵函数可以更好的顺应它。

如今我们重新复习一下,神经网络学习的过程,用数学言语来表达就是,经过损失函数计算的损失,来更新神经网络参数,目的是让损失函数的结果在多轮学习后,有限逼近于0。

由于神经网络的最终输入是一切神经元共同计算的结果,因此人们有充分的理由以为,损失的产生是一切神经元共同作用的结果,没有一个神经元是无辜的。那么在成千上万的神经元中,我们如何将误差停止“分摊”,让每个神经元承担该有的责任,并且各自停止“整改”呢?为了回答这个成绩,反向传播便应运而生了。
4.5.什么是反向传播

神经网络既然有正向传播,那大概率就会有反向传播,假如没有反向传播,那正向传播中的“正向”或许就得到了它修饰的意义。所谓 “反向”,顾名思义,信息(不再是信号)传递的方向停止了 180 度大转弯:不再是从输入层到隐藏层再到输入层的 “正向推进”,而是从输入层朝着输入层的方向逐层传递(强调一点,不管是正向还是反向均不允许跨层传递信息)。

反向传播被以为是学习神经网络过程中最为困难的一个知识点之一,它的困难并非是对于概念本身的了解,而在于反向传播的目的终究是什么?要回答这个成绩,我觉得就不得不先思索一下:正向传播的目的和本质什么?
4.6.反向传播在传播什么

反向传播的诞生就是为了处理误差“分摊”的成绩,这是它的宿命。但我们不由要问,为什么误差只能从输入层向着输入层的方向停止传递呢?误差为什么不能正向传播呢?要知道,正向传播相当于运用激活函数对最后的输入停止一次又一次的“套娃”,套娃的最外层就是神经网络的输入层,因此只要输入层才看得见最终的“误差”,输入层对“误差”负有最直接的“责任”。就好像在组卸车间的流水线上,很多组装工人可无能了好几年,都没见过最终的成品,成品的合格率只要的质检员才有一手的数据。

因此,只要我们不断的反向解开套娃,才能将误差逐层地“分摊”到更后面的神经元。由于“解套娃”的过程只能是反向的,所以才叫反向传播。就好像成本不合格时,也是“逆向”地逐层落实责任。

当神经网络的思索结果与理想不符,出现误差时,我们该怎样“追责”?能否可以采用“各打三十大板”的策略,将“误差”逐层平均分摊到每一层的神经元,这看起来是一种与日俱增的简单做法。但我们更为朴素的想法是:正向传播过程中,拥有较高权重的神经元大概率也会对误差有着较大的影响。正如人们所说,才能越大责任就越大。因此误差的反向传播,有着两种最为直接和朴素的策略,一类是平均分配;另外一类就是加权平均。这了解起来似乎很轻松。

(, 下载次数: 2)
4.7.权重更新策略

不论运用哪种误差传播策略,当每个神经元有了本人该承担的“误差”后,它接上去就要想方设法地去消弭误差,让属于本人的误差尽能够逼近归零(强调一下,是误差逼近零而非输入逼近零),那它该怎样做呢?理想上,它并没有太好的办法,只能是采用相似于你的老婆和(huo)面蒸馒头时的策略:面硬了加水,水多了加面。神经元假如发现本身的误差较大,那么它能够会减小权重(当然还会调理其他参数,比如偏置),反之,则能够会添加权重。我之所以用“能够”,是由于每个神经元的输入还会被放入到激活函数,停止非线性变换,于是权重的添加大或减小,能够带来相反的、不是很确定效果。

(, 下载次数: 4)

因此,基于阅历或是猜测停止权重调整,妄图去消弭成千上万的神经元误差,看起来是一种“碰运气”的方式,就算有幸碰对了,也要投入宏大的计算成本。况且,这次样本训练碰对了,没人可以保证下一次可以碰对。
4.8.链式求导与延续性

这个困局在神经网络发明的几十年里不断存在着,直到1986年辛顿等人发表的论文,提出将链式求导法则运用在神经网络参数更新上,神经网络才迎来打破。链式求导使得神经网络参数不再是漫无目的更新,而是有了准确可计算的数学根据。这相当于和面的徒弟,从阅历派转变为学院派,细心看了菜谱,菜谱说:蒸10个馒头,需求750g面粉和200ml温水(面粉和温水数据来源于网络,请慎重鉴别)。

(, 下载次数: 3)

遗憾的是,接上去你不会看到链式求导的推导过程。由于一方面这类引见比比皆是,而本人数学功底浅薄,无法做到深化浅出;另一方面,本文次要聚焦在基本概念的科普,而非数学推演。我想让你知道是链式求导法则归根结底,是在神经网络存在误差或者损失时,用来准确计算神经网络参数的变化量。

但是,不停止链式求导的数学推演,并不意味着要放弃对其核心思想的解读,何况其核心思想非常具有吸引力。在早先年,为了防止自行车被盗窃以及有人不交停车费,有的管理员常常用一条很长的铁链把一整排自行车全部连环锁起来,假如有人不慎推倒后面的一辆车,后面的自行车会相似于多米诺骨牌一样,被铁链接连拽倒,这就叫“链式可导”。数学中链式求导的前提条件是要求函数是延续的,就像被铁链子拴起来一样延续。假如出现断点,那么就是“不可倒”,没办法停止导数计算。

(, 下载次数: 4)

链式求导计算的是损失函数的导数,而损失函数归根结底计算的是预测值与目的值之间的差异。而预测值本质上又是一系列激活函数层层计算后的结果,因此链式求导不只要求损失函数是延续的,而且要求激活函数也是延续的,否则没办法求导,进而无法准确计算误差更新。这也就是前文中提到的,阶跃函数后来被S函数替代的根本缘由,由于阶跃函数虽然是非线性函数,但是它是不延续的函数,没办法运用链式求导法则。

由于链式求导的过程本质上是从最外层的“套娃函数”向最内层的“套娃函数”计算偏导数的过程,因此链式求导依然是反向传播的详细运用。
4.9.梯度下降

神经网络中,链式求导与梯度下降常常一同被人提及,那么梯度又是什么?下降又是什么?为什么这么概念,好烦人。

我们先来看看,关于梯度下降的普通性解释:神经网络中,我们针对数值上延续的损失函数停止链式求导,计算权重和偏置的偏导数,这些偏导数共同构成梯度,用来确定更新方向,然后应用梯度下降法确定参数的更新量。于是我们可以得出以下三个结论:

第一,不论是链式求导还是梯度下降,作用的对象都是损失函数,最终的目的是经过不断更新参数,将损失函数的结果达到最小值,即误差趋近于最小值。这是神经网络的永久目的,不容改变。

第二,链式求导计算出的结果即偏导数,应用这个结果我们可以确定神经网络参数的更新方向,它为每个神经元的参数计算出了一个“指南针”。

第三,梯度下降,就是按照指南针,来确认参数更新的变化量的方法。其中下降指的就是损失函数误差逐渐减小。

这便是链式求导与梯度下降的关系。另外关于梯度下降,坊间还传播一个说法:假如把一个球放在半山腰,他便会按照下降最快的方向,到达一个部分的最低点。这个说法听起来几乎就是如沐春风。

(, 下载次数: 4)

不过能够有人觉得这个说法过于浅薄,缺多数学根据。其实你误解了,这恰恰是对数学实际的粗浅总结,这个实际便是泰勒展开。泰勒展开从数学上证明了:在当前(神经网络参数一末尾是随机化生成)参数点附近,沿着负的梯度方向小步调整,能保证损失函数值以最疾速度持续下降。我置信,在你深化探求后,定会有更巧妙的播种。

Δθ= −η⋅ ∇θL(θL损失函数梯度),该公式展现了参数更新量与参数的梯度关系,即【参数更新量】等于**负的常数倍的参数梯度。以神经网络单个参数[数学公式]为例,更新后的[数学公式]=[数学公式] *−η ** [数学公式]

5.初识大言语模型

神经网络既是大言语模型的思索“内核”和“骨架”,又是大言语模型的核心思想来源,这一点无须置疑。但过于核心的东西往往显得笼统,不够详细,听多了能够会觉得无聊。因此,虽然神经网络还包含了循环神经网络、卷积神经网络等很多内容,但既然你曾经读到这里,不妨用前文积累的知识小试牛刀,和我一同揭开大言语模型的奥秘面纱。此刻,鼓励一下本人吧,置信你有了前文的铺垫,后面的部分了解起来一定会游刃不足。
5.1.大言语模型与神经网络

不论你讲的是东北话,还是陕西话,和你交流的人都会觉得自但是然,不觉得会奇异。甚至就算你不会用手写但也知道怎样用嘴说,这是由于言语是人类在日常生活中自但是然构成的,所以我们的言语也叫自然言语。

大言语模型便是专门来处理自然言语的神经网络模型,它本质上也还是神经网络模型,但是由于它是专门处理自然言语的,因此在自然言语处理方面想必会它的重头戏:一方面,它要在自然言语输入神经网络之前,停止预处理;另一方面,在神经网络输入后,要转换为人类可读的自然言语。

(, 下载次数: 2)
5.2.Token、分词

不论你操着什么样的方言,宣泄着什么样的心情,要想让大模型停止处理,都必须转换成可读的文字。回想一下,我们学习一门言语时,是不是先要认字,并了解它的含义。大言语模型也是这样“照猫画虎”,对于输入大模型的句子或者段落先要停止“断句”。例如我爱吃香蕉,它会被拆分成 我 | 爱 | 吃 | 香蕉这个四个词,显然,我们普通不会把“香蕉”这个词拆分成两个部分,这就是断句,也被称为分词。分词的最终目的,是将文本拆解为语义严密关联、且具有独立意义的最小言语单元。

用于分词的计算机算法有很多,什么?分词也需求算法?那可不嘛,智能不够,就靠算法来凑嘛。其中有一个叫作BPE的算法很有意思,假如在一段文本中,某两个字常常(高概率)挨在一同,那么,他们就被以为是具有独立语义的分词,像吸铁石一样,被组合在一同,成为分词,加入到分词表。就像当年在高中时,在晚自习之后,你和她三番五次(概率高)的被班主任“偶遇”,你们两就会被默以为是一对儿,成为“重点关注对象”。经过分词算法,被拆分出的这些词也被称为Token。

(, 下载次数: 3)

一些大模型会对外提供计算token的接口,以GTP为例,我们可以经过访问:* https://platform.openai.com/tokenizer *,来计算输入的token以及对应的独一编号。

(, 下载次数: 2)

(, 下载次数: 2)

5.3.词表与词表大小

Token并不是你用的时分才会被拆分,而是会预先生成。预先拆分好的Token会被记录在词表中,不论是训练用到的样本数据,还是推理时的用户成绩,都要经过查询这个词表来停止分词。那为什么训练阶段和推理阶段不能运用独立的分词算法停止Token拆分呢?

由于模型训练的本质其实是把词表中已有的词输入到模型停止学习,训练终了后,模型参数就固定上去,也就意味着模型完成了对词表内容的学习。因此模型的了解才能完全取决于其对词表中Token语义的了解。

假如推理阶段不用“查字典”的方式来拆分Token,运用新的分词算法,很能够拆分后的分词在词表中查询不到,导致模型无法了解“生疏”的Token。另外,每次应用分词算法,停止分词的效率远远低于查字典的方式。

词表中Token数量、种类不是越多越好,假如数量太多,而对应的训练数据不足,就会形成词表学习得不够充分。此时就愈加凸显出高质量训练语料的重要性了。反过来,假如词表数量过少,就会出现另一个尴尬的场面:人们总是拿着一年级的生词本去了解一本书籍一样,这就会导致大模型的表达和了解才能不足。

(, 下载次数: 5)
5.4.向量化和词嵌入

看过前文的冤家应该知道,大模型学习其实就是矩阵运算(正向传播)和链式求导(误差反向传播)的过程,因此输入到大模型中信息必须是可以被计算的单个数值或者多个数值,因此token在进入大模型之前还需求被转换为单个数值或者多个数值。假如1个数值对应空间中的一个点,2个数值对应的就是平面坐标,多个数值对应的便是多维空间向量,也被称为张量。就信息表达的丰富度而言,用多维向量来表示一个token是不错的选择。于是用多维向量表示token的过程,被称为向量化。

我听人们常说大言语模型可以学习言语的语义,这里的语义实践上指的是分词之间的亲疏远近,例如“妈妈”和“母亲”、“靓仔”和“帅哥”语义上几乎等同。那么,当他们被转换为多维向量,也就是一串数值之后,我们如何去表达他们之间的亲疏远近呢?

我们都知道,两点之间直线最短,我们虽然很难计算两点之间曲线、弯线的间隔,但我们很容易计算两点之间直线的间隔。这时你能够也会浮现出直角三角形求解最长边的画面:[数学公式]+[数学公式]=[数学公式],经过这个勾股定理公式便很容易求解两点之间的间隔。多维空间也异样存在着这样的间隔,内行人常常把它称为欧几里得间隔。

(, 下载次数: 2)

欧几里得间隔非常直白地、非常坦诚地给我们展现了,不同向量的之间的亲疏远近,我们觉得也非常nice。但是,就怕的就是但是了,但是在神经网络计算过程中,这些向量能够会被拉伸或者减少,这就会导致他们的之间的间隔会发生“激烈波动”。例如爸爸在中年后能够会发福长胖,但是这丝毫不会影响它和“父亲”这个词的等同关系。由于即便是长胖或者变瘦,他的本质属性没有改变。那么如何用数学的言语来描画向量之间的本质关系呢?

我本人是不太能够揣摩出来的,我也是看了后人的结论,才在这里用文字与你相遇。空间中的多维向量除了有“间隔”的属性外,人们把目光瞄准了“向量夹角”。假如两个向量之间的“夹角越小”,人类就可以“傲慢地”把他们视作“关系越近”。按照这个假设,人们就末尾设法把语义相近的token,尽能够经过“数学的言语”,使得他们的夹角越小。这个数学言语就是知名的向量点积,知名归知名,但向量点积,或许你闻所未闻,见所未见。我不想再和你绕弯子了,我要直接告诉你,向量点积计算公式向我们揭示了:点积结果越大,那么他们的夹角就越小,他们所表达的token语义就越相近。

最后,我们把token“放入”或者“嵌入”到一个多维空间后,用向量来表示的整个过程称为词嵌入(Word Embedding Vector),你也可以叫词放入或者词的向量化,由于本质上,他们都是一个意思。

(, 下载次数: 2)

为了加深了解,你可以尝试去想一下,在计算机上我们是如何表示颜色的,你能够听过RGB三原色,没错,一种颜色,其实可以是,用一个三维向量来描画一个对象(图为photoshop中调色板对应的RGB三维数字)。

(, 下载次数: 2)

token对应的向量一末尾是随机产生的,需求经过不断的训练,才能具有语义上的关联性。但是别人曾经训练好的向量,你可以拿来即用,这就叫迁移学习。比如GloVe词向量文件就是别人曾经训练好的,你可以直接下载上去运用,经过相似度计算函数,你会发现“男人”与“女人”的相似度高于“男人”与“猫”的。
5.5.大模型的输入

当抑扬顿挫的中国话(以汉语举例),转换为多维向量后,就会被送入神经网络停止计算,看过前文的冤家都知道,神经网络的计算本质上就是简单的、反复的矩阵运算。假如跳过前文,直接离开这个章节的冤家,你也不要有太多顾虑,你姑且把神经网络当作一个“迷宫”好了。如今假设你站在“迷宫”的出口,你一定很猎奇:输入的向量经过神经网络的一番打扮后,从出口出来的终究是什么?

这个需求你闭上眼睛好好想想:假如“恭喜”的多维向量输入到神经网络后,你觉得应该输入什么?其实这个要分场合,在喜宴上,跟在“恭喜”后面的常常是“新婚高兴”;在满月宴上,最常说的是“喜得贵子”;而在国足的庆功宴上,能够会是“恭喜夺冠”。但是,假如你身在宴会,却对宴会主题毫不知情时,你也虽然可以说“恭喜发财”,由于很少有人不喜欢“发财”。人这终身,并不是随时可以生子、结婚、夺冠的,但是你可以逢人就说“恭喜发财”,礼多人不怪,别人一定不会因此打你。

(, 下载次数: 4)

下面的例子,本质上是一种统计学中的概率事情,神经网络的输入表示的是对输入的预测,而预测的结果就是概率(难怪有人说大言语模型其实就是概率模型)。什么的概率?谁的概率?回到下面的例子中,概率指的就是:新愉高兴(概率0.1)、喜得贵子(概率0.1)、夺冠(概率0.01)、发财(概率0.6,并非指真的发财,请读者感性对待)。最后,大言语模型会挑选一个概率最高的分词作为最终输入,呈现你的面前,于是,你惊呼牛掰。

(, 下载次数: 2)

训练好的大模型几乎不会输入“恭喜刷牙成功”、“恭喜吃饭成功”,由于给到大模型学习的训练语料很少有这样的表达。但大模型的输入也会赋予它们一定的概率,只是概率比较低而已。其实,我这里真正想表达的是:大模型中神经网络的输入是对整个词表中一切token的预测概率。也就意味着神经网络的输入层节点数量等于词表中token数量(我从来没有讲过输入层节点数一定要等于输入层节点数)。
5.6.Softmax与概率预测

怎样样?是不是很简单。的确是有点简单,但是这样也太简单了吧。其实,这个成绩的复杂性,依然来源于:我们如何用数学的方式来表达下面的结论。

我们知道,神经网络最后的输入是经过激活函数变换的结果。假如运用Sigmoid作为激活函数,那么最终会输入一连串的0到1范围内数值。又由于相反层不同神经元之间并无“南北”或者“垂直”方向上的衔接,因此他们在计算过程并无依赖,彼此独立,毫无瓜葛。

这样一来,神经网络的输入便是一系列互相独立的数值,这与大言语模型的“概率预测”适得其反。由于你知道的,爱是不能被分享的,你爱这个男冤家多一点,另一个男冤家得到的爱就会少一点。大言语模型预测出的不同token概率,它们之间也是此消彼长的关系。并且不言而喻,这些概率的总和必然为1。但……这个计算过程……是怎样样的?

你是不是一下就想到了:把一切输入层节点的数值,加起来,计算个总和,然后每个节点的数值除以这个总和,不就是概率了。哇塞,你也太牛了,这么核心的计算公式居然被你信口开河了。留意,行内人常常把这种零散的、毫有关联的数值,映射为固定范围(例如总和为1)的数值,称为归一化。

(, 下载次数: 3)

不过,冤家,其实你还差最后一步,在数值求和前,为了更凸显概率之间的差异性,完成“好的更好,差的更差”的目的,还要先对数值停止缩放,不过好在整个过程可以用数学函数完成,运用的比较广泛的便是被Softmax的函数。
5.7.概率与token映射

大言语模型经过Softmax函数输入一大堆的概率分布后,终究,哪个概率对应哪个token呢?其实,我们在建立词表时,同时会对词表中的token停止编码,或者叫索引。例如,假如用列表或数组表示一个词表,例如[“恭喜”、“发财”、“夺冠”、“喜得贵子”],那么就可以用id=0、id=1分别表示“恭喜”、“发财”。

假如把“恭喜”的向量输入到大模型后,最终输入的归一化概率也用列表来表示,比如[0.1,0.6,0.01,0.1……],那么我们就以为最高的概率0.6对应的便是词表中id为1的token即“发财”。
5.8.单标签与多分类

假如神经网络输入层的只要一个神经元(类别空间是1),那么这个义务被称为二分类,由于这个神经元的数值要么趋近于0,要么趋近于1,仅仅能表示人类言语中的“是”或者“否”(例如,这段文字能否做到了粗浅易懂?你回答,是)。但,你如今知道了,大言语模型的输入层神经元数量远大于1(类别空间等于词表大小),因此对它停止训练的义务被称为多分类义务。

假如多分类模型中,每个输入层神经元的数值彼此独立,人们就把它称为多标签;而大言语模型输入的不同概率之间拥有着此消彼长的关系,那么我们把它称为单标签。虽然我也不清楚,“标签”这个词,是被哪个人运用到了言语模型里的。但我很清楚的它的意图:一个人既可以被打上“父亲“的标签,也可以被打上“飞行员”的标签,二者没有关联,彼此并不影响。那是不是叫单属性或者多属性也可以?随你怎样叫好了。

(, 下载次数: 4)

6.我的昨天在消逝,明天不可知

6.1.上下文

“我的昨天在消逝,明天不可知,我为何而活?为每一天而活,活在当下”电影《依然爱丽丝》中的主角爱丽丝在阿尔茨海默症患者协会演讲中这样说。而在为情所困的人们中间,潜伏的寂寞干不掉,相思的苦多难熬,“遗忘”或许是一剂良药。但假如我们真的“遗忘了”,或许,我们能够得到了自主生活的才能。

“记忆”或许是人类大脑区别于其他物种最为神奇的地方,在神经网络的相关章节,我们反复提到,神经网络的出现的目的就是为了拟合人类大脑。可是直到如今,我并没有提及:大言语模型是怎样记忆的,哪怕半个字。

难道说大言语模型不需求记忆吗?显然不是,大言语模型需求的恰恰是记忆。例如,你对大模型说“我喜欢你”,没有记忆的大模型,只能捕获最后的一个字“你”,而忽略掉前文整个语境,最终的输入能够是“好”字的向量化表示。假如我对你说:我喜欢你,而你跟我说:你好”,这听起来是多么悲情啊。

有记忆的大模型,可以捕获整个句子中一切分词的语境,圈里人把这个才能称为大模型上下文(contexts),“上下文” 这个词可以说大模型相关概念里最有亲和力的一个 ,毕竟,我们的小学语文教师常常把它挂在嘴边,教我们阅读课文时要结合上下文了解,真实不了解就背诵上去。

对于“我喜欢你”,没有记忆的大模型,只能关注到“你”;有记忆的大模型,能够会关注到“你”周围的三个字“我喜欢”。可是假如大模型仅仅能关注“周围三个字”,也也会带来新的成绩,例如假如此时你说的不是“我喜欢你”,而是“曾经我喜欢你”,对于仅能处理“周围三个字”的大模型来说,它的了解才能依然是不足的。我们也把“分词周围的分词数量”成为上下文长度。就好像刚刚这个例子,上下文长度太短能够会形成歧义。
6.2.循环神经网络

在自然言语处理中,“上下文”有着无足轻重的地位。这是由于,从我们嘴巴外面出来的“词语”的含义,很大程度上,取决于这个“上下文”。这样一来,我们需求重新定义一下大模型:大模型本质上经过接收上下文,使得输入的最高概率尽量地接近目的词。因此,我们就不得不想方设法地将“上下文”或者“语境”融入进“模型输入”里去。

我们每个人都只要一张嘴,你语速再怎样快,也只能是一个字接着一个字讲。而听你说话的人,就像是一个大模型(假如不特别阐明,大模型特指大言语模型),也只能一个字一个字地接收。关键的时辰就要到来了:听的人总会根据刚听到的上一个字,下看法猜下一个字会是什么,等下一个字真的出来了,又会把后面一切听到的内容全攒到一块儿,接着往下猜后面的话。

(, 下载次数: 2)

但我们如何完成这样的模型呢?循环神经网络(RNN)就这样呼之欲出了。我们先来看下循环神经网络的架构。循环之所以叫循环,是由于该神经网络的输入,会同时作为输入,再次停止“回环”,输入到神经网络。同时,除了首、尾两次循环,其他每次的循环,神经网络都会同时接收两个输入,一个输入来自上次循环的输入(也被成为隐藏形态),而另一个输入就是下一个分词的token。如下图所示:“我喜欢你的表哥的表哥”这句话的每个分词,会按照工夫的先后循序,依次输入到循环神经网络,让这个网络具有上下文的记忆才能。反观普通的神经网络,信号从输入层流向输入层后便会终止,完全没有 “记忆” 功能。

(, 下载次数: 4)

图中虽然看似展现了3个循环神经网络,其实不然,它只是为了方便我们来了解,在工夫轴上停止了展开。展开后的每一个节点被称为工夫步,你也可以叫它工夫点。实践上,这三个RNN是一个RNN。否则也就谈不上什么循环了。呦,这看起来不错呀,RNN几乎太完美了。由于它一方面经过“输入2(也被成为隐藏形态)”记忆前文;另一方面,又可以经过“输入1(当前工夫步的输入)”来表现工夫上的先后,这完全复刻了人类的言语表达过程。

可是它最的短板在于:串行执行带来的功能不足。对于能说会道的人来说,一分钟可以讲好几个顺口溜。但对于不善言辞,甚至有严重口吃的人来说,一分钟能够讲不了几句话。假如把患有“严重口吃”的循环神经网络,作为大言语模型来训练和推理,不论运用再好的GPU,它的运转速度也会大打折扣,由于串行义务没办法停止分布式并行计算:它必须严厉按照工夫步顺序计算,前一个工夫步的隐藏形态没算完,后一个工夫步就无法启动。
6.3.自留意力与Transformer

很多人一提到大模型,就会想到transformer,可以说,本章节的内容好坏,直接决议了这部分人对本文的全体印象,可想而知,它的分量之重。

2017年Google发表了一篇名为《Attention Is All You Need》的论文,文中提出一种基于自留意力机制的架构,这个架构由“编码器-解码器”组成,被称为Transfomer。它一经提出,便经久不衰,绝大部分的大模型都基于它来构建,至今依然难以被超越。以致于在互联网这个圈子,没听过Transformer的人,出门儿都不好意思跟别人打招呼。

Transformer不足为奇之处在于,它既具有“交融上下文”的才能,又同时处理了RNN串行计算带来的功能成绩。那么它是怎样做到这一点的呢?那就不得不提到-自留意力。

爸爸、妈妈一同生下了一个宝宝,假如宝宝长得更像妈妈,那么我们可以说,宝宝交融了妈妈的基因多于爸爸的基因,但也不能说,宝宝基因完全来自妈妈,这似乎对爸爸不太公平。当然我们还可以说,作为爸爸和妈妈结合体-宝宝的基因中,妈妈的基因比严重于爸爸。假如把宝宝比作当前待处理的分词,爸爸和妈妈比作上下文分词,那么当前的分词就不再是孤立的个体 —— 它经过计算上下文分词对本身的 “影响力权重”,完成了对上下文信息的充分交融。

(, 下载次数: 4)

我想经过这个“看起来不是非常准确”的例子,告诉你,交融上下文的方式,不单单可以经过RNN按照工夫序列来循环迭代。还可以经过,计算其他的分词对于当前分词的“影响力”,来整合上下文信息。这便是自留意力的核心思想。你当然也可以把自留意力,解释为自留意影响力。另外,自留意力中的“自”,表示每个分词,要本人自动地留意跟别的分词的关系能否亲密或者疏远。

Transformer完成自留意力机制,如图所示,总共分为两个步骤:1)句子中的每个分词,都要与其他分词,逐一停止计算,计算其他分词对当前分词的“影响力”,它也被称为留意力权重;2)基于这些计算的权重,交融生成当前分词的的自留意力词向量。图片非常明晰的展现上述两个步骤。

(, 下载次数: 4)

但是关键的成绩来了,如何把上述过程,转换为数学计算呢?

对于步骤一,每个分词求解与其他分词的留意力“权重”的过程,对应的数学公式表达为【输入矩阵】乘以【输入矩阵的转置矩阵】。下图展现了在句子“新年好”中,“新”字的向量是如何计算与其他分词的关系的:重生成的矩阵的第一行表示“新”的留意力权重,它等于输入矩阵的第一行分别乘以转置矩阵的每一列,理想上,这就遍历计算了每一个分词对“新”字的影响力、权重。

(, 下载次数: 2)

行向量乘以列向量,为什么可以表示两个token之间的关系呢?其真实【初识大模型】的词嵌入章节中,曾经提到:向量的内积其真实几何意义上,展现了两个空间向量的夹角的大或者小,在此不再赘述。

对于步骤二,每个分词的交融后的向量,对应的数学公式表达为【输入矩阵】乘以【权重分数矩阵】(来自于步骤1计算结果)。下图展现了在句子“新年好”中,“新”字是如何应用【权重矩阵】计算新的交融了上下文后的向量的。

(, 下载次数: 2)

自留意力的完成,本质上是输入句子的向量矩阵的两次乘法运算,只是第一次矩阵乘法,运用的行乘以列的计算方式;而第二次的矩阵乘法,运用了加权和的计算方式。虽然结果一样,但是不同的计算方式,表达的意义是完全不一样的。下面的计算过程,是真实发生的,只是为了解释其核心思想而做了剪裁。比如第一次矩阵运算后,需求经过softmax函数将其转化为概率,用来准确表示权重。同时,你也可以看到,矩阵运算后的结果,数值变得很大,因此在计算权重前,会对每个值停止一致减少。

另外,两次矩阵运算,触及到三个输入矩阵,你能够误以为它们都是同一个矩阵。在我刚刚学习transformer时,我也是这么以为。但理想上,它们是三个不同的矩阵,分别叫做Q、K、V。只是它们都是由同一个输入矩阵变换而来。至于为啥叫QKV,我个人的了解是:像查字典一样,Q表示用当前分词作为成绩查询,去遍历查询句子中的每一个KEY,基于婚配度和查询的结果V,最终生成新特征向量。

依托这样的计算逻辑,我们不必再像 RNN 那样按工夫步逐一输入 token 向量,而是能在输入模型之前,就把每个 token 对应的上下文信息充分交融,直接生成整合后的新向量。由于自留意力的完成,本质上是矩阵乘法,而两个大矩阵的乘法,又可以在数学计算上,拆分成多个小矩阵的计算,多个小矩阵计算又可以被分摊在多个GPU单元,停止并行计算。这就打破了过去RNN在处理上下文过程中,遇到的功能计算瓶颈,为大言语模型的普及带来了曙光。
6.4.稀疏自留意力

冤家,关于transformer核心思想就是这样了。但是,实践上它包含的内容远不止于此,例如关于它的编码器、解码器、以及多头留意力等,受限本文的写作意图和作者程度,这些就留给读者们自行探求了。

Transformer一经问世,很多在日后名噪一时的大言语模型,便相继发布,例如BERT、ChatGPT(毕竟BERT和GPT中的“T”指的就是Transformer),以及后来众所周知的Deepseek。2025年12月1日,Deepseek发布了V3.2正式版本,宣称采用了稀疏自留意力机制,稀疏留意力机制早其实早在2019年就被提出了。那么什么又是稀疏留意力呢?我们借着Transformer的话题趁热打铁。

阅读了相关的文章后,我才明白,相对于稀疏,前文中提到的留意力计算方式,原来是稠密的。由于输入的句子中,每一个句子的分词都要计算和其他每个分词的权重关系(包含它本人)。而稀疏留意力机制,告诉我们,这个能够是没必要的。由于其实每个分词只需求计算相对重要的分词即可,例如,它以为离“我”越远的分词,能够关系就越远,对“我”的影响力就越小,我就没必要停止计算了。由于计算量少了,那么模型的推理速度就会相对加快了。

(, 下载次数: 3)
7.大模型是怎样训练的

不论是RNN还是Transformer,他们依然属于神经网络的范畴,经由他们变换的结果,就是交融了上下文特征的新token向量。而这些新的token向量,最终还是要被输入到神经网络停止非线性的变换(假如你读完前文,置信你曾经非常熟习),而后在神经网络的输入层生成一系列的概率,用来对下一个目的词停止预测。
7.1.训练数据

一个人出生时,后天具有的遗传基因固然重要,但在接上去的日子里,她走过的路、见过的人都会塑造他的质量。异样,大模型采用什么样的架构、神经元运用什么样的激活函数、误差计算用的损失函数,等等这些也很重要。异样,当这些后天的“属性”一旦固化,对它产生最重要影响的,莫过于“后天的”训练数据。上世纪90年代,神经网络的奠基人之一杨立昆研发的手写数字辨认模型,就运用了来自美国邮政局的7000多份手写邮编扫描件,停止模型训练。而现如今,主流大模型,用来训练的token数量,曾经打破了万亿(不是模型参数哟)。

训练数据质量的高低直接影响着大模型了解才能的高低。这就像在子女教育过程中,更多的父母,情愿竭尽所能为子女选择更好的学校、更好的辅导班。这其实就好像在大模型的预训练阶段,为大模型提供了经过过滤、挑选后的优质训练数据,让大模型在竞争中表现出杰出的推理(前向预测)才能。

用来训练的数据,常常要分为两类,一类是训练数据;一类是验证数据。在模型训练完成后,我们不能指望,训练数据“既当运动员,又当裁判员”。所以,我们要经过另外的验证数据集,来观测大模型推理的好与坏。

(, 下载次数: 3)

训练的过程,就是训练数据送入到大模型中,输入预测的概率。然后计算与目的值的误差,经过反向传播,来更新大模型的权重参数,这在前文中曾经引见过。假如经过多轮训练,大模型的推理才能无法再分明提升,甚至出现才能下降,那么是时分思索该结束训练了。

大模型在验证集上表现的良好,那么我们可以说它泛化才能好,否则就会说它没有很好的泛化才能。对于一个人来说,经过长工夫学校的教育后,可以很快的融入新的环境,迅速进入形态,我们也可以说他“泛化才能好”。但我们更情愿说:你这个小伙子,顺应才能比较强啊。这也是我对泛化这个词的了解。
7.2.超参数

假如大模型在验证集上表现很差,泛化才能不足。而且此时已无法经过扩大训练数据、优化数据质量等方式继续改进,那么,我们就会可以以为或者猜想:这能够和训练数据没有关系。此时,工程师就会尝试经过修正模型的架构、修正神经网络层数、修正反向传播学习率等方式,来提升模型的泛化才能。

模型训练的过程就是更新权重、偏置等本身参数的过程。而模型验证的过程,实则上就是尝试更新除模型参数之外的“参数”的过程。由于模型架构、学习率是超越模型本身参数以外的参数,所以,它们常常也被称为超参数。超参数的超,不是超人、超级的超,它并不奥秘,也没有什么深奥的引申含义。

(, 下载次数: 2)
7.3.批量(batch)

大模型在训练过程中,不是一个字一个字地输入到模型外面的,这样的话,就老费劲了。而是把“一堆儿”训练语料一把就输入出来训练。详细来说,就是一次训练就可以完成几十句话或者几十个段落的学习。我们把“一堆儿”这样的语料称为批量。

大模型训练过程是根据后面的分词预测下一个分词的概率,但是一次训练,包含了这么多分词,而且每个分词都有本人的损失,那是不是每计算一个分词的误差,都要停止一次反向传播,来更新大模型的参数呢?
7.4.步长(step)

我们曾经发现,当前的大模型参数量曾经打破了万亿级别,这样的话,权重更新的过程会产生大量的数据计算和资源耗费。因此,我们不必要应用每个分词的误差来更新整个模型的参数。而是将整个批量的误差,一致计算一个平均误差,然后应用平均误差来更新模型参数。圈内人把每一次的模型参数更新,定义为一个步长,也有人叫作是一次迭代。

假如批量比较大,那么就要求GPU显存有足够的空间包容这些样本,但它带来的好处是:由于样本量较大,某几个样本的异常,在经过平均误差计算后,这些异常的毛刺点能够会被抹平,计算出的梯度能够也会比小批量更平滑。
7.5.训练轮次

当大模型学习完一切的训练数据后,训练的工作其实还没有结束,它还要运用原有的数据重新末尾第二次、第三次……训练。你能够比较疑惑:为什么需求多轮,每轮训练用的数据都一样,多轮有什么意义?

你第一次读水浒传时,读到了江湖上的打打杀杀;第二次读时,读出了英雄豪迈背后的理想悲凉;第三次再读时,能够会读出更多的内含。书还是那本书,不同的时期读出的内容却不尽相反,也就是人们常说的常读常新。

异样,模型的学习是渐进式的,不是一挥而就的,这就需求多轮迭代。不论轮次运用的样本虽然相反,但普通会停止打散,避免模型“融会贯通”。我们把模型残缺遍历一次数据的过程,称为一个轮次或者一个Epoch。

(, 下载次数: 3)

每一轮训练都是在上一轮的训练结果(即模型参数)的基础上继续迭代的,那么第一轮,初次停止训练时,模型的权重和偏置这些参数从何而来的?你可以说这些都是天生的,与生俱来的。但是在数学上,它就是随机化产生出来的一系列的随机浮点数。随机数虽然是随机的,但是也没有那么随机,随机产生出来的数值必须被约束在合理的范围,否则会产生训练不波动的成绩。产生有约束的随机数算法有很多,此处不展开。
7.6.过拟合与欠拟合

欠拟合是指模型经过多轮训练后,计算的误差依然很大,我们严重怀疑能够是模型的设计出现了什么成绩,比如参数量太少会它的非线性表达或者拟合才能存在不足。虽然参数不是越多越好,但参数少了,是万万不可的,由于只要大量的参数才能拟合比较复杂的场景。

而过拟合是指用训练数据训练出来的模型误差比较小,但是用测试数据测试出来的误差却很大。这普通表示模型对训练数据学习的太过度了,进而达到了“融会贯通”的地步,连一些不该学习的、有关紧要的也过度学习,导致模型泛化才能不足。
7.7.监督学习和自监督学习

监督学习、自监督学习这些概念常常不绝于耳,我常常将,模型用来计算的目的值,当作是一种监督,由于我以为模型的数值概率越接近目的分词的概率,误差就会越小,模型学习就越成功,这就是一种监督呀。但是,自监督学习这个词,让我很是疑惑,难道自监督训练,就不需求目的值了吗?这样的话,模型的误差该怎样计算呢?

随着我学习的深化,我才明白,原来不管是有没有“监督”,目的值一定是要有的。只是目的值产生的方式不一样。有的目的值是需求手工输入的,比如一张猫的图片,你要给他做个文字标记-猫,当把这张猫的照片输入到大模型后,产生的输入要和标记的“猫”停止比较,计算一个误差,这种目的值产生的方式叫作人工标注。

可对于,万亿的训练数据,人工标注曾经成了不能够。人们希望可以自动的去选取“目的词”停止监督,怎样做?人们会把一个句子或者一个段落中的分词,停止随机掩盖,然后交给大模型去停止概率预测,而预测的目的值就等于被掩盖的分词,整个过程,不需求人工标注,次要依赖大模型本身的随机掩盖,随机预测。例如让模型学习古诗时,输入“青海长云暗雪山,孤城遥望玉门关”,假如把“玉门关”停止遮盖后,“玉门关”便作为我们本次训练的目的分词。因此我更情愿把“监督”解释为“人工标注”。

(, 下载次数: 2)
7.8.温度系数

温度系数是什么?为什么叫温度系数?我想至少应该和天气的冷暖有点关系。你应该从小学的时分就知道热胀冷缩的原理了吧。天气暖和的时分,不光是分子比较活跃,我们人类也比较活跃;而在天气寒冷的时分,就容易凝结,抱团取暖,能不动尽量不动。

我们多次聊到,大模型其实就是概率预测模型,大模型的输入是一堆小于1的浮点数,用来表示词表中不同token的概率。好吧,OK。知识点来了,有的人喜欢,模型仅仅输入那个最高概率的token,就会概率高的变得更高,概率低的变得更低,完成两极分化,这就是“冷缩”;而有的人喜欢不落俗套,更喜欢尝试将来的“能够性”,希望大模型的输入不要那么死板,这样就会让概率高的和概率低不要那么分化,这样在采样输入时,概率低的token也能够被选择,这就是“热胀”。

(, 下载次数: 3)

前文提到,概率是经过归一化函数-softmax产生的,人们在softmax公式上“稍作手脚”后,便完成了下面的热胀冷缩现象。这里做手脚的方式就是在公式中添加了一个整数变量,我们把这个变量,成为温度系数。(上图右侧为运用DeepSeek时官网引荐的温度系数)

(, 下载次数: 2)

听起来温度系数与大模型的训练毫不相关,理想上,它与接上去即将登场的知识蒸馏密不可分,而知识蒸馏是一种小模型训练的最重要的方式之一。
7.9.蒸馏学习

温度系数中的温度,随着度数的降低,液体转化成气体,气体在冷凝管中,遇冷再次凝结成没有杂质的水,这就是蒸馏的过程。我们家里烧水做饭,锅盖上挂着的小水珠也是这样的过程。模型中的蒸馏学习,指的就是要学习蒸馏出来的部分,而不去学习没有剩下的“杂质”。我置信发明这个名词的人,想必对化学或者物理也特别地感兴味,我查了下才发现,原来这个人叫辛顿(2024年,由于在神经网络突出贡献获得诺贝尔物理学奖)。

学习,一定是要向别人学习,通常的叫法是,先生模型向教师模型学习。教师模型普通是预训练好的大模型,参数量极大,训练和推理用到的算力成本较高,不太合适轻量化部署,比如部署到你的PC,甚至是你的手机上。而先生模型恰恰就是为了填补教师模型的这个空白,它的初衷就是用尽能够少的参数,来达到向大模型的才能。因此这种学习或者训练的方式,也被叫作模型紧缩。那么蒸馏学习的过程是怎样样的?蒸馏是蒸馏的什么?

假如下图所示,虽然,大模型是经过概率预测的方式,来选择一个概率最高的下一个目的词。但有时,我们可以经过控制温度系数,让概率没那么高但词义相近的分词被选中(前文曾经解释过)。这对于模型来说,也是有用的知识,而这种知识常常被称为隐藏知识。隐藏知识需求经过提高温度系数来发掘。而蒸馏学习的目的就是既要学习最高概率的分词,也要尽能够学习这些隐藏知识。例如,在图中,虽然我们习气说“我想吃饭”,但是我也偶然会说“我想干饭”,极多数状况,我也喜欢别人对我“请您用膳”。这些对于大模型来说,都是有价值的知识,虽然这几个词本身概率没有“吃饭”高。

(, 下载次数: 2)

当我们经过在教师模型的softmax层调高温度系数,提高隐藏知识的概率后,隐藏知识的概率就会作为学习模型的目的值(也称为软目的),这句话需求你渐渐想一下?既然先生模型要学习教师模型,那么教师形式的概率分布就会作为最终的目的值或者监督值,用来计算误差,来更新先生模型的本身参数。

(, 下载次数: 3)

教师模型提高温度系数,得到的概率分布,被称为软目的,异样,在先生模型中,用异样温度系数计算得到的概率分布,被称为软预测。二者之间经过损失函数计算的误差,被称为蒸馏损失,或者软损失。

(, 下载次数: 2)

根据DeepSeek官网发布的信息,2025年春节时期,发布DeepSeek-R1模型后,经过 DeepSeek-R1 的输入,蒸馏了 6 个小模型开源给社区。

(, 下载次数: 1)

其中DeepSeek-R1-Distill-Qwen-14B,就表示这个模型是蒸馏出来的先生模型,教师模型是DeepSeek-R1。先生模型是千问模型,仅仅有140亿的参数,留意这里的“仅仅”是相对于R1模型6600亿参数而言的。

8.AI浪潮下的基础设备

8.1.AI与区块链算力

好了,关于AI相关的底层基本原理就引见到这里了,这里请允许我用“AI”两个字。当然,我们都清楚,关于AI的范畴远不止此神经网络、大言语模型等,只是由于ChatGPT引爆大言语模型的浪潮之下,当人们议论AI时,更多指的就是大言语模型。

在过去的一段历史工夫中,区块链、显卡也火爆一时,在区块链中,比拼的是谁能以最快的速度挖到下一个区块,这个“挖”的过程实践上,仅仅就是,基于买卖信息来计算hash值,谁计算出的hash值的某几位等于预设好的目的值,那么,谁就挖矿成功了。这个过程也叫hash碰撞。比如下一区块的hash值,前4位必须等于0x0700,谁第一个计算出来,谁就挖矿成功,并获得挖矿奖励。而大模型的训练过程,经过训练数据,不断调整参数,谁调整出的参数接近目的值,谁的模型就是好的。说白了,这也是一种“碰撞”,这是它们的异曲同工之处。

但它们的区别在于,区块链是全球分布式计算,你在恣意的云服务商的恣意地域,只需买一台机器,运转区块链协议,就可以以“平民”身份参与到区块链中(当然,后来也逐渐集中某些巨头的矿厂)。而AI的训练算力高度集中在数据中心外部,彼此之间,至少没有像区块链一样的协议,将不同公司模型的训练算力“交错在一同”,最终计算出一个共同的“链”。那么,在高度集中的AI算力下,对此,我们又有怎样样的感知呢?
8.2.GPU卡与CUDA

随着AI的逐渐盛行,越来越频繁出如古人们视野外面的词,其中有一个词,含金量十足,那就是“买卡”,这个词人们常常信口开河。这让我常常想到,多年前,在华强北或者中关村,很多人都会问你:“哥们儿,买盘吗”、“姐们儿,买碟吗”。但这里的卡,可不是指游戏卡,而是说的GPU卡,GPU以插拔式的方式插入到服务器(PCIe)或者电脑中,所以常被称为卡。

一块CPU有4核心、16核心、32核、100多核也就差不多了,但你敢想象吗?一块英伟达GPU H100卡就有18000多核。这些核被称为CUDA核(图中INT32\FP32就是一个CUDA核,分别表示计算整型、浮点数的核心,引自英伟达官网),虽然它们数量多,但是仅仅能停止简单的加减乘除计算,不过这对于AI的训练和推理曾经足够了。由于大模型的训练和推理的过程,也不过就是简单的加减乘除。

(, 下载次数: 4)

但很多看似简单的东西,其实并不伟大,如何把AI训练中触及到的简单矩阵运算,平均的分摊给这么成千上万的core停止并行计算,这就是很大考验了。而英伟达的CUDA平台就提供了一站式这样的平衡调度才能。
8.3.大模型并行计算

CUDA平台要思索如何把给它的“东西”分发给成千上万的GPU内核,而大模型并行训练时,要思索以什么维度去并行计算。例如,在网络负载平衡器上,可以按照五元组加权轮询算法分担流量给到不同后端,也可以按照最小衔接数算法,将当前衔接分发给衔接数最小的后端。

假如你耐着性子,看完后面的章节,我置信你一定对参数和训练数据并不生疏。由于模型参数决议了模型的下限,而训练数据往往可以决议它的下限(仁者见仁,智者见智)。AI训练的并行方式,也是经过这两个维度停止的划分。一类是模型并行;一类就是数据并行。由于模型并行,等同于把权重等参数分布在不同的GPU上停止计算,而这些参数本身是由张量来表示的,因此模型并行也称张量并行。

数据并行,了解起来最为直观,就是把训练的数据,分散到不同的GPU上,每个GPU运转相反的模型。不同的GPU运用分配给它的部分训练数据,对相反的模型停止并行训练。

(, 下载次数: 4)

相比于数据并行,模型并行,了解起来似乎有点费劲。但是假如我说,这就好比,你在一个拼图上画了一张多层的神经网络(你应该还记得前文神经网络的样子吧),此时,你把拼图打乱得支离破碎,好吧,你想像你看到的每一块就是GPU,而每一块拼图下面画的就是部分神经网络结构。

(, 下载次数: 3)

但凡触及什么并行计算啊、分布式计算啊、什么微服务啊,必然会由此而添加网络通讯,有网络通讯就会有网络损耗,这些想都不用想。
8.4.数据并行

数据一旦被分摊到不同的GPU,意味着每一块GPU上存储的模型,不能得到全量的训练数据,只能依赖部分大批的数据来更新参数。这样会使得训练不够充分,这可不是数据并行想要得到的结果。那么数据并行,是如何来更新模型参数呢?

假设有两份训练数据,分布在了两块GPU卡上,每块GPU卡上,经过反向传播算法,各自计算出一切参数的梯度(回忆一下,梯度就是参数的更新量)。关键的时辰来了:此时每个GPU卡上梯度会被传递到中心服务器上,由中心服务器停止梯度聚合(可以用Reduce表示聚合)。聚合的方式就是求和再取平均值。然后中心服务器再把平均梯度广播到一切GPU卡上,一致更新参数。这个中心服务器被称为参数服务器。

(, 下载次数: 3)

但是由于参数服务器会成为通讯的瓶颈,古代AI训练大多摒弃了中心化的参数服务器。而是经过更优的衔接结构和算法,比如环行结构、树形结构等(受限于笔者程度和写作目的不展开,但不是全互联通讯方式),这使得一切GPU都能得到一切的梯度值,这样的话,每块GPU都要停止Reduce求和平均计算,因此这种通讯方式被统称为AllReduce。

(, 下载次数: 2)
8.5.模型并行

虽然模型并行,像似小冤家的拼图,但了解起来似乎不够详细。我们以简单到极致的两层神经网络为例,它只要输入层和输入层,每一层只要三个神经元。首先我们把它转换为简单的矩阵运算,最后,我们将矩阵运算的过程,拆分到了三块GPU卡,分别是GPU0、GPU1、GPU2.如下图所示,这个过程,我本人了解起来也有点困难,但是写写画画后,便可以大致了解。

(, 下载次数: 3)

由于大模型牵涉的都是深度神经网络,牵涉的矩阵运算很多,我们需求把上一层的矩阵运算结果像前逐渐计算传递。因此就需求把上一步每块GPU计算的结果传递到担任下一层计算的GPU上停止拼接,以获得全局的计算结果。拼接的过程不触及计算,或者说,不触及原有数据的添加或者减少,这与Reduce完全不同。因此人们为拼接又取了一个新名字,叫Gather。假如一切的GPU都需求获取这样的拼接数据,那么整个过程也被称为AllGather。
8.6.NCCL集合通讯

但是对于开发人员来说,它不需求关怀GPU底层之间如何互联,如何通讯。以英伟达GPU为例,英伟达提供了一套高度透明的通讯库接口即NCCL(读作NiKal,我也是听得多了,才知道这么读),开发人员只需求调用NCCL的相关接口函数,例如allgather()、allreduce(),就可以完成下面提到的这些通讯。

虽然开发人员不需求关注底层的通讯细节,但是担任网络的管理员们不得不下功夫。网络通讯可不单单是不同服务器间的通讯,而且还触及到服务器外部的通讯,那么GPU服务器外部长什么样子呢?
8.7.GPU服务器内通讯

单块 H100 GPU 拥有 18000 多个计算核心,而一套 H100 零件可集成 8 块这样的 GPU。每两块 GPU 之间,都能经过带宽高达 900GB/s 的高速通道互联 —— 这条通道由 18 条链路构成,每条链路的双向总带宽为 50GB/s,这类公用高速链路就是NVLink。

值得留意的是,GPU 之间并非直接互联,而是各自接入平台外部的公用交换机,即NVSwitch,一套 H100 零件中通常配置 4 台 NVSwitch。

(, 下载次数: 4)

每块 GPU 会同时接入这 4 台不同的 NVSwitch,这种上联至少个物理交换节点、并经过多节点完成 GPU 间数据互访的设计,被称为多平面设计(也叫多轨道设计)。因此,H100 平台的 GPU 互联架构采用的是4 平面设计。需求强调的是,这类设计无需网络工程师手动接线,一切互联链路都已预先集成在被称为SXM5 板卡上。如下图所示(来自英伟达官网):8 块 H100 GPU(黑色盖板下方的组件)与 4 台 NVSwitch(绿框标注部分)共同集成在同一块 SXM5 板卡上,构成了残缺的高速互联计算单元。

(, 下载次数: 2)
8.8.GPU服务器间通讯

服务器外部不同GPU的互通在外部经过NVSwtich就完成了,但是假如触及跨服务器的通讯就需求依赖物理网络把他们打通了。而服务器对外通讯时,开放的“窗口”就是网卡,英伟达GPU的网卡采用的是被称为ConnectX的系列,其中A100用的ConnectX-6,而H100用的ConnectX-7,前者的端口速率是200Gbps,后者是400Gbps。

如下图所示,以A100为例,这些物理网卡在外部与GPU停止了1:1的绑定,每块网卡对外提供200G的下行链路,对外总计提供1.6T的下行带宽。

(, 下载次数: 2)

网络管理员们会把光缆一端接在GPU服务器的网卡上,另一端接在交换机上,这类交换机直接与服务器打交道,我们称为接入交换机(也成leaf)。值得留意的是,每个网卡上联不一样的leaf,这样的话,就需求8台leaf交换机。这样的做的目的,一方面经过多平面设计完成容灾;另一方面是可以让单台交换机完成不同服务器上相反编号的GPU通讯,让网络通讯变得更有确定性。

(, 下载次数: 2)

物理网络的管理员们会尽能够把网络设计得扁平,尽量减少网络通讯经过的中间节点数量。但成绩是,不同平面的GPU该怎样通讯呢?此时就不得再引入更高层级的设备停止跨平面的打通。位于更高层级的这个设备,我们称之为汇聚交换机(也称Spine),如下图所示,展现了不同GPU平面经过Spine设备停止通讯。

(, 下载次数: 3)
9.大模型的运用

9.1.大模型的不足

并不是每个人都买得起GPU,也并不是每个人都可以训练一个大模型,大多数状况下,我们都在运用别人训练好的模型,来给我们的生活和工作,带来一些改变。每个人的习气不同,我们不能指望,在广场上跳广场舞的我的大舅妈,和在实验室训练大模型的人,在运用大模型过程,都经过如出一辙的调用方式。

模型一旦训练好,参数就会固定,这意味着模型学到的都是历史的、过时的知识。由于模型的训练成本比较高,它没办法实时的更新本人的参数,这是它的局限性。特别是大模型无法处理随着工夫改变而改变的知识,也可以称为动态数据,例如天气的变化、猪肉价格的变化、GDP的同比增长率、实时旧事等。

大模型另一个常见的成绩就是幻觉,幻觉是一个被包装的很好的名字,它实践上,是为了“装饰”大模型对于用户发问,回答不准确、答非所问、回答错误等成绩的统称。这根本上是由于它是一个概率模型,概率这个词一定程度上就阐明它不够准确。

我将结合着大模型的这些局限,来分享一下人们在运用大模型过程中,有哪些好的思绪,处理上述成绩的。
9.2.Agent

从易用性的角度看,Agent的出现,就是为普通人提供了运用大模型的窗口。关于agent的定义有很多说法,大体上,人们把可以对外部环境停止感知、思索决策,并且具有执行才能的“物体”,叫作Agent。我们人类就是这样一个“物体”。你以为是你在张口吃饭吗?不是,是你在代理你的肉体意志在吃饭。

假如在Agent中,担任思索决策的是一个训练好的大模型,那么它就被称为Agent智能体。Agent至少要具有感知器和执行器两个组件。它很像是一个人,大模型相当于是我们的大脑,外部感知器就是相似于我们的眼睛、鼻子、耳朵、舌头。当Agent可以对我们输入的文字作出反馈,那么这个agent就具有了听觉,而当它可以停止图片辨认时,我们就可以说它具有了视觉感知。

(, 下载次数: 2)

Agent的感知器被设计的越易用、越自然、越像是一个擅长倾听的知心冤家,能够越会得到普通用户的喜爱。
9.3.MCP

MCP被称为模型上下文协议,它定义了Agent与外部系统间交互时的通讯标准。MCP的出现,极大的补偿了大模型处理动态数据的困境,Agent在调用大模型过程中,可以经过MCP来从外部系统或者外部工具平台获取它想要的动态数据。不过前提是,Agent管理员要提早把他以为能够用到的工具存放(也成注册)在本地。

在MCP之前,还有一个叫作function calling的东西,也可以让大模型获取到外部的实时数据,只是function calling与OpenAI深度绑定。他们在调用外部系统前,Agent会把一切的工具列表以及工具的功能描画和用户成绩一同发送给大模型,大模型再分析用户意图后,从工具列表选择一个工具后,前往给Agent,告知其停止该工具调用,进而查询动态数据。

(, 下载次数: 3)

MCP极大能够成为Agent与外部系统之间的标准调用协议,由于在2025 年 12 月,mcp的发明者Anthropic 将 MCP 捐赠给Linux基金会旗下组织 AAIF,使其从单一厂商项目逐渐转为中立的行业标准。
9.4.RAG

人们经过Agent运用大模型时,常常被它的幻觉困扰,幻觉产生的根因在于它是概率预测模型,除此之外,也有很大的缘由在于,它本身并没有很有效的数据,这导致它会答非所问。由于大模型的知识是陈旧的,人们思索为它添加一块外部“存储卡”,在这个存储卡中,人们可以把最新的数据、或者私域数据(它没有被大模型充分学习)加载到外面。这个思绪最终演化成了一个叫作RAG的东西,人们把它作为大模型的外部“知识库”。

RAG全称是检索加强生成,我的了解是经过检索知识库加弱小模型的生成答案的才能。RAG提供了一种让大模型不需求经过训练就可以获取到新知识的才能,它的核心工作机制:首先对上传的外部知识文档停止分片处理(拆分成几百字左右的小片段,即 Chunk);接着将这些分片内容转化为向量。之所以要停止向量化,是由于模型无法直接了解文字语义,而向量可以将文字的语义转化为一串数字(前文中曾经引见过),后续只需经过向量相似度计算,就能疾速找到与用户成绩语义最婚配的知识分片。

(, 下载次数: 2)

婚配完成后,这些高相关度的知识分片会与用户的原始成绩整合,一同输入大模型,为其生成答案提供牢靠根据。需求留意的是,分片必须控制合理尺寸:假如不分片或分片太大,一方面会降低语义婚配的精准度,另一方面也能够导致整合后的内容总长度,超出大模型的上下文 Token 限制,无法正常输入模型停止处理。
9.5.A2A

在MCP、RAG知识库等才能的加持之下,Agent智能体也逐渐的推行,Agent作为AI大模型和用户之间的桥梁,换了一种面目,与普通人相遇。可谓是旧时王谢堂前燕,飞入寻常百姓家。

在AI不离口,GPU不离手的如今,各行各业都在探求属于本人的Agent,Agent也如在深圳雨后的蜗牛,让我们美不胜收。Agent之间的通讯、调用需求就自但是然的摆在了我们的面前,并没有经过长时的等待,在MCP出现没多久,Google 于2025 年 4 月 9 日正式发布A2A协议,后续捐赠给 Linux 基金会托管,成为不同agent之间通讯的中立的标准协议。

10.结尾

2025年岁末,北方曾经进入寒冬,深圳的天气依然平和,路边绿树长青,彼时,我在出租车上,被一则中国之声的广播吸引了留意力:天津大学的于强教授在神经网络获得严重打破,为通用型下一代AI提供底层支撑……那一刻,我又再次记起多年前的那位计算机教师,记起他与我们打成一片的点点滴滴……

时过境迁,人们对于神经网络的悲观心情现如今早已一扫而空,神经网络经过几十年的沉寂,终究还是迎来春天,就在此时此刻,它正派历着,属于它的时辰。

(, 下载次数: 2)






欢迎光临 职贝云数AI新零售门户 (https://www.taojin168.com/cloud/) Powered by Discuz! X3.5