文章目录
- 1.1 训练、开发、测试集
- 1.2 偏差、方差
- 1.3 机器学习基础
- 1.4 正则化
- 1.5 为什么正则化可以减少过拟合?
- 1.6 dropout随机失活正则化
- 1.7 理解dropout
- 1.8 其他正则化方法
- 1.9 归一化输入
- 1.10 梯度消失和梯度爆炸
- 1.11 神经网络的权重初始化
- 1.12 梯度的数值逼近
- 1.13 梯度检验
- 1.14 关于梯度检验实现的注记
- 2.1 mini-batch 梯度下降法
- 2.2 理解mini-batch 梯度下降法
- 2.3 指数加权平均
- 2.4 理解指数加权平均
- 2.5 指数加权平均的偏差修正
- 2.6 动量梯度下降法 gradient descent with momentum
- 2.7 RMSprop
- 2.8 Adam优化算法(adaptive moment estimation)
- 2.9 学习率衰减
- 2.10 局部最优的问题
- 3.1 调试处理(tuning process)
- 3.2 为超参数选择合适的范围
- 3.3 超参数运用的实践(pandas vs caviar)
- 3.4 正则化网络的激活函数
- 3.5 将batch norm拟合进神经网络
- 3.6 batch norm为什么奏效?
- 3.7 测试时的batch norm
- 3.8 softmax回归
- 3.9 训练一个softmax分类器
- 3.10 深度学习框架
- 3.11 tensorflow
1.1 训练、开发、测试集
train set训练集 Dev set验证集 test set 测试集
小规模数据:训练集:其他 = 7:3
大数据时代(超百万数据):训练集占80%或者90%以上
验证集和测试集来自同一分布
如果只有训练集和验证集,那么验证集Dev set就是测试集test set
1.2 偏差、方差
train set error | 1% | 15% | 15% | 0.5% |
---|---|---|---|---|
dev set error | 11% | 16% | 30% | 1% |
high variance | high bias | high bias & high variance | low 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=1∑mL(y^(i),y(i))+2mλ∣∣w∣∣2+2mλb2(omit)L2regularization:∣∣w∣∣2=j=1∑nxwj2=wTwL1regularization:2mλj=1∑nx∣wj∣=2mλj=1∑nx∣∣w∣∣1
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=1∑mL(y^(i),y(i))+2mλ∣∣w[l]∣∣F22mλ∣∣w[l]∣∣F2=i=1∑n[l−1]j=1∑n[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=1∑mx(i),σ=m1i=1∑m(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]=∂θi∂Jcheck:∣∣dθapprox∣∣2+∣∣dθ∣∣2∣∣dθapprox−dθ∣∣2≈10−7great!
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=βVt−1+(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βVt−1+(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+ϵdbW方向斜率较小,dW较小,SdW较小,W的更新较大b方向斜率较大,db较大,Sdb较大,b的更新较小
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+decayrate∗epochnum1∗α0α0=0.2,decayrate=1
epoch | α \alpha α |
---|---|
1 | 0.1 |
2 | 0.067 |
3 | 0.05 |
4 | 0.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∗α0ortk∗α0(t是mini−batch的批次)离散衰减学习率
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,mini−batchsize
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[l−1]+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]=⎣⎢⎢⎡52−13⎦⎥⎥⎤,t=⎣⎢⎢⎡e5e2e−1e3⎦⎥⎥⎤g[l](z[l])=⎣⎢⎢⎢⎡e5+e2+e−1+e3e5e5+e2+e−1+e3e2e5+e2+e−1+e3e−1e5+e2+e−1+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))