深度学习_10_4_经典卷积网络VGG,GoogLeNet,Inception-1&BatchNorm

10_4_经典卷积网络VGG,GoogLeNet,Inception-1&BatchNorm

ImageNet

AlexNet错误率减了10个百分点

VGG……

在这里插入图片描述

LeNet-5

2卷积层+3

在这里插入图片描述

AlexNet

5卷积层+3

准确率提升

使用了pooling结构

引进ReLU

引入Dropout

在这里插入图片描述

VGG

6个版本,VGG-11 VGG-16 VGG-19……

小窗口3*3、1*1,感受小视野。减少了计算量,并且不损害进度,而且计算很快。

在这里插入图片描述

1*1 Convolution

1*1卷积,输出图像大小是一样的。对整个32个通道做convolution,channel变化,实现了维度的改变。

目前常用的是1*1与3*3

在这里插入图片描述

GoogLeNet

探索出:使用更小的卷积核;

对同一层,使用多个不同类型的卷积核

  • 前面3个的stride一定变成2,对图片大小保持一样,后面
  • Filter concatenation:把来自于不同类型的核再做一个concat

通过这种方法,感受不同大小的视野,全局和局部的信息,获得更多信息量。

在这里插入图片描述

具体结构:

在这里插入图片描述

Stack more layers?

降低loss并不能简单地堆叠层,但是ResNet能解决这个问题。

在这里插入图片描述

Batch Normalization

Intuitive explanation

对于Sigmoid函数,在x<-4或>4的时候是很大的空间,导数接近于0,出现梯度离散的情况。一旦输入不在这个有效的空间里,就会出现梯度为0的情况,很长时间得不到更新,这不是我们希望的。因此会避免使用sigmoid函数,而使用ReLU函数。

如果一定要用sigmoid函数,那么我们需要把输入的值控制在有效的范围之内,做Normalization操作,做等效变换,N(0, σ 2 \sigma^2 σ2),以0为均值, σ \sigma σ为方差。促使落在有效区间附近,在小的范围之内变动,方便优化。

在这里插入图片描述

在这里插入图片描述

Feature scaling 权值缩放思想

  • Image Normalization

图片预处理中,有Image Normalization的步骤,图片数据从[0,255]映射到[0,1]的浮点数的空间,是在0的右侧的分布。

在深度学习,希望数据在x的周围分布,左右对等的分布。直观的原因:比如sigmoid函数的图像,当x比较大或小的时候,梯度趋向于0,我们希望神经网络的值能够在0的周围对称分布

x − m e a n x-mean xmean为平移, x / s t d x/std x/std为放缩,把数值放到0的周围。通过平移+放缩,移到[-0.5,0.5]或[-1,1]之间。

  • Batch Normalization
    • mean均值与std方差是动态的
    • 根据具体数据进行动态的计算与调整
    • 并且还增加了映射的功能 β \beta β γ \gamma γ

在这里插入图片描述

Batch Norm

4种Normalization。

N张图片,C个channel,H和W。把前面叫做1个batch。把H和W通道混在一起,[N,C,HW]。N=6,表示6章图片;C假设=3,3个channel;HW=784。

Batch Norm,生成只有channel可以移动的数据,[6,3,784]->[3]。对每个channel,生成其均值与方差。取所有的实例上的channel0(1、2)上的feature的均值。生成dimension为1,shape为3的数据,代表当前batch每个channel的feature的均值与方差。消除了b(batch)和F(feature)维度,保留了channel维度。

Layer Norm类似。

在这里插入图片描述

Batch normalization

(6,784) ch0。。,这3个channel做统计数据,生成dimension为1,长度为3的统计数据。得到统计数据后,把每一个feature-统计数据 /除以 方差,这个分布就接近于以0为中心,以1为方差的分布。

根据需要,得到中间值之后,额外的 倍数 γ \gamma γ 和 偏置 β \beta β。生成N( β \beta β, γ \gamma γ)的分布。

这样,均值 μ \mu μ和方差 σ \sigma σ是根据当前的batch数据统计出来的,且batch会有历史的记录,总的均值 r u n n i n g _ μ running\_\mu running_μ与总的方差 r u n n i n g _ σ 2 running\_\sigma^2 running_σ2 γ \gamma γ β \beta β是学出来的, γ \gamma γ初始化为1, β \beta β初始化为0,通过梯度信息慢慢会学。

在这里插入图片描述

Pipeline

第1步,统计batch的均值,方差

第2步,Normalize操作,减去均值除以方差;再缩放,缩放成N( β \beta β, γ \gamma γ)。

另外, r u n n i n g _ μ running\_\mu running_μ r u n n i n g _ σ 2 running\_\sigma^2 running_σ2还需要更新,根据当前的 μ \mu μ σ 2 \sigma^2 σ2进行更新;

γ \gamma γ β \beta β是需要梯度信息,这两个参数会自动更新。

在这里插入图片描述

layers.BatchNormalization

net=layers.BatchNormalization()

在tensorflow实现BN(BatchNormalization)层。

它是通用层,不分1D、2D、3D……本质上来说,BatchNormalization只需要指定维度,比如说对c维度做batchNormalization,只需要得到RGB3个通道上的均值即可,只需要指定参数axis,叫做轴,默认指定最后一个轴。

center对应 β \beta β,平移量,如果不需要它,设置成False

scale对应 γ \gamma γ,缩放量,如果不需要它,设置成False

trainable意味着上面两个参数是否需要反向传播

net(x,training=None)

层的模式,训练模式与测试模式的行为是不同的

训练模式时,running_mean与running_std是更新的。

在这里插入图片描述


代码

gamma、beta

moving_mean表示全局的均值,moving_variance表示全局的方差,它们在前向传播时会实时更新。

推荐out=net(x,training=True)表示是在训练。

在这里插入图片描述

BatchNorm for Image

图片的例子。初始化x为均值为1,方差为0.5的分布,BatchNormalization的目的就是把分布映射到0的周围的分布。

在这里插入图片描述

Forward update

训练模式下前向传播的moving_mean和moving_variance的更新。

设定维度axis=3,也就是最后一个维度RGB。

moving_mean会从0逐渐靠近到mean1

moving_variance会从1逐渐靠近到stddev0.5

在这里插入图片描述

Backward update

loss函数是随便写的。在反向传播时,gamma和beta会变化,这是在训练模式。

在测试模式下,gamma、beta、moving_mean、moving_variance它们4个都不会更新。

在这里插入图片描述


Visualization

看效果,有虚线表示有batch normalize,收敛速度会变快,精度也会提升。

batch Normalization的目的就是将N(100,10)等等这样的分布变成N(0,1)的分布。变成在0附近,方差比较小的范围。由于还有N( β \beta β, γ \gamma γ),会有一定的平移和缩放。

在这里插入图片描述

[外链图片转存中…(img-nr5oeEnu-1621043696739)]

Advantage

  • 收敛速度更快Converge faster,因为不再处于sigmoid的饱合区域,梯度信息更大,更加容易搜索到最优解
  • 更好的表现Better performance
  • 更稳定了,参数的调整变得方便;lr的范围就可以比较大一些;超参的调整不会那么敏感

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值