《动手学》打卡挑战-task06

简介

ElitesAI·动手学深度学习PyTorch版
《动手学深度学习PyTorch版》在线书籍
本部分为Task06:批量归一化和残差网络凸优化;梯度下降,这一部分都是深度学习里不算太基础,但也是需要理解的部分,正好让我补一下= =

批量归一化和残差网络

批量归一化(BatchNormalization,BN)

批量归一化,也称为BN层。(我看英文都一样,应该是)。其用途有以下两点:

  • 对输入的标准化(浅层模型)
    处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。
    标准化处理输入数据使各个特征的分布相近
  • 批量归一化(深度模型)
    利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。

    批量归一化的用途

    1.对全连接层做批量归一化
    位置:全连接层中的仿射变换和激活函数之间。
    全连接: 批量归一化:这⾥ϵ > 0是个很小的常数,保证分母大于0引入可学习参数:拉伸参数γ和偏移参数β。若$\boldsymbol{\gamma} = \sqrt{\boldsymbol{\sigma}_\mathcal{B}^2 + \epsilon}$和$\boldsymbol{\beta} = \boldsymbol{\mu}_\mathcal{B}$,批量归一化无效。
2.对卷积层做批量归⼀化

位置:卷积计算之后、应⽤激活函数之前。
如果卷积计算输出多个通道,我们需要对这些通道的输出分别做批量归一化,且每个通道都拥有独立的拉伸和偏移参数。
计算:对单通道,batchsize=m,卷积计算输出=pxq
对该通道中m×p×q个元素同时做批量归一化,使用相同的均值和方差。

3.预测时的批量归⼀化

训练:以batch为单位,对每个batch计算均值和方差。
预测:用移动平均估算整个训练数据集的样本均值和方差。

残差网络(ResNet)

深度学习的问题:深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,准确率也变得更差。

残差块(Residual Block)

恒等映射:
左边:f(x)=x
右边:f(x)-x=0 (易于捕捉恒等映射的细微波动)
Image Name
在残差块中,输⼊可通过跨层的数据线路更快地向前传播。

稠密连接网络(DenseNet)

Image Name

主要构建模块:

稠密块(dense block): 定义了输入和输出是如何连结的。
过渡层(transition layer):用来控制通道数,使之不过大。

凸优化

优化与深度学习的目标

尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同。

  • 优化方法目标:训练集损失函数值
  • 深度学习目标:测试集损失函数值(泛化性)

    优化在深度学习中的挑战

  1. 局部最小值
    局部最小值
  2. 鞍点
    鞍点
  3. 梯度消失
    梯度消失

    优化问题限制条件的解决方法

  • 拉格朗日乘子法
  • 添加惩罚项
  • 投影法

梯度下降

一维梯度下降

证明:沿梯度反方向移动自变量可以减小函数值
泰勒展开:

代入沿梯度方向的移动量 $\eta f^{\prime}(x)$:

多维梯度下降

随机梯度下降

对于有 $n$ 个样本对训练数据集,设 $f_i(x)$ 是第 $i$ 个样本的损失函数, 则目标函数为:

其梯度为:

使用该梯度的一次更新的时间复杂度为 $\mathcal{O}(n)$
随机梯度下降更新公式 $\mathcal{O}(1)$:

且有:

e.g.

0%