learning_notes

学习笔记

View project on GitHub

概念

感知机

一个假神经元,一个线性分类器,是神经网络的原子。把它剖开,里面只有权重、偏置和一个决策。

多层网络

一个深度神经网络,神经元一层层顺序叠起来,每层的输出喂给下一层的输入。

前向传播

把输入推过每一层——乘权重、加偏置、激活——产出一个输出。

反向传播

  • 一次前向传播、一次反向传播,所有梯度都算出来了。诀窍是微积分里的链式法则,系统性地应用到一张计算图上。这就是让深度学习变得切实可行的算法。
  • 训练会跑前向传播,再跑反向传播,然后更新权重。推理只跑前向传播。没有梯度,没有更新。这个区别很重要,因为生产环境里发生的就是推理。当你调用 Claude 或 GPT 这样的 API 时,你跑的就是推理——你的 prompt 正向流过网络,token 从另一头出来。没有权重改变。理解反向传播之所以重要,是因为它塑造了那个网络里的每一个权重。
  • 没有它,你的一点点的试每一个权重。

激活函数

  • 可使那些让神经网络能用曲线思考的门。
  • Sigmoid:范围:(0,1) 两端饱和
  • Tanh:范围:(-1,1) 零中心
  • ReLU:范围:[0,inf) 死亡神经元
  • GELU:范围:~(-0.17,inf) 平滑门控
  • Swish/SiLU:自门控的 ReLU
  • 使用
    • 输出层 (Output Layer)
      • 二分类:Sigmoid 输出单个概率值 (0, 1)
      • 多分类:Softmax 输出概率分布,所有类别概率之和为 1
      • 回归:线性(无激活)直接输出连续数值,不做非线性变换
    • 隐藏层 (Hidden Layers)
      • Transformer / NLP:GELU 现代大模型标准配置,平滑且性能优异
      • CNN / 视觉:ReLU 或 Swish ReLU 为经典选择;Swish (SiLU) 在深层网络中表现更佳
      • RNN / LSTM:Tanh 传统循环网络的标准选择,输出范围 [-1, 1]
      • 简单 MLP:ReLU 通用首选,计算高效,缓解梯度消失

梯度消失(Vanishing gradient)

深层网络里梯度没了,当激活的导数小于 1 时,梯度穿过层时指数级缩小,让靠前的层没法训练。

梯度爆炸(Exploding gradient)

梯度炸了,当有效乘数超过 1 时,梯度穿过层时指数级增长,导致训练不稳定。

Logit

softmax 之前的原始分数,最后一层在施加 softmax 或 sigmoid 之前的未归一化输出。

损失函数

  • 你的网络做了一个预测。真实答案不是这样。它错得有多离谱?那个数字就是损失。选错损失函数,你的模型会朝着完全错误的目标去优化。
  • 损失函数
    • MSE:平均平方误差 预测和目标之差的平方的均值;以二次方惩罚大误差
    • 交叉熵:分类损失 用 -log(p) 衡量预测概率分布和真实分布之间的散度
    • 标签平滑:用软值(如 0.1/0.9)替换硬的 0/1 目标,防止过度自信、改善泛化
  • 温度:施加在 logit/相似度上的标量除数,控制结果分布有多尖;越低越尖

优化器

  • 梯度下降告诉你该往哪个方向走。它对走多远、走多快只字不提。SGD 是一个指南针。Adam 是带路况数据的 GPS。
  • 学习率:步长 施加在梯度更新上的标量乘数;训练里影响最大的单个超参数
    • 太高 (lr > 0.01):损失爆炸 权重变 NaN 训练崩溃
    • 恰到好处:
    • 太低 (lr < 0.00001):损失下降极慢 卡在次优极小值 浪费算力
  • 方法
    • 随机梯度下降(SGD):lr = 0.01 到 0.1
    • Adam/AdamW:lr = 1e-4 到 3e-4
    • 微调预训练模型:lr = 1e-5 到 5e-5
    • 学习率热身(warmup):在前 1-10% 的步数里线性爬升

正则化

  • 防止过拟合。不要背书而是学习泛化能力。
  • 技术
    • Dropout:随机删神经元 训练时以概率 p 把随机神经元置零,逼出冗余表示;等价于训练一个集成。
    • 权重衰减:L2 惩罚 防止任何单个权重长得太大。
    • 批归一化:按批归一化 跨批维度归一化层输出,训练时用批统计量、推理时用滑动平均。
    • 层归一化:按样本归一化 在每个样本内跨特征归一化;不依赖批,用在批大小多变的 transformer 里。
    • RMSNorm:均方根归一化;从 LayerNorm 去掉减均值,准确率相同、提速 10%。
    • 早停:在过拟合前停
    • 数据增强:以少变多 变换训练输入(翻转、裁剪、加噪)来增大有效数据集规模、逼出不变性学习。

权重初始化与训练稳定性

初始化错了,训练根本启动不起来。初始化对了,50 层训练起来和 3 层一样顺。

学习率调度与预热

  • 学习率是最重要的单个超参数。不是架构。不是数据集大小。不是激活函数。是学习率。如果你别的都不调,就调它。
  • 学习率(Learning rate):模型学得多快
  • 调度(Schedule):随时间改 LR,一个把训练步映射到学习率的函数,设计来优化收敛
  • Warmup:从小 LR 起步
  • 余弦退火(Cosine annealing):训练中沿着余弦曲线把 LR 从 lr_max 降到 lr_min
  • 阶梯衰减(Step decay):在固定的 epoch 间隔把 LR 乘上一个倍数(通常 0.1)

一个迷你框架包含

  • Module:一个层 框架里的基础抽象——任何有 forward()、backward()、parameters() 的东西
  • Sequential:按顺序叠层 一个把模块串起来的容器,前向按序施加、反向逆序施加
  • 前向传播(Forward pass):跑网络 把输入按序穿过每个模块来算出输出
  • 反向传播(Backward pass):算梯度 把损失梯度逆序传过每个模块来算参数梯度
  • 参数(Parameters):可训练的权重 网络里优化器能更新的所有值——权重和偏置
  • 优化器(Optimizer):更新权重的那个东西 一个用梯度更新参数的算法,实现 SGD、Adam 或其他规则
  • DataLoader:喂数据的那个东西 一个迭代器,把数据集切成批,可选地在 epoch 之间打乱
  • 训练模式(Training mode):model.train() 一个标志,启用 dropout 和用批统计量的批归一化这类随机行为
  • 评估模式(Evaluation mode):model.eval() 一个标志,关掉 dropout 并让批归一化用滑动统计量
  • Zero grad:清空梯度 在算下一批梯度之前把所有参数梯度重置为零