批量归一化和残差网络;凸优化;梯度下降
批量归一化和残差网络
对全连接层做批量归一化
归一化增加在全连接层激活函数之前,全连接层输入为
u
u
u,批量归一化运算符
B
N
BN
BN,那么使用批量归一化的全连接层的输出为:
ϕ
(
BN
(
x
)
)
\phi(\text{BN}(\boldsymbol{x}))
ϕ(BN(x))
其中批量归一化输入
x
x
x由仿射变换
x
=
W
u
+
b
x=Wu+b
x=Wu+b得到
对于一个由
m
m
m个样本组成的小批量,仿射变换的输出为一个新的小批量
B
=
x
(
1
)
,
.
.
.
,
x
(
m
)
B=x^{(1)},...,x^{(m)}
B=x(1),...,x(m),他们是批量归一化曾的输入。批量归一化层的输出为:
y
(
i
)
=
B
N
(
x
(
i
)
)
y^{(i)}=BN(x^{(i)})
y(i)=BN(x(i))
批量归一化:求批量的均差和方差:
μ
B
←
1
m
∑
i
=
1
m
x
(
i
)
,
σ
B
2
←
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
B
)
2
\boldsymbol{\mu}_\mathcal{B} \leftarrow \frac{1}{m}\sum_{i = 1}^{m} \boldsymbol{x}^{(i)},\boldsymbol{\sigma}_\mathcal{B}^2 \leftarrow \frac{1}{m} \sum_{i=1}^{m}(\boldsymbol{x}^{(i)} - \boldsymbol{\mu}_\mathcal{B})^2
μB←m1∑i=1mx(i),σB2←m1∑i=1m(x(i)−μB)2
对
x
(
i
)
x^{(i)}
x(i)做归一化:
x
^
(
i
)
←
x
(
i
)
−
μ
B
σ
B
2
+
ϵ
\hat{\boldsymbol{x}}^{(i)} \leftarrow \frac{\boldsymbol{x}^{(i)} - \boldsymbol{\mu}_\mathcal{B}}{\sqrt{\boldsymbol{\sigma}_\mathcal{B}^2 + \epsilon}}
x^(i)←σB2+ϵx(i)−μB
这⾥
ϵ
>
0
ϵ > 0
ϵ>0是个很小的常数,保证分母大于0
这便完成了归一化。之后引入两个可学习的模型参数,拉伸
γ
\boldsymbol{\gamma}
γ偏移参数
β
\boldsymbol{\beta}
β
做计算:
y
(
i
)
←
γ
⊙
x
^
(
i
)
+
β
.
{\boldsymbol{y}}^{(i)} \leftarrow \boldsymbol{\gamma} \odot \hat{\boldsymbol{x}}^{(i)} + \boldsymbol{\beta}.
y(i)←γ⊙x^(i)+β.
若
γ
=
σ
B
2
+
ϵ
\boldsymbol{\gamma} = \sqrt{\boldsymbol{\sigma}_\mathcal{B}^2 + \epsilon}
γ=σB2+ϵ和
β
=
μ
B
\boldsymbol{\beta} = \boldsymbol{\mu}_\mathcal{B}
β=μB,批量归一化无效,即这两个参数保留了不对
x
^
(
i
)
\hat{\boldsymbol{x}}^{(i)}
x^(i)做归一化的可能。
对卷积层做批量归一化
归一化在卷积计算之后,激活函数之前。若输出多通道,则对各通道输出分别归一化,且每个通道都拥有独立的拉伸和偏移参数。
残差网络(ResNet)
在实践中,添加过多的层后训练误差往往不降反升。针对这一问题,何凯明等人提出了残差网络。
恒等映射:
左边:f(x)=x
右边:f(x)-x=0 (易于捕捉恒等映射的细微波动)
ResNet模型
卷积+
批量归一化+
激活函数ReLU+
最大池化+
残差块*4+
全局平均池化+
全连接
稠密连接网络(DenseNet)
与残差网络不同的是,稠密连接网络将相加变成了连结。
由于连结,会导致其通道数过大,所以在连结后增加过渡层,控制通道数。
过渡层
1
×
1
1×1
1×1卷积层+ -> 减小通道数
步幅
2
2
2的平均池化层 -> 减半高和宽
DenseNet模型
卷积+
批量归一化+
激活函数ReLU+
最大池化层+
稠密块*4+
全局平均池化层+
全连接
凸优化
深度学习与凸优化
尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。
· 优化方法目标:训练集损失函数值
· 深度学习目标:测试集损失函数值(泛化性)
优化在深度学习中的挑战
1、局部最小值
在优化的过程中容易陷入局部最小值,虽然在局部梯度接近0,但是其效果并不好。
2、鞍点
落入如图马鞍面,目标函数在
x
x
x轴方向上是局部最小值
但是在
y
y
y轴方向是局部最大值。
3、梯度消失
优化落入梯度很小的位置,会使梯度下降很缓慢,优化过程很慢。
凸性
凸集: 如果
C
C
C中任意两点间的线段仍然在
C
C
C中,即对于任意
x
1
,
x
2
∈
C
x_1,x_2\in C
x1,x2∈C和满足
0
≤
θ
≤
1
0\le\theta\le1
0≤θ≤1的
θ
\theta
θ都有
θ
x
1
+
(
1
−
θ
)
x
2
∈
C
\theta x_1+(1-\theta)x_2\in C
θx1+(1−θ)x2∈C
粗略的,如果集合中的每一个点都可以被其他点沿着它们之间一条无障碍的路径看见,那么这个集合就是凸集。
凸函数: 函数
f
:
R
n
→
R
f:R^n\to R
f:Rn→R是凸的,如果
d
o
m
f
dom f
domf是凸集,且对于任意
x
,
y
∈
d
o
m
f
x,y\in dom f
x,y∈domf和任意
0
≤
θ
≤
1
0\le\theta\le1
0≤θ≤1,有:
f
(
θ
x
+
(
1
−
θ
)
y
)
≤
θ
f
(
x
)
+
(
1
−
θ
)
f
(
y
)
f(\theta x+(1-\theta)y)\le\theta f(x)+(1-\theta)f(y)
f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)
Jensen不等式
∑ i α i f ( x i ) ≥ f ( ∑ i α i x i ) and E x [ f ( x ) ] ≥ f ( E x [ x ] ) \sum_{i} \alpha_{i} f\left(x_{i}\right) \geq f\left(\sum_{i} \alpha_{i} x_{i}\right) \text { and } E_{x}[f(x)] \geq f\left(E_{x}[x]\right) ∑iαif(xi)≥f(∑iαixi) and Ex[f(x)]≥f(Ex[x])
凸函数性质
1、无局部最小值
2、与凸集
对于凸函数$ f(x)$,定义集合
S
b
:
=
{
x
∣
x
∈
X
and
f
(
x
)
≤
b
}
S_{b}:=\{x | x \in X \text { and } f(x) \leq b\}
Sb:={x∣x∈X and f(x)≤b},则集合
S
b
S_b
Sb 为凸集
3、与二阶导数
f
′
′
(
x
)
≥
0
⟺
f
(
x
)
f^{''}(x) \ge 0 \Longleftrightarrow f(x)
f′′(x)≥0⟺f(x)是凸函数
梯度下降
一维
根据泰勒展开式:
f
(
x
+
ϵ
)
=
f
(
x
)
+
ϵ
f
′
(
x
)
+
O
(
ϵ
2
)
f(x+\epsilon)=f(x)+\epsilon f^{\prime}(x)+\mathcal{O}\left(\epsilon^{2}\right)
f(x+ϵ)=f(x)+ϵf′(x)+O(ϵ2)
接下来找一个常数
η
>
0
\eta>0
η>0,使得
∣
η
f
′
(
x
)
∣
|\eta f'(x)|
∣ηf′(x)∣足够小,可以将
ϵ
\epsilon
ϵ替换为
−
η
f
′
(
x
)
-\eta f'(x)
−ηf′(x)并得到
f
(
x
−
η
f
′
(
x
)
)
=
f
(
x
)
−
η
f
′
2
(
x
)
+
O
(
η
2
f
′
2
(
x
)
)
f\left(x-\eta f^{\prime}(x)\right)=f(x)-\eta f^{\prime 2}(x)+\mathcal{O}\left(\eta^{2} f^{\prime 2}(x)\right)
f(x−ηf′(x))=f(x)−ηf′2(x)+O(η2f′2(x))
如果导数
f
′
(
x
)
=
0
f'(x)=0
f′(x)=0,那么
η
f
′
(
x
)
2
>
0
\eta f'(x)^2>0
ηf′(x)2>0所以
f
(
x
−
η
f
′
(
x
)
)
≲
f
(
x
)
f\left(x-\eta f^{\prime}(x)\right) \lesssim f(x)
f(x−ηf′(x))≲f(x),这意味着,通过
x
←
x
−
η
f
′
(
x
)
x \leftarrow x-\eta f^{\prime}(x)
x←x−ηf′(x)来迭代
x
x
x,函数
f
(
x
)
f(x)
f(x)的值可能会降低。
多维
多维目标函数
f
(
x
)
f(x)
f(x)有关
x
x
x的梯度是一个由
d
d
d个偏导数组成的向量:
∇
f
(
x
)
=
[
∂
f
(
x
)
∂
x
1
,
∂
f
(
x
)
∂
x
2
,
…
,
∂
f
(
x
)
∂
x
d
]
⊤
\nabla f(\mathbf{x})=\left[\frac{\partial f(\mathbf{x})}{\partial x_{1}}, \frac{\partial f(\mathbf{x})}{\partial x_{2}}, \dots, \frac{\partial f(\mathbf{x})}{\partial x_{d}}\right]^{\top}
∇f(x)=[∂x1∂f(x),∂x2∂f(x),…,∂xd∂f(x)]⊤
梯度中每个偏导数元素
∂
f
(
x
)
∂
x
i
\frac{\partial f(\mathbf{x})}{\partial x_{i}}
∂xi∂f(x)代表着
f
f
f在
x
x
x有关输入
x
i
x_i
xi的变化率。
我们定义
f
f
f在
x
x
x上沿着
u
u
u方向的方向导数为
D
u
f
(
x
)
=
l
i
m
h
→
0
f
(
x
+
h
u
)
−
f
(
x
)
h
D_uf(x)=lim_{h\to 0}\frac{f(x+hu)-f(x)}{h}
Duf(x)=limh→0hf(x+hu)−f(x)
根据方向导数性质,以上方向导数改写为
D
u
f
(
x
)
=
∇
f
(
x
)
⋅
u
D_uf(x)=\nabla f(x)\cdot u
Duf(x)=∇f(x)⋅u
方向导数
D
u
f
(
x
)
D_uf(x)
Duf(x)给出了
f
f
f在
x
x
x上沿着所有可能方向的变化率,我们希望找到
f
f
f能被降低最快的方向。
由于
D
u
f
(
x
)
=
∣
∣
∇
f
(
x
)
∣
∣
⋅
∣
∣
u
∣
∣
⋅
c
o
s
(
θ
)
=
∣
∣
∇
f
(
x
)
∣
∣
⋅
c
o
s
(
θ
)
D_uf(x)=||\nabla f(x)||\cdot ||u||\cdot cos(\theta)=||\nabla f(x)||\cdot cos(\theta)
Duf(x)=∣∣∇f(x)∣∣⋅∣∣u∣∣⋅cos(θ)=∣∣∇f(x)∣∣⋅cos(θ),其中
θ
\theta
θ为梯度
∇
f
(
x
)
\nabla f(x)
∇f(x)和单位向量
u
u
u之间的夹角,当
θ
=
π
\theta = \pi
θ=π时,
c
o
s
(
θ
)
cos(\theta)
cos(θ)取得最小值
−
1
-1
−1。因此,当
u
u
u在梯度方向
∇
f
(
x
)
\nabla f(x)
∇f(x)的相反方向时方向梯度
D
u
f
(
x
)
D_uf(x)
Duf(x)被最小化。
因此优化公式为:
x
←
x
−
η
∇
f
(
x
)
\mathbf{x} \leftarrow \mathbf{x}-\eta \nabla f(\mathbf{x})
x←x−η∇f(x)