最小损失函数

五、代码示例:使用 PyTorch 最小化损失函数

import torch
import torch.nn as nn
import torch.optim as optim

# 定义简单线性回归模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)  # 输入维度1,输出维度1

    def forward(self, x):
        return self.linear(x)

# 生成模拟数据
x = torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtype=torch.float32)
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]], dtype=torch.float32)

# 初始化模型、损失函数和优化器
model = LinearRegression()
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降

# 训练循环
epochs = 1000
for epoch in range(epochs):
    # 前向传播
    outputs = model(x)
    loss = criterion(outputs, y)
    
    # 反向传播和优化
    optimizer.zero_grad()  # 清零梯度
    loss.backward()        # 计算梯度
    optimizer.step()       # 更新参数
    
    # 打印进度
    if (epoch+1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')

# 输出最终参数
print(f'Weight: {model.linear.weight.item():.4f}, Bias: {model.linear.bias.item():.4f}')

六、优化技巧总结

  1. 学习率调整
    • 初始学习率过大导致震荡,过小导致收敛缓慢。
    • 使用学习率调度器(如 StepLR、ReduceLROnPlateau)动态调整。
  2. 批量大小选择
    • 大批量(如 256):训练稳定,但可能陷入较差的局部最优。
    • 小批量(如 32):引入随机性,有助于跳出局部最优,但训练速度慢。
  3. 正则化
    • L2 正则化(权重衰减):防止过拟合,改善泛化能力。
    • Dropout:随机丢弃神经元,增强模型鲁棒性。
  4. 早停(Early Stopping)
    • 当验证集损失不再下降时停止训练,避免过拟合。

总结

最小化损失函数是机器学习训练的核心目标,通过梯度下降等优化算法迭代更新模型参数。实际应用中需根据任务类型选择合适的损失函数和优化器,并注意解决梯度消失、过拟合等问题,以达到良好的模型性能。
posted @ 2025-07-10 15:31  姚春辉  阅读(20)  评论(0)    收藏  举报