LLM中的神经网络
文章目录
🧠 一、人工智能模型的设计本质
任何AI模型只有两个步骤
| 步骤 | 内容 | 说明 |
|---|---|---|
| 第一步 | 确定一个数学公式 | 公式结构决定模型能力的上限 |
| 第二步 | 确定公式里的参数值 | 同一公式,不同参数 ⇒ 不同功能 |
从最简单的例子开始:区分鳄鱼和蛇
场景:给你一个动物的身高和体重,判断它是鳄鱼还是蛇。
输入:身高 + 体重(2个数字)
输出:鳄鱼 or 蛇(二分类)
公式选择:Y = AX + B(一元一次线性方程)
A控制直线的斜率(倾斜角度)B控制直线的平移(上下移动)- 这是一条可以旋转和平移的直线
效果:找一条直线把数据分成两半:
- 蛇(绿色点)→ 直线下方 → 如果
Y < 0则是蛇 - 鳄鱼(红色点)→ 直线上方 → 如果
Y > 0则是鳄鱼
如果数据确实能用一条直线分开,那么 Y = AX + B 就足够了。
🧩 二、人类设计公式的瓶颈
问题:真实任务太复杂
如果任务是"给你一张图片,判断它是什么数字"、“给你一段文字,生成一段回答”——这些任务极其复杂多样,人类不可能手动设计出对应的数学公式。
人类的处境:设计数学公式的能力有天花板,但真实世界的任务没有天花板。
解决方案:模拟人脑 → 神经网络
人脑的启示:
- 人脑有数千亿个神经元
- 神经元之间通过突触连接传导电信号
- 信号传导时可以被放大或缩小
- 这么简单的机制居然产生了智能
于是 AI 科学家想:能不能用数学公式模拟人脑的神经元传导逻辑?
🌐 三、神经网络:万金油数学公式
核心思想
不再为每个任务手动设计公式。而是设计一个通用的"万金油公式"——神经网络。从此以后,公式的结构问题解决了,只需要确定里面的参数。
神经网络的基本结构
输入层 → 隐藏层1 → 隐藏层2 → ... → 输出层
每一层的工作原理(神经元传导模拟):
Z₀ = W₀·X₀ + W₁·X₁ + W₂·X₂ + ... + W₇₈₃·X₇₈₃ + W₇₈₄
↑ ↑ ↑
每个输入数据 权重参数(放大/缩小) 平移量(Bias)
- X:来自上一层神经元传来的电信号(数值)
- W:权重参数 —— 控制传入信号的放大倍数(1.5倍放大 或 0.8倍缩小)
- W₇₈₄:相当于
Y = AX + B中的 B(平移量) - 每个 W 就是一个模型参数
关键特性:线性变化 + 非线性变化
每一层神经网络必须做两步:
线性变化(Y = AX + B 形式)
↓
非线性变化(如:把 ≥1 的设为1,其余保持不变)
为什么必须非线性变化?
因为多层线性变化叠加 = 一层线性变化:
- 你在 W₀ 前面再乘一个 W₀,还是只有一个 W₀
- 5层纯线性网络 = 1层线性网络(没有任何意义)
必须 线性 + 非线性交替,才能拟合从输入到输出之间的复杂规律。
✋ 四、手写数字识别案例(MNIST)
任务描述
| 要素 | 内容 |
|---|---|
| 输入 | 一张 28×28 像素的手写数字图片 |
| 输入数据 | 784个数值,每个 0-255(灰度值) |
| 输出 | 10个概率(数字0-9各是多少) |
| 要求 | 10个概率加起来 = 100% |
神经网络如何处理
784维向量(原始像素)
↓ 线性变化
第1层隐藏层(784维)→ 提取"数字的轮廓边缘"
↓ 非线性变化(把非0的变成1)
784维向量(只有0和1)
↓ 线性变化(每行求和)
第2层隐藏层(28维)→ 提取"每行的笔画密度"
↓ 线性变化 + Softmax
10个概率(数字0-9)
神经网络每一层都在做"特征提取":
- 第一层:提取边缘轮廓
- 第二层:提取笔画分布
- 层数越深 → 提取的特征越抽象、越有统计意义
参数量计算
| 层 | 输入维度 | 输出维度 | 参数计算 | 参数量 |
|---|---|---|---|---|
| 第1层 | 784 | 784 | 785 × 784 | ~615,440 |
| 第2层 | 784 | 28 | 785 × 28 | ~21,980 |
| 输出层 | 28 | 10 | 29 × 10 | ~290 |
| 总计 | ~637,710 |
一个识别手写数字的简单网络就有 63.7万个参数,GPT-4 有 1.8万亿个参数。
📚 五、机器学习:如何确定参数?
问题
63万个 W 参数,每个该等于多少?人类不可能手动设定。需要借助计算机的大规模计算——这就是机器学习。
机器学习的六个步骤
步骤1: 随机初始化所有参数
↓
步骤2: 用训练数据跑一遍,得到输出
↓
步骤3: 定义误差(损失函数)
↓
步骤4: 把所有训练数据的误差加起来 = 总误差
↓
步骤5: 计算每个参数的梯度方向(该变大还是变小?)
↓
步骤6: 更新所有参数(朝总误差下降的方向调整)
↓
回到步骤2,循环迭代
步骤3详解:如何定义误差?
分类任务的误差定义
使用 负对数损失(Negative Log Loss):
误差 = -ln(正确答案对应的概率)
- 正确答案的概率 = 100%(1.0) → 误差 = -ln(1) = 0 ✅ 完美
- 正确答案的概率 = 90%(0.9) → 误差 = -ln(0.9) ≈ 0.105 ✅ 很小
- 正确答案的概率 = 40%(0.4) → 误差 = -ln(0.4) ≈ 0.916 ⚠️ 较大
- 正确答案的概率 = 1%(0.01) → 误差 = -ln(0.01) ≈ 4.605 ❌ 很大
核心理念:
- 不只关心对不对,更关心有多确定
- 两个模型都可能答"这是数字3",但一个90%确定、一个40%确定 → 误差不同
- 只有100%确信正确答案,误差才为零
大语言模型的误差定义同理
大模型预测下一个字时,输出有10-15万个选项的概率:
输入:"人类简" → 模型输出15万个字的概率
我只看 → "史"这个字的概率是多少
如果"史"的概率 = 21% → 误差 = -ln(0.21)
一个段落有2000个字 → 2000个误差相加 = 这条训练数据的误差
几十亿条训练数据 → 全部相加 = 总误差
步骤5详解:梯度方向
对于最简单的 Y = AX + B 两个参数:
横切一刀(固定B,只变A):画出 A 变化时总误差的曲线 → 判断 A 该变大还是变小
竖切一刀(固定A,只变B):画出 B 变化时总误差的曲线 → 判断 B 该变大还是变小
对于1.8万亿个参数:
- 每个参数都要判断:变大一点还是变小一点,总误差会降低?
- 数学上就是求偏导数
- 每个参数的偏导数方向 = 该参数的梯度
步长(Step Size)
- 知道方向后,“走多远"由步长决定
- 步长动态变化:
- 刚开始训练时 → 步长大(大胆往前走)
- 总误差下降速度变慢时 → 步长变小(小心探索)
- 训练开始时设置的是学习率(整体步长基数),实际每一步步长由优化器动态计算
🌌 六、高维空间与优化
模型参数 = 空间维度
| 参数量 | 空间维度 | 想象难度 |
|---|---|---|
| 2个参数 | 2维空间 | 容易想象 |
| 10个参数 | 10维空间 | 难以想象 |
| 1.8万亿参数 | 1.8万亿维空间 | 完全无法想象 |
在1.8万亿维的空间中:
- 总误差就是地形高度(有山峰、山谷、洼地)
- 机器学习 = 在这个万亿维空间中不停游走,目标是找到最低的洼地(总误差最小)
- 方向由梯度指引,步长动态调整
🔑 七、核心概念速查表
| 概念 | 英文/解释 |
|---|---|
| 神经网络 | Neural Network — 模拟人脑神经元传导的万金油数学公式 |
| 深度神经网络 | Deep Neural Network — 层数很深的神经网络 |
| 深度学习 | Deep Learning — 在深度的神经网络上做训练和学习 |
| 参数(W) | Weights — 控制信号放大/缩小的数值,模型智商的载体 |
| 偏置(B) | Bias — 控制平移的数值 |
| 特征提取 | Feature Extraction — 神经网络从原始数据中提炼统计特征 |
| 线性变化 | Linear Transform — Y = AX + B 形式 |
| 非线性变化 | Non-linear Transform — 如 ReLU、Sigmoid 等激活函数 |
| 机器学习 | Machine Learning — 通过大规模计算确定最优参数组合的过程 |
| 损失函数 | Loss Function — 定义误差的方式(如负对数损失) |
| 总误差 | Total Loss — 所有训练数据误差的累加 |
| 梯度 | Gradient — 每个参数应该变大还是变小的方向 |
| 梯度下降 | Gradient Descent — 沿梯度方向逐步降低总误差 |
| 偏导数 | Partial Derivative — 计算梯度的数学工具 |
| 步长 | Step Size — 每次参数更新的幅度 |
| 学习率 | Learning Rate — 全局步长基数 |
| 高维空间 | High-Dimensional Space — 参数总量决定的空间维度 |
| Softmax | 将任意数值归一化为概率(总和=100%)的函数 |
🔄 八、上文(预训练+微调范式)与本文的关系
上文讲的四个训练阶段(预训练 → SFT → RM → RL),每个阶段的底层都是在跑同一个机器学习流程(六步骤):
| 阶段 | 机器学习六步骤? | 不同的地方 |
|---|---|---|
| 预训练 | ✅ | 所有参数随机初始化 |
| SFT | ✅ | 从预训练模型权重继续训练(非随机初始化) |
| RM | ✅ | 训练的模型不同(是另一个神经网络) |
| RL | ✅ | 误差定义方式不同(不是负对数损失) |
❓ Q&A
-
参数的总数在训练中会变化吗? 不会。网络结构(层数、每层维度)确定后,参数总量就固定了。训练只是让参数值越来越合理。
-
为什么必须线性+非线性交替? 纯线性叠加=一层线性(无意义)。非线性变换才能让多层网络具备拟合复杂规律的能力。非线性变换本身没有可训练参数——但它是"人类智慧的体现”。
-
非线性变化里有可训练的W参数吗? 没有。如果只有非线性变化,模型就没有任何可学习的参数,看到大误差也无能为力。
-
大模型每次调整参数,所有参数都一起调吗? 是的。1.8万亿个参数每一步都要计算各自的梯度方向,然后一起更新。
-
不同模型的损失函数一样吗? 不一样。各家模型定义误差的方式可能不同,所以不能拿总误差的绝对值横向比较不同模型。
-
单条训练数据的段落联合概率 = 该数据的误差? 是的,加上 -ln(负号+自然对数)就是该条数据的误差。
-
大模型是用一个段落计算完误差就更新,还是所有段落一起? 不会等所有数据过完——数据量太大。而是分组(Batch),每过一组就调整一次参数。
-
训练数据质量不好会怎样? 训练数据就是"指挥棒"——参数的唯一使命就是让训练数据上的总误差越来越小。数据质量差 → 学到的东西就差。