大家好,欢迎来到IT知识分享网。
一、卷积层
1. 卷积核
1.1 卷积操作
上图中的蓝色矩阵为输入的图像,维度为[5, 5, 3],经过0值填充后(灰色值为0部分),维度变为[7, 7, 3],粉色矩阵为卷积层的神经元,这里有两个神经元(w0, w1),每个神经元的维度为[3, 3, 3],步长设置为2,即每个窗口滑动的长度。
蓝色矩阵的输入数据,与filter(粉色矩阵)的权重数据进行矩阵内积计算,将结果与偏置值bias相加,得到的结果为绿色输出矩阵中的一个值。
以第一个窗口计算为例:
[0x1+0x1+0x(-1)+0x(-1)+0x0+1×1+0x(-1)+0x(-1)+1×0] +[0x(-1)+0x0+0x(-1)+0x0+1×0+1x(-1)+0x1+0x(-1)+2×0] + [0x0+0x1+0x0+0x1+2×0+0x1+0x0+0x(-1)+0x1] + 1 = 1
2. 输出层计算公式
3.计算量分析
输入图像C×H×W,卷积核为Cf× K1×K2,N表示卷积核的个数。
计算量= C×H×W×Cf×K1×K2
有bias
计算量 = C×H×W×(Cf×K1×K2 +1)
4.参数量计算
参数量= Cf×K1×K2×C
bias参数量Cout
总参数量 = Cf×K1×K2×C +Cout
二、BN层
1. 为什么要进行BN?
为了训练参数更好更有效地向前传播
为什么参数会出现不好传播的情况呢?主要原因是激活函数的使用。为了增加模型的非线性表达能力,在层与层之间常常加上一层激活函数。而这层激活函数的存在会使得数据分布产生变化,大部分激活函数都会有一个敏感区间,而非敏感区间的数据有可能就在多层的参数传递后丢失了。尤其是在层数特别深的情况下,未经过标准化的数据起到的作用相当有限。
所以,BN层的作用是把一个mini-batch内的所有数据,从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的梯度较大的区域,因此也提高了泛化能力,可以在一定程度上解决梯度消失的问题,同时可以减少dropout的使用。
当参数更好地向前传播后,梯度的下降会更加稳定,可以使用更大的学习率来加快学习。对数据分布的不断调整也减轻了对参数初始化的依赖,利于整体调参。
2.BN操作步骤
- 计算mini-batch中的均值
- 计算mini-batch内的方差
- 对每一个元素进行归一化(normalize)
- 进行尺度缩放与偏移操作(scale and shift):偏移和尺度为参数,通过训练来学习,目的是为了补偿网络的非线性表达能力。
2.1 为什么是mini-batch?
主要是由于目前主流的梯度更新方式是mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。
2.2为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后
因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除它的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。
3. Batch Normalization 优缺点
3.1 Batch Normalization 优点
- 可以加快模型收敛速度 ,不再依赖精细的参数初始化过程。
- 可以调大学习率,控制梯度爆炸,防止梯度消失等。
- 同时引入的随机噪声 能够起到对模型参数进行正则化的作用,有利于增强模型泛化能力,防止过拟合。
- 不仅仅极大提升了训练速度,收敛过程大大加快,还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果。另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。总而言之,经过这么简单的变换,带来的好处多得很,这也是为何现在BN这么快流行起来的原因。
3.2 Batch Normalization 不足
- 如果 Batch Size 太小,则 BN 效果明显下降。因为在小的 BatchSize 意味着数据样本少,因而得不到有效统计量,也就是说噪音太大。
- 对于有些像素级图片生成任务来说,BN 效果不佳;对于图片分类等任务,只要能够找出关键特征,就能正确分类,这算是一种粗粒度的任务,因为在 Mini-Batch 内多张无关的图片之间计算统计量,弱化了单张图片本身特有的一些细节信息
- RNN 等动态网络使用 BN 效果不佳且使用起来不方便
- 训练时和推理时统计量不一致
三、激活函数
1.激活函数定义?
激活函数 (Activation functions) 对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。
2.激活函数必要性
3.常用激活函数
3.1 Sigmoid 函数
3.2 正切函数
3.3 Relu激活函数
一般可以采用Xavier初始化方法,同时将learning rate设置为合理的范围,可以避免Dead ReLU Problem现象。
3.4 Leaky ReLU函数
3.4 ELU(Exponential Linear Units)函数
函数表达式:
f ( x ) = { x , x > 0 α ( e 2 − 1 ) , o t h e r w i s e f(x) = \begin{cases} x , & x>0 \\ \alpha (e^2 -1), &otherwise \\ \end{cases} f(x)={
x,α(e2−1),x>0otherwise
函数与导数图像如下:
ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及不会有Dead ReLU问题和输出的均值接近0,zero-centered。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117979.html


