深度学习优化--正则化和优化算法

本文关于深度学习模型优化主要围绕下面两个方面展开:

1、优化问题:深度神经网络的优化十分困难。集中在下面三个原因:1、神经网络的损失函数是一个非凸函数,找到全局最优解通常比较困难。2、深度神经网络的参数多,训练数据大。3、深度神经网络存在梯度消失或爆炸问题,导致基于梯度的优化方法经常失效。

2、泛化问题:由于深度神经网络的复杂度比较高,并且拟合能力很强,很容易在训练集上产生过拟合。因此在训练深度神经网络时,同时也需要通过一定 的正则化方法来改进网络的泛化能力。

所有代码都是基于pytorch

[TOC]

一、优化算法

1.1 问题提出

我们常使用的随机梯度下降算法(stochastic gradient descent,SGD)原理是什么呢?直观上理解就是:山坡滚球,球以最快速度掉到山脚。但是有没有这种可能:球掉了一个“坑道(局部最低)”。在数学上对“坑道”的定义为鞍点即在此点梯度为0。回顾梯度下降公式:
$$
\widehat \theta=\theta-\alpha \frac{\partial J(\theta)}{\partial \theta}
$$
其中$J(\theta)$为损失函数;$\alpha$为学习率;$\theta$为优化参数。鞍点处梯度为0那么也就意味着我们需要调整的参数$\theta $将会一直被困在“原地”无法进行更新。鞍点示意图如下:

从上图可以发现,我们通过随机梯度下降只是到达函数的局部最优

2、优化算法提出

2.1 梯度下降算法

在我们平时编程过程中经常所使用的是随机梯度下降算法,但是一般的梯度下降算法分为三类:1、批量梯度下降算法;2、随机梯度下降算法;3、小批量梯度下降算法。

1、随机梯度下降算法

首先SGD算法运算流程如下:

image-20230529201451914.png

2、小批量梯度下降算法

在训练深度神经网络时,面对较大规模的数据集如果直接对整个训练集的梯度进行计算,显然这是不合适的对资源的消耗太大、计算也十分冗余。因此,在训练深度神经网络时,经常使用小批量梯度下降法(Mini-Batch Gradient Descent)

image-20230529195427115.png

通过对梯度下降算法观察发现存在两个参数可以进行优化:1、学习率$\alpha $

2.2 学习率调整

2.2.1 AdaGrad算法

2.2.2 RMSprop算法

2.2.3 Adam算法

n、参考文献

1、https://www.deeplearningbook.org/