批量归一化(BatchNormalization)
- 作用:调整神经网络各层输出的稳定性。
1.全连接层的批量归一化
- 位置:仿射变换与激活函数之间。
- 仿射变换: x = W u + b \pmb{x}=\pmb{Wu}+\pmb{b} xxx=WuWuWu+bbb
- 批量归一化: y = B N ( x ) \pmb{y}=BN(\pmb{x}) yyy=BN(xxx)
- 激活函数: o u t p u t = ϕ ( y ) output=\phi(\pmb{y}) output=ϕ(yyy)
- BN函数:对于 x \pmb{x} xxx的均值 μ B \pmb{\mu}_{B} μμμB和方差 σ B 2 \pmb{\sigma}^2_{B} σσσB2,得到 x ^ ( i ) = x ( i ) − μ B σ B 2 + ϵ \hat{x}^{(i)}=\frac{x^{(i)}-\pmb{\mu}_{B}}{\sqrt{\pmb{\sigma}^2_{B}+\epsilon}} x^(i)=σσσB2+ϵx(i)−μμμB y = γ ⊙ x ^ + β \pmb{y}=\gamma \odot\hat{\pmb{x}}+\beta yyy=γ⊙xxx^+β γ \gamma γ为拉伸参数, β \beta β为偏移参数。
2.其他批量归一化
- 卷积层批量归一化:卷积计算与激活函数之间。此外,需要对卷积层的每个通道输出分别进行批量归一化。对每个通道的batchsize×p×q个元素进行计算。
- 训练的批量归一化:对每个批量计算均值和方差
- 预测的批量归一化:移动平均估计整个训练集的均值和方差。
残差网络(ResNet)
一般情况下,神经网络层数越多,效果越好。但是简单地增加深度会导致梯度消失或梯度爆炸,其解决方案是进行批量归一化。而批量归一化会造成另外的问题------退化问题,训练集上的loss逐渐下降,趋于饱和。举个例子,假设最优的网络结构是n层,但预设了m(>n)层,那么多出的层是冗余的,随着深度的增加模型准确率降低,会产生退化现象。所以我们希望多出的层通过训练能够是恒等映射,即经过这层的输入和输出完全一样。
残差网络可以解决这样的退化问题,它的核心思想就是通过恒等映射学习残差函数。将冗余层训练成恒等层。
残差网络由如下图的残差块组成,我们可以看出图中有一个捷径和右边的各种运算式输出。在训练中,通过学习残差
F
(
x
)
F(x)
F(x)来判断该层是否为冗余层

- 公式:
y
l
=
h
(
x
l
)
+
F
(
x
l
,
W
l
)
x
l
+
1
=
f
(
y
l
)
y_l=h(x_l)+F(x_l,W_l)\\ \qquad\quad x_{l+1}=f(y_l)
yl=h(xl)+F(xl,Wl)xl+1=f(yl)
其中, x l , x l + 1 x_l,x_{l+1} xl,xl+1是第 l l l个单元的输入输出, F F F是残差函数, h ( x l ) = x l h(x_l)=x_l h(xl)=xl是恒等映射, f f f为激活函数 - 参考文章https://blog.csdn.net/kevin_zhao_zl/article/details/87912736
https://www.cnblogs.com/gczr/p/10127723.html
稠密连接网络(DenseNet)
- DenseNet也是一种可以极深层数的卷积神经网络。与ResNet的不同点在于DenseNet每一层的输入都来自于前面所有层。
- ResNet: x l = H l ( x l − 1 ) + x l − 1 x_l=H_l(x_{l-1})+x_{l-1} xl=Hl(xl−1)+xl−1
- DenseNet: x l = H l ( [ x 0 , x 1 , … , x l − 1 ] ) x_l=H_l([x_0,x_1,\dots,x_{l-1}]) xl=Hl([x0,x1,…,xl−1])
- DenseNet主要有两种模块:稠密块和过渡层。稠密块连接输入和输出,过渡层(1×1的卷积层)控制通道数。
凸优化
优化方法的目标是降低训练集的损失而深度学习的目标是降低泛化误差,即测试集的损失。两者目标不同,易产生不好的效果。
优化方法容易产生的问题:
- 得到局部最小解,而非全局最优解
- 鞍点(导数为0但不是极值的点)
- 梯度消失
凸优化可以解决以上问题。它是指定义在凸集中的凸函数最优化的问题。凸优化的局部最优值一定是全局最优值。
- 凸集定义:对于任意 x , y ∈ C x,y∈C x,y∈C和任意 θ ( 0 ≤ θ ≤ 1 ) \theta(0≤\theta≤1) θ(0≤θ≤1)时,如果满足 θ x + ( 1 − θ ) y ∈ C \theta x+(1-\theta)y∈C θx+(1−θ)y∈C,那么 C C C是凸集。其几何意义是取该集合内任意两点得到一个线段,若该线段完全落在该集合内,那么这个集合就是凸集。
- 凸函数:对于定义域是凸集,函数 f f f上任意 x , y ∈ C x,y∈C x,y∈C和任意 θ ( 0 ≤ θ ≤ 1 ) \theta(0≤\theta≤1) θ(0≤θ≤1),如果满足 f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(\theta x+(1-\theta)y)≤\theta f(x)+(1-\theta)f(y) f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y),那么函数 f f f是凸函数。
- 凸优化问题: m i n f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , 2 , … , m h j ( x ) = 0 , j = 1 , 2 , … , n \begin{aligned}min \quad &f(x)\\s.t.\quad &g_i(x)≤0,i=1,2,\dots,m\\&h_j(x)=0,j=1,2,\dots,n\end{aligned} mins.t.f(x)gi(x)≤0,i=1,2,…,mhj(x)=0,j=1,2,…,n其中 f ( x ) , g ( x ) f(x),g(x) f(x),g(x)为凸函数, h ( x ) h(x) h(x)为仿射函数。