深度学习从入门到入土,基础知识篇三
1. 深度学习网络包含哪些方面
最常用的深度学习网络包括分类网络、目标检测网络、分割网络、分级网络、对比网络与异常检测网络,
2. 深度学习神经网络的超参数
什么是神经网络的超参数?
超参数是指可供网络使用者外部调整的参数,可以让使用者控制优化模型的过程,从而在不改变网络结构与模型复杂度的情况下,使我们的网络尽可能达到一个好的预测效果,不同的超参数可以影响网络的收敛速度与模型训练。
2.1训练轮数(epoches)
epoches–指的是训练数据集被完整遍历的次数。在神经网络的训练过程中,每一个epoch表示所有的数据输入网络完成一次向前计算及反向传播,即一个epoch是将所有的数据输入网络完成一次向前计算及反向传播的过程。设置更大的epoches在一定程度范围内可以使模型学习更充分,效果更好,但过大的epoches可能导致过拟合。
每个 epoch 由两个主要部分组成:
-
训练循环 - 迭代训练数据集并尝试收敛到最佳参数。
-
验证/测试循环 - 迭代测试数据集以检查模型性能是否有所改善
2.2批次大小(batch_size)
batch_size–是指每次训练模型所用的样本数,通俗的理解为,模型在下一次更新参数时,查看了多少个样本。bath_size主要影响网络训练时的以下性能:
-
训练速度:较小的batch_size通常意味着更频繁的权重更新,这可能会加快训练的初期收敛速度,特别是在数据分布不均匀时。然而,它也可能导致梯度更新不够稳定。另一方面,较大的batch_size能够减少计算梯度的次数,这在某些硬件(特别是GPU)上可能会带来更高的计算效率。
-
内存使用:较小的batch_size需要的内存较少,这对于内存有限的设备或大型数据集来说是有利的。而较大的batch_size则可能超出设备的内存限制。
-
泛化性能:在某些情况下,较小的batch_size可能有助于模型更好地泛化到新数据,因为它在每次更新时都暴露于更多的数据变化。然而,这并非总是如此,因为过大的batch_size也可能导致模型收敛到更好的局部最优解。
-
收敛稳定性:较大的batch_size通常会使梯度更新更加稳定,有助于减少训练过程中的波动
2.3学习率(learning_rate)
learning_rate–是指更新网络参数时的幅度,较小的值可能会导致网络学习速度较慢,收敛时间较长,而较大的值可能会导致模型错过其最优性能参数。
在神经网络的训练阶段,假设参数跟新是依据梯度下降法实现,而梯度下降法优化参数的过程,用公式表示为:
ϑ
⟵
ϑ
−
ξ
∂
L
∂
ϑ
\vartheta \longleftarrow \vartheta -\xi \frac{\partial L}{\partial \vartheta }
ϑ⟵ϑ−ξ∂ϑ∂L
其中
ϑ
\vartheta
ϑ 表示网络模型的参数,
ξ
\xi
ξ 为学习率,
L
=
L
(
ϑ
)
L=L(\vartheta)
L=L(ϑ) 表示
L
L
L 是关于
ϑ
\vartheta
ϑ 的损失函数,
∂
L
∂
ϑ
\frac{\partial L}{\partial \vartheta }
∂ϑ∂L 是损失函数对参数的一阶导数,也就是梯度误差。从参数根性公式来看,学习率直接影响参数更新的能力,学习率越大,参数更新的步长越大,模型收敛越快,但也可能错过最优参数,学习率越小,参数更新的步长越小,模型收敛越缓慢。因此在网络训练时,需要把学习设置在一个合理的范围内,从而得到更好的误差平滑曲线,得到更优的模型性能。
实际使用中,我们可以首先选择一个差不多合适的值(比如0.01),然后多次修改观察网络LOSS曲线的下降趋势,选择最平滑的下降最好的曲线对应的学习率,或者使用阶段性衰减学习率,根据参数梯度不在衰减时,将学习率降低。
建议在网络训练初期采用较大的学习率,而当网络性能有一定收敛之后采用较低的学习率,得到一个性能更好的网络。
2.4学习策略
深度学习网路的一系列策略,有助于我们获得性能更好的训练结果。常用的训练策略有如下几种:
- 数据预处理与增强:对数据集进行增强,对数据集进行扩增(平移、旋转、裁剪等等),减少过拟合风险,其次对数据集进行清洗与归一化。
- 超参数调整:包括学习率调整、训练批次(batch size)、迭代次数(epochs)、正则化参数等的设置。常用方法有网格搜索、随机搜索、贝叶斯优化等。
- 优化算法选择:如SGD(随机梯度下降)、小批量随机地体下降、Momentum、RMSprop、Adam等,不同的优化器对训练速度和模型收敛有重要影响。
- 学习率调度:动态调整学习率,如使用学习率衰减策略(如逐步减小学习率)、Warm-up策略(初期缓慢增加学习率)等,以加速训练初期的收敛并避免后期训练陷入局部最优。
- 正则化与规范化:如L1、L2正则化、Dropout、Batch Normalization等,用于防止过拟合,提升模型泛化能力。
- 早停法(Early Stopping):在验证集性能不再提升时终止训练,以避免过拟合。
- 模型集成:通过集成学习(如Bagging、Boosting)结合多个模型的预测,提高整体预测性能。
- 权重初始化:合理初始化网络权重,对加速收敛和提高性能至关重要。
- 损失函数选择:根据任务需求选择合适的损失函数,如交叉熵损失用于分类任务,均方误差用于回归任务。
- 动态调整网络结构:如动态调整网络深度、宽度或使用可变形卷积等,以适应不同复杂度的任务。
- 并行与分布式训练:利用多GPU或分布式系统加快训练速度,通过数据并行或模型并行等方式分散计算负担。
2.5优化器
优化是调整模型参数以减少每个训练步骤中模型误差的过程。优化算法定义了如何执行此过程(在本例中我们使用)。所有优化逻辑都封装在优化器对象中。这里,我们使用 SGD(随机梯度下降)优化器。此外,PyTorch 中还有许多不同的优化器,例如 ADAM 和 RMSProp,它们可以更好地处理不同类型的模型和数据。
2.6 损失函数
损失函数衡量的是模型预测的结果与真实值(ground truth)的不相似程度,它是我们在训练时想要最小化的损失函数。为了计算损失,我们使用给定数据样本的输入进行预测,并将其与真实数据标签值进行比较。常见的损失函数包含交叉熵损失与均方差损失。