网站首页 > 文章精选 正文
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习内容,尽在官网-聚客AI学院大模型应用开发微调项目实践课程学习平台
一. 神经网络训练基础概念
神经网络训练是通过调整权重参数,使模型输出逐渐逼近真实值的过程。其核心流程可概括为:
数据输入 → 前向传播 → 损失计算 → 反向传播 → 参数更新
二. 前向传播(Forward Propagation)
2.1 计算过程
输入数据逐层通过神经网络,最终得到预测输出:
其中:
- ll:层编号
- WW:权重矩阵
- bb:偏置项
- σσ:激活函数
代码示例:手动实现前向传播
import torch
import torch.nn as nn
# 定义3层网络
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 256) # 输入层→隐层
self.fc2 = nn.Linear(256, 10) # 隐层→输出层
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.fc1(x))
x = self.fc2(x)
return x
# 测试
model = SimpleNet()
input_data = torch.randn(64, 784) # batch_size=64
output = model(input_data)
print(output.shape) # torch.Size([64, 10])
三. 损失函数(Loss Function)
3.1 常见损失函数
代码示例:交叉熵损失计算
criterion = nn.CrossEntropyLoss()
loss = criterion(output, target_labels)
四. 梯度下降(Gradient Descent)
4.1 基本原理
通过计算损失函数对参数的梯度,沿负梯度方向更新参数:
其中 ηη 为学习率(Learning Rate)。
代码示例:手动实现梯度更新
learning_rate = 0.01
for param in model.parameters():
param.data -= learning_rate * param.grad
4.2 优化器变体
代码示例:Adam优化器使用
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
optimizer.step()
五. 关键超参数解析
5.1 批大小(Batch Size)
- 大批量(如256):内存占用高,收敛稳定
- 小批量(如32):梯度噪声大,可能跳出局部最优
经验公式:
GPU显存需求≈4×
5.2 学习率(Learning Rate)
- 学习率衰减:
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
- 预热策略(Warmup):前5%训练步线性增加学习率
5.3 迭代次数(Epochs)
- 早停法(Early Stopping):验证集损失连续3次不下降时终止训练
六. 正则化技术
6.1 L1/L2正则化
- L1:促进稀疏性
- L2:防止过拟合
# L2正则化
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=1e-4)
6.2 Dropout
随机屏蔽神经元,增强泛化能力:
self.dropout = nn.Dropout(p=0.5)
x = self.dropout(x)
七. 激活函数对比
代码示例:GELU实现
import torch.nn.functional as F
x = F.gelu(x)
八. 反向传播(Backpropagation)
8.1 链式法则应用
计算梯度从输出层逐层回传:
九. 梯度问题与解决方案
9.1 梯度消失/爆炸
- 现象:深层网络中出现梯度指数级缩小/增大
- 检测方法:
print(torch.abs(param.grad).mean()) # 监控梯度均值
9.2 解决方案
- 权重初始化:
nn.init.kaiming_normal_(self.fc1.weight, mode='fan_in')
- 归一化技术:
- Batch Norm:对每批数据归一化
- Layer Norm:适用于RNN/Transformer
代码示例:Batch Normalization
self.bn = nn.BatchNorm1d(256)
x = self.bn(x)
附:完整训练代码模板
import torch
from torch import nn, optim
from torch.utils.data import DataLoader
# 数据加载
train_loader = DataLoader(dataset, batch_size=64, shuffle=True)
# 模型定义
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练循环
for epoch in range(100):
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')
注:本文代码基于PyTorch 2.0实现,运行前请安装依赖:
pip install torch torchvision matplotlib
本文如果对你有所帮助,记得点赞收藏,告诉身边有需要的朋友。
猜你喜欢
- 2025-05-28 如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法
- 2025-05-28 显存告急?微调资源优化的三大法宝
- 2025-05-28 大模型训练成本降低近一半!新加坡国立大学最新优化器已投入使用
- 2025-05-28 Pytorch 入门-day13: 调试与可视化
- 2025-05-28 基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
- 2025-05-28 BattProDeep——深度学习赋能电池老化概率精准预测
- 2025-05-28 让AI自己调整超参数,谷歌大脑新优化器火了,自适应多种不同任务
- 2025-05-28 神经辐射场(NeRF)实战指南:基于PyTorch的端到端实现
- 2025-05-28 Pytorch学习-day8: 损失函数与优化器
- 2025-05-28 Pytorch入门-Day 14:实践与优化
- 最近发表
-
- 如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法
- 显存告急?微调资源优化的三大法宝
- 大模型训练成本降低近一半!新加坡国立大学最新优化器已投入使用
- Pytorch 入门-day13: 调试与可视化
- 基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
- 神经网络训练全解析:从理论到实战的开发者指南及超参数优化法则
- BattProDeep——深度学习赋能电池老化概率精准预测
- 让AI自己调整超参数,谷歌大脑新优化器火了,自适应多种不同任务
- 神经辐射场(NeRF)实战指南:基于PyTorch的端到端实现
- Pytorch学习-day8: 损失函数与优化器
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)