卷积神经网络的基本模块
视觉基本问题:图像分类、目标识别、目标检测、图像分割、目标分割。
卷积层
- 卷积运算:对应位置相乘结果在相加
- 如果不考虑反卷积(转置卷积)的话,常用的卷积方式有两种,一种是Valid,一种是SAME,下面将分情况讨论这个问题(下面特征图大小的计算场景为:n * n的图片经过f * f的卷积核以步长为s、padding为p卷积运算后特征图的大小)
- Valid方式:这种方式的话,待处理图片不做padding处理,卷积过程中,如果图像剩余的像素数量不能够覆盖卷积核的大小,则放弃这部分像素
特征图大小的计算:
width =
height = - SAME方式:
这种方式卷积的卷积过程中,对图像进行了padding操作(在图像周围补一圈0),这样做是为了保证所有的像素都参与卷积,如何保证你呢?设置p(padding的圈数)为。
特征图大小的计算方式:
width =
height =
需要注意的是,SAME并不能保证卷积的输出和源图片大小相同,只有stride为1且卷积方式为SAME时卷积输出才和原图等大。SAME方式卷积特征图大小的计算方式还有一个更加通用的公式:
width =
height = - 卷积间隔(dilation):卷积对于输入数据体的空间间隔表示隔几个数据体做一次卷积
- 分组卷积(groups):表示输出数据体深度和输入数据体深度上的联系,group = 1表示输出和输入是全链接的,group = n表示出入和输出被分为n组,每组的输入和输出是全链接的。
池化层
池化层的输入一般是圈基层,其作用是试特征具有鲁棒性,同时减少参数的数量,进而防止过拟合的发生。池化层没有参数,所以反向传播时只需对输入参数求导,不需要进行权值更新
- 池化层的反向传播:
- max-pooling:
这种情况下,只有最大值对下一层有贡献,所以应该将残差传递到对应的位置,其他的位置置0,所以在进行前向计算时就应该记录下最大值在pooling窗口中的位置。 - mean-pooling:
这种情况下,所有值对下一层有贡献,反向传播时需要将残差分成n * n份(n为pooling的边长),分别传递到上一层即可。
- max-pooling:
激活函数
- sigmoid函数:
表达式:
导数:
总结:- 优点
1、最大的优势是容易求导
2、将值映射到0~1之间,很像概率 - 缺点
1、指数运算拖慢了运算速度
2、函数输出不以0为中心,这导致了权重更新速率下降
3、sigmoid有一个梯度饱和区,这是深度学习中梯度弥散的基本原因
- 优点
- tanh函数:
表达式:
导数
总结:
tanh是双正切函数,tanh函数和sigmoid函数比较相近的,一般在二分类问题中,隐藏层用tanh函数激活,输出层用sigmoid函数激活,不过这也不是一成不变,仍需具体问题具体分析。- 优点:
1、易求导
2、将值映射到-1~1之间 - 缺点:
1、和sigmoid一样,存在梯度饱和区,也会引起梯度弥散
- 优点:
- ReLU函数:修正线性单元
表达式:
求导:
x > 0:导数为1
x <= 0 : 导数为0
总结:- 优点:
1、易求导
2、输入为正数时,不存在梯度饱和区
3、运算速度快 - 缺点:
1、输入小于等于0时,ReLU完全不被激活,这在前向传播时无伤大雅,甚至会降低过拟合,但是反向传播时,就会出现和sigmoid和tanh一样的问题,即:梯度弥散
2、ReLU的输出要么是0,要么大于0,可见它也不是以0为中心,会拖慢参数更新速率
- 优点:
- ELU函数
表达式:
图像:
来源
总结:
ELU是针对ReLU的改进,从图像可以看出,为负的情况ELU仍会被激活,不过仍会有梯度饱和的问题,并带来了指数运算。
- PReLU(Leaky ReLU)函数
表达式
总结:
PReLU也是针对ReLU的一个改进,避免了ReLU在负数区死掉的问题,和ELU相比也具有一定的优势 - softmax函数
以上所有激活函数各有优缺点,需要我们在实际中通过实验决定具体运用。
卷积层和全连接层
- 卷积层变为全连接层,只需要把权重变化为一个巨大的矩阵,其中大部分都是0除了一些特定的区块(局部感知)很多区块的权值还相同(权值共享)
- 全连接层变为卷积层,k=4096的全连接层,输入层大小为7 * 7 * 512,它等效为一个F = 7,P = 0, S = 1, K = 4096的卷积层,此时filter size正好为输入层的大小。
网友评论