深度学习基础回顾:神经网络核心概念、反向传播与梯度下降、常见激活函数与损失函数、过拟合与正则化

说实话,每次带新人入门深度学习转Agent这条路,我都会先让他们把这块基础夯扎实。为什么?因为后面所有的Agent决策、记忆模块、工具调用,底层都是这些老伙计在撑腰。我自己踩过的坑太多了——模型训不出来,十有八九是反向传播没搞明白;Agent乱说话,八成是损失函数选错了。好,咱们开始。

神经网络核心概念:从感知机到多层结构

神经网络说白了就是一个函数逼近器。你给它一堆输入,它试着学出一个映射关系,输出你想要的东西。

最基本的单元叫神经元。它干的事很简单:

  • 接收多个输入信号
  • 每个信号乘以一个权重
  • 求和后加上偏置
  • 扔进激活函数,输出结果

数学上就一行:output = activation(w·x + b)

多个神经元堆叠起来,就成了。输入层、隐藏层、输出层,这就是经典的三层结构。我刚开始做项目时,总觉得层数越多越牛,结果模型过拟合得一塌糊涂。后来才明白——深度不是目的,表达能力才是

核心要点:神经网络的本质是层级特征提取。浅层学边缘、纹理,深层学语义、概念。这个思想在Agent里同样适用——低层处理原始感知,高层做推理决策。

反向传播与梯度下降:训练的核心引擎

模型怎么学?靠两个东西:反向传播算梯度,梯度下降更新参数。

我习惯把反向传播理解成「责任追溯」。前向传播算出一个预测值,跟真实值一比,有误差。这个误差怎么分摊到每个权重头上?链式法则一路往回传,每个参数都拿到自己的「责任分数」——也就是梯度。

梯度下降就更直白了:沿着梯度的反方向走一小步,损失就能降一点

# 伪代码,我当年手写BP时就这么干
for epoch in range(num_epochs):
    # 前向传播
    hidden = relu(X @ W1 + b1)
    output = hidden @ W2 + b2
    loss = mse_loss(output, y_true)
    
    # 反向传播(链式法则)
    grad_output = 2 * (output - y_true) / len(y_true)
    grad_W2 = hidden.T @ grad_output
    grad_hidden = grad_output @ W2.T * relu_derivative(hidden)
    grad_W1 = X.T @ grad_hidden
    
    # 梯度下降更新
    W1 -= lr * grad_W1
    W2 -= lr * grad_W2

这里有个坑——学习率。设大了震荡不收敛,设小了半天不动。我曾经在一个项目里调了三天学习率,最后发现用个学习率衰减或者Adam优化器就完事了。别死磕手动调参。

我的经验:新手可以先从Adam起步,lr设0.001,基本够用。等模型跑通了,再回头试试SGD+momentum,有时候泛化效果更好。

常见激活函数与损失函数

激活函数决定了一个神经元「要不要激活」。选错了,梯度消失、梯度爆炸就找上门了。

激活函数 公式 优点 缺点
Sigmoid 1/(1+e⁻ˣ) 输出在0~1,适合二分类 梯度饱和,容易消失
Tanh (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) 零中心,比Sigmoid好 仍有梯度饱和
ReLU max(0, x) 计算快,缓解梯度消失 神经元死亡(负半轴梯度为0)
Leaky ReLU max(αx, x) 解决神经元死亡 α需要调参

我个人习惯:隐藏层无脑用ReLU,输出层根据任务选。分类用Softmax,回归用线性激活。

损失函数呢?它定义了「模型错得有多离谱」。

  • 均方误差(MSE):回归任务标配。注意它对异常值敏感。
  • 交叉熵损失:分类任务首选。配合Softmax,梯度更稳。
  • Huber损失:MSE和MAE的折中。我在处理带噪声的数据时常用。

避坑指南:我曾经在分类任务里用了MSE,结果模型死活不收敛。为什么?MSE对概率输出的梯度太弱了,交叉熵才是正解。记住——分类用交叉熵,回归用MSE,别混。

过拟合与正则化

过拟合,说白了就是模型把训练数据背下来了,但没学会规律。测试集上一跑就露馅。

怎么判断?训练损失一直降,验证损失开始反弹——这就是过拟合的典型信号。

我常用的正则化手段有这几个:

  1. L1/L2正则化:在损失函数里加一个惩罚项。L1让权重稀疏,L2让权重变小。我一般优先用L2。
  2. Dropout:训练时随机「掐掉」一部分神经元。相当于每次训练一个子网络,最后集成。我习惯设0.5,效果不错。
  3. 早停(Early Stopping):验证损失连续N轮不降就停。简单粗暴,但很有效。
  4. 数据增强:图片翻转、裁剪、加噪声。数据多了,过拟合自然就少了。
# 我常用的早停实现
best_loss = float('inf')
patience = 10
counter = 0

for epoch in range(epochs):
    train_loss = train_one_epoch(model, train_loader)
    val_loss = validate(model, val_loader)
    
    if val_loss < best_loss:
        best_loss = val_loss
        counter = 0
        torch.save(model.state_dict(), 'best_model.pth')
    else:
        counter += 1
        if counter >= patience:
            print(f'早停!第{epoch}轮验证损失不再下降')
            break

一个小技巧:如果你发现模型在训练集上准确率99%,测试集上只有70%,先别急着加正则化。检查一下数据有没有泄露,或者标签是不是错了。我遇到过好几次,根本不是过拟合,是数据有问题。

本章知识体系总览

下面这张图,是我自己梳理的深度学习基础核心逻辑。你把它刻在脑子里,后面学Agent会顺很多。

深度学习基础核心逻辑图 输入数据 神经网络核心 神经元 → 层 → 前向传播 反向传播 → 梯度下降 预测输出 损失函数 激活函数 正则化 过拟合检测与应对 核心思想:前向传播计算误差 → 反向传播分配责任 → 梯度下降更新参数 激活函数引入非线性,损失函数定义目标,正则化防止过拟合

嗯,这一章的内容就到这。你把这些概念吃透了,后面学Agent的规划、记忆、工具调用,会发现很多地方都在用同样的思路——前向推理、反向优化、防止过拟合。说白了,深度学习就是Agent的「底层操作系统」。

专注资料整理