前言
通俗易懂讲解梯度下降法! 蛮不错的一篇文章。
关于神经网络,一个学术界搞错了很多年的问题BP算法自八十年代发明以来,一直是神经网络优化的最基本的方法。神经网络普遍都是很难优化的,尤其是当中间隐含层神经元的个数较多或者隐含层层数较多的时候。长期以来,人们普遍认为,这是因为较大的神经网络中包含很多局部极小值(local minima),使得算法容易陷入到其中某些点。到2014年,一篇论文《Identifying and attacking the saddle point problem in high-dimensional non-convex optimization》,指出高维优化问题中根本没有那么多局部极值。作者依据统计物理,随机矩阵理论和神经网络理论的分析,以及一些经验分析提出高维非凸优化问题之所以困难,是因为存在大量的鞍点(梯度为零并且Hessian矩阵特征值有正有负)而不是局部极值。
梯度下降法的实现方式
- batch gradient descent
- 随机梯度下降
bias 偏差 和 variance 方差
一文读懂深度学习:从神经元到BERT 形象的说,拟和就是把平面上一系列的点,用一条光滑的曲线连接起来。因为这条曲线有无数种可能,从而有各种拟和方法。拟和的曲线一般可以用函数表示,根据这个函数的不同有不同的拟和的名字:欠拟合(underfitting) 和过拟合(overfitting)
假设存在多个数据集\(D_1,D_2,…\),
f(x;D)
由训练集 D 学得的模型 f 对 x 的预测输出。- y 表示x 的真实值
-
针对所有训练集,学习算法 f 对测试样本 x 的 期望预测 为:
\[\overline{f}(x)=E_D[f(x;D)]\] -
偏差,偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
\[偏差=(\overline{f}(x)-y)^2\] -
方差,方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
\[方差=E_D[(f(x;D)-\overline{f}(x))^2]\]
我们希望偏差与方差越小越好,但一般来说偏差与方差是有冲突的, 称为偏差-方差窘境 (bias-variance dilemma).
- 给定一个学习任务, 在训练初期, 由于训练不足, 学习器的拟合能力不够强, 偏差比较大, 也是由于拟合能力不强, 数据集的扰动也无法使学习器产生显著变化, 也就是欠拟合的情况;
- 随着训练程度的加深, 学习器的拟合能力逐渐增强, 训练数据的扰动也能够渐渐被学习器学到;
- 充分训练后, 学习器的拟合能力已非常强, 训练数据的轻微扰动都会导致学习器发生显著变化, 当训练数据自身的、非全局的特性被学习器学到了, 则将发生过拟合.
- 初始训练模型完成后,我们首先要知道算法的偏差高不高
-
如果偏差很高,甚至无法拟合训练集,可以尝试
- 更大的网络 比如更多的隐层或隐藏单元
- 花费更多的时间训练算法
- 更先进的优化算法
- 新的神经网络结构
- 准备更多的训练数据对高偏差没啥大用
- 反复尝试,直到可以拟合训练集,使得偏差降低到可以接受的值
-
如果方差比较高
- 更多的训练数据
- regularization/正则化
- 新的神经网络结构
- 不断尝试,直到找到一个低偏差、低方差的框架
防止过拟合
数学原理上理解起来还比较困难
如果测试集的评估结果相比训练集出现大幅下降,比如下降幅度超过了 5%,就说明模型产生了非常严重的过拟合现象,我们就要反思一下是不是在模型设计过程中出现了一些问题,比如模型的结构对于这个问题来说过于复杂,模型的层数或者每层的神经元数量过多,或者我们要看一看是不是需要加入 Dropout,正则化项来减轻过拟合的风险。
正则化/规则化——给损失函数“加码”
假设一个神经网络样本为
\[\begin{Bmatrix} (x^{(i)},y^{(i)}),i=1,...m \end{Bmatrix}\]训练过程中训练样本的预测结果为
\(\hat y^i,i =1,...m\) 损失函数
\[J(w,b)=\frac{1}{m}\sum\_{i=1}^mL(\hat y^i , y^i)\]L2正则化是给cost function加上正则项
\[J(w,b)=\frac{1}{m}\sum\_{i=1}^mL(\hat y^i , y^i)+\frac{\lambda}{2m}||w||_2^2\]梯度下降时 \(W=W-\sigma d_w\)
加入L2 正则项之后,相当于在原来 \(d_w\) 的基础上带上
\[\frac{d}{d_W}(\frac{\lambda}{2m}W^2)=\frac{\lambda}{m}W\]\(d_w\) 变得更大,W会变得更小
L1正则化采用的正则化项如下所示
\[J(w,b)=\frac{1}{m}\sum\_{i=1}^mL(\hat y^i , y^i)+\frac{\lambda}{2m}||w||_1\]为什么正则化有利于预防过拟合呢?为什么它可以减少方差问题?我们通过两个例子来直观体会一下
可以想象这是一个过拟合的神经网络。我们添加正则项,它可以避免数据权值矩阵过大,这就是弗罗贝尼乌斯范数,为什么压缩范数,或者弗罗贝尼乌斯范数或者参数可以减少过拟合?
直观上理解就是如果正则化设置得足够大,权重矩阵被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。但是会存在一个中间值,于是会有一个接近“Just Right”的中间状态。
直观理解就是增加到足够大,会接近于0,实际上是不会发生这种情况的,我们尝试消除或至少减少许多隐藏单元的影响,最终这个网络会变得更简单,这个神经网络越来越接近逻辑回归,我们直觉上认为大量隐藏单元被完全消除了,其实不然,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了。
我们进入到神经网络内部来直观感受下为什么正则化会预防过拟合的问题,假设我们采用了tanh的双曲线激活函数
如果使用了正则化部分,那么权重W会倾向于更小,因此得到的 \(Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}\) 会更小,在作用在激活函数的时候会接近于上图中横轴零点左右的部分。如果 Z 的值最终在这个范围内,都是相对较小的值, \(g(z)=tanh(z)\) 大致呈线性(上图横轴零点左右的部分大致是直线),“边界”越线性,“弯曲度”就会小一点,网络从过拟合逐步向高偏差状态靠拢。