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