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

  1. 参数的总数在训练中会变化吗? 不会。网络结构(层数、每层维度)确定后,参数总量就固定了。训练只是让参数值越来越合理。

  2. 为什么必须线性+非线性交替? 纯线性叠加=一层线性(无意义)。非线性变换才能让多层网络具备拟合复杂规律的能力。非线性变换本身没有可训练参数——但它是"人类智慧的体现”。

  3. 非线性变化里有可训练的W参数吗? 没有。如果只有非线性变化,模型就没有任何可学习的参数,看到大误差也无能为力。

  4. 大模型每次调整参数,所有参数都一起调吗? 是的。1.8万亿个参数每一步都要计算各自的梯度方向,然后一起更新。

  5. 不同模型的损失函数一样吗? 不一样。各家模型定义误差的方式可能不同,所以不能拿总误差的绝对值横向比较不同模型。

  6. 单条训练数据的段落联合概率 = 该数据的误差? 是的,加上 -ln(负号+自然对数)就是该条数据的误差。

  7. 大模型是用一个段落计算完误差就更新,还是所有段落一起? 不会等所有数据过完——数据量太大。而是分组(Batch),每过一组就调整一次参数。

  8. 训练数据质量不好会怎样? 训练数据就是"指挥棒"——参数的唯一使命就是让训练数据上的总误差越来越小。数据质量差 → 学到的东西就差。