神经网络如何学习
从参数、损失函数和梯度出发,理解“训练”到底改变了什么。
读完这一章,你会理解
- 区分模型结构与参数
- 理解损失函数的作用
- 读懂一次最小训练循环
模型就是一个带参数的函数
神经网络并不神秘。可以先把它看成一个函数:输入经过一系列线性变换和非线性变换,得到输出。网络结构决定信息怎样流动,参数决定当前会给出什么结果。
训练之前,参数通常接近随机状态;训练的目标不是不断添加规则,而是寻找一组让输出更符合数据的参数。
prediction = model(input, parameters)
error = loss(prediction, target)损失函数给学习提供方向
模型需要一个可以比较的信号。损失函数把“预测得有多不好”变成数值,训练过程就可以围绕降低这个数值进行。
不同任务使用不同损失函数,因为我们对“错误”的定义不同。分类关心概率分布,回归关心数值距离,语言模型关心下一个 token 的概率。
梯度告诉参数往哪里走
反向传播利用链式法则,计算每个参数对最终损失的影响。优化器随后沿着降低损失的方向更新参数。
- 前向计算得到预测
- 计算预测与目标之间的损失
- 反向传播得到梯度
- 优化器更新参数并进入下一批数据