【第一章】神经网络基础
目录:
在上一节内容当中,我们主要介绍了神经网络是个什么“东西”,可以干什么,怎么干、以及怎样构建自己的神经网络。具体内容可以参见上一篇博客
第二节、 改善深层神经网络:超参数调试、正则化以及优化。
本篇内容主要介绍了超参数怎么调试,batch正则化,Adam梯度下降法,等一系列优化原始神经网络的工具。
- 目录
- 1.深度学习的实用层面
- 2.优化算法
- 3.超参数调试、bathc正则化
1.深度学习的实用层面
1.1 训练_验证_测试集
在神经网络当中,存在着许多类似于隐藏层层数,隐藏层单元数,学习率等超参数,对于这些超参数可能某些深度学习的专家也不能一步到位选出最佳的方法,所以需要通过迭代对不同的超参数,模型进行选择。所以们把数据分为训练集、验证集、测试集;训练集是实现对神经网络的训练和参数的更新,验证集是对模型超参数或者网络本身进行调试的集合,测试即为对模型的无偏估计。
在划分数据集的时候,依据其每个数据集的功能进行划分,在小数据的时候我们通常按照7/3或者7/2/2的比例划分,而大数据我们完全没有必要留过多的数据给验证集和测试集。
\ | dataSet | training set | dev set | test set | prop |
---|---|---|---|---|---|
pervioue era | 100 | 70\60 | 30\20 | -\20 | 7/3 6/2/2 |
Big data | 1000000 | 980000 | 10000 | 10000 | 98\2\2 or even 99.5\0.25\0.25 |
现在的时代为大数据时代,训练数据集可能通过“网页抓取”等现代策略,但是验证测试集可能只是用户自己上传的数据。所以有训练集和验证集、测试集可能并不是来自与同一分布,这种情况下,我们尽量使验证集和测试集保持同一分布(经验法则)。
测试集的目的是对神经网络模型进行无偏估计,但并不是每一种模型都需要无偏估计,所以有的模型可能并没有测试集,这个时候会把验证集称为测试集或训练验证集。其实更准确应该称为“验证测试集”。所以在对数据的处理时应该明白数据集的目的是为了什么。
1.2 偏差和方差
偏差:这里指的是模型在训练集上的误差;
方差:指的是模型在验证集上的误差。
如果一个模型过于“简单”或者训练度不够,那么可能造成模型在训练集上的误差过大也就是说偏差过大,称这种现象为“欠拟合”。如果模型一直追求小偏差,那么虽然在训练集上表现良好,但是可能在测试集上误差过大,即方差过大,称这种现象为“过拟合”。
同时,我们也把模型在测试集上的表现能力称为泛化能力。
方差偏差和误差关系:
Train set error | Dev set error | bias/var |
---|---|---|
1% | 11% | high variance |
15% | 16% | high bias |
15% | 30% | high variance and high bias |
0.5% | 1% | low variance and low bias |
由上表我们可知方差和偏差的关系,如果偏差太大可能造成“欠拟合”,如果方差太大可能出现“过拟合”,但是在上表中训练误差15%,测试误差16%,虽然是高误差和高方差,但是不一定是不好的情况,因为在模型的训练中存在着最优误差问题(optimal error)。(有可能模型需要的误差就是15%)。针对某些实际问题可能并不需要过于精确的误差。
1.3 机器学习基础
在机器学习过程中偏差和方差问题是我们在训练模型的时候最先需要考虑的问题。具体的流程如下图所示:
在机器学习早期,方差和偏差永远是一组对立关系,其中一个上涨则另一个下降,一个下降,则另一个上涨。而现在由于技术的发展我们可以通过正则化、更大的数据或更大的网络,尽力的做到两者都小。
1.4 正则化
1.4.1简介
神经网络模型为了避免过拟合,可以通过增加数据的方法减小误差,但是数据通常不是足够的或者廉价的,所以我们需要另外一种既可以避免过拟合的方法——正则化(regularization).
我们依然通过logistics回归为例来理解正则化:
参
数
:
w
∈
R
[
n
x
]
,
b
∈
R
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
i
,
y
(
i
)
)
+
λ
2
m
∣
∣
w
∣
∣
2
2
其
中
L
2
范
数
:
∣
∣
w
∣
∣
2
2
=
∑
j
=
1
2
=
w
T
w
通
过
这
种
方
式
正
则
化
,
因
为
引
入
了
L
2
范
数
,
所
以
称
为
L
2
正
则
化
。
代
价
函
数
:
J
(
w
[
1
]
,
b
[
1
]
,
.
.
.
,
w
[
L
]
,
b
[
L
]
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
+
λ
2
m
∑
l
=
1
L
∣
∣
W
(
l
)
∣
∣
2
2
∣
∣
w
∣
∣
2
2
又
称
为
“
F
o
r
b
e
i
n
u
s
n
o
r
m
"
现
在
我
们
用
∣
∣
w
∣
∣
F
2
代
替
∣
∣
w
∣
∣
2
2
更
新
方
程
:
d
w
[
L
]
=
(
f
r
o
m
b
a
c
k
p
r
o
p
)
+
λ
m
w
[
L
]
w
[
L
]
=
w
[
L
]
−
α
d
w
[
L
]
=
w
[
l
]
−
α
[
(
f
r
o
m
b
a
c
k
p
r
o
b
)
+
λ
m
w
[
l
]
]
=
w
[
l
]
−
α
λ
m
w
[
l
]
−
α
(
f
r
o
m
b
a
c
k
p
r
o
p
)
=
(
1
−
α
λ
m
)
w
[
l
]
−
α
(
f
r
o
m
b
a
c
k
p
r
o
p
)
参数:w \in R^{[n_x]} ,b \in R \\ {}\\ J(w,b) = \frac{1}{m} \sum_{i=1}^m L(\hat{y}^i,y^{(i)}) + \frac{\lambda}{2m}||w||_2^2 \\ {}\\ 其中L_2范数:||w||_2^2=\sum_{j=1}^2=w^Tw\\ {}\\ 通过这种方式正则化,因为引入了L_2范数,所以称为L_2正则化。\\ {}\\ 代价函数:\\ {}\\ J(w^{[1]},b^{[1]},...,w^{[L]},b^{[L]})=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum_{l=1}^{L}||W^{(l)}||_2^2\\ {}\\ ||w||_2^2又称为“Forbeinus \, norm"\\ {}\\现在我们用||w||_F^2代替||w||_2^2\\ {}\\ 更新方程:\\ {}\\ dw^{[L]}=(from \ backprop)+\frac{\lambda}{m}w^{[L]}\\ {}\\ \begin{aligned} w^{[L]} &=w^{[L]}-\alpha dw^{[L]}\\ & = w^{[l]}-\alpha[(from backprob)+\frac{\lambda}{m}w^{[l]}]\\ & = w^{[l]}-\alpha\frac{\lambda}{m}w^{[l]}-\alpha (from backprop)\\ & = (1-\alpha\frac{\lambda}{m})w^{[l]}-\alpha (from backprop)\\ {}\\ \end{aligned}
参数:w∈R[nx],b∈RJ(w,b)=m1i=1∑mL(y^i,y(i))+2mλ∣∣w∣∣22其中L2范数:∣∣w∣∣22=j=1∑2=wTw通过这种方式正则化,因为引入了L2范数,所以称为L2正则化。代价函数:J(w[1],b[1],...,w[L],b[L])=m1i=1∑mL(y^(i),y(i))+2mλl=1∑L∣∣W(l)∣∣22∣∣w∣∣22又称为“Forbeinusnorm"现在我们用∣∣w∣∣F2代替∣∣w∣∣22更新方程:dw[L]=(from backprop)+mλw[L]w[L]=w[L]−αdw[L]=w[l]−α[(frombackprob)+mλw[l]]=w[l]−αmλw[l]−α(frombackprop)=(1−αmλ)w[l]−α(frombackprop)
根据上面的公式可以看出另外一种理解就是正则化的原理其实就是在减轻“w”的负担,所以L_2正则化有时也称为“权重衰减”
1.4.2 理解L2正则化
- 理解1
对 于 某 一 层 的 代 价 函 数 J ( w [ l ] , b [ l ] ) = 1 m ∑ i = 1 m L ( y ^ i , y ( i ) ) + λ 2 m ∣ ∣ w ∣ ∣ F 2 由 代 价 函 数 可 知 , 我 们 的 目 的 是 需 要 减 小 J , 当 α 设 置 的 非 常 大 的 时 候 , 这 个 时 候 权 重 w [ l ] 就 会 “ 被 逼 ” 的 非 常 小 , 即 削 弱 了 该 层 的 作 用 , 从 而 整 个 神 经 网 络 也 就 被 简 化 对于某一层的代价函数\\ {}\\ J(w^{[l]},b^{[l]}) = \frac{1}{m} \sum_{i=1}^m L(\hat{y}^i,y^{(i)}) + \frac{\lambda}{2m}||w||_F^2\\ {}\\ 由代价函数可知,我们的目的是需要减小J,当\alpha 设置的非常大的时候,\\这个时候权重w^{[l]}就会“被逼”的非常小,即削弱了该层的作用,从而整个神经网络也就被简化 对于某一层的代价函数J(w[l],b[l])=m1i=1∑mL(y^i,y(i))+2mλ∣∣w∣∣F2由代价函数可知,我们的目的是需要减小J,当α设置的非常大的时候,这个时候权重w[l]就会“被逼”的非常小,即削弱了该层的作用,从而整个神经网络也就被简化 - 理解2
假设激活函数为双曲正切函数。
g
(
z
)
=
t
a
n
h
(
z
)
λ
↑
w
[
l
]
↓
z
[
l
]
=
w
[
l
]
a
[
l
−
1
]
+
b
[
l
]
g(z)=tanh(z)\\ {}\\ \lambda \uparrow \ w^{[l]} \downarrow \\ {}\\ z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}\\
g(z)=tanh(z)λ↑ w[l]↓z[l]=w[l]a[l−1]+b[l]
当lambda值一直增大时,w的值就会缩小,而导致z的范围就会缩小,一直到原点附近,由图像可知,tanh在原点附近接近线性函数,从而失去非线性映射的作用,所以神经网络模型被简化。
1.4.3dropout 正则化
dropout正则化的作用是使神经网络中的神经元随机失活,即随机遍历所有的节点,然后以某种概率消除神经网络模型中神经元。
inverted dropout(反向随机失活)
现在我们以单层神经网络为例,来学习droupout的工作原理。
假
设
L
=
3
k
e
e
p
−
p
r
o
b
=
0.8
(
以
0.2
的
概
率
随
机
消
除
节
点
)
d
3
=
n
p
.
r
a
n
d
o
m
.
r
a
n
d
(
a
3.
s
h
a
p
e
[
0
]
,
a
3.
s
h
a
p
e
[
1
]
)
<
k
e
e
p
−
p
r
o
b
d
3
=
n
p
.
m
u
l
t
i
p
l
y
(
a
3
,
d
3
)
a
3
=
a
3
/
k
e
e
p
−
p
r
o
b
假设L=3\\ {}\\ keep-prob = 0.8 (以0.2的概率随机消除节点)\\ {}\\ d3 = np.random.rand(a3.shape[0],a3.shape[1])<keep-prob\\ {}\\ d3 = np.multiply(a3,d3) \\ {}\\ a3 = a3 /\ keep-prob
假设L=3keep−prob=0.8(以0.2的概率随机消除节点)d3=np.random.rand(a3.shape[0],a3.shape[1])<keep−probd3=np.multiply(a3,d3)a3=a3/ keep−prob
d3为一个0,1矩阵,a3乘以d3即按照0.2的概率随机的衰减参数,最后a3除以0.8是为了弥补期望的损失,因此测试集将不再需要进行dropout.
1.4.4 其他正则化方法
(1) Data augmentation (数据扩增)
正则化可以通过怎加数据集来避免,有时候我们的数据不是足够的多,但是我们又想增加数据怎么办?我们可以自己造!我们还是假设有一个判断图片是否是猫的模型,我们可以通过把一张猫的图片进行旋转、放大、放大旋转,这样我们的成本相当于没有增加,但是训练集却增加了几倍。我们把这种方法称为数据扩增。
(2) Early stopping
Early stopping 通过名字即可了解,就是提前阻止迭代,我们在迭代的同时观察训练集误差和测试集误差,在迭代最开始的时候权重基本为0,随着权重的增加,训练集误差逐渐减小,测试集误差也在逐渐减小,而测试误差减小到一定程度由于过拟合,变得再次增加,从而两条线出现了分歧,所以通过观察权重的一个范数的大小使迭代提前结束,来实现阻止模型的过拟合。但是这种方法存在着缺点,因为它不能同时解决以下两种问题:
- optimal error
- over fitting
使用该方法阻止过拟合,因为同时考虑验证集和训练集的误差,当我们要求optimal error是非常小的但是,当误差非常小的时候又会出现过拟合问题,所以不能同时满足最优误差和过拟合问题。因为不能单独做处理某一个问题,使得某些细节会变得复杂。
1.5 归一化
如果训练集有多个特征需要输入,特征之间可能存在量级的不统一,给模型的训练增加许多困难。为了避免这种问题,在特征输入之前我们首先进行数据归一化处理(Normalizing training sets).
假
设
训
练
集
有
两
个
特
征
输
入
X
=
{
x
1
x
2
}
μ
=
1
m
∑
i
=
1
m
x
(
i
)
x
=
x
−
μ
σ
2
=
1
m
∑
(
i
=
1
)
m
x
(
i
)
2
x
=
x
/
σ
2
假设训练集有两个特征输入 X= \left\{ \begin{matrix} x_1 \\ x_2 \end{matrix}\right\}\\ {}\\ \mu = \frac{1}{m}\sum_{i=1}^{m}x^{(i)}\\ {}\\ x = x-\mu\\ {}\\ \sigma^2 = \frac{1}{m}\sum_{(i=1)}^m x^{(i)2}\\ {}\\ x = x /\ \sigma^2
假设训练集有两个特征输入X={x1x2}μ=m1i=1∑mx(i)x=x−μσ2=m1(i=1)∑mx(i)2x=x/ σ2
例:以logist回归为例
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
w
1
:
x
1
:
1
−
1000
w
2
:
x
2
:
0
−
1
J(w,b)=\frac{1}{m} \sum_{i=1}^{m}L(\hat{y}^{(i)},y^{(i)})\\ {}\\ w_1: \ x_1: 1-1000\\ {}\\ w_2:\ x_2:0-1
J(w,b)=m1i=1∑mL(y^(i),y(i))w1: x1:1−1000w2: x2:0−1
如果数据未进行归一化,因为w是一个高维向量,但是每个输入特征的量级相差很大,所以学习率就会选择很小,而这样训练的时间会变的非常长,而归一化后就可选一个较大学习率,使得模型更快的到达最优点。
1.6 神经网络的梯度
1.6.1 梯度消失与梯度爆炸
通
过
以
上
神
经
网
络
举
例
:
假
设
g
(
z
)
=
z
(
线
性
激
活
函
数
)
;
b
[
l
]
=
0
y
^
=
w
[
l
]
w
[
l
−
1
]
.
.
.
w
[
2
]
w
[
l
]
X
Z
[
1
]
=
w
[
1
]
X
a
[
l
]
=
g
(
Z
[
l
]
)
=
Z
[
l
]
a
[
2
]
=
g
(
Z
[
1
]
)
=
g
(
w
[
2
]
a
[
1
]
)
.
.
.
如
果
:
W
[
L
]
=
{
1.5
0
0
1.5
}
W
[
L
]
=
W
[
L
−
1
]
=
.
.
.
=
W
[
1
]
则
y
^
=
w
[
L
]
{
1.5
0
0
1.5
}
L
−
1
X
{
1.5
0
0
1.5
}
L
X
=
{
1.
5
L
0
0
1.
5
L
}
通过以上神经网络举例:\\ {}\\ 假设 g(z)=z (线性激活函数);b^{[l]}=0\\ {}\\ \hat{y} = w ^{[l]}w ^{[l-1]}...w ^{[2]}w ^{[l]}X\\ {}\\ Z^{[1]}=w^{[1]}X\\ {}\\ a^{[l]}=g(Z^{[l]})=Z^{[l]}\\ {}\\ a^{[2]}=g(Z^{[1]})=g(w^{[2]}a^{[1]})\\ ...\\ {}\\ 如果: W^{[L]}= \left\{ \begin{matrix} 1.5 & 0 \\ 0 & 1.5 \end{matrix} \right\} \\ {}\\ W^{[L]}=W^{[L-1]} = ...=W^{[1]}\\ {}\\ 则\hat{y}=w^{[L]}\left\{ \begin{matrix} 1.5 & 0 \\ 0 & 1.5 \end{matrix} \right\}^{L-1}X \left\{ \begin{matrix} 1.5 & 0 \\ 0 & 1.5 \end{matrix} \right\}^{L}X =\left\{ \begin{matrix} 1.5^L & 0 \\ 0 & 1.5^L \end{matrix} \right\}
通过以上神经网络举例:假设g(z)=z(线性激活函数);b[l]=0y^=w[l]w[l−1]...w[2]w[l]XZ[1]=w[1]Xa[l]=g(Z[l])=Z[l]a[2]=g(Z[1])=g(w[2]a[1])...如果:W[L]={1.5001.5}W[L]=W[L−1]=...=W[1]则y^=w[L]{1.5001.5}L−1X{1.5001.5}LX={1.5L001.5L}
如果L非常大,则权重会以指数倍增加,相反,如果权重指数中小于1那么就会权重逐渐衰减为0.
这两种结果会导致代价函数和梯度函数变得极大或极小,如果梯度和深度相差指数集,那么步长会设置的非常非常小,所以学习时间会长很多。我们把这种现象称为梯度爆炸\梯度衰减。
1.6.2神经网络的权重初始化
为了解决上述问题,我们在权重的初始化上“做手脚”,使其并不都小于1,也不都大于1.
- single neuron example
暂
时
先
忽
略
b
,
令
b
=
0
z
=
w
1
x
1
+
w
2
x
2
+
.
.
.
+
w
n
x
n
n
为
输
入
节
点
数
,
如
果
n
非
常
大
,
那
么
我
们
希
望
w
i
变
小
,
通
常
我
们
利
用
w
的
方
差
。
W
[
L
]
=
n
p
.
r
a
n
d
o
m
.
r
a
n
d
n
(
s
h
a
p
e
)
∗
n
p
.
s
q
r
t
(
1
n
(
l
−
1
)
)
其
他
常
见
的
方
法
有
:
如
果
激
活
函
数
是
R
e
L
U
:
2
n
l
−
1
如
果
激
活
函
数
是
t
a
n
h
:
1
n
l
−
1
o
t
h
e
r
:
2
n
l
−
1
+
n
l
暂时先忽略b,令b=0\\ {}\\ z=w_1x_1+w_2x_2+...+w_nx_n\\ {}\\ n为输入节点数,如果n非常大,那么我们希望w_i变小,通常我们利用w的方差。\\ {}\\ W^{[L]}=np.random.randn(shape)*np.sqrt(\frac{1}{n^(l-1)})\\ {}\\ 其他常见的方法有:\\ {}\\ 如果激活函数是ReLU: \sqrt{\frac{2}{n^{l-1}}}\\ {}\\ 如果激活函数是tanh:\sqrt{\frac{1}{n^{l-1}}}\\ {}\\ other:\sqrt{\frac{2}{n^{l-1}+n^{l}}}\\
暂时先忽略b,令b=0z=w1x1+w2x2+...+wnxnn为输入节点数,如果n非常大,那么我们希望wi变小,通常我们利用w的方差。W[L]=np.random.randn(shape)∗np.sqrt(n(l−1)1)其他常见的方法有:如果激活函数是ReLU:nl−12如果激活函数是tanh:nl−11other:nl−1+nl2
1.6.3 梯度数值逼近
在进行反向传播的时候,有时候需要检查我们反向传播的过程是否正确,这个时候我们就需要对梯度进行检验。
根 据 导 数 的 定 义 和 图 像 的 分 析 , 可 得 : f ( θ ) 在 θ 点 的 导 数 可 以 用 : f ( θ + ϵ ) − f ( θ − ϵ ) 2 ϵ 来 近 似 。 根据导数的定义和图像的分析,可得:\\ {}\\ f(\theta)在\theta 点的导数可以用: \frac{f(\theta + \epsilon)-f(\theta - \epsilon)}{2 \epsilon}\\ {}\\ 来近似。 根据导数的定义和图像的分析,可得:f(θ)在θ点的导数可以用:2ϵf(θ+ϵ)−f(θ−ϵ)来近似。
1.6.4 梯度检验
本过程用于调试bug和backprop
首
先
把
W
[
1
]
,
b
[
1
]
.
.
.
W
[
L
]
,
b
[
L
]
重
新
组
成
一
个
大
的
θ
.
d
W
[
1
]
,
d
b
[
1
]
.
.
.
d
W
[
L
]
,
d
b
[
L
]
−
−
>
d
θ
因
为
θ
是
一
个
超
参
数
,
所
以
也
可
以
展
开
为
(
θ
1
,
θ
2
.
.
.
θ
l
)
然
后
我
们
来
检
查
b
a
c
k
p
r
o
p
是
否
正
确
:
f
o
r
e
a
c
h
i
:
d
θ
a
p
p
r
o
x
=
J
(
θ
1
.
.
.
θ
i
+
ϵ
.
.
.
)
−
J
(
θ
1
.
.
.
θ
i
−
ϵ
.
.
.
2
ϵ
≈
d
θ
[
i
]
=
α
J
α
θ
i
现
在
需
要
做
的
既
是
,
检
验
d
θ
和
d
θ
a
p
p
r
o
x
是
否
相
似
。
在
这
里
我
们
用
到
欧
几
里
得
距
离
来
表
示
相
似
性
:
C
h
e
c
k
:
∣
∣
d
θ
a
p
p
r
o
x
−
d
θ
∣
∣
2
∣
∣
d
θ
a
p
p
r
o
x
∣
∣
2
+
∣
∣
d
θ
∣
∣
2
<
ϵ
?
首先把W^{[1]},b^{[1]}...W^{[L]},b^{[L]}重新组成一个大的\theta.\\ {}\\ dW^{[1]},db^{[1]}...dW^{[L]},db^{[L]} --> d\theta\\ {}\\ 因为\theta是一个超参数,所以也可以展开为(\theta_1,\theta_2...\theta_l)\\ {}\\ 然后我们来检查backprop是否正确:\\ {}\\ for \ each\ i:\\ {}\\ \begin{aligned} d\theta_{approx}&=\frac{J(\theta_1...\theta_i+\epsilon...)-J(\theta_1...\theta_i-\epsilon...}{2\epsilon}\\ {}\\ &\approx d\theta^{[i]} = \frac{\alpha J}{\alpha \theta_i} \end{aligned}\\ {}\\ 现在需要做的既是,检验d\theta 和 d\theta_{approx}是否相似。\\ {}\\ 在这里我们用到欧几里得距离来表示相似性:\\ {}\\ Check: \frac{||d\theta_{approx}-d\theta||_2}{||d\theta_{approx}||_2+||d\theta||_2} < \epsilon \quad?
首先把W[1],b[1]...W[L],b[L]重新组成一个大的θ.dW[1],db[1]...dW[L],db[L]−−>dθ因为θ是一个超参数,所以也可以展开为(θ1,θ2...θl)然后我们来检查backprop是否正确:for each i:dθapprox=2ϵJ(θ1...θi+ϵ...)−J(θ1...θi−ϵ...≈dθ[i]=αθiαJ现在需要做的既是,检验dθ和dθapprox是否相似。在这里我们用到欧几里得距离来表示相似性:Check:∣∣dθapprox∣∣2+∣∣dθ∣∣2∣∣dθapprox−dθ∣∣2<ϵ?
1.6.5 注意事项
-
- Don’t use in training --only to debug
-
- if algorithm fails grad check, look at components try to identify bug
-
- Remeber regularization
-
- Don’t work with dropout
-
- Run at random initialization;perhaps again after some training
2.优化算法
2.1 Mini-batch梯度下降
2.1.1 Mini-batch梯度下降法
Mini-batch的原理既是把训练集分为小块(batch),然后把每一块看作一个整体再进行梯度下降算法。
假
设
m
=
5000000
,
每
1000
个
数
据
分
为
一
个
b
a
t
c
h
。
X
t
和
Y
t
表
示
第
t
个
b
a
t
c
h
的
训
练
集
x
(
i
)
表
示
第
i
个
训
练
数
据
Z
l
表
示
第
l
层
的
中
间
量
X
=
[
x
(
1
)
,
x
(
2
)
.
.
.
x
(
1000
)
∣
x
(
1001
)
.
.
.
x
(
2000
)
∣
.
.
.
x
m
]
X
{
1
}
=
[
x
(
1
)
,
x
(
2
)
.
.
.
,
x
(
1000
)
]
X
{
2
}
=
[
x
(
1001
)
.
.
.
,
x
(
2000
)
]
.
.
.
X
{
5000
}
=
[
x
(
m
−
999
)
.
.
.
,
x
(
m
)
]
Y
=
[
y
(
1
)
,
y
(
2
)
.
.
.
y
(
1000
)
∣
y
(
1001
)
.
.
.
y
(
2000
)
∣
.
.
.
y
m
]
Y
{
1
}
=
[
y
(
1
)
,
y
(
2
)
.
.
.
,
y
(
1000
)
]
Y
{
2
}
=
[
y
(
1001
)
.
.
.
,
y
(
2000
)
]
.
.
.
Y
{
5000
}
=
[
y
(
m
−
999
)
.
.
.
,
y
(
m
)
]
算
法
过
程
:
r
e
p
e
a
t
:
f
o
r
i
=
1
,
.
.
,
500
{
Z
[
1
]
=
W
[
1
]
X
{
t
}
+
b
[
1
]
A
[
1
]
=
g
[
1
]
(
Z
[
1
]
)
.
.
.
A
[
L
]
=
g
[
L
]
(
Z
[
L
]
)
b
a
c
k
p
r
o
p
t
o
c
o
m
p
u
t
e
f
o
r
J
[
t
]
c
o
s
t
f
u
n
c
t
i
o
n
:
J
{
t
}
=
1
1000
∑
i
=
1
l
L
(
y
^
(
i
)
,
y
(
i
)
)
+
λ
2
⋅
1000
∑
l
∣
∣
W
[
L
]
∣
∣
F
2
W
[
l
]
:
=
W
[
l
]
−
α
d
W
[
l
]
b
[
l
]
:
=
b
[
l
]
−
α
d
b
[
l
]
}
假设m=5000000,每1000个数据分为一个batch。\\ {}\\ X^{t}和Y^{t}表示第t个batch的训练集\\ {}\\ x^{(i)}表示第i个训练数据\\ {}\\ Z^{l}表示第l层的中间量\\ {}\\ X=[x^{(1)},x^{(2)}...x^{(1000)}|x^{(1001)}...x^{(2000)}|...x^{m}]\\ {}\\ X^{\{1\}}=[x^{(1)},x^{(2)}...,x^{(1000)}]\\ {}\\ X^{\{2\}}=[x^{(1001)}...,x^{(2000)}]\\ ...\\ {}\\ X^{\{5000\}}=[x^{(m-999)}...,x^{(m)}]\\ {}\\ Y=[y^{(1)},y^{(2)}...y^{(1000)}|y^{(1001)}...y^{(2000)}|...y^{m}]\\ {}\\ Y^{\{1\}}=[y^{(1)},y^{(2)}...,y^{(1000)}]\\ {}\\ Y^{\{2\}}=[y^{(1001)}...,y^{(2000)}]\\ ...\\ {}\\ Y^{\{5000\}}=[y^{(m-999)}...,y^{(m)}]\\ {}\\ 算法过程:\\ {}\\ repeat:\\ {}\\ \begin{aligned} for \ i=1,.&.,500 \ \{ \\ {}\\ Z^{[1]} & =W^{[1]}X^{\{t\}}+b^{[1]} \\ {}\\ A^{[1]} & = g^{[1]}(Z^{[1]}) \\ &...\\ A^{[L]} & = g^{[L]}(Z^{[L]}) \\ {}\\ \end{aligned} \\ backprop \ to \ compute \ for \ J^{[t]}\\ {}\\ cost \ function: \ J^{\{t\}}=\frac{1}{1000}\sum_{i=1}^{l}L(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2·1000} \sum_l ||W^{[L]}||^2_F\\ {}\\ W^{[l]}:= W^{[l]}-\alpha dW^{[l]}\\ {}\\ b^{[l]}:=b^{[l]}-\alpha db^{[l]} \\ \}
假设m=5000000,每1000个数据分为一个batch。Xt和Yt表示第t个batch的训练集x(i)表示第i个训练数据Zl表示第l层的中间量X=[x(1),x(2)...x(1000)∣x(1001)...x(2000)∣...xm]X{1}=[x(1),x(2)...,x(1000)]X{2}=[x(1001)...,x(2000)]...X{5000}=[x(m−999)...,x(m)]Y=[y(1),y(2)...y(1000)∣y(1001)...y(2000)∣...ym]Y{1}=[y(1),y(2)...,y(1000)]Y{2}=[y(1001)...,y(2000)]...Y{5000}=[y(m−999)...,y(m)]算法过程:repeat:for i=1,.Z[1]A[1]A[L].,500 {=W[1]X{t}+b[1]=g[1](Z[1])...=g[L](Z[L])backprop to compute for J[t]cost function: J{t}=10001i=1∑lL(y^(i),y(i))+2⋅1000λl∑∣∣W[L]∣∣F2W[l]:=W[l]−αdW[l]b[l]:=b[l]−αdb[l]}
通过mini-batch梯度下降,一次迭代就可以同时训练1000个数据,通过5000次循环,即可训练完5000000个数据,最后经过外循环降低需要的精度。
2.1.2 理解Mini——batch梯度下降法
当我们使用Mini-batch梯度下降时,因为每一个batch的计算难度不一样,所以代价函数下降的过程中会存在噪音。
如何确定Mini-batch size :
两种极端的情况为:
if mini-batch size = m : Batch gardientd desc
if mini-batch size = 1 : standard grad desc
当 size = m 的时候,则整个训练集看为一个batch,这样会造成每一次迭代的时候会花费过长的时间。
当 size =1 的时候,则每一个数据为一个batch。则每一个次迭代都是只迭代一个数据,这样就失去了向量化的优势。
我们选的size应该位于1和m之间。
stochastic gradient desc (size = 1) | In-between(not too big/small) | Batch gradient desc(size = m) |
---|---|---|
Lose speed up from vectorization | faster learning 1.vectorization 2.make progress without needing to wait till you process the entire training set | Too long per iterations |
2.2 指数加权平均
指数加权平均又叫指数加权移动平均。现在有一组数据,通过一组数据我们来预测当天的温度。
θ
1
=
40
F
θ
2
=
49
F
.
.
.
我
们
令
v
0
=
0
,
通
过
以
下
的
方
法
来
预
测
当
填
的
问
题
v
1
=
0.9
v
0
+
0.1
θ
1
v
2
=
0.9
v
1
+
0.1
θ
2
.
.
.
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
β
=
0.9
:
v
t
=
0.9
v
t
−
1
+
0.1
θ
t
0.
9
0.1
≈
1
e
β
=
0.98
:
v
t
=
0.98
v
t
−
1
+
0.02
θ
t
0.9
8
0.02
≈
1
e
这
也
正
是
指
数
移
动
加
权
的
来
源
,
指
数
加
权
平
均
可
以
近
似
为
1
1
−
β
个
数
据
的
移
动
平
均
\theta_1 = 40 F\\ {}\\ \theta_2 = 49 F\\ ...\\ {}\\ 我们令v_0=0 ,通过以下的方法来预测当填的问题\\ {}\\ v_1 = 0.9v_0 + 0.1\theta_1\\ {}\\ v_2 = 0.9v_1 + 0.1\theta_2\\ {}\\ ...\\ {}\\ v_t = \beta v_{t-1}+( 1-\beta)\theta_t\\ {}\\ \beta=0.9 :\ v_t = 0.9v_{t-1} +0.1\theta_t \quad 0.9^{0.1} \approx \frac{1}{e}\\ {}\\ \beta=0.98 :\ v_t = 0.98v_{t-1} +0.02\theta_t \quad 0.98^{0.02} \approx \frac{1}{e}\\ {}\\ 这也正是指数移动加权的来源,指数加权平均可以近似为\frac{1}{1-\beta}个数据的移动平均
θ1=40Fθ2=49F...我们令v0=0,通过以下的方法来预测当填的问题v1=0.9v0+0.1θ1v2=0.9v1+0.1θ2...vt=βvt−1+(1−β)θtβ=0.9: vt=0.9vt−1+0.1θt0.90.1≈e1β=0.98: vt=0.98vt−1+0.02θt0.980.02≈e1这也正是指数移动加权的来源,指数加权平均可以近似为1−β1个数据的移动平均
指数加权平均的偏差修正
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v
0
=
0
v
1
=
0.98
v
0
+
0.02
θ
1
=
0.02
θ
1
v
2
=
0.98
v
1
+
0.02
θ
2
=
0.98
×
0.02
θ
1
+
0.02
θ
2
v_t=\beta v_{t-1} + (1-\beta) \theta_t\\ {}\\ v_0 = 0\\ {}\\ v_1 = 0.98v_0 + 0.02 \theta_1 = 0.02 \theta_1\\ {}\\ \begin{aligned} v_2 &= 0.98v_1 + 0.02 \theta_2\\ &= 0.98 \times0.02 \theta_1 + 0.02 \theta_2 \end{aligned}
vt=βvt−1+(1−β)θtv0=0v1=0.98v0+0.02θ1=0.02θ1v2=0.98v1+0.02θ2=0.98×0.02θ1+0.02θ2
这样得出的估计值远远的小于v2的实际值,尤其是在初期的时候。对其进行修正:
v
t
1
−
β
t
\frac{v_t}{1-\beta^t}
1−βtvt
由该公式得随着t的增加 \beta 项趋于0,修正作用渐渐消失,所以修正的时候往往在初期有作用。
2.3 动量梯度下降法
在梯度下降的过程中如果学习率选取的过小,则每次迭代的步长会非常小,因此到达最优点的速度会变得很慢。但是如果选取大的学习率,则每次波动的范围就会很大,会存在过多的噪音。如图我们其中一种思路就是减慢y轴的波动,加速x轴的波动。动量梯度下降法的原理是通过计算梯度的指数加权平均来更新数据,使得下降的过程变得更加的平缓,以减少噪音。
在
第
t
次
迭
代
中
:
v
d
w
=
β
1
v
d
w
+
(
1
−
β
1
)
d
w
v
d
b
=
β
1
v
(
d
b
)
+
(
1
−
β
1
)
d
b
w
=
w
−
α
v
d
w
b
=
b
−
α
v
d
b
关
于
修
正
:
v
d
w
=
β
v
d
w
+
d
w
在第t次迭代中:\\ {}\\ v_{dw} = \beta_1 v_{dw}+(1-\beta_1)dw\\ {}\\ v_{db} = \beta_1 v_{(db)} + (1-\beta_1) db\\ {}\\ w = w-\alpha v_{dw}\\ {}\\ b = b-\alpha v_{db}\\ {}\\ 关于修正:\\ {}\\ v_{dw}=\beta v_{dw}+dw
在第t次迭代中:vdw=β1vdw+(1−β1)dwvdb=β1v(db)+(1−β1)dbw=w−αvdwb=b−αvdb关于修正:vdw=βvdw+dw
2.4 RMSprop(foot mean squart prop)
RMSprop是另外一种对梯度下降进行加速的方法。
假设图中的的纵轴为参数b,横轴为w,我们通过减缓b轴上的迭代,加速w轴上的迭代,从而实现梯度下降法。
对
m
i
n
i
—
b
a
t
c
的
梯
度
:
s
d
w
=
β
2
s
d
w
+
(
1
−
β
2
)
d
w
2
s
d
b
=
β
2
s
d
b
+
(
1
−
β
2
)
d
b
2
W
:
=
W
−
α
d
w
s
d
w
+
ϵ
b
:
=
b
−
α
d
b
s
d
b
+
ϵ
对mini—batc的梯度:\\ {}\\ s_{dw} = \beta_2 s_{dw} +(1-\beta_2)dw^2\\ {}\\ s_{db} = \beta_2 s_{db} + (1-\beta_2)db^2\\ {}\\ W: = W-\alpha \frac{dw}{\sqrt{s_{dw}}+ \epsilon}\\ {}\\ b: = b-\alpha \frac{db}{\sqrt{s_{db}}+ \epsilon}\\
对mini—batc的梯度:sdw=β2sdw+(1−β2)dw2sdb=β2sdb+(1−β2)db2W:=W−αsdw+ϵdwb:=b−αsdb+ϵdb
2.5 Adam优化算法
Adam算法既是将动量梯度下降法和RMSprop相结合。
v
d
w
=
0
,
S
d
w
=
0
,
v
d
b
=
0
,
S
d
b
=
0
d
w
,
b
d
为
m
i
n
i
−
b
a
t
c
h
下
降
法
的
梯
度
v
d
w
=
β
1
v
d
w
+
(
1
−
β
1
)
d
w
v
d
b
=
β
1
v
(
d
b
)
+
(
1
−
β
1
)
d
b
s
d
w
=
β
2
s
d
w
+
(
1
−
β
2
)
d
w
2
s
d
b
=
β
2
s
d
b
+
(
1
−
β
2
)
d
b
2
v
d
w
c
o
r
r
e
c
t
e
d
=
v
d
w
1
−
β
1
t
v
d
b
c
o
r
r
e
c
t
e
d
=
v
d
b
1
−
β
2
t
s
d
w
c
o
r
r
e
c
t
e
d
=
s
d
w
1
−
β
2
t
s
d
b
c
o
r
r
e
c
t
e
d
=
s
d
b
1
−
β
2
t
W
:
=
W
−
α
v
d
w
c
o
r
r
e
r
t
e
d
S
d
w
c
o
r
r
e
c
t
e
d
+
ϵ
b
:
=
b
−
α
v
d
b
c
o
r
r
e
r
t
e
d
S
d
b
c
o
r
r
e
c
t
e
d
+
ϵ
v_{dw} = 0, S_{dw} = 0, v_{db}=0,S_{db}=0\\ {}\\ dw,bd 为mini-batch下降法的梯度\\ {}\\ v_{dw} = \beta_1 v_{dw}+(1-\beta_1)dw\\ {}\\ v_{db} = \beta_1 v_{(db)} + (1-\beta_1) db\\ {}\\ s_{dw} = \beta_2 s_{dw} +(1-\beta_2)dw^2\\ {}\\ s_{db} = \beta_2 s_{db} + (1-\beta_2)db^2\\ {}\\ v_{dw}^{corrected} = \frac{v_{dw}}{1-\beta_1^t}\\ {}\\ v_{db}^{corrected} = \frac{v_{db}}{1-\beta_2^t}\\ {}\\ s_{dw}^{corrected} = \frac{s_{dw}}{1-\beta_2^{t}}\\ {}\\ s_{db}^{corrected} = \frac{s_{db}}{1-\beta_2^{t}}\\ {}\\ W:=W-\alpha \frac{v_{dw}^{correrted}}{\sqrt{S_{dw}}^{corrected}+\epsilon}\\ {}\\ b:=b-\alpha \frac{v_{db}^{correrted}}{\sqrt{S_{db}}^{corrected}+\epsilon}
vdw=0,Sdw=0,vdb=0,Sdb=0dw,bd为mini−batch下降法的梯度vdw=β1vdw+(1−β1)dwvdb=β1v(db)+(1−β1)dbsdw=β2sdw+(1−β2)dw2sdb=β2sdb+(1−β2)db2vdwcorrected=1−β1tvdwvdbcorrected=1−β2tvdbsdwcorrected=1−β2tsdwsdbcorrected=1−β2tsdbW:=W−αSdwcorrected+ϵvdwcorrertedb:=b−αSdbcorrected+ϵvdbcorrerted
常用的超参数设置:
α
:
n
e
e
d
t
o
b
e
t
u
n
e
β
1
:
0.9
β
2
:
0.999
ϵ
:
1
0
−
8
\alpha : need \ to \ be \ tune\\ {}\\ \beta_1:0.9\\ {}\\ \beta_2:0.999\\ {}\\ \epsilon:10^{-8}
α:need to be tuneβ1:0.9β2:0.999ϵ:10−8
2.6 学习率衰减
有时候我们会发现梯度一直在最优点附近徘徊始终到达不了最优点,是因为 \alpha 为常数,当精度缩小到一定的范围内再下降时就会出现难度。所以通过学习率衰减可以进行调整。
1
e
p
o
c
h
=
1
p
a
s
s
t
h
o
u
g
h
d
a
t
a
1
,
α
=
1
1
+
d
e
c
a
y
−
r
a
t
e
∗
e
p
o
c
h
−
n
u
m
α
0
2
,
α
=
0.9
5
e
p
o
c
h
−
n
u
m
α
0
3
,
α
=
k
e
p
o
c
h
−
n
u
m
⋅
α
0
1 epoch \ = 1 \ pass \ though \ data \\ {}\\ 1, \alpha = \frac{1}{1+decay-rate*epoch-num}\alpha_0\\ {}\\ 2,\alpha = 0.95^{epoch-num}\alpha_0\\ {}\\ 3,\alpha = \frac{k}{epoch-num}·\alpha_0
1epoch =1 pass though data1,α=1+decay−rate∗epoch−num1α02,α=0.95epoch−numα03,α=epoch−numk⋅α0
2.7 局部最优的问题
在机器学习的早期,人们往往担心梯度会困在比较差的局部最优点附近,但是在高维情况下,所谓的局部最优点其实是很难出现的,因维一个局部最优点要保证该点的每一维度都是向下凸的,如过数据是20000维的,那么这个点的出现的概率是2^(-20000)。一般会存在向上凹的维度。
所以当维度变高的时候局部最优点便不在是一个问题。那么问题是什么?在我们遇到马鞍面的时候,可能会出现由于数据面过于平缓,导致学习缓慢。这种情况可能会又我们上面讨论过的方法,RMSprop、momentum、Adam可能会解决这样的问题。
3.超参数调试、batch正则化
3.1 超参数的调试
3.1.1 超参数调试的方法
到目前为止,我们已经学习了学习率、beta值、#layer、#hidden units值、learning—rate decay 、
mini-batch size值等许多的超参数,那么这些超参数应该怎们去选,怎么选择最优的超参数,这节课我们来解决这些问题。
常
见
的
超
参
数
按
重
要
程
度
进
行
排
序
:
α
:
m
o
s
t
i
m
p
o
r
t
a
n
t
β
(
m
o
m
e
n
t
u
m
)
:
第
二
重
要
,
一
般
默
认
为
0.9
#
h
i
d
d
e
n
u
n
i
t
s
:
第
二
重
要
l
e
a
r
n
i
n
g
r
a
t
e
d
e
c
a
y
(
R
M
S
p
r
o
p
)
:
第
二
重
要
m
i
n
i
−
b
a
t
c
h
s
i
z
e
:
第
三
重
要
#
l
a
y
e
r
s
:
第
三
重
要
β
1
=
0.9
β
2
=
0.999
,
ϵ
=
1
0
−
8
:
第
四
重
要
,
一
般
就
使
用
默
认
值
。
常见的超参数按重要程度进行排序:\\ {}\\ \alpha : most \ important\\ {}\\ \beta(momentum): 第二重要,一般默认为0.9 \\ {}\\ \# hidden \ units: 第二重要 \\ {}\\ learning \ rate \ decay(RMSprop):第二重要 \\ {}\\ mini-batch \ size: 第三重要 \\ {}\\ \# layers :第三重要 \\ {}\\ \beta_1 = 0.9 \, \beta_2=0.999 , \, \epsilon = 10^{-8} :第四重要,一般就使用默认值。
常见的超参数按重要程度进行排序:α:most importantβ(momentum):第二重要,一般默认为0.9#hidden units:第二重要learning rate decay(RMSprop):第二重要mini−batch size:第三重要#layers:第三重要β1=0.9β2=0.999,ϵ=10−8:第四重要,一般就使用默认值。
对于一些不太重要的超参数,我们一般不去设置这些值。而是采取其默认值。因为设置这些参数的效果并不会很突出。
超参数范围的设置
在机器学习的早期,通常是去便利所有可能的点,然后从中选取最合适的点,但是这样会存在这一些弊端,假设H1为学习率alpha,H2为epsilon,当我们便利25个点之后,会发现只有5组数据有较大差别,因为epsilon并不会对模型产生过多的影响。所以更加合适的方法是选用随机搜索算法。我们首先利用随机搜索,选出比较合适的点,然后放大这个点,再使用更小的精度去选取最优的参数点。
选取合适的范围
- 1.均匀取值
例如选取第l的层隐藏单元的单元数:
n
[
l
]
=
50
,
…
…
,
100
n^{[l]}=50,……,100
n[l]=50,……,100
层数:layers L:2~4 即L取值2、3、4
即均匀便利所有可能的值。
- 2.对数轴取值
例如学习率 alpha = 0.0001,……,1
由图可知,当遍历学习率时,从0.0001到0.1则花费10%的资源,从0.1到1花费90%的资源,但是我们知道学习率变化更多是在0.0001到0.1之间变化,并且变化率也并不是均匀的,所以这里我们采用对数轴进行学习。
1
0
a
=
1
0
−
4
a
=
l
o
g
10
0.0001
=
−
4
1
0
b
=
1
0
0
=
1
b
=
l
o
g
10
1
=
0
所
以
我
们
设
r
=
−
4
∗
n
p
.
r
a
n
d
o
m
.
r
a
n
d
(
)
r
∈
[
−
4
,
0
]
取
α
=
1
0
r
10^a = 10^{-4} \quad a=log_{10}0.0001=-4\\ {}\\ 10^b = 10^{0}=1 \quad b=log_{10}1=0\\ {}\\ 所以我们设r = -4*np.random.rand() \quad r\in[-4,0]\\ {}\\ 取 \alpha = 10^r
10a=10−4a=log100.0001=−410b=100=1b=log101=0所以我们设r=−4∗np.random.rand()r∈[−4,0]取α=10r
- 3.动量梯度下降超参数
β = 0.9 , . . . , 0.999 1 − β = 0.1 , . . . , 0.001 所 以 根 据 上 述 对 数 轴 选 取 法 , 令 r ∈ [ − 3 , − 1 ] 1 − β = 1 0 r β = 1 − 1 0 r \beta=0.9,...,0.999\\ {}\\ 1-\beta=0.1,...,0.001 所以根据上述对数轴选取法,令\\ {}\\ r\in [-3,-1]\\ {}\\ 1-\beta=10^r\\ {}\\ \beta = 1-10^r β=0.9,...,0.9991−β=0.1,...,0.001所以根据上述对数轴选取法,令r∈[−3,−1]1−β=10rβ=1−10r
3.2 batch归一化
在逻辑回归的例子中我们对输入进行了归一化,可是在深度学习中,这远远是不够的,对于其中隐藏层的输入,也就是上一个隐藏层的输出。也可以进行归一化,即batch归一化。
首
先
我
们
来
回
忆
一
下
输
入
归
一
化
:
μ
=
1
m
∑
i
=
1
m
X
(
i
)
X
=
X
−
μ
σ
2
=
1
m
∑
(
i
=
1
)
m
X
(
i
)
2
X
=
X
/
σ
2
首先我们来回忆一下输入归一化:\\ {}\\ \mu = \frac{1}{m}\sum_{i=1}^{m}X^{(i)}\\ {}\\ X = X-\mu\\ {}\\ \sigma^2 = \frac{1}{m}\sum_{(i=1)}^m X^{(i)2}\\ {}\\ X = X /\ \sigma^2
首先我们来回忆一下输入归一化:μ=m1i=1∑mX(i)X=X−μσ2=m1(i=1)∑mX(i)2X=X/ σ2
batch归一化即对每一个隐藏层的z进行归一化。
假
设
对
其
中
某
一
隐
藏
层
进
行
b
a
t
c
h
归
一
化
,
z
(
i
)
表
示
第
l
层
的
中
间
变
量
,
所
以
不
再
重
复
写
上
标
l
。
b
a
t
h
c
归
一
化
:
μ
=
1
m
∑
i
z
(
i
)
σ
2
=
1
m
(
z
(
i
)
−
μ
)
2
z
n
o
r
m
(
i
)
=
z
(
i
)
−
μ
σ
2
+
ϵ
z
^
(
i
)
=
γ
∗
z
n
o
r
m
(
i
)
+
β
其
中
超
参
数
γ
,
β
是
为
了
控
制
z
^
(
i
)
的
期
望
和
方
差
,
例
如
极
端
情
况
下
:
γ
=
σ
2
+
ϵ
,
β
=
μ
则
,
z
^
(
i
)
=
z
(
i
)
假设对其中某一隐藏层进行batch归一化,z^{(i)}表示第l层的中间变量,所以不再重复写上标l。\\ {}\\ bathc归一化:\\ {}\\ \mu=\frac{1}{m} \sum_iz^{(i)}\\ {}\\ \sigma^2=\frac{1}{m}(z^{(i)}-\mu)^2\\ {}\\ z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}\\ {}\\ \hat{z}^{(i)}=\gamma*z_{norm}^{(i)}+\beta\\ {}\\ 其中超参数\gamma,\beta是为了控制\hat{z}^{(i)}的期望和方差,例如极端情况下:\\ {}\\ \gamma=\sqrt{\sigma^2+\epsilon},\,\beta=\mu\\ {}\\ 则,\hat{z}^{(i)}=z^{(i)}
假设对其中某一隐藏层进行batch归一化,z(i)表示第l层的中间变量,所以不再重复写上标l。bathc归一化:μ=m1i∑z(i)σ2=m1(z(i)−μ)2znorm(i)=σ2+ϵz(i)−μz^(i)=γ∗znorm(i)+β其中超参数γ,β是为了控制z^(i)的期望和方差,例如极端情况下:γ=σ2+ϵ,β=μ则,z^(i)=z(i)
上述归一化过程是对具体某一层的计算,现在我们应用于Mini-batch:
参
数
有
W
[
l
]
,
β
[
l
]
,
γ
[
l
]
这
里
并
不
需
要
b
,
因
为
在
之
后
的
正
则
化
过
程
中
,
会
存
在
求
均
值
减
均
值
的
过
程
,
这
样
就
会
把
所
有
的
常
数
项
的
作
用
都
抹
掉
。
算
法
:
f
o
r
i
=
1...
n
u
m
M
i
n
i
b
a
t
c
h
e
s
c
o
m
p
u
t
e
f
o
r
w
a
r
d
p
r
o
p
o
n
X
t
I
n
e
a
c
h
h
i
d
d
e
n
l
a
y
,
u
s
e
B
N
t
o
r
e
p
e
a
t
Z
[
l
]
w
i
t
h
z
^
[
l
]
u
s
e
b
a
c
k
p
r
o
p
t
o
c
o
m
p
u
t
e
d
w
[
l
]
,
d
β
[
l
]
,
d
[
γ
]
u
p
d
a
t
e
p
a
r
a
:
W
[
l
]
:
=
W
[
l
]
−
α
d
W
[
l
]
β
[
l
]
:
=
β
[
l
]
−
α
d
β
[
l
]
γ
[
l
]
:
=
γ
[
l
]
−
α
d
γ
[
l
]
之
后
可
以
利
用
m
o
m
e
n
t
u
r
m
、
R
M
S
p
r
o
p
、
A
d
a
m
等
梯
度
下
降
法
进
行
参
数
更
新
参数有 W^{[l]},\beta^{[l]},\gamma^{[l]}\\ {}\\ 这里并不需要 b,因为在之后的正则化过程中,会存在求均值减均值的过程,这样就会把所有的常数项的作用都抹掉。\\ {}\\ 算法:\\ {}\\ \begin{aligned} for \ &i=1...num \ Minibatches\\ {}\\ & compute \ forward \ prop \ on \ X^{t}\\ {}\\ & In \ each \ hidden \ lay,use \ BN \ to \ repeat \ Z^{[l]} \ with \ \hat{z}^{[l]}\\ {}\\ & use \ backprop \ to \ compute \ dw^[l],d\beta^{[l]},d^{[\gamma]}\\ {}\\ \end{aligned}\\ {}\\ \begin{aligned} update \ para: W^{[l]} &:=W^{[l]}-\alpha dW^{[l]} {}\\ \beta^{[l]}&:=\beta^{[l]}-\alpha d\beta^{[l]}\\ \gamma^{[l]} &: =\gamma^{[l]}-\alpha d\gamma^{[l]} \end{aligned} \\ 之后可以利用momenturm、RMSprop、Adam等梯度下降法进行参数更新
参数有W[l],β[l],γ[l]这里并不需要b,因为在之后的正则化过程中,会存在求均值减均值的过程,这样就会把所有的常数项的作用都抹掉。算法:for i=1...num Minibatchescompute forward prop on XtIn each hidden lay,use BN to repeat Z[l] with z^[l]use backprop to compute dw[l],dβ[l],d[γ]update para:W[l]β[l]γ[l]:=W[l]−αdW[l]:=β[l]−αdβ[l]:=γ[l]−αdγ[l]之后可以利用momenturm、RMSprop、Adam等梯度下降法进行参数更新
测试时的batch Norm
在训练数据的时候,由batch归一化的原理可知,算法过程会用到训练集中的所有信息,但是在进行计算测试集的时候,需要每一个单独计算,因此使用 \mu ,\sigma的加权移动平均来表示。
3.3 softmax层
之前我们一直使用的sigma激活函数,在logistic回归模型中,我们只可以判断一个图片是不是猫,但是利用softmax激活函数我们可以进行多分类问题模型的创建。softmax回归不仅可以分辩图中是否是猫,还可以判断是否是狗、鸡等等。
假设我们现在存在一个神经网络,用于分辩图中是否有猫、狗、鸡、其它,所以该神经网络的输出应该为0、1、2、3.
s
o
f
t
m
a
x
激
活
函
数
:
#
c
l
a
s
s
:
C
在
本
例
中
C
=
4
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
[
L
]
=
e
z
[
L
]
∑
j
=
1
4
t
i
假
设
Z
[
L
]
=
{
5
2
−
1
3
}
t
=
{
e
5
e
2
e
−
1
e
3
}
a
[
L
]
=
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
}
s
o
f
t
m
a
x
函
数
的
名
字
是
和
h
a
r
d
m
a
x
函
数
相
比
较
得
来
的
,
对
于
Z
[
L
]
,
如
果
是
h
a
r
d
m
a
x
函
数
则
会
变
为
{
1
0
0
0
}
和
h
a
r
d
m
a
x
函
数
做
对
比
,
可
以
看
出
来
s
o
f
t
m
a
x
函
数
会
“
软
“
的
多
。
softmax激活函数:\\ {}\\ \# class: C \\ {}\\ 在本例中C=4\\ {}\\ Z^{[L]}=W^{[L]}a^{[L-1]}+b^{[L]}\\ {}\\ Activation \ function:\\ {}\\ t=e^{Z^{[L]}}\\ {}\\ a^{[L]}=\frac{e^{z^{[L]}}}{\sum_{j=1}^{4}t_i}\\ {}\\ 假设 Z^{[L]}= \left\{ \begin{matrix} 5 \\ 2 \\ -1 \\ 3 \end{matrix} \right\}\\ {}\\ t= \left\{ \begin{matrix} e^5 \\ e^2 \\ e^{-1} \\ e^3 \end{matrix} \right\}\\ {}\\ a^{[L]}=g^{[L]}(Z^{[L]})= \left\{ \begin{matrix} 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}\\ \end{matrix} \right\}= \left\{ \begin{matrix} 0.842 \\ 0.042 \\ 0.002 \\ 0.114 \end{matrix} \right\}\\ {}\\ softmax函数的名字是和hardmax函数相比较得来的,对于Z^{[L]},如果是hardmax函数则会变为 \left\{ \begin{matrix} 1\\0\\0\\0 \end{matrix} \right\}\\ {}\\ 和hardmax函数做对比,可以看出来softmax函数会“软“的多。
softmax激活函数:#class:C在本例中C=4Z[L]=W[L]a[L−1]+b[L]Activation function:t=eZ[L]a[L]=∑j=14tiez[L]假设Z[L]=⎩⎪⎪⎨⎪⎪⎧52−13⎭⎪⎪⎬⎪⎪⎫t=⎩⎪⎪⎨⎪⎪⎧e5e2e−1e3⎭⎪⎪⎬⎪⎪⎫a[L]=g[L](Z[L])=⎩⎪⎪⎨⎪⎪⎧e5/e5+e2+e−1+e3e2/e5+e2+e−1+e3e−1/e5+e2+e−1+e3e3/e5+e2+e−1+e3⎭⎪⎪⎬⎪⎪⎫=⎩⎪⎪⎨⎪⎪⎧0.8420.0420.0020.114⎭⎪⎪⎬⎪⎪⎫softmax函数的名字是和hardmax函数相比较得来的,对于Z[L],如果是hardmax函数则会变为⎩⎪⎪⎨⎪⎪⎧1000⎭⎪⎪⎬⎪⎪⎫和hardmax函数做对比,可以看出来softmax函数会“软“的多。
下面我们来分析softmax函数的Loss function。
y
(
1
)
=
{
0
1
0
0
}
a
[
L
]
=
y
^
[
L
]
=
{
0.8
0.2
0.1
0.4
}
L
(
y
^
,
y
)
=
−
∑
j
=
1
4
y
i
l
o
g
y
^
j
J
(
w
[
l
]
,
b
[
l
]
.
.
.
)
=
1
m
∑
i
=
1
m
L
(
y
^
,
y
)
向
量
化
:
Y
=
{
y
(
1
)
,
y
(
2
)
,
.
.
.
,
y
(
1
=
m
)
}
Y
^
=
{
y
^
(
1
)
,
y
^
(
2
)
,
.
.
.
,
y
^
(
1
=
m
)
}
然
后
执
行
反
向
传
播
:
b
a
c
k
p
r
o
p
:
关
于
方
向
传
播
,
我
们
只
需
记
住
:
d
z
[
L
]
=
y
^
−
y
=
α
J
α
Z
[
L
]
由
此
开
始
我
们
可
以
向
前
推
出
各
个
参
数
的
导
数
,
从
而
进
行
参
数
的
迭
代
。
实
际
上
在
通
过
程
序
框
架
进
行
编
程
的
时
候
,
只
需
要
一
行
代
码
即
可
完
成
。
y^{(1)}= \left\{ \begin{matrix} 0 \\1\\0\\0 \end{matrix} \right\} \quad a^{[L]}=\hat{y}^{[L]}= \left\{ \begin{matrix} 0.8 \\0.2\\0.1\\0.4 \end{matrix} \right\}\\ {}\\ L(\hat{y},y)=-\sum_{j=1}^4y_ilog\hat{y}_j\\ {}\\ J(w^{[l]},b^{[l]}...)=\frac{1}{m}\sum_{i=1}^mL(\hat{y},y)\\ {}\\ 向量化:\\ {}\\ Y= \left\{ \begin{matrix} y^{(1)},y^{(2)},...,y^{(1=m)} \end{matrix} \right\}\\ {}\\ \hat{Y}= \left\{ \begin{matrix} \hat{y}^{(1)},\hat{y}^{(2)},...,\hat{y}^{(1=m)} \end{matrix} \right\}\\ {}\\ 然后执行反向传播:backprop:\\ {}\\ 关于方向传播,我们只需记住:\\ {}\\ d^{z^{[L]}}=\hat{y}-y=\frac{\alpha J}{\alpha Z^{[L]}}\\ {}\\ 由此开始我们可以向前推出各个参数的 导数,从而进行参数的迭代。实际上在通过程序框架进行编程的时候,只需要一行代码即可完成。
y(1)=⎩⎪⎪⎨⎪⎪⎧0100⎭⎪⎪⎬⎪⎪⎫a[L]=y^[L]=⎩⎪⎪⎨⎪⎪⎧0.80.20.10.4⎭⎪⎪⎬⎪⎪⎫L(y^,y)=−j=1∑4yilogy^jJ(w[l],b[l]...)=m1i=1∑mL(y^,y)向量化:Y={y(1),y(2),...,y(1=m)}Y^={y^(1),y^(2),...,y^(1=m)}然后执行反向传播:backprop:关于方向传播,我们只需记住:dz[L]=y^−y=αZ[L]αJ由此开始我们可以向前推出各个参数的导数,从而进行参数的迭代。实际上在通过程序框架进行编程的时候,只需要一行代码即可完成。
总结
第二节主要讲了一些超参数的设置,正则化,一些优化后的梯度下降法等,其中正则化在算法中是非常重要的一部分,在这篇博客中,有许多的地方由于篇幅和时间问题不是很详细,这篇博客主要是当做一篇笔记来写,所以说如果有想跟多了解深度学习内容的同学可以自己去看吴恩达教授的深度学习课程。或者私信小黄和小黄一起学习,因为有一句话说的好,如果想走的快,请自己走,如果想走的远请一起走。所以有感兴趣的同学,欢迎交流,一起加油!