训练神经网络需要两个核心组件:损失函数告诉模型「错在哪里」,优化器告诉模型「怎么改」。
损失函数
// 交叉熵(分类任务)
lossFn := nn.NewCrossEntropyLoss[float32](backend)
loss := lossFn.Forward(logits, labels)
// 均方误差(回归任务)
mse := nn.NewMSELoss[float32](backend)
loss := mse.Forward(predictions, targets)
交叉熵的数学:
\[L = -Σ y_true · log(softmax(y_pred))\]
优化器
SGD(带动量)
optimizer := optim.NewSGD[float32](0.01, model.Parameters()...)
optimizer.Step() // 执行参数更新
Adam
optimizer := optim.NewAdam[float32](0.001, model.Parameters()...)
AdamW(解耦权重衰减)
optimizer := optim.NewAdamW[float32](0.001, 0.01, model.Parameters()...)
// lr=0.001, weight_decay=0.01
训练循环
for epoch := 0; epoch < numEpochs; epoch++ {
for _, batch := range trainLoader {
// 1. 清零梯度
optimizer.ZeroGrad()
// 2. 前向传播
output := model.Forward(batch.Input)
// 3. 计算损失
loss := lossFn.Forward(output, batch.Label)
// 4. 反向传播
tape.Backward(loss)
// 5. 参数更新
optimizer.Step()
}
}
学习率调度
// 余弦退火
scheduler := optim.NewCosineAnnealingLR(optimizer, maxEpochs)
scheduler.Step()
// 学习率预热
scheduler := optim.NewLinearWarmup(optimizer, warmupSteps, baseLR)
📘 《Born》连载技术书,第 10/22 章。
登录后可参与表态
讨论回复
加载中...
正在加载回复...
正在加载回复...
推荐
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
领取 2000万 Tokens
通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力