从 AIGC 到大模型:神经网络与必要原理

AI Agent 工程实践教程 · 第 02 章

从 AIGC 现象切入,补齐神经网络、Transformer 与大模型调用的基础概念。

返回系列目录

第二天:从 AIGC 到大模型:神经网络与必要原理

这一天会从 AIGC 现象出发,逐步走到大模型的核心原理。

先看整体路线:

第二天学习路线图

这一节课不要求记住复杂公式。

更重要的是先建立一条清晰的理解路径:

AIGC 为什么能生成内容
  ↓
大模型为什么有这种能力
  ↓
神经网络和参数是什么
  ↓
参数是怎么训练出来的
  ↓
文字如何变成 Token 和 Embedding
  ↓
Transformer 如何理解上下文
  ↓
这些能力如何接入真实项目

1. 从 AIGC 开始:AI 生成内容到底改变了什么

程序可以通过 API 把问题发送给大模型,再接收模型返回的内容。

在继续开发之前,需要先理解一个基础问题:

为什么现在 AI 可以生成文章、代码、SQL、图片和分析结论?

这类能力通常叫做 AIGC

AIGC 到大模型应用的关系

1.1 AIGC 不是一个工具,而是一类能力

AIGCAI Generated Content 的缩写,意思是 AI 生成内容

这里的“内容”不要只理解成文章。

在软件项目里,AI 能生成的东西非常多:

生成对象 项目里的例子
文本 课程答疑、客服回复、日报总结、合同摘要
代码 函数、接口示例、单元测试、代码说明
SQL 根据自然语言生成查询语句
JSON 生成接口参数、结构化输出、任务计划
报告 根据数据生成分析结论
图片/音视频 海报、配音、数字人、短视频素材

所以 AIGC 的重点不是“AI 会写作文”。

更准确地说:

AIGC 是让 AI 根据输入要求,生成一段可被人或系统继续使用的内容。

这句话很重要。

因为在真实项目里,AI 生成的内容不一定是给人看的,也可能是给程序继续执行的。

例如:

  • 生成一段 SQL,让数据库执行
  • 生成一段 JSON,让后端解析
  • 生成一个工具调用参数,让 Agent 去执行
  • 生成一段回答,让前端展示给用户

1.2 用 Text-to-SQL 理解 AIGC

如果只把 AIGC 理解成“AI 写文章”,会低估它在软件系统里的价值。

但在开发项目里,AIGC 更有价值的地方是:

把人的自然语言,转换成系统能执行的内容。

比如 Text-to-SQL。

用户说一句话:

帮我查一下最近 7 天每个课程的报名人数。

系统不能直接拿这句话去查数据库。

数据库能执行的是 SQL。

所以 AI 要生成的内容不是文章,而是一段 SQL:

SELECT
    course_id,
    COUNT(*) AS signup_count
FROM student_order
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY course_id;

这就是一个很典型的 AIGC 场景:

输入是自然语言,输出是可执行的 SQL。

Text-to-SQL 中的 AIGC 流程

再往前走一步,系统还可以继续做:

  1. 检查 SQL 是否安全
  2. 执行 SQL 查询数据
  3. 把查询结果交给大模型
  4. 生成一段业务解释

例如最后给用户返回:

最近 7 天报名人数最多的是 Python AI 入门课,共 126 人报名。
其次是 Java 项目实战课,共 83 人报名。
整体报名量比上周同期增长约 18%。

这个例子里,AIGC 出现了两次:

位置 AI 生成了什么
第一次 根据自然语言生成 SQL
第二次 根据查询结果生成业务分析

所以,AIGC 不只是“生成文字”。

它可以参与完整业务流程:

自然语言问题
  ↓
生成 SQL
  ↓
查询数据库
  ↓
生成分析结论
  ↓
返回给用户

这也是后面学习 Prompt、RAG、Tools、Agent 的基础。

1.3 生成内容之后,系统还要做什么

AIGC 能生成内容,但生成内容不等于功能已经完成。

在 Text-to-SQL 里,模型生成 SQL 之后,系统还需要继续处理:

环节 作用
SQL 安全检查 判断是否只读查询,避免删除、修改、越权查询
表字段校验 判断模型生成的表名、字段名是否真实存在
权限控制 判断当前用户能不能查这些数据
查询执行 把通过校验的 SQL 交给数据库执行
结果解释 把查询结果转成用户能看懂的业务结论

这里有一个很重要的工程判断:

生成出来的内容不一定永远正确。

比如 Text-to-SQL 里,模型可能生成错误字段、错误表名,甚至生成危险 SQL。

所以 AI 应用开发不能只停留在“调用模型”。

还需要继续解决:

  • 模型为什么能生成
  • 模型为什么会生成错
  • 怎么限制模型输出格式
  • 怎么校验模型生成的内容
  • 怎么让模型结合业务资料和数据库结构

这些就是第二天要讲“大模型必要原理”的原因。

1.4 从 Text-to-SQL 反推大模型需要哪些能力

Text-to-SQL 看起来只是“让 AI 写一段 SQL”。

但把这个过程拆开,会发现模型至少要完成几件事:

模型要做的事 对应的问题
读懂用户的问题 “最近 7 天”“每个课程”“报名人数”分别是什么意思
读懂数据库结构 哪张表表示报名,哪个字段表示课程,哪个字段表示时间
把文字和字段对应起来 “报名人数”可能对应 COUNT(*),课程可能对应 course_id
按 SQL 语法生成结果 输出要符合数据库能执行的格式
根据查询结果继续解释 把数据结果转换成业务结论

这说明 AIGC 背后不只是“会写字”。

模型需要先把输入内容变成可以计算的表示,再根据训练得到的规律,生成符合上下文的内容。

所以要继续理解大模型,需要顺着 Text-to-SQL 的过程问几个问题。

1.5 从一句话生成 SQL,需要哪些底层能力

继续看刚才的问题:

帮我查一下最近 7 天每个课程的报名人数。

表面上看,AI 只是生成了一段 SQL;实际上,中间至少发生了三件事。

Text-to-SQL 反推大模型必要原理

第一,模型要把文字变成可以计算的东西。

一句中文问题不能直接被模型计算,所以要先切成 Token,再变成向量表示,也就是 Embedding

第二,模型要根据学过的规律判断用户想要什么。

例如“最近 7 天”是时间范围,“每个课程”表示分组,“报名人数”通常对应统计数量。模型能做这种判断,是因为它在训练中学过大量文本、代码、SQL 和问答数据。

第三,模型要结合上下文生成结果。

Text-to-SQL 不能只看用户问题,还要看表结构、字段说明、输出要求和安全限制。模型需要在这些信息里判断当前该参考什么,再一步一步生成 SQL。

这三个动作会对应后面几个必要概念:

概念 先怎么理解
Token 模型处理文字的基本单位
Embedding 把文字变成模型可以计算的向量
神经网络与参数 模型通过大量参数学习语言、代码和 SQL 的规律
训练与预测 模型通过训练学会根据前文生成后续内容
上下文窗口 一次请求里模型能够看到的内容范围
注意力机制 帮助模型判断当前应该重点参考哪些上下文
幻觉与校验 模型可能生成错误内容,所以系统要做校验

所以,从 AIGC 进入大模型原理,不是为了研究公式,而是为了理解一件事:

AI 生成内容的过程,本质上是把输入变成数字表示,再根据训练得到的参数和当前上下文,一步一步生成输出。

这条主线可以先记成:

文字问题
  ↓
切成 Token
  ↓
变成向量
  ↓
神经网络处理
  ↓
结合上下文
  ↓
生成 SQL / 回答 / 工具参数
  ↓
系统校验后再使用

2. 大模型到底是什么

可以先用一句话理解:

大模型是一个经过大量数据训练的神经网络,能够根据输入内容和上下文生成后续内容。

这句话里有三个重点:

关键词 先怎么理解
大量数据训练 模型从大量文本、代码、问答、网页等内容里学习规律
神经网络 模型不是人工写死规则,而是由大量参数组成的计算系统
根据上下文生成 模型会根据当前输入和前文内容,一步一步生成输出

大模型的基本工作方式

2.1 大模型不是数据库

数据库的核心能力是“存储和查询”。

例如数据库里可以存一条订单记录:

订单号:10001
学生:张三
课程:Python AI 入门
状态:已支付

查询数据库时,系统是在找已经存在的数据;大模型则是根据输入和上下文生成内容。

大模型不是把每一句答案都原封不动存起来,再按问题取出来。它更像是学到了大量语言、代码和知识表达的规律,然后根据当前输入组织一个结果。

也正因为它是在“生成”,所以它可能生成看起来合理但实际不正确的内容,这就是后面会讲到的 幻觉

2.2 大模型也不是搜索引擎

搜索引擎的核心能力是“找资料”。

用户输入关键词后,搜索引擎会从网页里找相关页面,再返回链接和摘要。

大模型的核心能力是“生成内容”。

用户输入问题后,大模型会根据上下文直接组织一段回答。

三者区别可以先这样理解:

能力 更像在做什么 结果是什么
数据库 查已有数据 返回表里的记录
搜索引擎 找已有资料 返回网页、链接、摘要
大模型 根据上下文生成 返回回答、SQL、代码、JSON 等内容

数据库、搜索引擎和大模型的区别

在真实项目里,这几种能力经常会组合使用。

例如知识库问答系统通常不是只靠大模型回答,而是:

先检索资料
  ↓
把资料放进上下文
  ↓
再让大模型基于资料生成回答

这就是后面要学的 RAG。

2.3 大模型为什么叫“大”

它主要体现在几个方面:

方面 说明
参数规模大 模型内部有大量参数,用来保存训练中学到的规律
训练数据多 训练时使用了大量文本、代码、问答、网页等数据
任务范围广 一个模型可以做问答、总结、翻译、代码、SQL、分析等多种任务
上下文能力强 能根据较长的输入内容理解任务要求

参数可以先理解成模型内部的“调节旋钮”。训练过程会不断调整这些参数,让模型在看到输入时,更容易生成合适的输出。

参数越多,模型可以表达的规律通常越复杂;但模型是否好用,还和数据质量、训练方法、架构设计有关。

模型参数规模可以差很多。

可以先有一个大概印象:

参数规模 大概理解
百万级 小模型,能做比较简单的任务
亿级 中等规模模型,可以学习更复杂的规律
百亿级 大模型,能处理更多语言和任务规律
千亿级 超大规模模型,训练和推理成本都很高

公开资料里能看到一些例子:

模型 参数量 怎么理解
BERT-base 约 1.1 亿 早期常见的自然语言处理模型
BERT-large 约 3.4 亿 比 BERT-base 更大
Llama 3.1 8B 80 亿 可以理解成较小的大语言模型
Llama 3.1 70B 700 亿 更强,但运行成本也更高
Llama 3.1 405B 4050 亿 公开模型里非常大的规模
GPT-3 1750 亿 早期非常有代表性的大语言模型

这里的 BBillion,表示“十亿”。

例如:

8B = 80 亿参数
70B = 700 亿参数
405B = 4050 亿参数

不过,现在很多商业大模型不一定公开具体参数量。

比如很多闭源模型只公布能力、上下文长度、价格和使用方式,不一定公布内部到底有多少参数。

所以看一个模型时,不能只问“参数有多少”,还要看:

  • 训练数据质量
  • 模型结构
  • 推理速度
  • 上下文长度
  • 是否支持多模态
  • 是否支持工具调用
  • 在具体任务上的效果

可以先记住:

参数量能反映模型规模,但不能单独决定模型能力。

2.4 LLM 是什么

LLMLarge Language Model 的缩写,意思是 大语言模型

它的核心能力是处理和生成文本。

这里的“语言”不只包括中文、英文,也包括很多文本形式的内容:

  • 用户问题
  • 文章
  • 代码
  • SQL
  • JSON
  • 日志
  • 文档
  • 表结构说明

用户问题是文本,表结构是文本,SQL 也是文本。大语言模型擅长在这些文本之间建立关系并生成新的文本。

不过,现在很多大模型已经不只处理文本,也可以接收图片、音频、视频等信息。这类模型通常会被称为 多模态大模型

可以先这样区分:

类型 重点能力 例子
大语言模型 LLM 处理和生成文本 问答、总结、代码、SQL、JSON
多模态大模型 同时处理文本、图片、音频、视频等信息 看图问答、语音对话、图片理解、视频分析

本课程前期主要围绕文本类能力展开,因为 AI 问答、Text-to-SQL、Prompt、RAG 和 Agent 的基础都离不开文本理解与生成。

2.5 大模型是怎么生成回答的

大模型生成内容时,不是一次性把整段答案吐出来,而是一步一步往后写。

例如输入:

什么是 AIGC?

模型会根据前面的内容不断生成下一个更可能出现的 Token,最后组合成完整回答:

AIGC 是人工智能生成内容的意思,常见形式包括文本、图片、音频、视频和代码生成。

大模型逐步生成内容

可以先把它理解成“边看上下文,边往后写”。

大模型每生成一点新内容,新的内容又会变成后续生成的上下文。

所以 Prompt 写得清不清楚、上下文放得对不对,会直接影响模型生成什么。

下一节先继续往下看:

神经网络是什么?

因为大模型本质上是神经网络,先认识神经网络的结构,后面再理解 TokenEmbedding 和训练过程会更顺。

3. 神经网络先认识:神经元、层和参数

前面说过,大模型不是人工写死规则,而是由大量参数组成的神经网络。

这一章先不讲复杂公式,只先看懂三个问题:

  • 神经元是什么
  • 神经网络的层是什么
  • 参数和权重为什么重要

神经网络的基本结构

3.1 神经网络可以先怎么理解

神经网络可以先理解成一个 由很多小计算单元组成的判断系统

它接收输入,经过多层计算,最后输出结果。

例如判断今天适不适合打篮球,可以参考几个因素:

输入因素 可能的影响
天气是否适合 天气好,更可能去打球
是否有时间 有时间,更可能去打球
是否有朋友一起 有朋友,更可能去打球
球场是否太远 太远,可能不去打球

最后输出一个结果:

适合打篮球 / 不适合打篮球

这个例子不是说神经网络真的只会判断打篮球,而是用一个生活场景理解:

神经网络会把多个输入因素综合起来,经过计算后给出一个结果。

3.2 神经元是什么

在上面的结构图里,每一个圆点都可以先理解成一个神经元

神经元可以先理解成一个小计算单元。

它会接收一些输入,然后给不同输入分配不同的重要程度,再算出一个结果。

比如判断是否适合打篮球时:

天气好不好
有没有时间
有没有朋友
球场远不远

这些因素的重要程度不一定一样。

对有的人来说,“有没有朋友一起”很重要;对另一些人来说,“有没有时间”更重要。

在神经网络里,这种“重要程度”通常叫做 权重

图中圆点之间的连线,可以先理解成信息传递的连接;每条连接背后都有一个权重,用来表示这一路输入有多重要。

可以先这样理解:

概念 通俗理解
输入 要参考的信息
神经元 做一次小计算的单元
权重 某个输入有多重要
输出 计算后的结果

神经元如何处理输入

从底层计算看,一个神经元通常会做三步:

输入 × 权重 → 求和 → 激活函数

可以写成:

z = x1w1 + x2w2 + x3w3 + b
输出 = 激活函数(z)

这里可以先这样理解:

符号 含义
x1、x2、x3 输入信息
w1、w2、w3 每个输入对应的权重
b 偏置,可以理解成神经元的基础倾向
z 加权求和后的结果
激活函数 决定这个神经元最终输出什么

神经元的基本计算公式

为什么还要加一个 b

因为只做 x1w1 + x2w2 + x3w3 时,神经元只能根据输入加权计算。

但真实判断里,模型往往还需要一个基础倾向。

比如即使天气、时间、朋友这些输入都差不多,不同人也可能有不同默认倾向:

有的人本来就很想运动
有的人本来就不太想出门

b 就可以先理解成这种“基础偏移”。

它能让神经元的输出整体往上或往下调整,而不是完全被输入和权重限制住。

比如:

x1:天气是否适合
x2:有没有时间
x3:有没有朋友

如果 w2 很大,说明“有没有时间”对这个神经元影响很大。

如果 w3 很大,说明“有没有朋友”对这个神经元影响很大。

所以神经元不是简单把输入加起来,而是会根据权重判断哪些输入更重要。

3.3 神经网络的层

一个神经元能做的判断很有限。

真实任务通常需要分步骤处理,所以神经网络会把很多神经元组织成多层。

可以把它理解成一个逐步加工的过程:

先接收信息
  ↓
再组合信息
  ↓
最后输出结果

神经网络分层处理示例

以打篮球为例。

输入层接收的是原始因素:

天气、时间、朋友、距离

隐藏层不会直接输出“适合”或“不适合”,而是先做中间判断。

例如:

天气 + 距离  → 外部条件怎么样
时间 + 朋友  → 个人意愿怎么样
外部条件 + 个人意愿 → 综合判断

输出层再根据这些中间结果,给出最后判断:

适合打篮球 / 不适合打篮球

所以“层”的作用不是把内容简单传下去,而是让信息被一步一步加工。

作用
输入层 接收原始信息
隐藏层 提取、组合、转换信息
输出层 给出最终结果

放到大模型里也是类似的思想。

只不过大模型处理的不是“天气、时间”这种简单因素,而是大量文字、代码、上下文和语义关系。层数越多,模型越有机会逐步提取更复杂的关系。

3.4 参数和权重是什么

权重是参数的一种。

参数可以先理解成模型内部的“调节旋钮”。

在刚才的公式里:

z = x1w1 + x2w2 + x3w3 + b

w1w2w3 是权重,b 是偏置。

它们都属于模型参数。

权重主要控制“每个输入有多重要”。

偏置主要控制“整体判断的基础位置”。

神经网络的判断结果,很大程度上取决于这些参数怎么设置。

例如:

如果“有没有时间”的权重很高,
模型就会更重视时间这个因素。

如果“球场远不远”的权重很高,
模型就会更容易因为距离远而判断不适合打球。

大模型之所以叫“大”,一个重要原因就是内部有大量参数。

这些参数不是人工一个个手动设置的,而是在训练过程中不断调整出来的。

3.5 从这个例子抽象出来

打篮球例子里,神经网络做的是:

天气、时间、朋友、距离
        ↓
多层处理
        ↓
适合 / 不适合

把具体例子拿掉,就可以抽象成:

输入信息
   ↓
神经网络多层处理
   ↓
输出结果

大模型也是类似的思想。

只不过大模型处理的输入更复杂,可能是一段问题、一段对话、一份资料,或者一个任务要求。

它输出的也不只是“适合 / 不适合”,而可能是一段解释、一段回答,或者下一步要执行的内容。

所以可以先记住一句话:

神经网络的核心思想,是用很多神经元和参数,把输入一步一步处理成输出。

4. 参数是怎么学出来的

前面说过,参数可以理解成模型内部的“调节旋钮”。

那这些旋钮一开始应该怎么调?

答案不是人工一个个设置,而是通过 训练 调出来。

4.1 训练不是直接写规则

如果用传统程序判断要不要打篮球,我们可能会写规则:

如果天气好,并且有时间,并且有朋友,就适合打篮球。

但神经网络不是这样工作的。

它不会要求人把每一条规则都写死,而是从大量例子里慢慢调整参数。

比如训练数据可以长这样:

天气 时间 朋友 距离 标准答案
适合
不适合
没有 不适合
没有 不适合

模型一开始并不知道哪些因素更重要。

训练的目的,就是让模型逐渐学会:

什么样的输入,更可能对应什么样的输出。

4.2 训练的基本过程

训练可以先理解成一个反复循环的过程。

模型训练的基本过程

每一轮训练大致做五件事:

步骤 含义
给模型一个样本 让模型看到一组输入
前向传播 模型根据当前参数先预测一个结果
损失函数 计算预测结果和标准答案差多少
反向传播 从错误往回找,看看哪些参数影响了错误
梯度下降 按照能让错误变小的方向,微调参数

这个过程会重复非常多次。

一次调整通常很小,但重复很多轮以后,模型的参数就会逐渐变得有用。

4.3 前向传播:先让模型算一遍

前向传播可以先理解成:

输入从前往后经过神经网络,最后得到一个预测结果。

比如输入是:

天气好,有时间,有朋友,但是球场很远

模型会根据当前参数算出一个结果:

适合打篮球

这一步只是“先做一次判断”。

判断对不对,还要看下一步。

4.4 损失函数:算一算错了多少

损失函数可以先理解成一个“打分器”。

它专门用来衡量:

模型预测结果和标准答案之间差了多少。

比如同一条训练样本:

天气好,有时间,有朋友,但是球场很远

标准答案是:

不适合打篮球

但模型预测成:

适合打篮球

这就说明预测和标准答案不一致,损失会比较大。

训练时,模型要做的事情就是不断让损失变小。

损失越小,说明模型的判断越接近训练数据里的答案。

常见的损失函数可以先了解几种:

损失函数 常见用途 通俗理解
均方误差 MSE 预测数值 预测值和真实值差得越远,惩罚越大
平均绝对误差 MAE 预测数值 直接看预测值和真实值差多少
二分类交叉熵 判断是 / 否 判断越自信但越错,损失越大
多分类交叉熵 多个类别中选一个 正确类别概率越低,损失越大

不同任务会选择不同的损失函数。

比如预测房价、气温、销量这类连续数值时,经常会用 均方误差 MSE

假设真实房价是:

100 万

模型预测是:

90 万

差距就是:

10 万

MSE 会把这个差距平方:

10 × 10 = 100

如果模型预测成:

60 万

差距就变成:

40 万

MSE 的惩罚会变成:

40 × 40 = 1600

所以 MSE 的特点是:

预测值离真实值越远,损失会变得更大,而且远离得越多,惩罚越明显。

但大语言模型生成文字时,不是在预测一个连续数值,而是在很多 Token 里选择下一个更可能出现的 Token。

所以在大语言模型里,更常见的是 交叉熵损失

因为大模型生成文字时,本质上是在很多 Token 里预测“下一个更可能是谁”。

如果正确 Token 的概率很低,损失就会变大;如果正确 Token 的概率很高,损失就会变小。

例如输入是:

人工智能生成内容通常被称为

正确答案是:

AIGC

模型可能会给不同候选 Token 一个概率:

候选 Token 模型预测概率
AIGC 0.70
AI 0.15
机器学习 0.08
数据库 0.02
其他 0.05

因为正确答案 AIGC 的概率比较高,所以损失比较小。

如果模型预测成这样:

候选 Token 模型预测概率
AIGC 0.05
AI 0.30
机器学习 0.25
数据库 0.20
其他 0.20

正确答案 AIGC 的概率很低,说明模型没有把正确答案排到前面,损失就会变大。

所以交叉熵损失可以先这样理解:

正确答案的概率越高,损失越小;正确答案的概率越低,损失越大。

4.5 反向传播:从错误往回找原因

反向传播解决的问题是:

这次错了,主要和哪些参数有关?

可以继续用打篮球例子理解。

如果模型总是把“球场很远”也判断成适合打篮球,说明它可能没有足够重视距离。

参数调整示意图

反向传播会把损失从输出层往前传,逐层分析哪些参数对这次错误影响更大。

它不是直接修改参数,而是先告诉模型:

哪些地方可能需要改
往哪个方向改可能更好

4.6 梯度下降:按正确方向微调参数

梯度下降解决的问题是:

已经知道哪里需要改,具体怎么改?

先用一个具体问题把它串起来。

假设我们要根据房屋面积预测房价。

最简单的模型可以是一条直线:

预测价格 = k × 面积 + b

这里的 kb 就是模型要学习的参数。

其中:

k:斜率,控制面积增加时价格涨得有多快
b:截距,控制整条预测线的基础高度

如果没有 b,这条线就会被限制得很死,通常必须从原点附近开始。

有了 b,模型就可以把整条线整体往上或往下移动,更容易贴近真实数据。

用 MSE 理解梯度下降

对每一套房子来说,都会有:

真实价格:y
预测价格:ŷ

预测价格由模型算出来:

ŷ = kx + b

如果预测价格和真实价格不一样,就会产生误差:

误差 = y - ŷ

但是误差有正有负。

有的房子预测高了,误差可能是正数;有的房子预测低了,误差可能是负数。

如果直接相加,正负可能会互相抵消。

所以 MSE 会把每个误差平方,再求平均:

MSE = 1/n × [(y1 - ŷ1)² + (y2 - ŷ2)² + ... + (yn - ŷn)²]

这样做有两个好处:

1. 平方以后,正负误差不会互相抵消
2. 误差越大的点,惩罚会更明显

现在问题变成:

到底选哪一组 k 和 b,能让 MSE 最小?

不同的 kb 会得到不同的直线,也会得到不同的 MSE。

可以想象成这样:

直线 参数 MSE
第 1 条线 k1, b1 z1
第 2 条线 k2, b2 z2
第 3 条线 k3, b3 z3

哪一条线的 MSE 更小,说明它整体上离真实数据点更近。

到这里,梯度下降要解决的问题就清楚了:

怎么不断调整 k 和 b,让 MSE 越来越小?

如果把 kbMSE 画成一个图,就会像一个高低起伏的地形:

横轴:k
纵轴:b
高度:MSE

梯度下降要找的,就是这个地形里比较低的位置。

4.6.1 导数:一个参数时怎么看方向

先从只有一个参数的情况理解。

如果模型只有一个参数 x,损失可以写成一个函数:

Loss = f(x)

这时可以看普通导数:

f'(x)

导数可以理解成当前这个点的斜率。

它会告诉我们:

参数往右一点,损失会变大还是变小?
参数往左一点,损失会变大还是变小?

如果导数是正的,说明往右走损失会上升,那就应该往左调。

如果导数是负的,说明往右走损失会下降,那就可以往右调。

所以导数的作用是:

告诉我们当前参数应该往哪个方向移动,损失才可能变小。

4.6.2 偏导数:多个参数时分别看

线性回归里有两个参数:

预测价格 = k × 面积 + b

这时不能只看一个方向。

我们要分别看:

k 变化时,MSE 怎么变
b 变化时,MSE 怎么变

这就叫 偏导数

∂Loss/∂k
∂Loss/∂b

可以先这样理解:

∂Loss/∂k:只看 k 变化时,损失怎么变
∂Loss/∂b:只看 b 变化时,损失怎么变

导数和偏导数如何指导梯度下降

如果参数更多,也一样。

每个参数都有一个对应的偏导数,用来判断这个参数应该往哪个方向调。

4.6.3 梯度下降的更新公式

梯度下降的核心公式是:

新参数 = 旧参数 - 学习率 × 梯度

这里有三个关键词:

概念 含义
旧参数 当前模型里的参数
梯度 当前参数应该往哪个方向调
学习率 每次调整时步子迈多大

为什么是“减去”梯度?

因为梯度指向的是损失上升最快的方向。

我们要让损失下降,所以要往相反方向走。

对于线性回归来说,就是同时调整 kb

新 k = 旧 k - 学习率 × ∂Loss/∂k
新 b = 旧 b - 学习率 × ∂Loss/∂b

这里的“k 方向的梯度”和“b 方向的梯度”,可以先理解成:

∂Loss/∂k 告诉我们:k 往哪个方向调,MSE 会下降
∂Loss/∂b 告诉我们:b 往哪个方向调,MSE 会下降

每调整一次,直线的位置和倾斜程度就会变化一点。

如果调整方向是对的,MSE 就会下降:

原来的 MSE 比较大
调整 k、b
新的 MSE 变小

这就是梯度下降在做的事情:

不是一次找到完美直线,而是不断调整参数,让整体误差一步一步变小。

4.6.4 局部最优:不一定走到全局最低

实际训练里,损失地形可能并不是一个光滑的碗。

有时它会有很多高低起伏,模型可能走到某个小坑里就不容易出来。

这个小坑附近已经比较低,但不一定是全局最低,这种情况可以先理解成 局部最优

所以训练模型时,梯度下降不一定保证找到世界上最完美的参数,但它会不断尝试让损失下降,找到一组足够好的参数。

比如模型总是把“球场很远”判断成适合打篮球。

当前参数可能是:

因素 当前影响
天气好 很重要
有朋友 很重要
距离远 不太重要

损失函数会告诉模型:这次判断错了。

反向传播会找出:和“距离远”相关的参数需要调整。

梯度下降会真正执行这次调整:

因素 调整方向
距离远 影响变大
适合打篮球 可能性降低

这样下一次模型再看到“球场很远”时,就更不容易判断成“适合”。

每次调整都不会特别大,只是按照学习率走一小步。

下一轮训练再来一遍:

前向传播 → 计算损失 → 反向传播 → 梯度下降

重复很多轮以后,模型就会逐渐学会更合理的参数。

4.7 学习率:每次参数改多大

学习率可以理解成:

每次调整参数时,步子迈多大。

如果学习率太大,参数变化太猛,可能一下子越过更好的位置。

如果学习率太小,每次只挪一点点,训练会非常慢。

可以这样理解:

学习率 可能的问题
太大 步子太猛,容易来回跳
太小 步子太小,训练太慢
合适 稳定地让损失下降

所以训练模型时,学习率是一个很重要的设置。

4.8 过拟合:不能只会背训练题

训练并不是让模型把训练数据死记硬背。

如果一个模型只是在训练数据上表现很好,但换一批新数据就表现很差,这种情况通常叫 过拟合

可以用考试来理解:

只背熟了练习册原题
考试换一种问法就不会了

这就不是好的学习。

好的模型应该学到更通用的规律,而不是只记住训练样本本身。

所以训练时通常还会用没见过的数据来检查模型,看看它是不是真的学会了规律。

4.9 放到大模型里也是一样

大模型的训练任务更复杂。

它看到的不是几行“天气、时间、朋友、距离”,而是大量文本、代码、问答、网页和资料。

训练时,模型会不断练习一件事:

根据前面的内容,预测后面更可能出现什么

比如看到:

人工智能生成内容通常被称为

模型要学会后面更可能接:

AIGC

如果预测错了,就通过损失函数计算差距,再通过反向传播和梯度下降调整参数。

所以可以先这样记:

训练就是让模型反复预测、计算损失、往回找原因、微调参数。参数就是在这个过程中学出来的。

训练完成后,参数基本固定下来。

我们平时使用大模型提问时,通常不是在训练模型,而是在使用已经训练好的参数进行推理。

5. 模型是怎么学习的:监督学习、无监督学习、强化学习

前面已经知道,模型训练时会不断调整参数。

但还要继续问一个问题:

模型到底是从什么样的数据里学会能力的?

不同训练任务里,数据的形式不一样。

有的数据会直接给出标准答案,有的数据没有明确答案,有的任务则靠反馈告诉模型做得好不好。

这些不同的学习方式,通常可以先分成三类:

监督学习
无监督学习
强化学习

它们不是三种完全割裂的技术,而是理解模型训练时非常重要的三个角度。

三种常见学习方式

5.1 监督学习:有标准答案的学习

监督学习可以先理解成:

给模型输入,也给模型标准答案,让模型对照答案学习。

比如:

输入 标准答案
房屋面积、位置、楼层 房价
一张图片 猫 / 狗
一道题目 正确答案
用户问题 理想回答

监督学习里,模型会先预测一个结果。

然后把预测结果和标准答案比较,计算损失,再调整参数。

例如房价预测:

输入:面积 100 平方米
标准答案:房价 200 万
模型预测:房价 180 万

模型就能知道自己预测低了,后面通过损失函数和梯度下降调整参数。

监督学习适合用来教模型:

看到什么输入,应该给出什么输出。

5.2 无监督学习:没有标准答案,也能找规律

无监督学习可以先理解成:

只给模型大量数据,不直接告诉它标准答案,让模型自己发现数据里的规律。

比如给模型大量文章,但不告诉它每篇文章的标准分类。

模型可能会慢慢发现:

有些文章都在讲体育
有些文章都在讲金融
有些文章都在讲编程

再比如词语之间的关系。

模型看过大量文本后,会发现:

篮球、足球、网球 经常出现在相近语境里
银行、贷款、利率 经常出现在相近语境里

它不一定需要人给每个词贴标签,也能从数据分布里学到规律。

无监督学习适合用来让模型:

从大量数据中自己发现结构、相似性和规律。

5.3 强化学习:通过反馈学习

强化学习可以先理解成:

模型先做动作,再根据反馈调整以后怎么做。

它不像监督学习那样每一步都有标准答案。

它更像是在一个环境里不断尝试:

做得好 → 奖励更高
做得差 → 奖励更低

比如训练一个游戏 AI:

赢了比赛 → 奖励高
输了比赛 → 奖励低

比如训练一个回答问题的模型:

回答清楚、有帮助、安全 → 反馈更好
回答混乱、跑题、不安全 → 反馈更差

强化学习的重点不是死记答案,而是让模型学会:

什么行为更容易得到好的反馈。

5.4 三种学习方式的区别

可以用一张表先记住:

学习方式 数据里有没有答案 模型主要学什么
监督学习 有标准答案 输入和输出的对应关系
无监督学习 没有明确答案 数据里的结构和规律
强化学习 有奖励或反馈 什么行为更好

举个生活化例子:

监督学习:老师给题目和标准答案
无监督学习:自己看大量资料,总结规律
强化学习:做完事情后,根据反馈慢慢改进

5.5 大模型训练里怎么用

大模型训练通常不是只用一种方式。

更常见的是多个阶段组合起来。

大模型训练的几个阶段

可以先这样理解:

阶段 大概在做什么 更接近哪类学习
预训练 从大量文本、代码、网页里学习语言规律 常被理解为自监督学习
监督微调 用高质量问答数据教模型怎么回答 监督学习
偏好对齐 让模型回答更符合人类偏好 强化学习或偏好学习

这里有一个容易混淆的点:

大模型预训练时,经常会让模型预测下一个 Token。

表面上看,好像有“标准答案”。

比如:

人工智能生成内容通常被称为 __

后面的真实文本里出现的是:

AIGC

模型就可以拿 AIGC 当答案来计算损失。

但这个答案不是人工一个个标注出来的,而是从文本本身自动构造出来的。

这种方式通常叫 自监督学习

可以先把它理解成:

从没有人工标注的大量文本里,自动构造训练任务,让模型学习语言规律。

所以预训练虽然不是人工给答案,但仍然会走训练流程:

输入前面的文本
  ↓
预测下一个 Token
  ↓
和真实下一个 Token 比较
  ↓
计算损失
  ↓
反向传播 + 梯度下降
  ↓
更新参数

也就是说,预训练不是没有答案,而是答案来自文本本身。

5.6 小结

这一章可以先记住三句话:

监督学习:有输入,也有标准答案。

无监督学习:没有标准答案,模型自己找规律。

强化学习:模型根据奖励或反馈改进行为。

放到大模型里,可以再记住一句:

大模型训练通常会组合多种学习方式:先从海量数据里学规律,再用高质量数据教它怎么回答,最后通过反馈让回答更符合人类偏好。

6. Token 和 Embedding:大模型怎样把文字变成数字

前面一直在说,大模型会处理文本、预测下一个 Token。

但模型本身不能直接计算一段中文或英文。

计算机真正擅长处理的是数字。

所以文字进入大模型之前,通常会经历几步转换:

文字
  ↓
Token
  ↓
Token ID
  ↓
Embedding 向量
  ↓
送进 Transformer 继续处理

文字进入大模型前的转换流程

这一章先解决一个问题:

大模型看到的文字,最后是怎样变成可以计算的数字的?

6.1 Token:文字先被切成小块

Token 可以先理解成:

模型处理文字时使用的基本小块。

一段文字不会直接整段丢给模型,而是先被切开。

例如:

我喜欢人工智能

可能会被切成类似这样的 Token:

我 / 喜欢 / 人工智能

但要注意,Token 不一定等于一个汉字,也不一定等于一个完整单词。

有时一个中文词会被切成一个 Token,有时会被切成多个 Token。

英文也是一样。

比如英文单词很长时,可能会被切成几个片段。

所以可以先记住:

Token 是模型使用的文字小块,不要简单理解成“一个字”或“一个词”。

6.2 为什么需要 Token

可以先用一个生活里的例子理解。

如果要让机器处理一整篇文章,直接把整篇文章当成一个整体,会很难。

就像做菜时,不会把一整棵菜直接下锅,而是会先切成一小段一小段。

文字也是类似的。

模型会先把一段文字切成很多小块:

我喜欢人工智能
  ↓
我 / 喜欢 / 人工智能

这样做的好处是,模型可以按顺序处理每一个小块:

先看第 1 个 Token
再看第 2 个 Token
再看第 3 个 Token

所以 Token 的作用可以先理解成:

把连续的文字切成模型能一步一步处理的小块。

这也能解释大模型为什么经常说是:

一个 Token 一个 Token 地生成内容。

比如模型要生成:

人工智能可以帮助我们学习

它不是一下子把整句话全部吐出来,而是更像这样:

人工智能
人工智能 可以
人工智能 可以 帮助
人工智能 可以 帮助 我们
人工智能 可以 帮助 我们 学习

每生成一个新的 Token,它都会把前面已经生成的内容一起作为上下文,再继续预测下一个 Token。

6.3 Token ID:Token 会变成编号

Token 只是文字小块。

但模型内部还不能直接计算文字。

所以每个 Token 会在词表里对应一个编号,这个编号通常叫 Token ID。

可以把词表理解成一本字典:

Token Token ID
102
喜欢 381
人工智能 9284

这里的编号只是示意,不需要记具体数字。

重要的是理解:

Token ID 只是把文字小块变成编号,方便模型继续处理。

不过,只有编号还不够。

因为编号本身没有语义。

比如:

篮球 = 102
足球 = 381
利率 = 9284

这些数字大小并不能说明“篮球”和“足球”更相近。

所以还需要下一步:Embedding。

6.4 Embedding:把编号变成有语义的向量

Embedding 可以先理解成:

把 Token 变成一组能表达语义关系的数字。

例如一个 Token 进入模型后,可能会变成类似这样的向量:

篮球 → [0.21, -0.08, 0.64, 0.12, ...]
足球 → [0.19, -0.05, 0.61, 0.10, ...]
利率 → [-0.44, 0.72, 0.03, -0.18, ...]

这些数字不是随便写出来的。

它们是在训练过程中学出来的。

如果两个 Token 经常出现在相似语境里,它们的向量就可能更接近。

比如:

篮球、足球、网球

它们都和运动有关,所以向量可能比较接近。

而:

银行、贷款、利率

更偏金融语境,所以会在另一个位置附近。

Embedding 可以理解成语义空间里的位置

所以 Embedding 不是简单编号。

它更像是给每个 Token 一个“语义位置”。

6.5 Embedding 为什么重要

Embedding 重要,是因为它让模型可以用数学方式处理语言。

原来的文字是:

我喜欢人工智能

进入模型后,会变成很多向量。

模型后面的神经网络和 Transformer,就可以对这些向量做计算。

比如判断:

哪些 Token 语义接近
哪些 Token 关系更强
当前 Token 应该重点看前面的哪些 Token
下一个 Token 更可能是什么

如果没有 Embedding,模型只能看到一串编号。

有了 Embedding,模型才能在数字里保留一部分语义信息。

6.6 上下文窗口也和 Token 有关

平时会听到一个说法:

这个模型支持多少多少 Token 的上下文窗口。

这里的上下文窗口,指的是模型一次请求里最多能看到多少 Token。

它不是按“多少个字”精确计算,也不是按“多少句话”计算。

而是按 Token 数量计算。

所以一段很长的资料放进模型时,本质上是在占用上下文窗口里的 Token 位置。

可以先这样理解:

上下文窗口越大,模型一次能看到的 Token 越多。

6.7 小结

这一章先记住一条主线:

文字 → Token → Token ID → Embedding 向量 → Transformer

其中:

概念 通俗理解
Token 文字被切成的小块
Token ID 每个 Token 在词表里的编号
Embedding Token 对应的语义向量
上下文窗口 一次请求里模型能看到的 Token 范围

可以先记住一句话:

大模型不是直接读文字,而是先把文字切成 Token,再变成向量,最后用神经网络继续计算。

7. Transformer:大模型怎样理解上下文

上一章讲到,文字会先变成 Token,再变成 Embedding 向量。

但到这里还不够。

因为每个 Token 如果只看自己,还是很难真正理解一句话。

比如:

小明把书放进书包,因为它太重了。

这里的“它”指的是谁?

更可能是“书”,不是“书包”。

人能判断出来,是因为我们会看上下文。

大模型也需要做类似的事情:

让每个 Token 都去看上下文里的其他 Token,判断谁和自己关系更大。

这就是理解 Transformer 的入口。

7.1 为什么需要 Transformer

Token 变成向量后,模型已经可以计算它们了。

但问题是:

每个 Token 不是孤立存在的。

同一个词放在不同句子里,意思可能不一样。

比如:

苹果很好吃。
苹果发布了新手机。

第一句里的“苹果”更像水果。

第二句里的“苹果”更像公司。

如果模型只看“苹果”这一个 Token,就很难判断它到底是什么意思。

所以模型必须看上下文:

它前后出现了哪些词?
这些词和它有什么关系?
当前应该重点关注谁?

Transformer 就是为了解决这类问题而变得非常重要。

7.2 注意力机制:不是每个词都一样重要

注意力机制可以先理解成:

当前 Token 会给上下文里的其他 Token 分配不同的重要程度。

还是看这个句子:

小明把书放进书包,因为它太重了。

当模型处理“它”这个 Token 时,它会去看前面的内容。

但不是所有 Token 都同样重要。

比如:

小明:关系较弱
书:关系很强
书包:也有关系,但可能弱一些
太重了:帮助判断“它”更像书

注意力机制示例

可以把注意力想象成一支手电筒。

句子里有很多 Token,但当前 Token 会把光更多打在和自己关系最强的 Token 上。

所以注意力机制不是“把所有词平均看一遍”,而是:

谁更相关,就多看谁。

7.3 Self-Attention:一句话里的 Token 互相看

Self-Attention 可以翻译成“自注意力”。

它的意思是:

同一句话里的每个 Token,都会去看这句话里的其他 Token。

不是只有“它”会看“书”。

每个 Token 都会重新判断:

我和哪些 Token 关系更大?
哪些信息应该被我吸收进来?

例如一句话:

苹果发布了新手机,它的价格很高。

模型处理“它”时,会更关注“新手机”。

模型处理“价格”时,也会更关注“新手机”。

模型处理“苹果”时,会结合“发布”“新手机”,判断这里的苹果不是水果。

所以 Self-Attention 的关键不是记住公式,而是理解一句话:

每个 Token 都不是单独理解的,而是在和其他 Token 的关系里被理解。

7.4 Transformer 是什么

Transformer 可以先简单理解成:

一种特别擅长处理 Token 之间关系的神经网络结构。

它里面最重要的部分之一,就是 Self-Attention。

一个 Transformer 层大致可以理解成两步:

第一步:注意力机制
判断 Token 之间谁和谁关系更强。

第二步:神经网络处理
把这些关系继续加工,得到新的表示。

然后很多层叠在一起。

每一层都会让 Token 的表示变得更“懂上下文”一点。

Transformer 多层处理示意

可以把它想象成反复修改一篇阅读理解答案:

第一遍:先看大概意思
第二遍:发现词和词之间的关系
第三遍:理解更深的语义

大模型就是把这种处理重复很多层。

层数越多、参数越多、训练数据越多,模型就越有机会学到更复杂的语言关系。

7.5 为什么 Transformer 适合大模型

Transformer 之所以重要,是因为它很适合处理文本。

原因可以先记住三个:

原因 通俗理解
能看上下文 一个 Token 可以关注前后相关 Token
能处理长文本 很多 Token 可以一起参与计算
适合大规模训练 可以用大量数据训练出复杂语言规律

这也是为什么今天很多大语言模型都以 Transformer 为基础。

但要注意:

Transformer 本身只是结构。

它要变成真正好用的大模型,还需要:

大量数据
大量参数
大量训练
合适的对齐方式

所以不能简单说“Transformer 等于大模型”。

更准确地说:

很多大模型是以 Transformer 为核心结构训练出来的。

7.6 Transformer 和前面内容的关系

到这里,可以把前面的知识串起来:

文字
  ↓
Token
  ↓
Embedding 向量
  ↓
Transformer 理解上下文关系
  ↓
预测下一个 Token
  ↓
生成回答

比如用户问:

苹果最新手机有什么特点?

模型不会直接“读懂整句话”。

它会经历类似过程:

先切成 Token
再变成向量
再用 Transformer 判断这些 Token 的关系
最后预测接下来应该生成什么内容

所以可以先记住:

Token 解决“怎么切文字”,Embedding 解决“怎么变成数字”,Transformer 解决“这些数字之间怎么理解上下文关系”。

7.7 小结

这一章先记住三句话:

Transformer 的核心作用,是帮助模型理解 Token 之间的上下文关系。

注意力机制的意思是:当前 Token 会重点关注和自己更相关的 Token。

大模型通常是很多层 Transformer 叠起来,再经过大量数据训练出来的。

8. 最后把整条链路串起来

到这里,第二天的核心概念已经基本连起来了。

可以用一张图看完整流程:

大模型一次回答的大致流程

当用户输入一个问题时,大模型大致会经历这样的过程:

用户输入问题
  ↓
切成 Token
  ↓
变成 Embedding 向量
  ↓
经过 Transformer 理解上下文
  ↓
预测下一个 Token
  ↓
不断重复预测
  ↓
形成完整回答

这里有一个关键点:

大模型不是一次性把整段答案写出来,而是不断预测下一个 Token,再把生成出来的内容接到前面。

所以前面讲过的概念,其实都在这条链路里:

概念 在链路里的作用
AIGC 最终表现为生成内容
大模型 提供生成能力
神经网络 模型内部的计算结构
参数 决定模型怎么处理输入
训练 让参数逐渐变得有用
Token 把文字切成模型能处理的小块
Embedding 把 Token 变成语义向量
Transformer 理解 Token 之间的上下文关系
预测下一个 Token 生成回答的基本方式

8.1 和真实项目有什么关系

学习这些概念,不是为了背术语。

在真实项目里,我们通常不会自己从零训练一个大模型。

更多时候,是把已经训练好的大模型能力接入系统。

例如 AI 问答、Text-to-SQL、智能助教、资料总结,本质上都可以理解成:

业务系统准备输入
  ↓
通过 API 调用大模型
  ↓
大模型生成内容
  ↓
系统检查、保存、展示或继续执行

对应到项目开发里:

项目里的工作 对应的大模型概念
设计用户问题和提示词 Prompt
控制输入内容长度 Token、上下文窗口
让模型理解课程资料 Embedding、RAG
让模型生成回答、SQL、JSON AIGC、预测下一个 Token
调用模型接口 API
把生成结果接入业务流程 工程系统设计

所以后面真正做项目时,要关注的不只是“模型会不会回答”。

还要考虑:

给模型什么输入?
模型输出什么格式?
输出结果能不能直接用?
需要不要做校验?
要不要保存对话和结果?
出错时系统怎么处理?

8.2 这一节课最终要带走什么

第二天可以先带走三句话:

AIGC 是现象,大模型是能力来源。

大模型内部依靠神经网络、参数、训练、Token、Embedding 和 Transformer 来处理语言。

做项目时,我们要把大模型能力接入真实系统,让它围绕业务问题完成任务。

学完这些概念后,后面再学习 Prompt、API 调用、RAG、Tools、Agent,就会更容易理解它们为什么需要、解决什么问题。