文章目录
参数初始化
神经网络的参数初始化是训练深度学习模型的关键步骤之一。初始化参数(通常是权重和偏置)会对模型的训练速度、收敛性以及最终的性能产生重要影响。
1.固定值初始化
在实际的深度学习应用中不推荐使用
1.1 全零初始化
将所有权重初始化为0,同时会导致对称性破坏,每个神经元在每一层中都会执行相同的计算,模型无法学习。通常可以用来初始化偏置。
简单来说对称性问题的现象就是同一层的所有神经元具有完全相同的初始权重和偏置。
1.2 全1初始化
和全零初始化相似,全1初始化会导致网络中每个神经元接收到相同的输入信号,进而输出相同的值,这就无法进行学习和收敛。其只是在理论上的一个初始化方法,在实际神经网络的训练中并不适用。
1.3任意常数初始化
将所有参数初始化为某个非零的常熟。这种方法依然不能避免对称性破坏的问题。
2.随机初始化
方法就是将权重初始化为随机的小值,通常从正态分布或均匀分布中采样。这种方法可以通过随机初始化避免对称性破坏。
部分代码演示
随机分布之均匀初始化
# 1. 均匀分布随机初始化
linear = nn.Linear(in_features=6, out_features=4)
# 初始化权重参数
nn.init.uniform_(linear.weight)
# 打印权重参数
print(linear.weight)
正态分布初始化
linear = nn.Linear(in_features=6, out_features=4)
# 初始化权重参数
nn.init.normal_(linear.weight, mean=0, std=1)
# 打印权重参数
print(linear.weight)
损失函数
1.线性回归损失函数
1.1MAE损失
MAE也被称为L1-loss,通过对预测值和真实值之间的绝对差取平均值来衡量他们之间的差异。
公式:

特点:1.鲁棒性:与均方误差(MSE)相比,MAE对异常值更为鲁棒,因为它不会像MSE那样对较大误差平方敏感。
2.物理意义直观:MAE以原始数据相同的单位度量误差,使其易于解释。
应用场景:MAE通常用于需要对误差进行线性度量的情况,尤其是当数据中可能存在异常值时,MAE可以避免对异常值的过度惩罚。
用torch.nn.L1Loss可以计算MAE
import torch
import torch.nn as nn
# 初始化MAE损失函数
mae_loss = nn.L1Loss()
# 假设 y_true 是真实值, y_pred 是预测值
y_true = torch.tensor([3.0, 5.0, 2.5])
y_pred = torch.tensor([2.5, 5.0, 3.0])
# 计算MAE
loss = mae_loss(y_pred, y_true)
print(f'MAE Loss: {loss.item()}')
1.2 MSE损失
MSE又名均方差损失,也叫L2Loss。
公式:
特点:
- 平方惩罚:因为误差平方,MSE 对较大误差施加更大惩罚,所以 MSE 对异常值更为敏感。
- 凸性:MSE 是一个凸函数(国际的叫法,国内叫凹函数),这意味着它具有一个唯一的全局最小值,有助于优化问题的求解。
MSE被广泛应用在神经网络中。
使用 torch.nn.MSELoss 可以实现:
import torch
import torch.nn as nn
# 初始化MSE损失函数
mse_loss = nn.MSELoss()
# 假设 y_true 是真实值, y_pred 是预测值
y_true = torch.tensor([3.0, 5.0, 2.5])
y_pred = torch.tensor([2.5, 5.0, 3.0])
# 计算MSE
loss = mse_loss(y_pred, y_true)
print(f'MSE Loss: {loss.item()}')
2.CrossEntropyLoss
2.1 信息量
信息量用于衡量一个事件所包含的信息的多少。信息量的定义基于事件发生的概率:事件发生的概率越低,其信息量越大。

2.2 信息熵
信息熵是信息量的期望值。熵越高,表示随机变量的不确定性越大;熵越低,表示随机变量的不确定性越小。

2.3 KL散度
KL散度用于衡量两个概率分布之间的差异。它描述的是用一个分布 Q来近似另一个分布 P时,所损失的信息量。KL散度越小,表示两个分布越接近。

2.4 交叉熵

特点:
-
概率输出:CrossEntropyLoss 通常与 softmax 函数一起使用,使得模型的输出表示为一个概率分布(即所有类别的概率和为 1)。PyTorch 的 nn.CrossEntropyLoss 已经内置了 Softmax 操作。如果我们在输出层显式地添加 Softmax,会导致重复应用 Softmax,从而影响模型的训练效果。
-
惩罚错误分类:该损失函数在真实类别的预测概率较低时,会施加较大的惩罚,这样模型在训练时更注重提升正确类别的预测概率。
-
多分类问题中的标准选择:在大多数多分类问题中,CrossEntropyLoss 是首选的损失函数。
应用场景:
CrossEntropyLoss 广泛应用于各种分类任务,包括图像分类、文本分类等,尤其是在神经网络模型中。
nn.CrossEntropyLoss基本原理:
由交叉熵公式可知:


bp基础之梯度下降算法
1.过程
1.初始化参数:随机初始化模型的参数
2.计算梯度
3.更新参数
4.迭代更新
2.批量梯度下降
Batch Gradient Descent BGD
-
特点:
- 每次更新参数时,使用整个训练集来计算梯度。
-
优点:
- 收敛稳定,能准确地沿着损失函数的真实梯度方向下降。
- 适用于小型数据集。
-
缺点:
- 对于大型数据集,计算量巨大,更新速度慢。
- 需要大量内存来存储整个数据集。
3.随机梯度下降
Stochastic Gradient Descent, SGD
-
特点:
- 每次更新参数时,仅使用一个样本来计算梯度。
-
优点:
- 更新频率高,计算快,适合大规模数据集。
- 能够跳出局部最小值,有助于找到全局最优解。
-
缺点:
- 收敛不稳定,容易震荡,因为每个样本的梯度可能都不完全代表整体方向。
- 需要较小的学习率来缓解震荡。
4.小批量梯度下降
Mini-batch Gradient Descent MGBD
-
特点:
- 每次更新参数时,使用一小部分训练集(小批量)来计算梯度。
-
优点:
- 在计算效率和收敛稳定性之间取得平衡。
- 能够利用向量化加速计算,适合现代硬件(如GPU)。
-
缺点:
- 选择适当的批量大小比较困难;批量太小则接近SGD,批量太大则接近批量梯度下降。
- 通常会根据硬件算力设置为32\64\128\256等2的次方。
5. 存在的问题
1.收敛速度慢:BGD和MBGD使用固定学习率,太大会导致震荡,太小又收敛缓慢
2.局部最小值和鞍点问题:SGD在遇到局部最小值或鞍点时容易停滞,导致模型难以达到全局最优。
3.训练不稳定:SGD中的噪声容易导致训练过程中不稳定,使得训练陷入震荡或不收敛。
6.优化下降方式
通过对标准的梯度下降进行改进,来提高收敛速度或稳定性。
6.1 指数加权平均
我们平时说的平均指的是将所有数加起来除以数的个数,很单纯的数学。再一个是移动平均数,指的是计算最近邻的 N N N个数来获得平均数,感觉比纯粹的直接全部求均值高级一点。
指数加权平均:Exponential Moving Average,简称EMA,是一种平滑时间序列数据的技术,它通过对过去的值赋予不同的权重来计算平均值。与简单移动平均不同,EMA赋予最近的数据更高的权重,较远的数据则权重较低,这样可以更敏感地反映最新的变化趋势。
6.2 Momentum
动量(Momentum)是对梯度下降的优化方法,可以更好地应对梯度变化和梯度消失问题,从而提高训练模型的效率和稳定性。它通过引入 指数加权平均 来积累历史梯度信息,从而在更新参数时形成“动量”,帮助优化算法更快地越过局部最优或鞍点。
梯度更新算法包括两个步骤:
a. 更新动量项
首先计算当前的动量项
其中
b.更新参数,利用动量项更新参数:
特点:
1.惯性效应:该方法加入前面梯度的累积,这种惯性使得算法沿着当前的方向继续更新。如遇到鞍点,也不会因梯度逼近零而停滞。
2.减少震荡:该方法平滑了梯度更新,减少在鞍点附近的震荡,帮助优化过程稳定向前推进。
3.加速收敛:该方法在优化过程中持续沿着某个方向前进,能够更快地穿越鞍点区域,避免在鞍点附近长时间停留。
在方向上的作用:
1.梯度方向一致时
如果梯度在多个连续时刻方向一致(例如,一直指向某个方向),Momentum 会逐渐积累动量,使更新速度加快。
例如,假设梯度在多个时刻都是正向的,动量
v
t
v_t
vt 会逐渐增大,从而加速参数更新。
2.梯度方向不一致时
如果梯度方向在不同时刻不一致(例如,来回震荡),Momentum 会通过积累的历史梯度信息部分抵消这些震荡。
例如,假设梯度在一个时刻是正向的,下一个时刻是负向的,动量
v
t
v_t
vt 会平滑这些变化,使更新路径更加稳定。
3.局部最优或鞍点附近
在局部最优或鞍点附近,梯度可能会变得很小,导致标准梯度下降法停滞。
Momentum 通过积累历史梯度信息,可以帮助参数更新越过这些平坦区域。
动量方向与梯度方向一致
1.梯度方向一致时
如果梯度在多个连续时刻方向一致(例如,一直指向某个方向),动量会逐渐积累,动量方向与梯度方向一致。
例如,假设梯度在多个时刻都是正向的,动量
v
t
v_t
vt 会逐渐增大,从而加速参数更新。
2.几何意义
在优化问题中,如果损失函数的几何形状是 平滑且单调 的(例如,一个狭长的山谷),梯度方向会保持一致。
在这种情况下,动量方向与梯度方向一致,Momentum 会加速参数更新,帮助算法更快地收敛。
动量方向与梯度方向不一致
1.梯度方向不一致时
如果梯度方向在不同时刻不一致(例如,来回震荡),动量方向可能会与当前梯度方向不一致。
例如,假设梯度在一个时刻是正向的,下一个时刻是负向的,动量
v
t
v_t
vt 会平滑这些变化,使更新路径更加稳定。
2.几何意义
在优化问题中,如果损失函数的几何形状是 复杂且非凸 的(例如,存在多个局部最优或鞍点),梯度方向可能会在不同时刻发生剧烈变化。
在这种情况下,动量方向与梯度方向可能不一致,Momentum 会通过积累的历史梯度信息部分抵消这些震荡,使更新路径更加平滑。
总结
动量项更新:利用当前梯度和历史动量来计算新的动量项。
权重参数更新:利用更新后的动量项来调整权重参数
梯度计算:在每个时间步计算当前的梯度,用于更新动量项和权重参数。
Momentum 算法是对梯度值的平滑调整,但是并没有对梯度下降中的学习率进行优化。

3349

被折叠的 条评论
为什么被折叠?



