《动手学深度学习》批量归一化和残差网络;凸优化;梯度下降

北慕城南 提交于 2020-02-22 06:54:34

批量归一化和残差网络

对全连接层做批量归一化

归一化增加在全连接层激活函数之前,全连接层输入为uu,批量归一化运算符BNBN,那么使用批量归一化的全连接层的输出为:
ϕ(BN(x))\phi(\text{BN}(\boldsymbol{x}))
其中批量归一化输入xx由仿射变换
x=Wu+bx=Wu+b得到
对于一个由mm个样本组成的小批量,仿射变换的输出为一个新的小批量 B=x(1),...,x(m)B=x^{(1)},...,x^{(m)},他们是批量归一化曾的输入。批量归一化层的输出为:
y(i)=BN(x(i))y^{(i)}=BN(x^{(i)})
批量归一化:求批量的均差和方差:
μB1mi=1mx(i),σB21mi=1m(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
x(i)x^{(i)}做归一化:
x^(i)x(i)μBσB2+ϵ\hat{\boldsymbol{x}}^{(i)} \leftarrow \frac{\boldsymbol{x}^{(i)} - \boldsymbol{\mu}_\mathcal{B}}{\sqrt{\boldsymbol{\sigma}_\mathcal{B}^2 + \epsilon}}
这⾥ϵ>0ϵ > 0是个很小的常数,保证分母大于0
这便完成了归一化。之后引入两个可学习的模型参数,拉伸γ\boldsymbol{\gamma}偏移参数β\boldsymbol{\beta}
做计算:
y(i)γx^(i)+β.{\boldsymbol{y}}^{(i)} \leftarrow \boldsymbol{\gamma} \odot \hat{\boldsymbol{x}}^{(i)} + \boldsymbol{\beta}.
γ=σB2+ϵ\boldsymbol{\gamma} = \sqrt{\boldsymbol{\sigma}_\mathcal{B}^2 + \epsilon}β=μB\boldsymbol{\beta} = \boldsymbol{\mu}_\mathcal{B},批量归一化无效,即这两个参数保留了不对x^(i)\hat{\boldsymbol{x}}^{(i)}做归一化的可能。

对卷积层做批量归一化

归一化在卷积计算之后,激活函数之前。若输出多通道,则对各通道输出分别归一化,且每个通道都拥有独立的拉伸和偏移参数。

残差网络(ResNet)

在实践中,添加过多的层后训练误差往往不降反升。针对这一问题,何凯明等人提出了残差网络。
在这里插入图片描述
恒等映射:
左边:f(x)=x
右边:f(x)-x=0 (易于捕捉恒等映射的细微波动)

ResNet模型

卷积+
批量归一化+
激活函数ReLU+
最大池化+
残差块*4+
全局平均池化+
全连接

稠密连接网络(DenseNet)

在这里插入图片描述

与残差网络不同的是,稠密连接网络将相加变成了连结。
由于连结,会导致其通道数过大,所以在连结后增加过渡层,控制通道数。

过渡层

1×11×1卷积层+ -> 减小通道数
步幅22的平均池化层 -> 减半高和宽

DenseNet模型

卷积+
批量归一化+
激活函数ReLU+
最大池化层+
稠密块*4+
全局平均池化层+
全连接

凸优化

深度学习与凸优化

尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。
· 优化方法目标:训练集损失函数值
· 深度学习目标:测试集损失函数值(泛化性)
在这里插入图片描述

优化在深度学习中的挑战

1、局部最小值
在这里插入图片描述
在优化的过程中容易陷入局部最小值,虽然在局部梯度接近0,但是其效果并不好。
2、鞍点
在这里插入图片描述
落入如图马鞍面,目标函数在xx轴方向上是局部最小值
但是在yy轴方向是局部最大值。
3、梯度消失
在这里插入图片描述

优化落入梯度很小的位置,会使梯度下降很缓慢,优化过程很慢。

凸性

凸集: 如果CC中任意两点间的线段仍然在CC中,即对于任意x1,x2Cx_1,x_2\in C和满足0θ10\le\theta\le1θ\theta都有
θx1+(1θ)x2C\theta x_1+(1-\theta)x_2\in C
粗略的,如果集合中的每一个点都可以被其他点沿着它们之间一条无障碍的路径看见,那么这个集合就是凸集。
凸函数: 函数f:RnRf:R^n\to R是凸的,如果domfdom f是凸集,且对于任意x,ydomfx,y\in dom f和任意0θ10\le\theta\le1,有:
f(θx+(1θ)y)θf(x)+(1θ)f(y)f(\theta x+(1-\theta)y)\le\theta f(x)+(1-\theta)f(y)
在这里插入图片描述

Jensen不等式

iαif(xi)f(iαixi) and Ex[f(x)]f(Ex[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)

凸函数性质

1、无局部最小值
2、与凸集
对于凸函数$ f(x)$,定义集合 Sb:={xxX and f(x)b}S_{b}:=\{x | x \in X \text { and } f(x) \leq b\},则集合 SbS_b 为凸集
3、与二阶导数
f(x)0f(x)f^{''}(x) \ge 0 \Longleftrightarrow 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)
接下来找一个常数η>0\eta>0,使得ηf(x)|\eta f'(x)|足够小,可以将ϵ\epsilon替换为ηf(x)-\eta f'(x)并得到
f(xηf(x))=f(x)ηf2(x)+O(η2f2(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)=0f'(x)=0,那么ηf(x)2>0\eta f'(x)^2>0所以
f(xηf(x))f(x)f\left(x-\eta f^{\prime}(x)\right) \lesssim f(x),这意味着,通过xxηf(x)x \leftarrow x-\eta f^{\prime}(x)来迭代xx,函数f(x)f(x)的值可能会降低。

多维

多维目标函数f(x)f(x)有关xx的梯度是一个由dd个偏导数组成的向量:
f(x)=[f(x)x1,f(x)x2,,f(x)xd]\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)xi\frac{\partial f(\mathbf{x})}{\partial x_{i}}代表着ffxx有关输入xix_i的变化率。
我们定义ffxx上沿着uu方向的方向导数为
Duf(x)=limh0f(x+hu)f(x)hD_uf(x)=lim_{h\to 0}\frac{f(x+hu)-f(x)}{h}
根据方向导数性质,以上方向导数改写为
Duf(x)=f(x)uD_uf(x)=\nabla f(x)\cdot u
方向导数Duf(x)D_uf(x)给出了ffxx上沿着所有可能方向的变化率,我们希望找到ff能被降低最快的方向。
由于Duf(x)=f(x)ucos(θ)=f(x)cos(θ)D_uf(x)=||\nabla f(x)||\cdot ||u||\cdot cos(\theta)=||\nabla f(x)||\cdot cos(\theta),其中θ\theta为梯度f(x)\nabla f(x)和单位向量uu之间的夹角,当θ=π\theta = \pi时,cos(θ)cos(\theta)取得最小值1-1。因此,当uu在梯度方向f(x)\nabla f(x)的相反方向时方向梯度Duf(x)D_uf(x)被最小化。
因此优化公式为:
xxηf(x)\mathbf{x} \leftarrow \mathbf{x}-\eta \nabla f(\mathbf{x})

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!