深度学习优化--正则化和优化算法
本文关于深度学习模型优化主要围绕下面两个方面展开:
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算法运算流程如下:
2、小批量梯度下降算法
在训练深度神经网络时,面对较大规模的数据集如果直接对整个训练集的梯度进行计算,显然这是不合适的对资源的消耗太大、计算也十分冗余。因此,在训练深度神经网络时,经常使用小批量梯度下降法(Mini-Batch Gradient Descent)
通过对梯度下降算法观察发现存在两个参数可以进行优化:1、学习率$\alpha $