AI 到底是怎么“学会”东西的?
上一篇我们把 AI、Machine Learning、Deep Learning 和 LLM 之间的关系梳理了一遍。接下来可以往里面再走一步。我们平时经常会说“大模型训练了多少数据”“这个模型有多少参数”“训练成本很高”“现在只是做推理”这些话听起来已经很熟悉但如果继续问一句AI 到底是怎么“学会”东西的很多人可能就不太容易说清楚了。这个问题其实比 Transformer、RAG、Agent 更基础。后面很多 AI 概念都建立在它上面。这一篇先不碰复杂数学也不讨论怎么训练 GPT 这种大模型。我们只需要把几个最基本的概念搞明白Dataset、Model、Training、Parameter 和 Inference。理解这几个东西以后“模型训练”就没有那么神秘了。先从一个 DBA 熟悉的场景开始假设我们准备做一个非常简单的数据库异常预测模型。目标是根据数据库当前的一些运行指标判断这个时间段是否可能存在性能异常。我们先收集一批历史数据CPUActive SessionIO LatencyDB Time状态20%52 ms30正常35%83 ms45正常85%6025 ms600异常95%10080 ms1200异常真实的数据库性能问题当然不可能只靠四个指标判断这里只是为了方便理解。这批历史数据就是 Dataset也就是数据集。如果按照传统程序的思路我们可能会自己定义规则比如 CPU 超过多少算异常Active Session 超过多少开始告警IO Latency 达到什么程度算严重。机器学习的思路不太一样。我们把大量已经知道结果的历史数据交给算法希望模型自己找到输入指标和最终结果之间的关系。刚开始的时候它可能判断得很差。比如输入一组明显异常的数据指标值CPU95%Active Session100IO Latency80 msDB Time1200真实结果是“异常”但模型第一次却给出异常概率 20%。显然不准。训练要做的事情就是让模型逐渐减少这种错误。所谓 Training其实就是不断调整模型第一次预测错了并不会像人一样坐下来反思“我是不是太低估 Active Session 了”它没有这种思考过程。系统真正做的是数学计算。模型先根据当前参数得到预测结果再把预测结果和正确答案进行比较计算两者之间的差距。接下来训练算法根据这个误差调整模型内部参数然后再用新的参数重新计算。如果新的结果比以前好说明参数调整的方向可能是对的如果更差则需要继续调整。这个过程会重复很多次。所以 Training也就是训练可以先理解成通过大量数据不断调整模型参数让模型输出逐渐接近我们希望得到的结果。这里暂时不需要关心参数具体怎么调整。后面讲 Loss 和 Gradient Descent 时我们会把这一部分补上。现在先建立一个直觉模型不是“看一遍资料就学会了”训练本身是一个大量重复计算和参数优化的过程。Model 到底是什么“模型”是 AI 领域最常出现也最容易被神秘化的词之一。ChatGPT 是模型Embedding 有模型图像识别也有模型。那 Model 到底是什么可以先从一个极其简单的数学关系开始y wx b这里的x是输入y是输出而w和b是模型内部需要确定的参数。假设训练刚开始时w 0.1 b 0.5模型预测效果很差。训练算法不断根据数据调整它们最后可能找到w 0.87 b -0.32使用新的参数以后模型在训练任务上的整体误差下降了。那么从最基础的角度理解模型可以看成一套计算结构加上一组通过训练得到的参数。当然真正的大语言模型比y wx b复杂得多。它内部不是两个参数而是可能拥有数十亿甚至更多参数计算结构也不是一条简单公式而是由大量神经网络层组成。但最基础的思想没有完全改变。数据进入模型模型根据当前参数进行计算训练过程再根据结果不断调整参数。这也是为什么 Parameter 是理解 AI 时绕不过去的概念。7B、32B、70B 到底是什么意思现在很多开源模型名字后面都会看到7B、14B、32B、70B这里的 B 通常是 Billion也就是十亿。7B 可以理解为大约 70 亿参数70B 则是大约 700 亿参数。这些参数并不是 700 亿条“知识记录”。这一点非常重要。很多人第一次听到“700 亿参数”容易把它想象成数据库里存了 700 亿条知识SELECTanswerFROMmodel_knowledgeWHEREquestion:question;模型并不是这么工作的。参数是神经网络计算的一部分。训练过程中大量参数不断被调整最终形成复杂的数值关系。所以“参数量”不能简单理解成“模型记住了多少条知识”。同样参数越多也不意味着模型一定越好。训练数据、模型架构、训练方法、数据质量、推理策略都会影响最终能力。就像一个 10TB 的数据库并不会天然比 1TB 的数据库性能更好一样单看一个数字无法评价整个系统。AI 怎么知道自己预测错了回到刚才的数据库异常预测。真实结果是异常。模型却预测异常概率 20%。我们一眼就知道它判断得不好。但计算机需要一个可以计算的指标来衡量预测结果与真实结果之间到底差了多少。这就是 Loss。Loss 通常翻译成“损失”。现在不需要研究具体 Loss Function只需要理解它的用途给训练过程一个可以优化的目标。如果模型预测得很差Loss 往往比较大预测逐渐接近正确答案以后Loss 通常会下降。训练的一个核心目标就是让 Loss 尽可能降低。所以以后看到一张模型训练曲线Training Loss不断下降不要把它当成一个神秘的 AI 指标。它反映的是模型在当前训练目标上的误差变化。当然Loss 下降也不意味着模型一定已经可以投入真实生产。后面讲 Overfitting 时我们会专门讨论这个问题。Training 和 Inference 一定要分清这是 DBA 学 AI 时非常值得搞清楚的一组概念。Training 是训练。Inference 是推理。它们不是一回事。训练阶段需要大量数据并不断计算误差、调整参数。这个过程往往非常消耗计算资源尤其是训练大型语言模型时需要大量 GPU 和复杂的分布式计算系统。训练完成以后模型参数基本确定下来。这时候用户输入一个新问题模型利用已经训练好的参数计算结果这个过程就是 Inference。比如我们现在问大模型ORA-01555 一般应该从哪些方向排查模型给出答案这通常属于推理。它并不是看到我们的 ORA-01555 以后在后台重新训练一次模型。这个区别非常重要因为后面会涉及很多问题为什么训练模型很贵为什么部署模型主要讨论推理性能为什么 GPU 显存会影响模型运行以及 Fine-tuning 和普通聊天到底有什么区别。如果 Training 和 Inference 混在一起后面这些概念很容易越看越乱。用 DBA 熟悉的东西做一个不严谨的类比为了更容易理解可以把模型训练和数据库的一些操作做一个非常粗略的类比。假设一张超大表需要创建索引。创建索引时Oracle 要扫描数据、排序、构建索引结构这个过程可能持续很久也会消耗 CPU、IO、TEMP 等资源。索引建立完成以后正常 SQL 使用这个索引查询并不需要每执行一次 SQL 就重新创建一遍索引。模型也有类似的“准备阶段”和“使用阶段”。Training 是一个昂贵的学习和参数优化过程而 Inference 是使用已经训练好的模型处理新输入。两者的底层原理当然完全不同所以不能把“训练模型”等同于“创建索引”。这个类比只是为了帮助 DBA 建立一个最基本的认识模型的训练成本和模型的使用成本是两件不同的事情。那 ChatGPT 真的“学过”Oracle 吗现在可以继续往前走一步。一个大型语言模型在预训练阶段会接触大量文本和代码其中可能包含数据库、SQL、编程语言、操作系统等技术内容。训练过程中它不是把这些资料原封不动复制进一个知识库而是通过训练不断调整内部参数。最终形成的模型具备了处理这些内容的能力。所以我们问ORA-01555 是什么它通常可以给出一个像样的解释。我们给它一段 SQL它也可以分析语法、条件和可能存在的问题。但这里马上会出现一个很重要的边界。假设昨天凌晨我们公司的 MES 生产数据库刚发生了一次特殊故障。经过几个小时排查最终确认是某个特定 SQL 触发了一个特定版本的 Oracle Bug。事故报告今天上午才写完而且只存在公司内部 Wiki。通用大模型当然不知道这件事。因为这个知识既不在它以前的训练数据里也没有出现在当前对话 Context 中。这就解释了一个我们后面会重点解决的问题模型已经训练完成以后怎么让它使用公司自己的最新知识一个很重要的答案就是 RAG。我们不需要因为公司新增了一篇 Oracle 故障案例就重新训练一个大模型。更实际的做法是让模型回答之前先去企业知识库检索相关资料再把检索结果作为 Context 提供给它。理解 Training 以后RAG 为什么有价值也会更容易理解。为什么 DBA 通常没必要自己训练大模型理解模型训练以后这个问题其实已经比较容易回答。真正从头训练一个现代大语言模型需要大量高质量数据、GPU、分布式训练系统和很高的工程成本。对于大多数 DBA 团队来说这既不是我们的优势也不是最值得投入的方向。我们已经有大量成熟的大模型可以使用。DBA 更值得做的是把这些现成模型和自己的专业能力连接起来。比如企业自己的 Oracle 和 MySQL 文档、历史事故、SQL 优化案例、AWR 报告、监控数据以及我们已经积累多年的巡检 SQL 和运维脚本。模型本身可以由专业 AI 公司训练。但“这个数据库现在发生了什么”“公司以前怎么处理过”“哪些操作符合我们的生产规范”这些能力只能来自企业自己的数据和 DBA 经验。这也是整个《DBA 学 AI》后半部分真正要解决的问题。这一篇真正需要记住什么这一篇出现了不少英文词但真正需要记住的并不多。Dataset 是模型学习使用的数据Training 是根据数据不断优化模型的过程Parameter 是模型内部通过训练调整的大量数值Model 可以理解成计算结构和参数的组合Loss 用来衡量模型当前预测和训练目标之间的差距Inference 则是模型训练完成以后真正拿来处理新输入的过程。如果这些概念已经能够大致说清楚那么下一步就可以进入模型内部看看了。我们一直在说“模型通过调整参数学习”但参数到底存在于什么地方一个最简单的神经元又是怎么把输入变成输出的下一篇我们开始进入神经网络。《神经网络到底是什么》