AI 学习路线 05:神经网络、反向传播和深度学习怎么理解?

AI 学习路线 05:神经网络、反向传播和深度学习怎么理解?

前言

前面一篇我们学习了机器学习:监督学习、无监督学习、训练集、测试集、过拟合、评估指标等。

这一篇进入很多人更熟悉、也更容易觉得"玄学"的主题:深度学习

但深度学习不是一上来就背:

text 复制代码
CNN、RNN、LSTM、Transformer、GAN、Diffusion......

更重要的是先搞懂几个基础问题:

  1. 神经网络到底是什么?
  2. 权重、偏置、激活函数、损失函数、优化器分别做什么?
  3. 反向传播到底在"传播"什么?
  4. CNN、RNN、Transformer 这些网络结构有什么区别?
  5. Dropout、BatchNorm、数据增强、早停这些训练技巧解决什么问题?

这篇文章会继续用图、表格、例子和代码,把深度学习的核心框架讲清楚。

一、神经网络到底是什么?

深度学习的核心是神经网络。

先不要把神经网络想得太神秘。它可以先理解成:

text 复制代码
很多层函数组合起来,从数据中自动学习特征。

更工程一点说,神经网络是在学习一个从输入到输出的映射关系:

text 复制代码
输入 X -> 模型 f(X) -> 输出 y

比如:

输入 神经网络输出
图片像素 猫 / 狗
用户行为 是否会流失
商品标题 商品类别
一句话文本 下一个 token

神经网络的基本流程如下:

可以这样理解:

text 复制代码
输入
  -> 第一层:学习简单特征
  -> 中间层:组合更复杂的特征
  -> 输出层:给出分类、数值或生成结果

比如判断一张图片是不是猫:

text 复制代码
像素
  -> 边缘
  -> 纹理
  -> 眼睛、耳朵、胡须
  -> 猫脸
  -> 判断是不是猫

这就是深度学习相对传统机器学习的重要特点:

text 复制代码
传统机器学习更依赖人工设计特征。
深度学习更强调从数据中自动学习多层特征。

当然,深度学习不是所有场景都一定更好。小规模表格数据里,逻辑回归、随机森林、XGBoost 可能就很强。深度学习的优势更常出现在图像、语音、自然语言这类复杂高维数据中。

二、神经元、权重和偏置

神经网络由很多神经元组成。

一个神经元可以先理解成一个小计算器:

text 复制代码
输入数据 x
  -> 乘以权重 w
  -> 加上偏置 b
  -> 经过激活函数
  -> 得到输出

简化公式是:

text 复制代码
输出 = 激活函数(w1*x1 + w2*x2 + w3*x3 + b)

这里先抓住三个词:

组件 直觉理解
输入 x 数据提供的信息
权重 w 每个输入有多重要
偏置 b 整体判断的基准线

举个用户流失预测的例子。

假设我们用三个特征判断用户是否可能流失:

特征 含义 数值
x1 最近 7 天登录次数是否很少 1
x2 最近是否有投诉 1
x3 最近是否有购买 0

某个神经元当前参数是:

参数 含义 数值
w1 登录少的影响 0.8
w2 有投诉的影响 1.2
w3 有购买的影响 -0.7
b 基准偏置 -0.3

先做加权求和:

text 复制代码
z = 0.8*1 + 1.2*1 + (-0.7)*0 + (-0.3)
z = 1.7

这说明:

text 复制代码
登录少、有投诉,会把"可能流失"的判断往上推。
最近有购买,会把"可能流失"的判断往下拉。

权重和偏置不是人手工写死的,而是模型在训练过程中从数据里学出来的。

三、激活函数、损失函数、优化器

神经网络训练离不开几个核心组件:

整体流程是:

text 复制代码
输入数据
  -> 权重和偏置做加权计算
  -> 激活函数引入非线性
  -> 模型输出预测
  -> 损失函数衡量预测错多少
  -> 优化器根据误差更新参数

1. 激活函数:让模型学复杂关系

如果神经网络只有加权求和,没有激活函数,那么很多层叠在一起,本质上仍然接近一个线性模型。

简单说:

text 复制代码
没有激活函数,多层网络很难表达复杂弯曲关系。
有激活函数,网络才能学习非线性规律。

常见激活函数:

激活函数 输出范围 直觉
Sigmoid 0 到 1 常用于把结果理解成概率
Tanh -1 到 1 输出有正有负,中心在 0 附近
ReLU 小于 0 变 0,大于 0 保留 简单高效,深度学习中很常见

ReLU 的公式很简单:

text 复制代码
ReLU(x) = max(0, x)

比如:

输入 x ReLU(x)
-3 0
-1 0
0 0
2 2
5 5

一句话记忆:

text 复制代码
激活函数负责给神经网络引入非线性能力。

2. 损失函数:预测错了多少

模型做完预测以后,需要知道自己错得多不多。

损失函数就是用来衡量:

text 复制代码
预测结果和真实答案之间的差距。

比如图片分类:

text 复制代码
真实答案:猫
模型预测:
  猫:0.20
  狗:0.70
  鸟:0.10

这个预测就很差,因为正确类别"猫"的概率太低。

不同任务会用不同损失函数:

任务类型 常见损失函数 直觉
回归 MSE、MAE 预测数值和真实数值差多少
二分类 Binary Cross Entropy 预测概率和真实类别差多少
多分类 Cross Entropy 正确类别的概率够不够高

3. 优化器:怎么改参数

知道错了还不够,模型还要知道:

text 复制代码
权重和偏置应该往哪个方向改?每次改多少?

优化器就是负责更新参数的组件。

常见优化器:

优化器 直觉
SGD 按梯度方向一步步更新参数
Momentum 更新时带一点惯性,减少来回震荡
Adam 自适应调整不同参数的更新幅度,实践中很常用

简单记:

text 复制代码
损失函数告诉模型错多少。
优化器根据损失和梯度调整参数。

四、反向传播到底在传播什么?

前面说优化器要根据梯度更新参数。

那问题来了:

text 复制代码
模型有那么多参数,怎么知道每个参数应该改多少?

答案就是:反向传播

一句话理解:

text 复制代码
反向传播 = 从输出误差出发,反过来计算每个参数对误差的影响。

训练神经网络时有两个方向:

阶段 方向 做什么
前向传播 输入层 -> 输出层 根据当前参数算预测结果
反向传播 输出层 -> 输入层 根据误差计算每个参数的梯度

前向传播像做题:

text 复制代码
给定输入 -> 一层层计算 -> 得到答案

反向传播像批改和复盘:

text 复制代码
看答案错了多少 -> 追溯每一步哪里影响了错误 -> 指导下次怎么改

梯度可以直观理解成:

text 复制代码
某个参数变化一点点,会让损失函数怎么变化。

参数更新的核心直觉是:

text 复制代码
新参数 = 旧参数 - 学习率 * 梯度

为什么是减号?

因为梯度指向 loss 增大的方向,而训练目标是让 loss 变小,所以要朝梯度的反方向走。

举个极简例子:

text 复制代码
y_pred = w * x
x = 2
真实答案 y = 10
当前 w = 3

预测值:

text 复制代码
y_pred = 3 * 2 = 6

预测 6,真实 10,预测偏小。为了让下一次预测变大,w 应该变大。

用代码手算一次梯度更新:

python 复制代码
x = 2
y = 10
w = 3
lr = 0.1

y_pred = w * x
loss = (y_pred - y) ** 2

# 对 loss = (w*x - y)^2 求 w 的梯度
grad_w = 2 * (y_pred - y) * x

new_w = w - lr * grad_w

print("预测值:", y_pred)
print("损失:", loss)
print("w 的梯度:", grad_w)
print("更新后的 w:", new_w)

输出直觉:

text 复制代码
预测值: 6
损失: 16
w 的梯度: -16
更新后的 w: 4.6

下一次预测:

text 复制代码
4.6 * 2 = 9.2

就更接近真实答案 10 了。

一句话总结:

text 复制代码
反向传播负责算梯度,优化器负责用梯度改参数。

五、常见网络结构:先看数据形态

深度学习里有很多网络结构,但不要一开始就背名字。

先问:

text 复制代码
数据是什么形态?
任务要解决什么问题?

1. CNN:图像和局部空间特征

CNN 是卷积神经网络,最经典的场景是图像任务:

text 复制代码
图片分类
目标检测
图像分割
医学影像识别
工业缺陷检测

CNN 的直觉是:

text 复制代码
用一个小窗口在图片上滑动,提取局部特征。

浅层 CNN 看边缘、颜色、纹理;中层看眼睛、耳朵、轮廓;深层看猫脸、车辆、商品整体。

2. RNN、LSTM、GRU:序列和记忆

RNN 适合处理序列数据:

text 复制代码
文本、语音、时间序列、用户行为序列

它的直觉是:

text 复制代码
从左到右逐步读取,每一步都带着前面的记忆。

但普通 RNN 有个问题:序列很长时,前面的信息容易被遗忘。

LSTM 和 GRU 是 RNN 的改进版本,它们用类似"门"的机制控制:

text 复制代码
哪些信息应该记住?
哪些信息应该忘掉?
哪些信息应该输出给下一步?

一句话记忆:

text 复制代码
LSTM/GRU 是更会管理记忆的 RNN。

3. Transformer:现代大模型核心结构

Transformer 是现代大语言模型的核心结构。

它和 RNN 最大的直觉差异是:

text 复制代码
RNN 按顺序一个个读。
Transformer 可以通过注意力机制同时看不同位置之间的关系。

Attention 的直觉是:

text 复制代码
不是所有上下文都同样重要,模型要学会把注意力放在关键位置。

Transformer 的优势:

优势 说明
更擅长长距离依赖 能直接关注远处相关位置
并行计算更友好 不必像 RNN 那样严格一步步读
可扩展性强 支撑了现代大语言模型的发展

4. AutoEncoder、GAN、Diffusion

除了分类和序列建模,深度学习还有很多生成和表示学习结构。

结构 核心直觉 常见用途
AutoEncoder 压缩再重建 降维、去噪、异常检测
GAN 生成器和判别器对抗 图像生成、风格迁移
Diffusion 从噪声一步步去噪 文生图、图像生成

AutoEncoder 像是:

text 复制代码
输入数据 -> 编码器压缩 -> 低维表示 -> 解码器重建 -> 输出

GAN 像是:

text 复制代码
生成器:我要骗过判别器。
判别器:我要识破生成器。

Diffusion 像是:

text 复制代码
训练时:清晰图片 -> 加噪 -> 纯噪声
生成时:纯噪声 -> 去噪 -> 清晰图片

六、训练技巧:让模型更稳、更能泛化

模型能训练不代表训练得好。

深度学习经常遇到:

text 复制代码
过拟合
训练不稳定
学习率难选
数据不够
不知道什么时候停止

常见训练技巧如下:

技巧 主要解决什么问题 核心直觉
Dropout 过拟合 随机让部分神经元休息,避免过度依赖
BatchNorm 训练不稳定 稳定中间层数据分布
学习率调度 学习率难选 动态调整参数更新步长
数据增强 数据不够、泛化差 制造合理样本变体
早停 训练太久导致过拟合 验证集不再提升就停止

1. Dropout

Dropout 的直觉是:

text 复制代码
训练时随机让一部分神经元暂时不工作。

这样可以避免模型过度依赖少数神经元,从而减少过拟合。

注意:

text 复制代码
Dropout 通常训练时开启,推理时关闭。

2. 数据增强

数据增强是在不改变标签的前提下,制造合理的数据变体。

图像任务里常见:

text 复制代码
随机裁剪、水平翻转、轻微旋转、颜色扰动、缩放、加噪声

比如一张猫图,轻微裁剪、翻转、调整亮度后,标签仍然是猫。

这样模型不会只记住某张图的固定角度和背景,而是更容易学到稳定特征。

3. 学习率调度和早停

学习率决定每次参数更新的步子有多大。

text 复制代码
学习率太大:可能震荡,loss 不降反升。
学习率太小:训练很慢,很久都学不动。

学习率调度的直觉是:

text 复制代码
前期步子大一点,快速接近较好区域;
后期步子小一点,细致调整参数。

早停的直觉是:

text 复制代码
验证集不再提升时停止训练,避免模型继续死记训练集。

如果出现:

text 复制代码
训练集 loss 一直下降
验证集 loss 开始上升

这通常说明模型可能开始过拟合。

七、一个最小 NumPy 例子

下面用 NumPy 模拟一个神经元做预测。

重点是看清楚:

text 复制代码
输入 -> 权重 -> 偏置 -> 激活函数 -> 输出
python 复制代码
import numpy as np


def sigmoid(z):
    return 1 / (1 + np.exp(-z))


# x1 = 登录少,x2 = 有投诉,x3 = 最近有购买
x = np.array([1, 1, 0])

w = np.array([0.8, 1.2, -0.7])
b = -0.3

z = np.dot(w, x) + b
prob = sigmoid(z)

print("加权结果 z =", z)
print("预测流失概率 =", round(prob, 4))

可能输出:

text 复制代码
加权结果 z = 1.7
预测流失概率 = 0.8455

这段代码虽然很小,但已经包含了神经网络最基础的计算直觉:

text 复制代码
输入特征
权重
偏置
激活函数
输出预测

八、面试中可以怎么回答?

1. 什么是神经网络?

text 复制代码
神经网络是一种由多层计算单元组成的模型。每一层会对输入数据做特征转换,前面的层通常学习简单特征,后面的层会组合出更复杂的语义特征。训练过程中,模型会通过数据不断调整权重和偏置,让预测结果越来越接近真实答案。深度学习中的"深度"主要指网络层数较多,能够自动学习复杂特征表示。

2. 为什么神经网络需要激活函数?

text 复制代码
激活函数的核心作用是引入非线性。如果没有激活函数,多层线性变换叠加后本质上仍然接近一个线性模型,表达能力会受到很大限制。有了 ReLU、Sigmoid、Tanh 等激活函数,神经网络才能学习复杂的非线性关系。

3. 什么是反向传播?

text 复制代码
反向传播是神经网络训练中用于计算梯度的核心算法。模型先通过前向传播得到预测结果,再用损失函数计算预测和真实答案之间的误差;然后从输出层往输入层反向计算每个参数对损失的影响,也就是梯度。优化器再利用这些梯度更新权重和偏置,让下一轮预测更接近真实答案。

4. CNN、RNN 和 Transformer 有什么区别?

text 复制代码
CNN 主要擅长提取局部空间特征,经典应用是图像分类、检测和分割;RNN 适合传统序列建模,会按时间或顺序逐步处理输入,但长序列中容易遗忘早期信息;LSTM 和 GRU 是 RNN 的改进,用门机制缓解长期依赖问题;Transformer 通过注意力机制建模不同位置之间的关系,更适合长距离依赖和并行计算,是现代大语言模型的核心结构。

5. 怎么缓解深度学习模型过拟合?

text 复制代码
可以从数据、模型和训练过程三个方向处理。数据上可以增加训练数据或使用数据增强;模型上可以使用 Dropout、正则化或适当简化模型;训练过程中可以使用早停,观察验证集表现,避免模型在训练集上继续死记硬背。同时还要关注训练集、验证集和测试集之间的表现差距。

九、常见误区

误区 更准确的理解
神经网络就是数据库 神经网络通过参数表达规律,不是精确存储事实
层数越多一定越好 层数更多可能更强,但也更难训练、更容易过拟合
深度学习不需要数据处理 数据清洗、标注、划分、评估仍然很重要
激活函数只是装饰 激活函数决定模型能否表达复杂非线性关系
反向传播负责直接改参数 反向传播主要算梯度,优化器负责更新参数
训练集 loss 越低越好 还要看验证集和测试集表现,防止过拟合
所有任务都该用最新大模型 小规模表格任务传统机器学习可能更合适

十、本篇小结

这篇文章我们完成了深度学习入门的核心框架:

  1. 神经网络是多层计算结构,可以从数据中自动学习特征。
  2. 权重表示输入重要程度,偏置表示整体判断基准线。
  3. 激活函数引入非线性,让模型能表达复杂关系。
  4. 损失函数衡量预测错多少,优化器负责更新参数。
  5. 反向传播负责从输出误差反向计算每个参数的梯度。
  6. CNN 擅长图像,RNN/LSTM/GRU 适合序列,Transformer 是现代大模型核心结构。
  7. AutoEncoder、GAN、Diffusion 分别对应压缩重建、对抗生成、逐步去噪生成。
  8. Dropout、BatchNorm、学习率调度、数据增强、早停都是为了让训练更稳、泛化更好。

学到这里,你已经具备了理解神经网络和深度学习训练流程的基本地图。

十一、下一篇预告

下一篇进入 Transformer 与大语言模型

我们会继续讨论:

  • Token、Embedding、上下文窗口是什么?
  • Transformer 和 Attention 到底怎么理解?
  • 预训练、指令微调、RLHF 分别做什么?
  • 大语言模型为什么能生成文本?

深度学习帮我们理解"模型如何学习复杂特征",下一篇会进一步进入现代大模型的核心结构。