偏差用于衡量Train set error,方差用于衡量Train set error与Dev set error的差值。
使用L2正则化逻辑回归模型,表达式修正为: J ( ω , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∣ ∣ ω ∣ ∣ 2 2 J(\omega,b)=\frac{1}{m}\sum_{i=1}^m L(\hat y(i),y(i))+\frac{\lambda}{2m}||\omega||^2_2 J(ω,b)=m1i=1∑mL(y^(i),y(i))+2mλ∣∣ω∣∣22 ∣ ∣ ω ∣ ∣ 2 2 = ∑ j = 1 n x ω j 2 = ω T ω ||\omega||^2_2=\sum_{j=1}^{n_{x}}\omega^2_j=\omega^T\omega ∣∣ω∣∣22=j=1∑nxωj2=ωTω 其中 λ \lambda λ就是正则化参数(超参数的一种)。
也可以对b进行正则化。但是一般w为高维参数矢量,而b只是一个常数。相比较来说,参数很大程度上由w决定,改变b值对整体模型影响较小。所以为了简便,一般忽略对b的正则化。
在深度学习模型中,L2 regularization的表达式为: J ( ω [ 1 ] , b [ 1 ] , … , ω [ L ] , b [ L ] ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∑ l = 1 L ∣ ∣ ω [ l ] ∣ ∣ 2 J(\omega^{[1]},b^{[1]},…,\omega^{[L]},b^{[L]})=\frac{1}{m}\sum_{i=1}^m L(\hat y(i),y(i))+\frac{\lambda}{2m}\sum_{l=1}^L||\omega^{[l]}||^2 J(ω[1],b[1],…,ω[L],b[L])=m1i=1∑mL(y^(i),y(i))+2mλl=1∑L∣∣ω[l]∣∣2 ∣ ∣ ω [ l ] ∣ ∣ 2 = ∑ i = 1 n [ l ] ∑ j = 1 n [ l − 1 ] ( ω i j [ l ] ) 2 ||\omega^{[l]}||^2=\sum_{i=1}^{n^{[l]}}\sum_{j=1}^{n^{[l-1]}}(\omega^{[l]}_{ij})^2 ∣∣ω[l]∣∣2=i=1∑n[l]j=1∑n[l−1](ωij[l])2 其中 ∣ ∣ ω [ l ] ∣ ∣ 2 ||\omega^{[l]}||^2 ∣∣ω[l]∣∣2称为弗罗贝尼乌斯(Frobenius)范数。
使用L2 regularization,当λ很大时,w[l]≈0,意为将某些神经元权重趋于0,给忽略掉了,问题就从high variance变成了high bias了。 另外,假设激活函数是tanh函数。tanh函数的特点是在z接近零的区域,函数近似是线性的,而当|z|很大的时候,函数非线性且变化缓慢。当使用正则化,λ较大,即对权重w[l]的惩罚较大,w[l]减小。因为z[l]=w[l]a[l]+b[l]。当w[l]减小的时候,z[l]也会减小。则此时的z[l]分布在tanh函数的近似线性区域。那么这个神经元起的作用就相当于是线性回归(linear regression)。如果每个神经元对应的权重w[l]都比较小,那么整个神经网络模型相当于是多个linear regression的组合,即可看成一个linear network。得到的分类超平面就会比较简单,不会出现过拟合现象。
除了L2 regularization和dropout regularization之外,还有其它减少过拟合的方法。 1.增加训练样本数量。 例如图片识别问题中,可以对已有的图片进行水平翻转、垂直翻转、任意角度旋转、缩放或扩大等等。 2.early stopping。 一个神经网络模型随着迭代训练次数增加,train set error一般是单调减小的,而dev set error 先减小,之后又增大。 也就是说训练次数过多时,模型会对训练样本拟合的越来越好,但是对验证集拟合效果逐渐变差,即发生了过拟合。因此,迭代训练次数不是越多越好,可以通过train set error和dev set error随着迭代次数的变化趋势,选择合适的迭代次数,即early stopping。
Early stopping有其自身缺点。 机器学习训练模型有两个目标:一是选择一个算法来优化代价函数 J ( ω , b ) J(\omega,b) J(ω,b);二是防止过拟合。 这两个目标彼此对立的,即减小 J ( ω , b ) J(\omega,b) J(ω,b)的同时可能会造成过拟合,反之亦然。我们把这二者之间的关系称为正交化(orthogonalization)。 在深度学习中,我们可以同时减小Bias和Variance,构建最佳神经网络模型。但是,Early stopping提早停止了梯度下降,同时也就停止了优化代价函数 J ( ω , b ) J(\omega,b) J(ω,b)。与early stopping相比,L2 正则化可以实现“分而治之”的效果:迭代训练足够多,减小J,而且也能有效防止过拟合。 而L2 regularization的缺点之一是最优的正则化参数λ的选择比较复杂。对这一点来说,early stopping比较简单。 总的来说,L2 regularization更加常用一些。梯度消失和梯度爆炸(Vanishing and Exploding gradients):当训练一个 层数非常多的神经网络时,计算得到的梯度可能非常小或非常大,甚至是指数级别的减小或增大。这样会让训练过程变得非常困难。 *例如,假设一个多层的每层只包含两个神经元的深度神经网络模型,如下图所示:为了简化复杂度,便于分析,我们令各层的激活函数为线性函数,即 g ( Z ) = Z g(Z)=Z g(Z)=Z。且忽略各层常数项b的影响,令b全部为零。那么,该网络的预测输出 Y ^ \hat Y Y^为: Y ^ = W [ L ] W [ L − 1 ] W [ L − 2 ] … W [ 3 ] W [ 2 ] W [ 1 ] X \hat Y=W^{[L]}W^{[L-1]}W^{[L-2]}…W^{[3]}W^{[2]}W^{[1]}X Y^=W[L]W[L−1]W[L−2]…W[3]W[2]W[1]X
也就是说,如果各层权重W[l]都大于1或者都小于1,那么各层激活函数的输出将随着层数l的增加,呈指数型增大或减小。当层数很大时,出现数值爆炸或消失。
梯度检验用于检查验证反向传播过程中梯度下降算法是否正确。
梯度检查首先要做的是分别将 W [ 1 ] , b [ 1 ] , ⋯ , W [ L ] , b [ L ] W^{[1]},b^{[1]},⋯,W^{[L]},b^{[L]} W[1],b[1],⋯,W[L],b[L]这些矩阵构造成一维向量,然后将这些一维向量组合起来构成一个更大的一维向量θ。这样cost function J ( W [ 1 ] , b [ 1 ] , ⋯ , W [ L ] , b [ L ] ) J(W^{[1]},b^{[1]},⋯,W^{[L]},b^{[L]}) J(W[1],b[1],⋯,W[L],b[L])就可以表示成 J ( θ ) J(θ) J(θ)。
然后将反向传播过程通过梯度下降算法得到的 d W [ 1 ] , d b [ 1 ] , ⋯ , d W [ L ] , d b [ L ] dW^{[1]},db^{[1]},⋯,dW^{[L]},db^{[L]} dW[1],db[1],⋯,dW[L],db[L] 按照一样的顺序构造成一个一维向量 d θ dθ dθ。 d θ dθ dθ的维度与 θ θ θ一致。
接着利用 J ( θ ) J(θ) J(θ)对每个 θ i θ_i θi计算近似梯度,其值与反向传播算法得到的 d θ i dθ_i dθi相比较,检查是否一致。例如,对于第 i i i个元素,近似梯度为: d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , ⋯ , θ i + ε , ⋯ ) − J ( θ 1 , θ 2 , ⋯ , θ i + ε , ⋯ ) 2 ε dθ_{approx}[i]=\frac{J(θ_1,θ_2,⋯,θ_i+ε,⋯)−J(θ_1,θ_2,⋯,θ_i+ε,⋯)}{2ε} dθapprox[i]=2εJ(θ1,θ2,⋯,θi+ε,⋯)−J(θ1,θ2,⋯,θi+ε,⋯) 计算完所有 θ i θ_i θi的近似梯度后,可以计算 d θ a p p r o x 与 d θ dθ_{approx}与dθ dθapprox与dθ的欧式(Euclidean)距离来比较二者的相似度。公式为: ∣ ∣ d θ a p p r o x − d θ ∣ ∣ 2 ∣ ∣ d θ a p p r o x ∣ ∣ 2 + ∣ ∣ d θ ∣ ∣ 2 \frac{||dθ_{approx}-dθ||_2}{||dθ_{approx}||_2+||dθ||_2} ∣∣dθapprox∣∣2+∣∣dθ∣∣2∣∣dθapprox−dθ∣∣2 一般来说,如果欧氏距离越小,例如10−7,甚至更小,则表明 d θ a p p r o x 与 d θ dθ_{approx}与dθ dθapprox与dθ越接近。反之如果欧氏距离较大,例如10−5,则表明梯度计算可能出现问题,需要再次检查是否有bugs存在。如果欧氏距离很大,例如10−3,甚至更大,则表明 d θ a p p r o x 与 d θ dθ_{approx}与dθ dθapprox与dθ差别很大,梯度下降计算过程有bugs,需要仔细检查。