CNN的一些计算方法和知识点
计算方法
卷积层参数个数计算:
p
a
r
a
m
s
=
m
∗
m
∗
c
h
a
n
n
e
l
s
∗
k
e
r
n
e
l
s
+
b
i
a
s
params = m*m*channels*kernels+bias
params=m∗m∗channels∗kernels+bias
m:卷积核宽度
channels:通道数
kernels:卷积核个数
bias:每个卷积核都有一个bias
卷积操作图片大小计算:
h o u t = ( h i n − h k e r n e l + 2 ∗ p a d d i n g ) / s t r i d e + 1 h_{out} = (h_{in}-h_{kernel}+2*padding)/stride +1 hout=(hin−hkernel+2∗padding)/stride+1
知识点
梯度消失:
多个方面去理解:
- 从激活函数和梯度计算的方面来理解:
梯度计算是通过链式求导,梯度是一连串偏导相乘,而以sigmoid激活函数为例,其导数的值域<0.25,则通常求导的结果通常会<1,随着深度增加,求梯度就乘越多的小于1的偏导数,梯度会逐渐变小,甚至消失。相反,若激活函数的导数>1,那么随深度增加梯度就会逐渐变大,出现梯度爆炸。所以出现了ReLU激活函数。 - 从激活函数的输入来看
因为深层神经网络在做非线性变换前的激活输入值(就是那个Wx+b,x是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值Wx+b是大的负值或正值,在这个区间上其梯度很小),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因
1x1卷积核作用
- 改变维度,若降低维度可以减少参数(本文未改变通道数)
- 作用是在不影响输入输出维数的情况下,对输入线进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力。
- 在CNN模型中,我们可能有多个卷积核,在同一空间位置但在不同通道的卷积核的输出结果相关性极高。我们可以使用1*1的卷积很自然的把这些相关性很高的、在同一空间位置但是不同通道的特征连接在一起。
如果卷积网络在靠近输入的层与靠近输出的层之间包含更短的连接,那么卷积网络的深度可以显著增加,准确度更高,并且更易于训练。
新结构的提出过程:
- 全连接的级联网络 --CNN–旁路与门路结构,Highway Network—Stochastic depth—增加网路的宽度也是一种提升网络效果的方法(Inception)