摘要:AI如何从“婴儿”成长为“全能大师”?本篇文章将通过生活中的真实案例,深入解析 DeepSeek/GPT 的底层原理,揭示 AI 认知能力的养成过程,帮助你理解 AI 学习与进化的核心逻辑。
AI如何从“婴儿”成长为“全能大师”?本篇文章将通过生活中的真实案例,深入解析 DeepSeek/GPT 的底层原理,揭示 AI 认知能力的养成过程,帮助你理解 AI 学习与进化的核心逻辑。
或许这是一篇初中知识就能看懂的文章-从零拼装Transformer:像搭乐高一样理解大模型技术的核心。
大模型底层原理有两个较难理解的地方:分别是“神经网络”和“Q K V”向量矩阵。不过,本文尽量避免了数学公式,基本都是以通俗易懂的比喻来描述大模型是如何被训练成掌握人类语言的。
我们日常使用的Deepseek,GPT,Llama,Qwen,元宝等大部分应用的大模型训练原理基本类似-都是基于Transformer(一个名称而已,忽略)。AI之所有有时候会产生所谓“幻觉”(看似比较有逻辑的胡说八道),就是因为其训练原理所决定的。看完本文,你应该能理解“幻觉”的原因,也应该能想到降低“幻觉”的方法。除此以外,也能理解为什么大模型应用在回答问题时全都是一个字一个字往外蹦。也能理解大模型哪些问题大模型回答不了,需要调插件或API才能回答,也能理解为什么光有大模型还不够,还要有Agent,Rag,工作流等等。
由于把一个复杂的技术原理用一些生活例子去讲明白本身难度很大,所以本文难免存在少数部分细节描述不严谨的情况,但不影响咱们对原理的理解。
我们所接触到的大模型,大部分都是指语言大模型(LLM),即掌握了人类语言的大模型,如GPT、DeepSeek等等。我们给待训练的大模型起个名字,就叫”小模”吧。
小模的成长之旅:从识字到理解人类语言训练阶段(Pretrain),我们都对小模做了什么?
小模要不停地阅读海量的人类文字资料一字一句地学习人类如何使用文字目标是掌握最多的人类知识和文字表达方式一、简述训练流程让我们用”人”字为例,看看小模是如何学习的:
(实际训练过程并不是一个字一个字的训练,为了描述方便我们以单字为例,不影响对原理的理解)
科学家给小模看汉字”人”->小模将”人”转化成一串数字(因为机器人只认识数字)->再将数字转化成向量(计算字与字之间的”关系”)->给向量标记位置(标记字在句子中的位置,也是用于计算”关系”)->带位置标记的”人”的向量进入有很多神经网络(想象为太上老君的炼丹炉)的车间,从车间出来的”字”向量带了很多丰富的特征信息(药材炼成仙丹的过程)->用这个带有丰富信息的”人”向量与所有的字分别计算相似度,得出与每个字的相似度概率大小,概率最大的那个即为最终的结果,假设是”工”和”正确答案”对比,如果正确,则将”人工”作为输入,继续上述流程;如果错误,则调整相关参数继续学习,直到正确;通过上述步骤,经过大量反复训练,小模就逐渐掌握了人类语言。
实际训练过程中,科学家会把能找到的所有资料都给小模,比如假设所有汉字资料加起来共有7.5万亿个,训练时会将这7.5万亿个汉字按每20000(假设)字为单位,共切成3.75亿个段落。每个段落按同样的流程进行训练。
段落首次进入训练系统时,会让小模看到第1个字(假设是”人”),遮住剩下的19999个字,看小模能否正确地输出第2个字(假设是”类”),如果输出正确,然后让小模看到前两个字即”人类”,以此类推。遮住后面字的这种方式称为掩码自注意力机制(掩-即遮掩,自注意力下文描述)。如果不遮住后面的字,就是自注意力,下面我们主要说明自注意力这种方式,理解了自注意力,掩码自注意力也自然能理解。
二、详述训练流程2.1 小模识字
小模作为一个机器人,不认识人类文字,只认识数字,所以我们需要将文字转成数字。
2.1.1 将”字”数字化
【参考图中Token化方框1】
科学家们给每个汉字(包括标点符号等) 配发一个身份证号,即每个字都会有一串唯一的号码。(这一过程称为文字Token化,一个字可能对应一个或多个Token。本文我们约定一个字对应一个Token,不影响对原理的理解) GPT3总共规定了50257个Token(不同大模型定义Token的方式不同,但不重要),称其为Token字典把。
现在小模有了Token字典,就认识每个字了,但是它还不知道每个字各自间的关系,比如哪些字在哪些场合下可以出现在一起(即字与字之间的相关度大小,相关度越大,出现在一起的概率越大),为了解决这个问题:需要将字向量化。
2.1.2 将”字”向量化
【参考图中向量化方框1】
科学家们给每个身份证号配发一个向量(将Token向量化–即词嵌入Embedding),因为两个向量的余弦夹角即表示两向量的相似度,因为向量对应身份证号,身份证号对应文字,所以就解决后续流程中计算字与字之间的相似度关系问题。
配发的向量每个坐标的参数值是多少呢?小模不知道,科学家们也不知道,所以在这里放了一个神经网络–可先理解为一个魔盒,把向量放进去,经过盒子里的一些处理后再出来的时候向量的各维度的值就确定了。初始时随机赋值,这些初始值毫无意义,纯粹作为训练的起点。向量维度的数量由人工设定。更高的维度能容纳的信息更多,但同时也会增加计算量。然后通过大量文本中学习词语的上下文分布模式等不断调参(好比换药材改比例重新炼丹),最终确定向量的参数坐标值。比如若“猫”和“狗”经常出现在相似的上下文中,它们的词向量在训练过程中便会逐渐接近。向量每个维度的值可能对应着某种潜在语义或语法特征(比如“性别”、“时态”、“褒贬义”等等),但这些特征是模型训练过程中自动发现的规律,而非定义出来的。
如何理解向量能衡量相似度?(这块很简单,如果理解则可以跳过这段解释)
想象有两个箭头(向量),它们相乘(点积)就像看它们指向的方向有多像。具体是这样算的:
如果两个箭头指向几乎同一个方向(很相似),它们的乘积会很大如果两个箭头互相垂直(完全不相关),乘积就是零如果两个箭头完全相反方向,乘积就是负数所以简单来说:两个箭头的乘积越大,说明它们的方向越接近,关系越紧密。
用在词语上的话,如果两个词在语义空间中的箭头乘积很大,就说明这两个词的意思很相近或相关。就像”手机”和”电话”这两个词的箭头方向会很接近,而”手机”和”香蕉”的箭头方向就会差很远。
以汉字”猫”,”狗”,”鸟”的向量表示相似度为例:
为简化问题,我们用3维向量表示,每个维度特征如下:
维度1: 体型大小(0~1,0最小,1最大)维度2: 是否适合作为宠物(0~1,0不适合,1很适合)维度3: 食性(0=纯肉食,0.5=杂食,1=纯素食)计算相似度(余弦相似度)
猫 vs 狗: ≈ 0.95
结论: 猫和狗相似度 95%(极高)
猫 vs 鸟: ≈ 0.62
结论: 猫和鸟相似度 62%(较低)
为什么猫和狗更相似?
宠物属性接近(猫 0.9 vs 狗 0.95)食性更接近(猫 0.1 vs 狗 0.4,鸟 0.8)体型差距较小(猫 0.3 vs 狗 0.6,鸟 0.1)2.1.3 将”字”装上定位器
【参考图中位置编码向量方框1】
科学家们给每个向量配发一个座位号,因为一段文字内容里的每个字都是有先后顺序的,顺序变了,可能整个内容的意思就变了(比如”猫追老鼠”和”老鼠追猫”),所以需要座位号。同理,座位号也要参与相似度计算,所以座位号也是向量,称为位置编码向量(Positional Embedding)。位置编码向量像另一组可调整的密码锁,初始随机设置,后期随机除自动化化(类似词向量),最终与词向量相加组成一个新的向量A(GPT3的向量A有12288维)。
(说明:为了简化描述,本文提到的所有向量A,向量B,向量C,向量D(除了进入Linear车间的向量D之外,文章最后有描述),实际都可能对应多个字的向量,即当前输入的是几个字就代表有几个向量。比如输入了两个字”人类”,那向量A就表示这里有一个”人”的向量A和一个”类”的向量A)
此时,向量A就已经包含了一些特征信息和位置信息了。比如”猫追狗”这句话中的猫向量[体型,宠物,食性,群居,可训练,位置]
2.2 小模学句子
将”字”放入炼丹炉
【参考图中Heard1方框2】
这时,科学家们把向量A输入到一个包含很多神经网络的车间(Transformer的核心环节),把这个车间想象成一个炼丹炉,神经网络就是炼丹炉里的三昧真火,可以将向量A隐藏的丰富的重要的信息提炼显现出来。
炼丹过程:
假设我们现在向炼丹炉里放入了100个字(这100个字组成了一段话),炼丹的过程就是让小模理解这段话的意思的过程。
我们知道,字会被转化成向量,所以这段话的信息全部包含在这100个向量及每个向量彼此之间的关系里,也即包含在这100个向量的每个向量的坐标里。GPT3规定每个向量为12288个维度。这么高维度的向量,能容纳非常丰富的信息。这段话的每个字都与其他每个字存在或多或少的关系。每个字从自身出发(自注意力)来看整段话,都会有一个对于这段话的理解。当每个字都理解了其他每个字在这段话里的意思,并将每个字在这段话里代表的意思融合到自己的字向量里后,那么,这段话的每个字都能折射这段话的意思,只是从点不同(都是从自身出发去理解),即”以自身为中心,将注意力集中到自己认为重要的地方-“自注意力机制”。
所以,我们就可以把问题转化成:这段话里的每个字都要想尽一切办法去”获取”其他的每个字在这段话里所代表的意思,然后融合到自己的字向量里。我们可以想象成好比这里每个字都有一个疑问,现在都想得到答案,怎么办呢?
举个例子,当我们遇到不懂的问题想要解决时,有很多方法,比如去搜索引擎搜索,分三步:
输入问题搜索引擎返回一些和”输入问题”相关的”答案”概述我们从这些”答案”中按相关性高低查看详情通过上述步骤,我们大概就能理解这个问题了。
2.2.1 自注意力火焰层(以自身为中心到处找“关系”)
“字”也一样(炼丹的过程也一样):
【参考图中Heard1方框中的QKV向量部分】
每个进入炼丹炉的字都会被炼制三个向量矩阵(QKV):
Q向量矩阵:负责发起提问(可理解为Q记录了所有问题本身)K向量矩阵:负责对外展示,我能回答哪些问题(问题大纲),每个问题我能回答到什么程度(和问题的相关度,但并不回答问题)V向量矩阵:记录了问题的答案明细,向外提供答案我们以”人类简”3个字为例:
人的Q向量Q人:向所有K向量发起提问,包括自己。说:“你和我有啥关系?”(即它在了解别人和它的相关度,也就是它把注意力放在了这里,所以可以把相关度理解为注意力)类的K向量K类:看看自己的问题大纲,计算和当前问题的相关度大小;(同理“人”和“简”的K向量也做类似处理)类的V向量V类:准备好问题的答案“人”向量开始收听记录答案:根据每个字的K向量计算的相关度大小(向量之间的点积大小就表示相关度大小,开头部分有说明)和对应的V向量进行加权求和,即根据相关度度权重大小从对应字的V向量坐标里“提取”答案明细,组成新的“人”向量;
这样,新的”人”向量就理解了其他字在句子里的意思。同理,类向量和简向量也一样。
例1:麻香四溢水煮鱼
我们再用一个美食的例子来解释注意力机制中Q和K:
假设这句话进入炼丹炉了:”这家开在巷子里的川菜馆,招牌是麻香四溢的水煮鱼,辣度刚好适合本地人口味。”
注意力机制如何理解句子呢?
假设模型正在处理 “水煮鱼” 这个词(为方便说明,我们假设“水”“煮”“鱼”三个字彼此单字之间的关系已经被炼丹炉掌握了,用“分词器”这种火焰准确识别了这三字是一伙的,掌握的原理和本例子的描述过程是一样的),它需要理解这个词和其他词(如 “麻香四溢”、”川菜馆”、”辣度”)之间的关系。炼丹炉此时并不知道这些词在语义上的关联,所以它会通过 Q和 K 的交互来学习这些联系。
1)”水煮鱼” 向其他词发出 Query(询问)
“水煮鱼” –>“麻香四溢”(Q):”你是形容我的风味吗?”“麻香四溢”(K回应):”是的,我描述你的香气特征。”“水煮鱼” –> “川菜馆”(Q):”你是我的所属菜系吗?”“川菜馆”(K回应):”对,我是你所在的餐厅类型。”“水煮鱼” –> “辣度”(Q):”你和我的口味强度有关吗?”“辣度”(K回应):”是的,我在量化你的辛辣程度。”2)每个词都会参与这种交互
实际上,每个词(如 “巷子里”、”招牌”、”本地人”)都会:
发出自己的 Query(向其他所有词提问)接收其他词的 Key 回应(提供语义关联信息)这种 Q-K 交互 让模型能够动态地计算词与词之间的相关性,将这种相关性给到V(可理解为K只知道问题的类型或大纲,而V知道问题的明细,但V被锁住了,而相关性是V的钥匙)从而理解句子的深层含义。
但你或许会产生新的疑问:“水煮鱼”为什么问的是这个问题?怎么不问别的问题?怎么知道问的是对的?
你的疑问没错,一开始“水煮鱼”也不知道问什么,只是随便问的(大模型训练时刚开始都是给每个参数随机赋值的),先问,再根据损失函数和反向传播不断纠正问题。(损失函数和反向传播在文章最后部分Softmax模块有解释)
再用向量来解释下:损失函数和反向传播会修正Q、K、V的来源,其来源是Wq、Wk、Wv三个权重矩阵。
Q、K、V是通过Wq、Wk、Wv和Embedding过的向量A(即进入炼丹炉的字向量A),相乘得来。而Wq、Wk、Wv它们在X刚进入炼丹炉时,矩阵里的所有坐标参数被随机赋值。(大模型训练,训练的就是每个环节的参数,起初都是先随机辅助,然后再调参逐步迭代修正)
Q=Wq*AK=Wk*AV=Wv*A可以理解为“X”被“Wq、Wk、Wv”这种火焰(神经网络)分别炼成出了三个分身:Q、K、V,每个分身分别继承了A身上的一种特性:
Wq是动态特征查询火焰,将X炼成了Q,Q继承X的:性格喜欢到处向人打听消息–逢人就问“你是谁,你从哪来,要到哪去,你认识我吗,我们什么关系,叭叭叭……”)Wk是构建特征关系编码器火焰,将A炼成了K,K继承A的:首先K身上记录了当前字的特别喜欢向人炫耀–我知道很多消息,只要听到有人在打听消息,就抓过来看看自己对这个问题了解多少-相关度)Wv是记录语义信息本体火焰,将A炼成了V,V继承A的:消息库,也特别爱炫耀,但是自己被锁在一个盒子里,需要钥匙-K,所以一旦发现了钥匙k,就抓过来,打开盒子,然后把信息告诉X)此时也不知道用什么材料能把A炼成具有上述特性的三个分身,所以就随机拿材料开始烧,比如用木材,或者汽油,或者煤炭,或者水,或者砖头,或者铁锅等等,反正睁大眼睛瞎扔。
而随机的Wq炼制出了随机的Q,于是,Q也继承了随机特性,随机的叭叭叭瞎问,自己都不知道自己在说啥(阿拉希咔咔咔的,连个句子都不会说),同理,Wk炼制的K也乱回。比如:
“水煮鱼” –>“麻香四溢”(Q):阿拉希咔咔咔“麻香四溢”(K回应):哇呱呱啦12122fjjf丹品鉴定师(损失函数):哇喔,毁灭吧,重生吧~
2、雏形:初步学到语法特征
通过上个阶段,已经搞清楚什么是燃料什么不是,哪些燃料好烧哪些不好烧了。Wq、Wk、Wv通过不断尝试,掌握了语法特征火焰提炼配方,其炼制的分身QKV也不再阿巴巴瞎说了。比如:
“水煮鱼” –>“麻香四溢”(Q):“你是谁?为什么挨我这么近,还站我前面,你和我有什么关系吗?”“麻香四溢”(K回应):“我是用来形容一种味道的,不过我也不知道和你有什么关系,我的位置编码告诉我我只能站在这里”3、初成:丹初步成型
Wq、Wk、Wv已具备相对精细化炼制的能力(提炼精细化的语义特征),所以:
“水煮鱼” –>“麻香四溢”(Q):“我是一道川菜名,我一般需要一个形容词来散发我的味道,你是我要找的那个形容词吗?”“麻香四溢”(K回应):“我是”QK交互后,A就拿到了和矩阵里其他字向量的相关度大小(即拿到了从其他字向量V获取信息的钥匙),然后找所有V去加权求和变成了新的向量B,于是,B就掌握了本来训练内容里所有字和自己的关系信息,即B能代表本轮内容的含义(从X角度出发的含义)。
然而,小模实际的训练过程,会比上面更复杂,老师会让小模想尽各种办法,从各种不择手段的角度按上述方法不断的去训练。举个如下例子:
例2 分身学AI
假设我们把一段包含100个字的文本想象成同一个班级里的100个人,每个人都想从其他人身上学到自己想要学习的相关知识;而每个人身上掌握的知识不同,掌握的知识的水平也不同(好比不同的向量它们各个纬度坐标的参数不同)。每个人手上都有三个魔法向量,Q(提问向量:能同时向所有人发起提问),K(知识大纲向量:告诉别人我有哪些知识),V(知识详情向量:记录了知识的明细)
比如,张三想要从其他99人身上学习知识,他问他的同桌李四:
张三:你能教我A知识吗?//动用自己的提问向量Q;
李四:好啊。我知道一些”机器学习”的知识。//亮出自己的知识大纲向量K
张三:我看看我对机器学习敢不敢兴趣。//因为可能张同学自己也会,他要把注意力放在更重要的知识上。于是他把自己的Q向量与李四的K向量合并交叉计算出相关度(感兴趣程度)为0.56(满分为1)。嗯,还不错,可以学学。
李四:叭叭叭叭叭……//拿出自己的V向量。
张三:懂啦。我记录一下。
可乐和雪碧通过余弦相似度计算后的值为0.88(非常相似)。即使颜色差异大,3维相似度仍高达0.88,因为:甜度和气泡强度过于接近。
另外:
若出现”黑色雪碧”(如限量版),颜色维度可能失效(雪碧颜色值从0.1变为0.8)。所以,模型需要更本质的特征(如成分差异等)来应对边缘情况。所以,三维向量不能区分二者。升维后的5维向量:
新增2个维度:
咖啡因 (可乐=0.9,雪碧=0.0)柠檬味 (可乐=0.1,雪碧=0.8)相似度0.61(明显下降)。这就像区分两个人:
仅看衣服颜色(低维)→ 换件衣服就认错。结合声音、步态(高维)→ 即使穿马甲也能认出。新的问题又来了,小模怎么知道升维要增加的维度是”咖啡因和柠檬味”的,为啥不增加”口音和职业”?
这个问题涉及到机器学习的核心逻辑:模型如何从数据中自动发现有用特征。
没关系,我们还是用比喻的方式来解释。
a. 破案类比:如何锁定关键线索?
例5 侦探破案
假设你是一个侦探,要区分”可乐和雪碧”两种饮料(不要觉得简单,没有实物,只能通过数据来区分)。
初始线索(低维):颜色值、甜度值、气泡值(容易混淆,如果色雪碧,前面有解释过)。
发现一些新的候选线索:
咖啡因检测柠檬味测试生产工人口音车间主任职业请问,你会优先选择哪些线索呢?
可能大多会选咖啡因/柠檬味吧:直接关联饮料配方,稳定可靠。口音/职业:与饮料本质无关,纯属随机噪声。
小模和侦探一样:通过”观察大量案例数据”,排除无效线索,聚焦关键证据。
b、小模的学习机制:数据是唯一的老师
步骤1:随机生成候选维度
初始时,小模会”随机”生成大量维度(比如口音、职业、咖啡因、柠檬味、包装反光度…),类似侦探先列出所有可能的线索。
步骤2:用数据来筛选有效维度
“咖啡因”一词在可乐文本中出现概率:很大“柠檬”一词在雪碧文本中出现概率:很大“工人口音”在可乐/雪碧文本中均随机出现(50% vs 50% 假设)“车间职业”与饮料类型无相关性于是,小模将”咖啡因和柠檬味”标为有效维度,将”口音和职业”标为无效维度。
步骤3:强化有效维度,弱化无效维度
咖啡因/柠檬味维度:因能显著降低预测误差,权重逐渐增大。口音/职业维度:因无法提升准确率,权重被梯度下降算法归零。相当于升维后激活函数将”咖啡因和柠檬味”两个维度激活(更准确的描述是模型通过权重调整突出重要特征),将”口音和职业”两个维度抑制。好比人脑的某些神经元被激活或抑制,所以上面第5点最后一句话说升维和降维都是由神经网络完成。
最终,降到3维向量时,保留了想到有效的维度”颜色、咖啡因、柠檬味”,过滤了无效维度”甜度、气泡、口音、职业”,虽然又降回到3维向量,但是维度的有效性远高于之前的3维向量
所以,小模起初并不知道要增加咖啡因或柠檬味,而是通过:
随机初始化 大量候选维度(包括口音、职业等噪声)。数据筛选:保留能降低预测误差的维度(如成分),丢弃无关维度(如口音)。数学优化:梯度下降自动调整权重,好比”适者生存”。6、经过组织多轮这样的会议(多层Transformer-GPT3有96层。这里的96层和上边的96头没有直接关系,二者相等纯属巧合),每层会议讨论的内容逐步深入,最终每个人都能形成综合了全场所有人观点的见解。
【对应图中96个Decoder方框】
主持人将多轮会议后的最终结论整理成向量D,并将D提交给Linear火焰层。
这里,为什么要进行多层?
得说明下,是96层,不是96轮,层是指的训练深度,而不是轮次。而这里的多轮会议可理解为每一轮会议都比前一轮讨论的更深入。
例6 快递分拣中心
我们用一个“快递分拣中心”的比喻来解释 96层Transformer 的设计逻辑。
想象下,一个超大型快递分拣中心(GPT-3),现在要分拣很多包裹(字向量),分拣目标是准确派送(生成文本-输出下一个字)。这个分拣中心有96个(层) 分拣站(96个Decoder),分别处理不同方向的任务:
为什么需要96个分拣站?
(1) 站点太大,任务复杂
小快递站(好比浅层模型):只能处理同城快递(简单句子),遇到跨国包裹(如:”虽然巴黎下雨,但伦敦万里无云”)直接蒙圈。
96层分拣中心:
前几层:区分”巴黎”和”伦敦”是城市。中间层:理解”虽然…但…”的转折关系。深层:结合地理常识判断出两地天气并没有关系。(2) 效率优化
分层流水线:包裹(字向量)每经过一个分拣站,就被贴上更精细的标签(向量维度的一个坐标参数被赋上一个新的值,Gpt3的每个字向量被设计了12288维,即每个字向量有12288个参数,训练的过程就是逐步调参的过程),最终目的是为了在派送(生成下一个字)时准确率有所提升。
比如第50层标记”伦敦是英国的城市”,第80层关联”英国常用万里无云形容天气”。
(3) 容错能力
残差连接 = 紧急通道:如果某分拣站出错(如第40层误判”巴黎”为食品),包裹可通过紧急通道直接携带原始信息(残差连接)绕过该站,由后续层级进行纠正。这就使快递员发现分拣错误时,能快速调用包裹最初的照片核对信息。因为每层处理后会保留原始输入(如复印机保留原稿),防止信息在深层传递中丢失。
2.2.3 Linear火焰层 (匹配向量相似度)
【对应图中Linear模块】
回到上文,向量D(这里的向量D仅指当前所有字的最后一个字的向量D,因为每个字都是按顺序依次输出的,后面的字包含了前面所有字的信息,所以只需保留最后一个字的信息即可)来到了Linear火焰层,这个车间很简单,作用是拿着向量C和最开始的那个50257个向量矩阵的每个向量计算相似度,然后输出50257个相似度值,然后将50257个相似度值转给最后一个Softmax火焰层。
2.2.4 Softmax火焰层 (根据相似度计算概率分布)
【对应图中Softmax模块】
这个车间也很简单,将50257个相似度值归一化成50257个概率,然后输出概率最大的那个所对应的字,假设刚开始输入的是”我最近在读一本书,书名叫《人类简”,那么这里输出的就应该是”史”,然后小模将”我最近在读一本书,书名叫《人类简史”这句话又走一遍以上所有流程,以此类推。
你看,小模”炼丹”炼的这么艰难,最终输出的是50257个概率,所以模型的本质就是一个输出概率分布的机器,训练的过程就是不断调整的过程,终极目的是增大正确输出下一个字的概率。
如果哪一次输出的字不对,比如刚才如果输出的不是”史”字,系统会启动”错题本”机制:
计算错误程度(损失函数):好比考试扣分。从最后一层反向逐层微调参数(类似老师从错题推导学生薄弱知识点)。错误程度好比解题思路正确只是某些细节出错,或者胡言乱语完全不对等等沿着96层分拣站逆向检查(反向传播):从第96层开始,逐层追问”哪一步处理导致了错误”微调各层参数(梯度下降):就像调整分拣站的传送带角度,让包裹下次能正确滑向目标区域解释下损失函数,反向传播和梯度下降:
例7 考试阅卷
1. 损失函数(错误打分器)
就像考试改卷的老师,负责告诉模型:“你的预测和正确答案差多远?”
分数高 = 错得离谱分数低 = 预测得准2. 梯度下降(调整学习策略)
模型拿到错误分数后,不能瞎改,得有个科学的调整方法,那就是梯度下降。
作用:告诉模型“往哪个方向改,改多少”才能让错误(损失)降得更快。
比喻:
你在山上蒙着眼找最低点(最小错误),梯度下降就像你的脚感觉坡度,告诉你:“往左下方走,能更快下山(降低错误)。”每次迈的步子大小就是学习率(太大可能跨过头,太小又走得太慢)。3. 反向传播(找错并改进)
光知道“往哪走”还不够,模型还得知道“具体哪一步做错了”,这就是反向传播:
从错误倒推:从最终的错误分数开始,一层层往回算,找出每层神经网络参数的“责任”(比如:“第二层的权重对错误影响最大”)。
结合梯度下降调整:
梯度下降说:“往左下方走能减少错误。”反向传播说:“第二层的权重A要调大,第三层的偏置B要调小。”三者的合作流程:
1)考试答题(模型预测):你写了一份答案(预测结果)。
2)老师批改(损失函数):告诉你得了60分(错误程度)。
3)分析错题(反向传播):
你发现选择题错最多(第二层权重问题),计算题公式用错了(第三层偏置问题)。
4)制定复习计划(梯度下降):
老师说:“重点练选择题(调整方向),每天做10题(学习率)。”
5)改进学习(参数更新):你按计划练习,下次考试分数提高(模型优化)。
它们仨配合,让模型像学生一样,通过不断“考试–>找错–>调整–>进步”,使模型输出的概率分布逼近真实数据分布。
以上,就是小模训练时的大概原理,也是Transformer框架的大概原理。
当我们使用封装好的大模型应用时,其生成回答时的过程又是怎样的呢?比如使用DeepSeek时(其他大模型应用都同理),当前版本的Deepseek所调用的大模型(以R1为例)的所有参数已经训练好并且参数已固定了。我们使用Deepseek的过程并不会改变R1的参数。它回答我们问题的过程和训练过程类似,它将用户问题向量化后输入丹炉,再根据对问题的理解(此时的R1已经能理解人类语言了)判断输出回答里的第一个字(其实在R1眼里永远是一堆有概率的数字,以高维向量的形式存储,只不过为了让人类能看懂,又将数字转化成文字而已,R1本身是不认识文字的),再将这个字和用户的问题一起再重复刚才的流程,输出第2个字,以此类推,直到输出最后一个字,整个回答就完成了。所以我们使用任何大模型应用时,输出时都是一个字一个字的往外蹦。如果我们在当前会话窗口内继续提问,R1会把当前的用户问题和上一个问题以及完整的回答一起打包进行处理,这也是为什么在同一个会话窗口内大模型可以结合上下文语义进行回答的原因;也是每个窗口都有限定最大上下文长度限制的原因,同一个窗口内的每一次提问,R1都会把当前窗口内的历史所有内容全部打包进行处理,这样文本长度会不断增加,直到触发R1最大上下文长度阈值,当前窗口就不可用了。再思考一个问题,当我们向大模型应用询问今天天气时,大模型给出的回答内容里的天气日期,地点,以及具体天气情况,这些是大模型完成的吗?
如果理解了大模型的本质是一个概率输出机器,那就能理解这些都不是大模型完成的,而是大模型调用了日期,地点,天气等插件或API,大模型只是将这些插件或API返回的结果进行里重新整理而已。
所以,Deepseek本身是一个封装了R1(深度思考时)和V3(非深度思考时)以及各种插件或API的应用,而R1,V3才是大模型。大模型本身是回答不了类似日期天气等问题的,因为它是基于训练数据“理解”的人类语言,它眼里只有概率,没有意识,它无法知道今天是哪天,无法知道你当前在哪里,除非我们或者插件告诉它。
也正因为这样,大模型才会有所谓“幻觉”,当它面对陌生(训练时欠缺这方面训练)问题时,会看似比较有逻辑的“胡说八道”,因为它一定能基于对问题的理解然后不断的输出下一个它认为的最大概率的那个字,但仅限于“它认为”的范围内,而“它认为”的是错的,它身上并没有“正确”的数据集-但它并不知道,所以就“胡说八道”了。
可以在提问时加一些指令限制,比如命令它必须基于事实,如果用到了假设必须告知等,这样在一定程度上能降低它胡说的概率,当然这也跟大模型本身的指令遵循能力有关。
正因为这些原因(大模型目前能力有限),所以才应生出了Agent,Rag,工作流等来补充大模型能力短板。随着大模型能力逐渐增强,这些是否会成为过渡产品?可能吧~不太确定。但能肯定的是:AI是大趋之势。同时,不要高估对AI的短期预期,更不要低估对AI的长期预期。
我们使用大模型应用时,经常感觉它像很有“情商”一样,这背后的原因后续再聊聊。
三、神经网络因为神经网络不属于大模型训练过程中的某个环节,几乎每个环节都有它。同时,它也不太影响咱们对大模型训练过程的理解。所以,把它单独拿出来进行说明。如果感兴趣可以继续看看。
首先我们先明确什么是“模型”:
所谓模型,有三个关键要素:“输入,输出,以及中间的处理机制(一般是个黑盒)”。给模型输入原材料,经过它的加工处理,给你输出“结果”。和函数一样,给“x”一个值,它给你输出一个“y”值。模型的难点在于中间的黑盒如何设计。没错,就是函数。
那么,我们从函数角度来描述什么是神经网络。请记住并相信:你所接触的所有逻辑和知识都可以用一个函数来表示。
比如:输入物体移动的路程s和移动时间t,根据力学公式“v=s/t”,就能输出物体的速度v。
这个问题也太简单了,别急,上难度:
既然是“一切问题”,那我的问题是“随便输入一张写有数字的图片,你(函数)能识别(输出)是几吗?如果能,那这个函数长啥样?”
额…~翻车了,不知道长啥样。那先收回刚才说的那句话~
人类无法知道这个函数长啥样,不代表没有这样一个函数。只是我们还太菜了~既然不知道,那就猜,不停的猜,亿万次的猜,从一次次猜的过程中寻找规律,最终必能找出这个函数。神经网络,就是这个思路。遇到当前科技解决不了的问题,就猜,不停地猜,直到几乎每次都猜中,函数就找到了。所以,神经网络又被称为万金油公式。
所以,大模型训练的各环节里,一旦遇到人类现有数学公式解决不了的问题,就放个神经网络。比如,词向量各维度值的确定,位置编码向量的确定,QKV向量矩阵的确定,向量升维降维等等。放个神经网络,开始猜(初始时所有参数随机赋值)。
因为我们知道真实答案(知道每张照片分别是数字几),让神经网络去猜,每猜一次,我们给它一个反馈:猜错/对了,以及如果猜错,则把错的离谱程度也告诉它(损失函数),它就根据反馈总结规律,下次就会猜到更准一点点……500年过去了,终于可以几乎每次都猜对了,神经网络的所有参数就固定下来了(类比大模型训练的所有参数就固定下来了)
再其基础上进行非线性变换后(变成非一次函数了),如:y=(ax+b)²,y=cos(ax+b)……
观察上面线性和非线性的特点:非线性是在线性的基础上“套娃”而来。最里面一层是“ax+b”,穿个马甲就变成非线性了,那我们把马甲抽离出来,用“g”表示,y用f(x)表示,就变成:
f(x)=g(ax+b)
这个“g”就是激活函数。从名称看,说明它能激活什么东西。没错,它将原本呆板的“线性关系”给盘活了(即激活函数赋予了神经网络“ax+b”非线性能力),可以把原本的一条直线做各种多维度弯曲了(时刻记住,万物皆可向量化,即任何东西都能能投射成一个空间上的一个坐标,而多维度弯曲的线上的每个点都是空间上的的某个坐标值,所以函数和向量就关联起来了),激活可理解为“通过非线性变换将向量中隐含的重要信息给显现出来了”理论上,可以表示前面说的那个“一切问题”了。激活函数的公式看起来虽简单,但非常好用(说明下,实际常用的激活函数如ReLU(z)=max(0,z)等,只是换了种表示方式而已,忽略)
不好理解?举个栗子:
1、去过火星的纸(想了很多例子,最终觉得这个相对更好理解):
原始空间:像平坦的纸张(线性),二维平面
假设纸的正面有个小块泛黄了,而反面有很多信息,比如写有纸的名字,背面有颜色,写有这张纸去过火星…这些都是这张纸的特征,被记录在其向量各个维度参数里)
由于原始空间是个二维平面,所以无论怎么做线性变换,我们永远也看不到纸的背面特征。翻过来?二维平面没有高度无法翻转。
激活函数:做非线性变换– 将纸张揉成球体,这时,就可以看到背面特征了,同时,揉成的球体使得正面那个泛黄的点被遮挡(抑制不重要的特征,反映到向量上是该维度的参数值被赋为0),而反面的一些重要信息被显现出来,比如去过火星非常重要,露出来了80%,颜色有一点点重要,露出来5%。
多层叠加(套娃):折叠出折纸作品(复杂特征)
还是那张纸,但已不是原来的纸了。
上述,是仅包含了一个“x”的情况,而现实世界是往往会输入多个“x”,假设输入两个“x”(n个也同理),每个“x”都有一个对应的“a”,那么函数就变成:
f(x1,x2)=g(a1x1+a2x2+b)
这是一层激活函数,有时候问题太复杂,一层激活函数不够用(即呆板的直线虽然被激弯了,但弯的太呆板),那就再套一层激活函数:把“g(a1x1+a2x2+b)”看成一个整体(一层套娃),再做一次线性变换:a3g(a1x1+a2x2+b)+b2,然后再套一层激活函数,变成:
f(x1,x2)=g(a3g(a1x1+a2x2+b)+b2)
就这样,遇到解决不了的问题就套一层,理论上,神经网络“y=ax+b”就可以被激活函数以任意精度逼近任何连续函数(解决任何问题)。
如果看到这你觉得有点懵,神经网络和激活函数既然都是函数,那它俩是啥关系?
1、没有激活函数的神经网络本质是线性回归
只能解决“y=ax+b”类问题
解释:开头我们说,“y=ax+b”是最小单元的神经网络,不具备非线性能力。无论做多次线性变换,比如变成:a₃(a₂(a₁X+b₁)+b₂)+b₃,也仍然不具备非线性能力,看似元素很多很唬人的样子,但通过矩阵乘法分配律,最终都会坍缩为:ax+b。这好比:用10个放大镜叠在一起观察物体,最终效果和用一个放大镜毫无区别。
2、套上激活函数的神经网络可逼近任何复杂函数(越复杂的问题需要越复杂的函数来解决)结论就是:神经网络是“ax+b”,激活函数是前面公式里蓝色套娃部分即“g”。我们可以把带有激活函数的神经网络看成一个整体–这个整体才是实际上的神经网络。
激活函数像积木块之间的“旋转卡扣”,没有它,搭不出复杂的城堡。而神经网络就是大脑,没有它,额…脑子都没有还能干啥。说了半天,都是在说激活函数,不是解释神经网络的吗?好吧,来个图帮忙解释下:
神经网络包含三部分:输入层,隐含层,输出层(和开头提到的“模型”类似,隐含层类比模型中间的那个黑盒处理机制)。深度神经网络是指中间的隐含层>=2层。每1个隐含层即表示一次线性变换,且每一次线性变换伴随一个配套的激活函数做非线性处理用以对输入对象(即词向量)提取重要特征。随着层数的增加,网络能够学习到的数据表示也越加抽象和复杂,同时,能提取到的向量特征信息也更准确。(别忘了给大模型输入的是词向量-或者前文所有提到的字向量,神经网络通过提取分析词向量的特征,从而逐渐理解其含义,理解词向量–理解句子–理解段落,最终学会人类语言)输出层通常也会嵌入一个激活函数。
上图中:
举栗:还是拿火星纸
说明:图中神经网络里的每个圆圈都表示一个神经元,也表示大模型里的一个参数,大模型训练的最终目的就是将这些参数都训练出来,初始时给每个参数随机赋值,模型训练出来后,参数值就确定了,同时,每个字向量的各维度上的值也确定了。
1、输入层:纸向量X
一张二维空间里的纸,正面有泛黄斑点,背面写着”去过火星”和颜色标记等特征信息。向量X=[x1,x2,…,xi,xm],每个维度记录纸的某个特征:
x1=泛黄程度;x2=正面一个铅笔划痕的亮度;x3=纸张厚度…xi=火星土壤残留量xn=去过火星输入层神经元的作用:输入层的每个神经元像扫描仪,只负责读取纸的某一个特征值,如:第1个神经元读取x1=泛黄值0.7,第2个神经元读取x2=划痕亮度0.3…
关键:输入层不做计算,仅将原始数据提取(线性变换)传递给隐藏层。
2、第一个隐藏层:揉纸成球(初级特征提取)
工人A(本层神经元1)将纸沿对角线揉捏(非线性变换):纸开始从2D平面变为3D球体,背面文字部分显露。
工人B(本层神经元2)横向揉捏,泛黄点被压在球体内部,几乎不可见。
数学含义:每个隐藏层的神经元对输入做“线性变换 + 激活函数”:神经元对输入做线性变换,然后由激活函数的非线性能力增强重要特征。
神经元作用:每个隐藏层神经元是一个揉纸工人,按照自己的方式(权重参数)揉捏纸张(扭曲空间)。而激活函数像工人的力度控制器:负值完全丢弃(不揉),正值保留。
第二个隐藏层:折叠纸球(高级特征组合)
工人C(本层神经元1)将显露的文字痕迹用化学试剂(激活函数)鉴别(非线性变换)其成份,发现含有一部分是火星元素(增强重要特征)
工人D(本层神经元2)压平底部:泛黄点已被褶皱遮挡,但纸的蓝色标记部分隐约可见。
神经元作用:组合初级特征(如将“文字痕迹”和“成份”关联)
3、输出层是决策者
经过隐藏层的多次处理,这张”去过火星的纸”现在变成了一个珍贵的文物。被送到拍卖会上,两位专家(输出神经元)正在评估它的价值:
外星专家(输出层神经元1):看到文字里有一部分是火星成份,判断其大概率来自火星,举起牌子报价:70万元(对应概率70%)
地球专家(输出层神经元2):注意到底部的蓝色标记,举起牌子报价:30万元(对应概率30%)
最终决策:Softmax(文末有描述,此处可忽略)就像拍卖行的价格归一化规则,确保各方报价总和为100%(即概率为1)。
拍卖师(输出层)宣布(输出结果):这张纸被归类为“火星纸”类别,置信度70%!
如果判断错误即不是火星纸(判断由损失函数赋值),大模型则会通过反向传播一层层定位哪个地方出现了错误(哪些参数错误),然后调整参数重新训练。好比学生根据考试分数,反推错误知识点,巩固复习。
以上,是对神经网络的描述。
四、大模型训练总参数的计算最后,我们看看GPT3大模型的1750亿参数是怎么计算出来的?(其他大模型基本类似)
1、Embedding向量化阶段:GPT3定义了50257个Token,每个Token的向量维度是12288
所以:50257*12288约6.2亿
2、Positional Encoding位置编码向量阶段 :GPT3定义了2048个位置向量,每个向量维度12288
所以:2048*12288约2500万
3、Decoder阶段:96层
多头:Q K V3个128维向量,96个Head(头),对多头的96个128维的信息做融
所以:(12288+1)*128*3*96=约4.5亿 (“+1”是指神经网络公式里的常数b: y=ax+b)
Wo的神经网络:(12288+1)*12288约1.5亿
Feed forward 前馈神经网络阶段:升维到12288*4,再降维到12288
所以:(12288+1)*(12288*4) +【(12288*4)+1)】*12288=12.08亿
总共:(4.5亿+1.5亿+12.08亿)约为1736亿
6、Linear阶段使用的开头的Embedding的参数:
所以:50257*12288=6.2亿
总共约1750亿。
来源:人人都是产品经理