吴恩达:改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning, Regularizatio)

1.1 训练、开发、测试集

train set训练集 Dev set验证集 test set 测试集

小规模数据:训练集:其他 = 7:3

大数据时代(超百万数据):训练集占80%或者90%以上

验证集和测试集来自同一分布

如果只有训练集和验证集,那么验证集Dev set就是测试集test set

1.2 偏差、方差

img

train set error1%15%15%0.5%
dev set error11%16%30%1%
high variancehigh biashigh bias & high variancelow bias & low variance
1.3 机器学习基础

high bias(train data problem) ——big network

high variance(dev set problem)——more data/regularization

1.4 正则化

m i n w , b J ( w , b ) J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∣ ∣ w ∣ ∣ 2 + λ 2 m b 2 ( o m i t ) L 2 r e g u l a r i z a t i o n : ∣ ∣ w ∣ ∣ 2 = ∑ j = 1 n x w j 2 = w T w L 1 r e g u l a r i z a t i o n : λ 2 m ∑ j = 1 n x ∣ w j ∣ = λ 2 m ∑ j = 1 n x ∣ ∣ w ∣ ∣ 1 min_{w,b} J(w,b)\\ J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}||w||^2+\frac{\lambda}{2m}b^2(omit)\\ L2 \quad regularization: \quad ||w||^2 =\sum_{j=1}^{nx}w_j^2 = w^Tw\\ L1\quad regularization:\quad \frac{\lambda}{2m}\sum_{j=1}^{nx}|w_j| = \frac{\lambda}{2m}\sum_{j=1}^{nx}||w||_1 minw,bJ(w,b)J(w,b)=m1i=1mL(y^(i),y(i))+2mλw2+2mλb2(omit)L2regularization:w2=j=1nxwj2=wTwL1regularization:2mλj=1nxwj=2mλj=1nxw1

J ( w [ 1 ] , b [ 1 ] , … … w [ l ] , b [ l ] ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∣ ∣ w [ l ] ∣ ∣ F 2 λ 2 m ∣ ∣ w [ l ] ∣ ∣ F 2 = ∑ i = 1 n [ l − 1 ] ∑ j = 1 n [ l ] ( w i j [ l ] ) 2 F r o b e n i u s n o r m 弗 罗 贝 尼 乌 斯 范 数 J(w^{[1]},b^{[1]},……w^{[l]},b^{[l]}) = \frac{1}{m}\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})+\frac{\lambda}{2m}||w^{[l]}||_F^2\\ \frac{\lambda}{2m}||w^{[l]}||_F^2 = \sum_{i=1}^{n^{[l-1]}}\sum_{j=1}^{n^{[l]}}(w_{ij}^{[l]})^2\\ Frobenius \quad norm 弗罗贝尼乌斯范数 J(w[1],b[1],w[l],b[l])=m1i=1mL(y^(i),y(i))+2mλw[l]F22mλw[l]F2=i=1n[l1]j=1n[l](wij[l])2Frobeniusnorm

1.5 为什么正则化可以减少过拟合?
1.6 dropout随机失活正则化

dropout:随机概率值作为每一层结点的存在概率,被删除的结点与之相关的进出路线全部删除,最后得到一个节点更少、规模更小的额网络。

#layer l = 3, keep-prob = 0.8
d3 = np.random.rand(a3.shape[0],a3.shape[1])<keep_prob
a3 = np.multiply(a3,d3)  #a3 *=d3
a3 /= keep-prob

inverted dropout 反向随机失活

随机失活应用于训练集train set,不适用于测试集test set,因为我们想要测试集的结果保持稳定。

1.7 理解dropout

如果你担心一些层比其它层更容易发生过拟合,那么你可以把这些层的keep-prob值设置地比其它层更低。缺点是为了参加交叉验证,你需要搜索更多的超级参数。

另一种方法是只在一些层用dropout,而在另一些层不用dropout。

dropout主要用在计算机视觉领域,因为没有足够多的数据,所以经常出现过拟合。

dropout的一大缺点在于代价函数J不再明确定义,每次迭代都会随机移除一些结点

1.8 其他正则化方法

增加训练集的简易方法(数据增强):翻转图片、随意更改并剪切

early stopping:提早停止训练神经网络

在这里插入图片描述

1.9 归一化输入

数据的标准化:
x ′ = x − μ σ μ = 1 m ∑ i = 1 m x ( i ) , σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 x' = \frac{x-\mu}{\sigma}\\ \mu = \frac{1}{m}\sum_{i=1}^{m}x^{(i)},\sigma = \frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-\mu)^2 x=σxμμ=m1i=1mx(i),σ=m1i=1m(x(i)μ)2
在这里插入图片描述
在这里插入图片描述

1.10 梯度消失和梯度爆炸
1.11 神经网络的权重初始化
1.12 梯度的数值逼近

g ( θ ) ≈ f ( θ + ϵ ) − f ( θ − ϵ ) 2 ϵ ( 双 边 公 差 ) O ( ϵ 2 ) g ( θ ) ≈ f ( θ + ϵ ) − f ( θ − ϵ ) ϵ ( 单 边 公 差 ) O ( ϵ ) g(\theta) \approx \frac{f(\theta+\epsilon)-f(\theta - \epsilon)}{2\epsilon} \quad(双边公差) O(\epsilon^2)\\ g(\theta) \approx \frac{f(\theta+\epsilon)-f(\theta - \epsilon)}{\epsilon} \quad(单边公差) O(\epsilon) g(θ)2ϵf(θ+ϵ)f(θϵ)()O(ϵ2)g(θ)ϵf(θ+ϵ)f(θϵ)()O(ϵ)

双边误差公式的结果比单边的更准确

1.13 梯度检验

f o r e a c h i : d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , … … , θ i + ϵ , … … ) − J ( θ 1 , θ 2 , … … , θ i − ϵ , … … ) 2 ϵ ≈ d θ [ i ] = ∂ J ∂ θ i c h e c k : ∣ ∣ d θ a p p r o x − d θ ∣ ∣ 2 ∣ ∣ d θ a p p r o x ∣ ∣ 2 + ∣ ∣ d θ ∣ ∣ 2 ≈ 1 0 − 7 g r e a t ! for \quad each \quad i:\\ d\theta_{approx}^{[i]} = \frac{J(\theta_1,\theta_2,……,\theta_i+\epsilon,……)-J(\theta_1,\theta_2,……,\theta_i-\epsilon,……)}{2\epsilon}\\ \approx d\theta^{[i]} = \frac{\partial J}{\partial \theta_i}\\ check:\frac{||d\theta_{approx}-d\theta||_2}{||d\theta_{approx}||_2+||d\theta||_2}\approx10^{-7} great! foreachi:dθapprox[i]=2ϵJ(θ1,θ2,,θi+ϵ,)J(θ1,θ2,,θiϵ,)dθ[i]=θiJcheck:dθapprox2+dθ2dθapproxdθ2107great!

1.14 关于梯度检验实现的注记

正则化 + 梯度检验

梯度检验和dropout不能同时使用

2.1 mini-batch 梯度下降法

5000000样本的训练集,分为1000个batch,每个batch有5000个样本。

每个epoch(代)都会遍历所有的样本一次(1000次batch),进行一次梯度下降,多次循环训练集需要多个epoch。

2.2 理解mini-batch 梯度下降法

if mini-batch size = m:batch gradient descent ( X { 1 } , Y { 1 } ) = ( X , Y ) (X^{\{1\}},Y^{\{1\}}) = (X,Y) (X{1},Y{1})=(X,Y)

训练一次的时间可能过长

if mini-batch size = 1:stochastic gradient descent ( X { 1 } , Y { 1 } ) = ( X ( 1 ) , Y ( 1 ) ) (X^{\{1\}},Y^{\{1\}}) = (X^{(1)},Y^{(1)}) (X{1},Y{1})=(X(1),Y(1))

但是效率过于低下

2.3 指数加权平均

V t = β V t − 1 + ( 1 − β ) θ t V_t = \beta V_{t-1}+(1-\beta)\theta_t Vt=βVt1+(1β)θt

2.4 理解指数加权平均

在这里插入图片描述

2.5 指数加权平均的偏差修正

V t = β V t − 1 + ( 1 − β ) θ t 1 − β t V_t = \frac{\beta V_{t-1}+(1-\beta)\theta_t}{1-\beta^t} Vt=1βtβVt1+(1β)θt

主要是修正初期的误差

2.6 动量梯度下降法 gradient descent with momentum

问题:纵轴波动过大,横轴前进较小

目标:纵轴降低波动,横轴加速前进

类比:碗里面的小球获得加速度而加速前进

在这里插入图片描述

2.7 RMSprop

S d W = β S d W + ( 1 − β ) ( d W ) 2 S d b = β S d b + ( 1 − β ) ( d b ) 2 W : = W − α d W S d W + ϵ b : = b − α d b S d b + ϵ W 方 向 斜 率 较 小 , d W 较 小 , S d W 较 小 , W 的 更 新 较 大 b 方 向 斜 率 较 大 , d b 较 大 , S d b 较 大 , b 的 更 新 较 小 S_{dW} = \beta S_{dW} + (1-\beta)(dW)^2\\ S_{db} = \beta S_{db} + (1-\beta)(db)^2\\ W:=W-\alpha \frac{dW}{\sqrt{S_{dW}+\epsilon}}\\ b:=b-\alpha \frac{db}{\sqrt{S_{db}+\epsilon}}\\ W方向斜率较小,dW较小,S_{dW}较小,W的更新较大\\ b方向斜率较大,db较大,S_{db}较大,b的更新较小\\ SdW=βSdW+(1β)(dW)2Sdb=βSdb+(1β)(db)2W:=WαSdW+ϵ dWb:=bαSdb+ϵ dbWdWSdWWbdbSdbb

2.8 Adam优化算法(adaptive moment estimation)

Adam算法结合了momentum算法和RMSprop算法
V d W = 0 , V d b = 0 , S d W = 0 , S d b = 0 V d W = β 1 V d W + ( 1 − β 1 ) d W V d b = β 1 V d b + ( 1 − β 1 ) d b m o m e n t u m S d W = β 2 S d W + ( 1 − β 2 ) ( d W ) 2 S d b = β 2 S d b + ( 1 − β 2 ) ( d b ) 2 R M S V d W c o r r e c t = V d W 1 − β 1 t , V d b c o r r e c t = V d b 1 − β 1 t S d W c o r r e c t = S d W 1 − β 2 t , S d b c o r r e c t = S d b 1 − β 2 t W : = W − α V d W c o r r e c t S d W c o r r e c t + ϵ b : = b − α V d b c o r r e c t S d b c o r r e c t + ϵ V_{dW} = 0,V_{db} = 0,S_{dW} = 0,S_{db} = 0\\ V_{dW} = \beta_1 V_{dW} + (1-\beta_1)dW\\ V_{db} = \beta_1 V_{db} + (1-\beta_1)db\quad momentum \\S_{dW} = \beta_2 S_{dW} + (1-\beta_2)(dW)^2\\ S_{db} = \beta_2 S_{db} + (1-\beta_2)(db)^2\quad RMS\\ V_{dW}^{correct} = \frac{V_{dW}}{1-\beta_1^t}, V_{db}^{correct} = \frac{V_{db}}{1-\beta_1^t}\\ S_{dW}^{correct} = \frac{S_{dW}}{1-\beta_2^t}, S_{db}^{correct} = \frac{S_{db}}{1-\beta_2^t}\\ W:=W-\alpha \frac{V_{dW}^{correct}}{\sqrt{S_{dW}^{correct}+\epsilon}}\\ b:=b-\alpha \frac{V_{db}^{correct}}{\sqrt{S_{db}^{correct}+\epsilon}}\\ VdW=0,Vdb=0,SdW=0,Sdb=0VdW=β1VdW+(1β1)dWVdb=β1Vdb+(1β1)dbmomentumSdW=β2SdW+(1β2)(dW)2Sdb=β2Sdb+(1β2)(db)2RMSVdWcorrect=1β1tVdW,Vdbcorrect=1β1tVdbSdWcorrect=1β2tSdW,Sdbcorrect=1β2tSdbW:=WαSdWcorrect+ϵ VdWcorrectb:=bαSdbcorrect+ϵ Vdbcorrect

2.9 学习率衰减

1 epoch = 1 pass through data
α = 1 1 + d e c a y r a t e ∗ e p o c h n u m ∗ α 0 α 0 = 0.2 , d e c a y r a t e = 1 \alpha = \frac{1}{1+decay_{rate}*epoch_{num}}*\alpha_0\\ \alpha_0 = 0.2,decay_{rate} = 1 α=1+decayrateepochnum1α0α0=0.2,decayrate=1

epoch α \alpha α
10.1
20.067
30.05
40.04

其他衰减方法
α = 0.9 5 e p o c h n u m α 0 α = α 0 e p o c h n u m ∗ α 0 o r k t ∗ α 0 ( t 是 m i n i − b a t c h 的 批 次 ) 离 散 衰 减 学 习 率 \alpha = 0.95^{epoch_{num}}\alpha_0\\ \alpha = \frac{\alpha_0}{epoch_{num}}*\alpha_0 \quad or \frac{k}{\sqrt{t}}*\alpha_0(t是mini-batch的批次)\\ 离散衰减学习率 α=0.95epochnumα0α=epochnumα0α0ort kα0tminibatch

2.10 局部最优的问题

高维度空间更可能存在的是鞍点,而不是局部最优。

平稳段(导数接近于0的区域)的学习率会很慢

3.1 调试处理(tuning process)

超参数调节:hyperparameters
α , β , β 1 , β 2 , l a y e r s , h i d d e n u , l e a r n i n g d e c a y r a t e , m i n i − b a t c h s i z e \alpha,\beta,\beta_1,\beta_2,layers,hidden \quad u,learning \quad decay\quad rate,mini-batch \quad size α,β,β1,β2,layers,hiddenu,learningdecayrate,minibatchsize

3.2 为超参数选择合适的范围

β \beta β:从粗到细的取值方法、不均匀的取值方法(越接近1取值越多)

3.3 超参数运用的实践(pandas vs caviar)

在这里插入图片描述

3.4 正则化网络的激活函数

使隐藏单元的均值和方差标准化

3.5 将batch norm拟合进神经网络
3.6 batch norm为什么奏效?

首先在于归一化(均值为0,方差为1)在做类似的工作

其次可以使权重比你的网络更滞后或更深层

covariate shift:使你的数据改变分布

batch norm限制了在前层的参数更新会影响数值分布的程度(均值和方差是可控的),减少了输入值改变的问题,减弱了前层参数的作用与后层参数的作用之间的联系。使得不同层之间稍稍独立于其它层,这有助于加速整个网络的学习。

batch norm还有轻微的正则化效果,类似于dropout,因为给隐藏单元添加了噪音,这迫使后部单元不过分依赖任何一个隐藏单元。因为噪音很小,所以是轻微的正则化效果,可以将batch norm和dropout两者共同使用。

通过应用较大的mini batch size,减少了噪音,因此减少了正则化效果。

3.7 测试时的batch norm

在训练时, μ \mu μ σ \sigma σ是在整个mini-batch上计算出来的,多个mini-batch自然会有多个 μ \mu μ σ \sigma σ

测试时,需要逐一处理样本,只需要一个 μ \mu μ σ \sigma σ,此时选择指数加权平均等方法估算

使用batch归一化,能够训练更深的网络,让你的算法运行速度更快。
在这里插入图片描述

3.8 softmax回归

softmax回归:logistic回归的一般形式,多分类识别,将logistic回归的两类拓展到多类
z [ l ] = w [ l ] a [ l − 1 ] + b [ l ] a c t i v a t i o n f u n c t i o n : t = e z [ l ] a i [ l ] = t i ∑ i t i z^{[l]} = w^{[l]}a^{[l-1]}+b^{[l]}\\ activation\quad function:t = e^{z^{[l]}}\\ a^{[l]}_i = \frac{t_i}{\sum_{i}t_i} z[l]=w[l]a[l1]+b[l]activationfunction:t=ez[l]ai[l]=ititi
最后输出的向量和为1,代表不同输出结果的概率大小。

softmax分类器在没有隐藏层的情况下,有类似线性的决策边界,但可以有超过两个分类

在这里插入图片描述

3.9 训练一个softmax分类器

z [ l ] = [ 5 2 − 1 3 ] , t = [ e 5 e 2 e − 1 e 3 ] g [ l ] ( z [ l ] ) = [ e 5 e 5 + e 2 + e − 1 + e 3 e 2 e 5 + e 2 + e − 1 + e 3 e − 1 e 5 + e 2 + e − 1 + e 3 e 3 e 5 + e 2 + e − 1 + e 3 ] = [ 0.842 0.042 0.002 0.114 ] z^{[l]} = \left[\begin{array}{cc}5\\2\\-1\\3\end{array}\right],t = \left[\begin{array}{cc}e^5\\e^2\\e^{-1}\\e^3\end{array}\right]\\ g^{[l]}(z^{[l]}) = \left[\begin{array}{cc}\frac{e^5}{e^5+e^2+e^{-1}+e^3}\\\frac{e^2}{e^5+e^2+e^{-1}+e^3}\\\frac{e^{-1}}{e^5+e^2+e^{-1}+e^3}\\\frac{e^3}{e^5+e^2+e^{-1}+e^3}\end{array}\right] = \left[\begin{array}{cc}0.842\\0.042\\0.002\\0.114\end{array}\right] z[l]=5213,t=e5e2e1e3g[l](z[l])=e5+e2+e1+e3e5e5+e2+e1+e3e2e5+e2+e1+e3e1e5+e2+e1+e3e3=0.8420.0420.0020.114

hard max:[1 0 0 0] (z最大的元素输出为1,其他元素输出为0)

3.10 深度学习框架

寻找合适的深度学习框架:易于编程、运行速度快、开源且良好的管理

3.11 tensorflow
import numpy as np
import tensorflow as tf

coefficients = np.array([[1],[-20],[25]])

w = tf.Variable([0],dtrpe = tf.float32)
x = tf.placeholder(tf.float32,[3,1])
cost = x[0][0]*w**2 + x[1][0]*w + x[2][0]
train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
init = tf.global_variables_initializer()
session = tf.Session()  #with tf.Session() as session:
session.run(init)			#session.run(init)
print(session.run(w))		#print(session.run(w))

for i in range(1000):
    session.run(train,feed_dict={x:coefficients})
print(session.run(w))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cachel wood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值