深度神经网络综合知识

一、知识点介绍

1、卷积层(CNN)

(1)计算方式
卷积核每个通道与输入的每个对应通道位置的像素数据相乘,然后将所有想乘结果想加,得到新的图像的一个像素点,文字有点抽象,我们看图:
在这里插入图片描述
左边是5 * 5 * 3的输入图片大小,卷积核为3 * 3 * 3,输出大小为3 * 3 * 1(例子中假设,填充padding=0,步长stride=1),输出是3 * 3 * 1的计算公式见下边。
(2)卷积输出计算公式
(n+2p-f)/s + 1
其中:
n:图像宽width或高height(如上图,width=height=5)
p:padding大小
f:filter卷积核对应的宽或高(卷积核一般宽等于高,如上图)
s:stride卷积步长

2、池化层(pooling layer)

作用:缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
(1)最大池化(max pooling)
比如经过f=2*2,s=2池化后,那么该层的数据将缩小一半,其计算方式依然可以沿用(n+2p-f)/s + 1

最大化运算的实际作用就是:如果在过滤器中提取到某个特征,那么保留其最大值,当然如果某个区域,没有提取到特征,其最大值也会很小。

池化层,只有一组超级参数,没有需要学习的参数,是一个固定运算,所以不增加模型复杂度,梯度下降无需改变任何参数,可以看成是神经网络某一层的静态属性。池化层的超级参数,可能手动设置,也可能是交叉验证设置
(2)平均池化(avg pooling)
顾名思义,将输出平均值,而不是最大值。

3、批标准化(Batch Normalization)

BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

THAT’S IT。其实一句话就是:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。因为梯度一直都能保持比较大的状态,所以很明显对神经网络的参数调整效率比较高,就是变动大,就是说向损失函数最优值迈动的步子大,也就是说收敛地快。BN说到底就是这么个机制,方法很简单,道理很深刻。

4、Dropout

参考链接

5、Inception module

Inception Module是GoogLeNet的核心组成单元,Inception Module基本组成结构有四个成分。1 * 1卷积,3 * 3卷积,5 * 5卷积,3 * 3最大池化。最后对四个成分运算结果进行通道上组合。这就是Inception Module的核心思想。通过多个卷积核提取图像不同尺度的信息,最后进行融合,可以得到图像更好的表征。其增加了网络的宽度,增加了网络对尺度的适应性,不同的支路的感受野是不同的,所以有多尺度的信息在里面。

6、残差网络(Residual network)

对于传统的深度学习网络,我们普遍认为网络深度越深(参数越多)非线性的表达能力越强,该网络所能学习到的东西就越多。我们凭借这一基本规则,经典的CNN网络从LetNet-5(5层)和AlexNet(8层)发展到VGGNet(16-19),再到后来GoogleNet(22层)。根据VGGNet的实验结果可知,在某种程度上网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征模式的提取,所以当模型更深时理论上可以取得更好的结果。

但是更深的网络其性能一定会更好吗?我们后来发现传统的CNN网络结构随着层数加深到一定程度之后,越深的网络反而效果更差,过深的网络竟然使分类的准确率下降了(相比于较浅的CNN而言)。
为什么CNN网络层数增加分类的准确率却下降了呢?难道是因为模型参数过多表达能力太强出现了过拟合?难道是因为数据集太小出现过拟合?显然都不是!!!我们来看,什么是过拟合呢?过拟合就是模型在训练数据上的损失不断减小,在测试数据上的损失先减小再增大,这才是过拟合现象。随着网络层数增加,在训练数据上的损失越来越大,我们把这种问题称之为网络退化问题(Degradation problem)。

我们知道深层网络存在着梯度消失或者爆炸的问题,这使得深度学习模型很难训练。但是现在已经存在一些技术手段如BatchNorm来缓解这个问题。因此,出现深度网络的退化问题是非常令人诧异的。

于是针对退化问题,才有了残差网络的发明,发明者何恺明举了一个例子:考虑一个训练好的网络结构,如果加深层数的时候,不是单纯的堆叠更多的层,而是堆上去一层使得堆叠后的输出和堆叠前的输出相同,也就是恒等映射/单位映射(identity mapping),然后再继续训练。这种情况下,按理说训练得到的结果不应该更差,因为在训练开始之前已经将加层之前的水平作为初始了,然而实验结果结果表明在网络层数达到一定的深度之后,结果会变差,这就是退化问题。这里至少说明传统的多层网络结构的非线性表达很难去表示恒等映射(identity mapping),或者说你不得不承认目前的训练方法或许有点问题,才使得深层网络很难去找到一个好的参数去表示恒等映射(identity mapping)。

7、参数初始化
(1)全0初始化

全0初始化最为简单,但不适合采用。因为如果将神经网络中参数全部初始化为0,那么每个神经元就会计算出相同的结果,在反向传播的时候也会计算出相同的梯度 ,最后导致所有权重都会有相同的更新。换句话说,如果每个权重都被初始化成相同的值,那么权重之间失去了不对称性。

(2)随机初始化

我们希望权重初始化的时候能够尽量靠近0,但是不能全都等于0 ,所以可以初始化权重为一些靠近0的随机数,通过这个方式可以打破对称性。这里面的核心 想法就是神经元最开始都是随机的、唯一的,所以在更新的时候也是作为独立的部分,最后一起合成在神经网络当中。

一般的随机化策略有高斯随机化 、均匀随机化等,需要注意的是并不是越小的随机化产生的结果越好,因为权重初始化越小,反向传播中关于权重的梯度也越小,因为梯度与参数的大小是成比例的,所以这会极大地减弱梯度流的信号,容易导致梯度消失问题。

(3)稀疏初始化

另外一种初始化的方法就是稀疏初始化,将权重全部初始化为 0 。然后为了打破对 称性,在里面随机挑选一些参数附上一些随机值。这种方法的好处是参数占用的内存较少,因为里面有较多的0,但是实际中使用较少。

(4)初始化偏置(bias)

通常使用0对偏置项b进行初始化。

(5)批标准化(Batch Normalization)

这不是初始化方法,这里主要说明其对初始化的影响。批标准化的核心想法是标准化这个过程是可微的,减少了很多不合理初始化的问题,所以可以将标准化过程应用到神经网络的每一层中做前向传播和反向传播,通常批标准化应用在全连接层后面 、非线性层前面。

实际中批标准化已经变成了神经网络中的一个标准技术,特别是在卷积神经网络 中,它对于很坏的初始化有很强的鲁棒性,同时还可以加快网络的收敛速度。另外,批标准化还可以理解为在网络的每一层前面都做数据的标准化预处理。

8、全连接层
9、分类器
softmax
def softmax(numbers):
	numbers = np.array(numbers)
	numbers -= np.max(numbers)
	exp_numbers = [np.exp(n) for n in numbers]
	return [ n / sum(exp_numbers) for n in exp_numbers]

s o f t m a x ( x i ) = e i x ∑ j ∈ N N e x j softmax(x_i)=\frac{e^x_i}{\sum_{j\in N}^N e^{x_j}} softmax(xi)=jNNexjeix

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值