【深度学习】(二) 优化算法

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]=m1i=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]=m1i=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)=m1i=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[l1](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]=(1mαλ)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]=(1mαλ)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])<keepprob

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]/=keepprob

为什么 dropout 能减少过拟合

正则化 λ \lambda λ 设置得足够大,权重矩阵 W W W 被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响,使得模型更加简单。

k e e p − p r o b keep-prob keepprob 的概率随机失活一部分神经单元,随机消除一部分神经单元的影响,起到了类似于 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[l1]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[l1]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=βvt1+(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+decayrateepochnum1

此处 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 minibatchsize

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} ϵ=108

6. 尝试超参数时要选择合适的尺度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值