损失函数与梯度下降
概念
损失函数(Loss Function)
损失函数用于量化模型预测结果与真实值之间的差距。L = f(预测值, 真实值),值越小表示预测越准。
梯度下降(Gradient Descent)
梯度下降是通过沿损失函数梯度反方向更新模型参数,逐步逼近最小值的优化算法。类比:你蒙着眼在山上要走到山谷(最低点),每次迈步都沿着脚下最陡的下降方向走。
常见损失函数
分类问题
交叉熵损失(Cross-Entropy Loss)
L = -Σ y_i · log(ŷ_i)1
- y_i 为真实标签的 one-hot
- ŷ_i 为模型预测的概率
- LLM 每次预测下一个 token 使用的就是这个损失
回归问题
均方误差(MSE)
L = (1/n) · Σ(y_i - ŷ_i)²1
适合预测数值型结果,如房价预测。
平均绝对误差(MAE)
L = (1/n) · Σ|y_i - ŷ_i|1
对异常值更稳健。
梯度下降的变体
批量梯度下降(BGD)
每次用全部训练数据计算梯度:
- 方向最准,但速度最慢,显存不够
随机梯度下降(SGD)
每次用一个样本计算梯度:
- 速度快但方向不稳定,可能震荡
小批量梯度下降(Mini-batch SGD)
每次用一小批样本(如 32/64 个)计算梯度:
- 折中方案,LLM 训练中最常用
- 既高效又相对稳定
动量优化器
Adam(Adaptive Moment Estimation)
结合了 SGD + 动量 + 自适应学习率。当前最流行的优化器:
- 自动调整每个参数的学习率
- 对稀疏梯度友好
- AdamW 是变体,改进了权重衰减
学习率(Learning Rate)
控制每次参数更新的步长:
- 太大:可能跳过最优解,甚至发散
- 太小:收敛太慢
- 学习率调度:训练中动态调整(warmup→平稳→衰减)
面试常问
- 交叉熵损失为什么适合分类问题?
- Adam 和 SGD 的核心区别是什么?
- 学习率太大或太小各有什么问题?
