Task2小节中的3.3-3.5三个部分详细探讨了深度学习优化中的自适应学习率问题,自适应学习率是文档的核心部分,讨论了几种经典的自适应学习率方法。这些方法通过动态调整学习率,使模型能够在训练过程中更有效地收敛。
AdaGrad是一种能够根据每个参数的历史梯度大小自动调整学习率的方法。对于梯度较大的参数,AdaGrad会相应地减少学习率;对于梯度较小的参数则增大学习率,它特别适合处理稀疏数据,能够快速收敛。但是随着迭代次数的增加学习率会持续下降。可能会导致收敛变得非常缓慢甚至停止。
RMSProp方法是对AdaGrad的改进,解决了AdaGrad在处理非凸函数时学习率过快衰减的问题。它通过对梯度的平方求移动平均值,使得学习率能够保持在一个合理的范围内,不至于过快衰减。在处理非凸优化问题时,RMSProp能够保持较快的收敛速度,并且在不同参数方向上动态调整学习率,在实际应用中非常流行。
Adam优化策略结合了动量法和RMSProp的优势,既能够利用历史梯度的信息加速收敛,又能够动态调整学习率。Adam算法通过计算梯度的一阶和二阶动量,来确定参数更新的方向和步长。其在大多数情况下表现优异,是当前使用最广泛的优化算法之一。
文章中进一步又讨论了学习率调度问题,介绍了学习率调度的两种策略:学习率衰减采用的方式是随着训练过程的推进,学习率逐渐减小,使得模型在接近最优解时能够更精确地收敛,避免“过冲”,预热采用的方法是在训练初期,学习率从一个较小的值逐渐增大,然后再逐渐减小。预热策略能够使模型在开始训练时收集足够的信息,从而避免初始阶段的大幅震荡。
这一小节在最后总结了从最基本的梯度下降法到加入动量、自适应学习率和学习率调度的整个优化过程,并提出了一个包含所有这些改进的完整优化算法模型。这种方法考虑了动量和自适应学习率的结合,在处理深度学习中的复杂优化问题时表现出色。
Task2.2
3.6部分详细介绍了深度学习中的分类问题,涵盖了分类与回归的关系、softmax在分类中的应用、分类损失的计算等内容
文章中首先讨论了分类与回归之间的关系。回归问题的输出是一个连续值,分类问题的输出是离散的类别标签。在某些情况下,分类可以被看作回归来处理,即将类别编号,并将模型输出的值与编号进行比较。这种方法可能导致误差,因为类别之间的关系并不总是线性的。为了解决这个问题,通常使用独热编码来表示类别,使得各类别之间的关系更加明确和独立。
之后文章又介绍了softmax函数在分类问题中的应用,softmax将模型的输出转化为概率分布,使得每个输出值都在0到1之间,并且所有输出的和为1。通过softmax,模型输出的值可以更好地与目标独热向量进行比较,从而进行准确的分类。另外文中还提到对于二分类问题,可以使用sigmoid函数来替代softmax,在二分类情况下二者是等价的。
文中的第二部分讨论了分类过程中的损失函数,两种常见的损失函数是均方误差(Mean Squared Error, MSE)和交叉熵(Cross-Entropy)。虽然MSE可以用来衡量模型输出与目标值之间的差异,但交叉熵更适合分类问题,尤其是在使用softmax后的分类任务中。交叉熵不仅能度量模型输出与目标之间的差异,还能通过最大化似然估计来优化模型。通过图示说明了在不同损失函数下的优化过程对比。交叉熵在优化过程中能够提供更稳定的梯度,避免陷入平坦区域,而均方误差在某些情况下可能导致梯度过小,导致优化困难。
Task2.3
最后,尝试了以下CNN的代码逻辑,说实话,之前自己也做过相关的模型训练,但是对于一些具体的参数调节还是掌握的不够。这次的代码框架相对复杂,刚好可以加深学习,也真的是很开心!
分类模型的结构由卷积层、池化层和全连接层组成。卷积层用于提取图像的空间特征。每个卷积层之后都有批归一化和ReLU激活函数。这些卷积层逐层提取图像的低级到高级特征。使用最大池化层来减少特征图的大小,保留最重要的信息并降低计算复杂度。在卷积层的输出展平后,使用全连接层进行进一步处理,最终将特征映射到分类任务的类别上。模型中所使用的损失函数为交叉熵损失函数,采用Adam优化器学习率设置为0.0003,并且加入了L2正则化来防止过拟合。
通过训练模型的实际操作,总结得出了批归一化和激活函数的作用,前者用于加快训练并提高稳定性,后者引入非线性。并且通过使用小批量训练,可以加速模型训练并稳定梯度下降过程。通过这个模型的构建与训练过程,学到了如何在PyTorch中实际实现和训练一个深度学习模型,理解各个组成部分的作用,并掌握一些实用的技巧,如早停、正则化等操作。