通过预设的“条件—动作”规则集合来模拟人类决策的过程(专家系统)。让机器在特定、狭窄、规则极其明确的领域模仿人类专家的决策逻辑(比如诊断特定疾病)。这一阶段的AI系统完全依赖手工编码的专家规则,采用符号逻辑 和 确定性算法处理结构化输入。
知识库
巨大的“规则手册”,以 “规则” 形式表示的领域专家知识。规则按照领域细分,并且标注优先级。
IF <前提条件1> AND/OR <前提条件2>... THEN <结论/动作>
推理引擎
一个“规则执行器”,基于输入数据,一条条去匹配知识库里的规则,按照规则链推导出结论。推理三种方式(典型代表MYCIN医疗诊断专家系统):
正向推理:
从事实出发,匹配规则前提,推导出结论。比如:
fact1: 咳嗽 = 是 fact2: 发热 = 是 fact3: 呼吸困难 = 是
综合数据库初始状态为 {fact1, fact2, fact3}。系统扫描知识库,发现规则 R1:
R1: IF 咳嗽 且 发热 且 呼吸困难 THEN 存在呼吸系统病症
R1 的前提条件全部满足,触发该规则,生成中间结论 “存在呼吸系统病症”,存入综合数据库,此时数据库更新为 {fact1, fact2, fact3, 存在呼吸系统病症}。
反向推理:从目标结论出发,反向验证前提条件(目标驱动)
R2: IF 存在呼吸系统病症 且 白细胞计数 > 10×10^9/L THEN 可能为细菌感染
“存在呼吸系统病症” 已确认,但缺乏白细胞计数数据。
系统询问:“患者的白细胞计数是多少?”。这时候医生给患者开具一张化验单,化验单结果出来后补充数据 “白细胞计数 = 12×10^9/L”,更新综合数据库为 {fact1, fact2, fact3, 存在呼吸系统病症, 白细胞计数 = 12×10^9/L},此时 R2 前提条件全部满足,触发 R2,生成结论 “可能为细菌感染”。
混合推理:结合两者,先正向收集数据,再反向验证目标。当多条规则匹配时,通过优先级、最新性、特殊性等策略选择执行规则。
综合数据库
存储当前问题的输入数据、推理过程中的中间结果及最终结论。包括:初始事实(如用户输入的症状、设备参数);推理生成的新事实;中间计算结果;
用户接口/数据输入
实现用户与系统的交互,包括数据输入与结果输出,如:文本问答输入症状。
辅助专家更新、维护知识库,降低规则编写门槛。规则语法校验:如检查前提条件与结论的逻辑正确性;冲突检测:如发现两条规则结论矛盾时提示专家;半自动规则生成:如通过历史案例归纳简单规则;
解释器
解释推理过程,如:记录规则触发顺序:如 “因为体温> 38℃且咳嗽,所以触发规则 R12”;展示证据链:如 “结论 A 的支持证据包括事实 X、规则 Y 的推导”;支持用户追问:如 “为什么建议做血常规?”;
知识点链接小贴士:
1、规则驱动系统是一个包含数据输入,数据处理、输出输出的完整的、闭环的生态。规则引擎则仅负责规则的计算,需要依赖外部完整生态。
2、业务的正面和反面
IF A THEN B
),也可以带简单概率(IF A THEN B (概率P)
)。这个时期就像给机器一本厚厚的、极其详细的特定领域操作手册,并配上一个只会按手册查条文的办事员。机器没有理解能力、没有学习能力、没有适应能力,完全依赖人类预先编写的规则。核心是基于符号逻辑的显式知识表示和推理。
这个阶段机器能够从数据中自动学习规律,从而处理更复杂、更模糊的任务,不再完全依赖手工规则。但学习到的能力通常是单一、专用的(比如只能从图片上认出是猫,或者只做垃圾邮件过滤)。
最左边代表现实中待解决的各类实际问题、需求或现象,简单的例子:识别垃圾邮件、房价预测。
中间 “fx”(模型 / 算法):是机器学习的关键环节,承担 “抽象转化” 角色。它把现实问题提炼成数据可表达、可计算的形式(构建数据模型、设计算法逻辑 ),让现实问题转化为数据层面的数学问题。
最右侧借助训练好的模型、算法,根据机器处理转化后的 “数据问题”,输出分析结果、预测结论等,再反向作用于现实场景,完成 “用数据驱动解决现实问题” 的闭环,比如通过算法识别出垃圾邮件并拦截,实现解决现实场景里邮件管理的问题 。
训练数据包含正确的 “输入数据”x 和 “输出标签”y。在图像分类中,输入是图片像素值,以及对应的标签“猫”。得到拟合输入到输出的映射(也就是图像像素的规律),本质上是一个函数f。训练过程中,通过对比模型预测结果和真实结果,以及调节模型参数,让预测更准确。
监督学习的典型应用场景,识别照片中的物体类别、新闻主题分类、将语音信号转换为文本、信用卡欺诈检测、推荐系统(通过用户历史行为(点击、评分)预测其对物品是否喜欢)。
从无标签数据中发现隐藏模式或结构。只有输入,无预设输出标签。用算法来分析并聚类未标记的数据集,以便发现数据中隐藏的模式和规律,不需要人工干预,因此被称为“无监督的”学习。
下面是某商场会员基本信息,包括信息(数据集)客户ID、性别、年龄、年收入(k$)、消费指数(1-100),
通过已有信息对客户进行细化分类,以便营销运营团队更好的制定策略。
无监督学习常用于客户细分、探索性数据分析、推荐系统等。监督学习解决明确目标的任务,无监督学习探索未知数据模式,两者结合可提升模型泛化能力
线性回归是一种基础的机器学习模型,核心是通过拟合一条线性方程来描述自变量(特征)和因变量(目标)之间的关系,常用于预测连续值。
比如:根据房子大小来预测房子的价格(监督学习)。现有一些数据集,x(房子大小) y(房子价格)。根据数据集,我们在二维坐标中画出数据,其中横坐标是房间大小,纵坐标是房子价格。
现在可以根据数据集构建一个线性回归的模型,模型将拟合为一条直线。根据拟合出来的直线,将房子大小代入函数式,就可预测房子的价格(以数字作为输出,回归模型)。
经过推导得出模型函数如下,对应图三中那条直线。其中x是房间大小,w是函数的斜率,b是截距。通过调整w,b来拟合数据。
怎样找到最合适的w,b,来让预测更准确?这个时候需要引入成本函数。
成本函数是衡量模型预测结果与真实标签之间差异的函数,成本函数值越小预测越准确。
选定一个w,b就能构造一个模型f,同时计算出模型f的成本函数的值。当选择了一堆w、b时就能计算并画出成本函数的函数图像。成本函数的公式,m数据集的数量。(此处忽略推导过程)。
假设b=0,w=1,得到下图。可以看到每次都拟合,所以当w=1时,成本函数值为0,也就是零误差。
接着我们继续调参,b=0 w=0.5就得到了下图,可以看到每次的预估数值都和真实的数据有差距。
在多次输入不同的w,b数值后,我们得到了成本函数曲线。
上面的过程就是我们寻找最小成本函数的过程。在这个简单的案例场景下,我们能用肉眼一看看出最合适的w、b参数。那对于复杂、多维数据怎么办?
梯度下降(Gradient Descent)的核心目标是通过迭代优化参数,找到使成本函数最小的参数(如权重 w 和偏置 b)。
上图是一元二次函数的曲线图案,可以看出:在最低点的左边部分,每一点的梯度方向值都是负值,因为每一点的斜率都是小于 0 的,所以当变量沿着梯度的方向递进,梯度值越来越大;同理右边,每一点的梯度方向都是大于 0 的,所以沿着梯度方向,梯度值也是越来越大。所以,函数的梯度方向总是成本函数值越来越大的方向。
要想求成本函数最小值,就应该沿着梯度的反方向进行,这就是梯度下降法的原理。
沿着成本函数下降最快的方向(即负梯度方向)更新参数 w,从而最小化 J(w) (预估误差)。其中α(Alpha)为学习率,控制步长。重复这个步骤,直到:成本函数变化很小;达到最大迭代次数,得到最优的w。
比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步。每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。
当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。梯度下降像蒙眼下山,可能停在小坑(局部最优)而非最低谷(全局最优),但通过调整策略和初始化,可以找到足够好的解。
(对于凸函数,局部最优解也是全局最优解。那啥是凸函数呢?)
向量算法,如NumPy的np.dot
一维数组的点积:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.dot(a, b)
print(result)
计算过程为 1*4 + 2*5 + 3*6 = 4 + 10 + 18 = 32
相比传统循环计算具有以下优势,数据量越大差距提效越显著:
w[0]*x[0] → w[1]*x[1] → ...
),共16次顺序操作。向量算法(右侧)通过np.dot
一次性并行计算所有元素的乘积(图中蓝色标注的"in parallel"),16次乘法同步完成,大幅缩短计算时间。np.dot
仅需一行代码,内部由高度优化的底层C/Fortran( C 语言和Fortran语言编写的高性能计算库)实现,计算效率更高。机器开始“学习”! 不再完全依赖手工规则,能从数据中自动发现统计规律,处理模糊性和不确定性能力大幅提升。
应用范围扩大: 文本处理(垃圾邮件过滤)、推荐系统(协同过滤)等。
就像给机器配了一个“统计学徒”。人类师傅(专家)不再直接告诉徒弟每一步该怎么做(规则),而是给徒弟看大量例子(数据),并告诉徒弟例子中的关键点是什么(特征工程),然后徒弟(机器学习算法)自己琢磨(训练)出一套判断方法(模型)。但这个学徒只会做师傅教过的特定任务,换个任务就得从头再教,而且师傅教“看什么”(特征工程)非常费劲。核心是从数据中学习特定任务的统计模式。
这张图是生物神经元的结构,一个神经元有很多输入端可以从其他神经元接受电脉冲;经过神经元的计算,将信息输出并给到其他的神经元,作为下个神经元的输入。下个神经元又会将多个其他神经元的输入进行汇总,计算后输出发送给其他的神经元。这就是人类思考过程。
生物神经元的信号传递、整合机制,启发了人工神经网络的模型架构设计。让算法模拟生物神经的信息处理方式,实现机器学习任务。人工神经网络使用了一个很简化的数学模型来模拟神经元的功能。
下图展示了人脸识别场景下的神经网络基本工作流程,用简化的神经网络结构,解释 “输入人脸图像→输出是否为某个人的概率” 的过程:
隐藏层中,每个蓝色圆圈代表一个神经元,模拟生物神经元的 “计算单元”。层与层之间神经元全连接,体现神经网络 “逐层传递、加工信息” 的逻辑。
神经网络对比传统机器学习的优势就是,不需要特征工程,神经网络会自动学习检测不同的特征。我们对刚才的神经网络模型输入一个汽车的图片,也会通过隐藏层识别出汽车的特性。
神经网络计算的过程涉及大量矩阵运算,手动实现这些计算极其繁琐且容易出错。以及神经网络训练依赖反向传播(类似前面讲过的梯度下降,寻找最小成本函数对应调参w的值),手动计算梯度(尤其是复杂模型)几乎不可行。那么TensorFlow就诞生了。
Tensorflow顾名思义是由Tensor(张量、向量)+ Flow(流动,流动的数据、动态的计算)两个英文单词组成的,TensorFlow计算图的每个节点的输入输出都是 Tensor,而连接节点的有向线段就是 Flow,表示从一个 Tensor 状态到另一个 Tensor 状态。
TensorFlow包含三个角色:client、master和worker。
worker又分为三个角色:ps(parameter server)、worker和chief worker。
知识点链接小贴士:由TensorFlow联想到传统软件开发使用的——线(协)程池,在系统中都是“并发工具/框架”的角色。只管使用,具体的资源申请、资源调度管理、资源回收都内置了。满足了“既要又要”的要求:既要在高并发场景下高效、频繁的申请/释放内存,又要避免频繁GC带来的性能影响。
普通的计算是直接按顺序执行操作,会浪费计算资源,TensorFlow是将计算表示为计算图(Computational Graph),并优化图的执行。就是将多个小操作合并为一个复合操作,通过减少中间结果和内核调用提升效率;提前规划内存使用;自动拆分计算到多GPU(前面讲过的向量化)。
简单的比喻就是“点动成线、线动成面”。点:计算的节点及单个人工神经元;线:流动的张量(向量、矩阵),也就是数据输出、接收的方向;面:大批量的数据计算都是提前规划、定义好的。当并行计算数据量足够庞大,那么就形成了类似的“图”(类比:图片是由无数个像素组成)。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
TensorFlow 的核心价值之一就是提供复杂计算的能力,将开发者从底层数学实现、硬件优化和工程琐事中解放出来,专注于模型设计和应用逻辑。
知识点链接小贴士:
1、类似这种数据拆分、规划计算路径、并发执行,在传统软件中也应用广泛,比如分布式数据库TiDB、ES;大数据中的Spark。
2、在技术中(传统软件或者AI领域),对于大文件、大数据,解决的中心方法都是“拆”。拆完之后调度、并发。
梯度消失是深度学习中的一种常见问题一句话概括原因:神经网络反向传播时(梯度下降是根据成本函数倒推参数w),梯度像“传话游戏”一样每层打折(梯度会随着反向传播逐层传递而指数级衰减),传到前面几乎归零导致浅层参数无法更新;或者靠前层级的权重系数几乎不变。
模型仅靠深层学习,性能大幅下降;损失函数长期不下降,模型无法收敛;难以学习远距离依赖。
Transformer 的核心是自注意力机制,要想深入理解,就需要从 Q、K、V 开始理解 W^q ,W^k,W^v,W^o 这四个权重矩阵以及词嵌入。
Q、K、V 就好比当你在网页上搜索文章时,搜索引擎会把你的查询内容 Q ( Query 搜索栏中输入的查询内容)映射到数据库中与候选文章相关的一组关键字 K(Keys 视频标题、描述等)匹配相关性。最后系统通过计算,向你展示最匹配的 K 所对应的内容 V( Values 值,在网页上给出的搜索结果为最匹配的链接)。而 Attention 机制就好比是对这次查询整个过程的一个称呼。
Attention 将你想要查询的 Q 与文章数据库中 K 进行比较,一对一地测量它们之间的相似度,从最高相似度顺序向下依次返回并排列索引到的文章链接。可以理解 Attention 为一个数据库查表的过程:
在实际场景中,我们要给 Transformer 大模型输入一个序列的文本,即一句话或一段话,甚至是一篇论文、一本书的文字量。其中的每一个单词都会由一个 词嵌入 向量来表达。这个 Attention 查表的过程,其实就是对海量的 词向量 进行搜索查询的过程。每一个词都只有一个向量来表达。所以大模型也会有“词汇量”一说。
(上述的词其实是指token,token是词元,最小语义单位。输入一长段文字后,会对内容进行拆分。)
举个例子:
给 Attention输入 一句话:How are you?。此时系统会首先把这个输入序列转化为四个token “How”、“are”、“you”、“?” ,然后找出这四个 token 互相之间的语义关联度,即 Attention 过程。也就是“How”与其余三个 token:“are”、“you”、“?”之间的的语义关联度,“are”与其余三个 token:“How”、“you”、“?”之间的的语义关联度,以此类推。
那如果输入的是一本10万字的书呢,机器是怎么通过 Attention 机制用几秒钟的时间,一下子就读懂的呢?
其实,无论你输入给机器是四个 token 的一句话,还是10万字的一本书,它都在执行同一套运算。Attention 都要把输入的序列中的每一个 token,先转化成向量(对应词汇量概念里的向量),然后再把向量变幻成三个向量 Q、K、V。
实际上,我们把每个token的向量分别做三次线性变换,也就是说让token向量和不同的权重矩阵W^q、W^k、W^v相乘得到Q、K、V。其中W^q、W^k、W^v就是大模型在训练阶段,通过神经网络反向传播训练出来的权重,是大模型通过百亿级的语料训练十几天得到的固定数据(执行阶段,非训练阶段)。也就是大模型中的固定节点的链接权重是预先被训练好的。
上面图中,为了便于理解使用了token来进行计算的。实际运算中,都是以矩阵的形式计算的。整个序列的所有token向量都放在一起同时进行运算。
假设n是序列中的token数,W权重向量的维度一般是512,那么矩阵的形状是n*512。
在多注意力机制中,矩阵形状从n * 512变成了n * 64,中间差了8倍,也就一个完整的进程被分解了8个并行进程。这个进程在原论文中成为“头”。这8个头互不干扰各自运算各自的。
8个头中的每一个头都只用初始权重矩阵W^q、W^k、W^v每个向量的八分之一去计算。当然拆分8份后的权重矩阵各自是不同的。(这里的拆分,不是直接在长度512的向量上等分8份,是通过线性变换得来的 8 个具有独立语义逻辑的子空间)。那这样拆分后的所谓的固定权重还准确吗?
词向量类似于这样:
"cat" 的向量:0.2, −0.5, 0.8
"dog" 的向量:0.6, 0.1, −0.7
在词向量中,一个词有语义逻辑、语法逻辑、上下文逻辑、在全句中的位置逻辑、分类逻辑等等等。
下图是在词向量二维空间中的表示,可以看到三个绿色的点离得很近,因为他们之间相对于其他的词汇来说更接近。我们可以看到,其中cat和tree会离得近一些,因为在多语言的文章中会有“猫爬树”类似的句子,相比“兔子爬树”。
我们把词向量想象成512维度的空间(这个……很难想),在这个多维的空间中,词和词之间的关系是非常多维度的,关联因素可能是成百上万的。
比如:man和woman会映射出king和queen;由 walking 到 walked 的距离与斜率和 swimming 到 swam 的距离与斜率一致(即向量的长度与斜率一致),且距离几乎相等,原因是都是现在分词和过去分词的形式变化。
在这个基础之上,我们再回看多头注意力机制中把固定的W权重向量变换成8块,去执行Attention其实并不会影响语义。反而是细分了不同的语义去运算,反而使运算更加精准,表达更加细腻了。
那问题来了,是不是拆分越细越好呢?
理论上,多头注意力机制设置4、8、16、32都可以,但是经过技术团队的反复测试得出结论,8个头的总计技术分最高。
有一个这样的句子“The animal didn't cross the street because it was too tired.”。我们模拟2个头Attention(橙黄色、绿色),可以看出橙黄色的头把 it 关注的细分语义逻辑重点放在了“The”、“animal”上,而绿色的头把 it 关注的细分语义逻辑重点放在了“tired”身上。
针对每一个token单头的运算:
比如这样一句话:“He booked a room at a hotel.”。我们对其中“booked”这个单词(实际上是 token)做 Attention 机制。
实际上就是分配了8个头分别运算,运算完成后,再通过W^o(模型训练同阶段产出的权重矩阵)把结果连起来,再做一次线性变换(前面讲过拆分8个头不是平均拆分的)回到初始形状。
知识点链接小贴士:自注意力机制的本质就是“无中心”,在传统的软件工程中Redis集群也是由多个节点构成的“无中心”拓扑网。当然自注意力机制“无中心”的实现是通过“全计算”达到的,而Redis的Gossip是通过多轮局部传播,最终使所有节点获知全局信息。
AI的发展:专家系统,死规则 --> 机器学习,喂规律 --> 神经网络,自学规律 --> 大模型,海量自学规律--> Workflow/Agent,把规律用死规则串起来(螺旋式上升的循环)。
明其律而不拘,悟其道而自在。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。