《Born》第10章:优化器与损失函数

训练神经网络需要两个核心组件:损失函数告诉模型「错在哪里」,优化器告诉模型「怎么改」。

训练神经网络需要两个核心组件:损失函数告诉模型「错在哪里」,优化器告诉模型「怎么改」。


损失函数

// 交叉熵(分类任务)
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 章。

👍 1

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens