1. 归一化
将输入归一化成 μ = 0 , σ 2 = 1 \mu = 0,\sigma^2 = 1 μ=0,σ2=1 的一组数据
μ [ l ] = 1 m ∑ i = 0 m z [ l ] ( i ) \mu^{[l]} = \frac{1}{m}\sum_{i=0}^mz^{[l](i)} μ[l]=m1∑i=0mz[l](i)
σ 2 [ l ] = 1 m ∑ i = 0 m ( z [ l ] ( i ) − μ [ l ] ) 2 \sigma^{2[l]} = \frac{1}{m}\sum_{i=0}^m(z^{[l](i)}-\mu^{[l]})^2 σ2[l]=m1∑i=0m(z[l](i)−μ[l])2
z n o r m [ l ] = z [ l ] ( i ) − μ [ l ] σ 2 [ l ] + ϵ z_{norm}^{[l]} = \frac{z^{[l](i)}-\mu^{[l]}}{\sqrt{\sigma^{2[l]} + \epsilon}} znorm[l]=σ2[l]+ϵz[l](i)−μ[l]
z [ l ] ~ = γ z n o r m [ l ] + β \widetilde{z^{[l]}} = \gamma z_{norm}^{[l]} + \beta z[l] =γznorm[l]+β
此处 γ , β \gamma,\beta γ,β 都是参数而非超参数,作用在于可以随意设置 z [ l ] ~ \widetilde{z^{[l]}} z[l] 的平均值。
2. 正则化
2.1 L2 正则化
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ , y ) + λ 2 m ∥ w [ l ] ∥ F 2 J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\widehat{y}, y) + \frac{\lambda}{2m}\|w^{[l]}\|_F^2 J(w,b)=m1∑i=1mL(y ,y)+2mλ∥w[l]∥F2
∥ w [ l ] ∥ F 2 = ∑ i = 0 n [ l ] ∑ j = 0 n [ l − 1 ] ( w i j ) 2 \|w^{[l]}\|_F^2 = \sum_{i=0}^{n[l]}\sum_{j=0}^{n[l-1]}(w_{ij})^2 ∥w[l]∥F2=∑i=0n[l]∑j=0n[l−1](wij)2
W [ l ] = ( 1 − α λ m ) W [ l ] − α d W [ l ] W^{[l]} = (1-\frac{\alpha\lambda}{m})W^{[l]} - \alpha dW^{[l]} W[l]=(1−mαλ)W[l]−αdW[l]
b [ l ] = ( 1 − α λ m ) b [ l ] − α d b [ l ] b^{[l]} = (1-\frac{\alpha\lambda}{m})b^{[l]} - \alpha db^{[l]} b[l]=(1−mαλ)b[l]−αdb[l]
为什么 L2 正则化能减少过拟合
正则化 λ \lambda λ 设置得足够大,权重矩阵 W W W 被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响,使得模型更加简单。
2.2 dropout 正则化
d [ l ] = n p . r a n d o m . r a n d ( a [ l ] . s h a p e [ 0 ] , a [ l ] . s h a p e [ 1 ] ) < k e e p − p r o b d^{[l]} = np.random.rand(a^{[l]}.shape[0], a^{[l]}.shape[1]) < keep-prob d[l]=np.random.rand(a[l].shape[0],a[l].shape[1])<keep−prob
a [ l ] = n p . m u l t i p l y ( a [ l ] , d [ l ] ) a^{[l]} = np.multiply(a^{[l]}, d^{[l]}) a[l]=np.multiply(a[l],d[l])
a [ l ] / = k e e p − p r o b a^{[l]} /= keep-prob a[l]/=keep−prob
为什么 dropout 能减少过拟合
正则化 λ \lambda λ 设置得足够大,权重矩阵 W W W 被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响,使得模型更加简单。
以 k e e p − p r o b keep-prob keep−prob 的概率随机失活一部分神经单元,随机消除一部分神经单元的影响,起到了类似于 L2 正则化的影响。
在测试阶段不使用随机失活。
3. 参数初始化
z = w 1 x 1 + w 2 x 2 + … … + w n x n z = w_1x_1 + w_2x_2 + …… + w_nx_n z=w1x1+w2x2+……+wnxn
为了解决梯度爆炸或梯度消失,你希望 n n n 越大, W W W 越小
先随机初始化参数矩阵
$W^{[l]} = np.random.rand(n^{[l]}, n^{[l-1]}) $
接着根据不同的激活函数处理参数矩阵
s i g m o d / t a n H sigmod/tanH sigmod/tanH : W [ l ] = W [ l ] ∗ 1 n [ l − 1 ] W^{[l]} = W^{[l]} * \sqrt{\frac{1}{n^{[l-1]}}} W[l]=W[l]∗n[l−1]1
R e L U ReLU ReLU : W [ l ] = W [ l ] ∗ 2 n [ l − 1 ] W^{[l]} = W^{[l]} * \sqrt{\frac{2}{n^{[l-1]}}} W[l]=W[l]∗n[l−1]2
4. 优化算法
4.1 mini-batch 梯度下降
将样本均分,分成一个个 mini-batch,每个 mini-batch 的个数最好是 2 的次方个数,例如 64,128,256,512……
采用 mini-batch 梯度下降会使得损失函数并非严格递减,但总体趋势是递减的。
4.2 动量梯度下降算法
指数加权平均数
v 0 = 0 v_0 = 0 v0=0
v 1 = β v 0 + ( 1 − β ) θ 1 v_1 = \beta v_0 + (1-\beta)\theta_1 v1=βv0+(1−β)θ1
……
v t = β v t − 1 + ( 1 − β ) v t v_t = \beta v_{t-1} + (1-\beta)v_t vt=βvt−1+(1−β)vt
动量梯度算法,从坐标轴的角度老看,就是减少 b b b 方向上的波动,加速 W W W 方向上的波动,使得损失加速降低。以下公式均省略了层数。
v v v 都初始化为 0。
v d W = β v d W + ( 1 − β ) d W v_{dW} = \beta v_{dW} + (1-\beta)dW vdW=βvdW+(1−β)dW
v d b = β v d b + ( 1 − β ) d b v_{db} = \beta v_{db} + (1-\beta)db vdb=βvdb+(1−β)db
$ W = W - \alpha v_{dW}$
$ b = b - \alpha v_{db}$
4.3 RMSprop 算法
S d W = β S d W + ( 1 − β ) d W 2 S_{dW} = \beta S_{dW} + (1-\beta)dW^2 SdW=βSdW+(1−β)dW2
S d b = β S d b + ( 1 − β ) d b 2 S_{db} = \beta S_{db} + (1-\beta)db^2 Sdb=βSdb+(1−β)db2
$ W = W - \alpha \frac{dW}{\sqrt{S_{dW}}}$
$ b = b - \alpha \frac{db}{\sqrt{S_{db}}}$
4.4 Adam 算法
动量梯度下降+RMSprop
v d W = β 1 v d W + ( 1 − β 1 ) d W v_{dW} = \beta_1 v_{dW} + (1-\beta_1)dW vdW=β1vdW+(1−β1)dW
v d b = β 1 v d b + ( 1 − β 1 ) d b v_{db} = \beta_1 v_{db} + (1-\beta_1)db vdb=β1vdb+(1−β1)db
S d W = β 2 S d W + ( 1 − β 2 ) d W 2 S_{dW} = \beta_2 S_{dW} + (1-\beta_2)dW^2 SdW=β2SdW+(1−β2)dW2
S d b = β 2 S d b + ( 1 − β 2 ) d b 2 S_{db} = \beta_2 S_{db} + (1-\beta_2)db^2 Sdb=β2Sdb+(1−β2)db2
$ W = W - \alpha \frac{v_{dW}}{\sqrt{S_{dW} + \epsilon}}$
$ b = b - \alpha \frac{v_{db}}{\sqrt{S_{db} + \epsilon}}$
v , S v, S v,S 都初始化为 0。
4.5 学习率衰减算法
α = α 0 1 1 + d e c a y r a t e ∗ e p o c h − n u m \alpha = \alpha_0 \frac{1}{1+decayrate*epoch-num} α=α01+decayrate∗epoch−num1
此处 d e c a y r a t e decayrate decayrate 也是超参数
5. 超参数有哪些
5.1 fisrt
α \alpha α
5.2 second
β \beta β = 0.9
#hidden units
m i n i − b a t c h − s i z e mini-batch-size mini−batch−size
5.3 third
#layers
d e c a y r a t e decayrate decayrate
5.4 last
β 1 = 0.9 \beta_1 = 0.9 β1=0.9
β 2 = 0.999 \beta_2 = 0.999 β2=0.999
ϵ = 1 0 − 8 \epsilon = 10^{-8} ϵ=10−8