前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >卷积神经网络 CNN

卷积神经网络 CNN

作者头像
发布2018-09-04 11:44:26
6720
发布2018-09-04 11:44:26
举报
文章被收录于专栏:WD学习记录WD学习记录

卷积层

  • 深度/depth(解释见下图)
  • 步长/stride (窗口一次滑动的长度)
  • 填充值/zero-padding

参数共享机制   在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。

池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。 简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

这里再展开叙述池化层的具体作用。

1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

3. 在一定程度上防止过拟合,更方便优化。

归一化层:

1. Batch Normalization

Batch Normalization(批量归一化)实现了在神经网络层的中间进行预处理的操作,即在上一层的输入归一化处理后再进入网络的下一层,这样可有效地防止“梯度弥散”,加速网络训练。

Batch Normalization具体的算法如下图所示: 

每次训练时,取 batch_size 大小的样本进行训练,在BN层中,将一个神经元看作一个特征,batch_size 个样本在某个特征维度会有 batch_size 个值,然后在每个神经元 xixi 维度上的进行这些样本的均值和方差,通过公式得到 xi∧xi∧,再通过参数 γγ 和 ββ 进行线性映射得到每个神经元对应的输出 yiyi 。在BN层中,可以看出每一个神经元维度上,都会有一个参数 γγ 和 ββ ,它们同权重ww一样可以通过训练进行优化。

在卷积神经网络中进行批量归一化时,一般对 未进行ReLu激活的 feature map进行批量归一化,输出后再作为激励层的输入,可达到调整激励函数偏导的作用。

一种做法是将 feature map 中的神经元作为特征维度,参数 γγ 和 ββ 的数量和则等于 2×fmapwidth×fmaplength×fmapnum2×fmapwidth×fmaplength×fmapnum,这样做的话参数的数量会变得很多;

另一种做法是把 一个 feature map 看做一个特征维度,一个 feature map 上的神经元共享这个 feature map的 参数 γγ 和 ββ ,参数 γγ 和 ββ 的数量和则等于 2×fmapnum2×fmapnum,计算均值和方差则在batch_size个训练样本在每一个feature map维度上的均值和方差。

注:fmapnumfmapnum指的是一个样本的feature map数量,feature map 跟神经元一样也有一定的排列顺序。

Batch Normalization 算法的训练过程和测试过程的区别:

在训练过程中,我们每次都会将 batch_size 数目大小的训练样本 放入到CNN网络中进行训练,在BN层中自然可以得到计算输出所需要的 均值 和 方差 ;

而在测试过程中,我们往往只会向CNN网络中输入一个测试样本,这是在BN层计算的均值和方差会均为 0,因为只有一个样本输入,因此BN层的输入也会出现很大的问题,从而导致CNN网络输出的错误。所以在测试过程中,我们需要借助训练集中所有样本在BN层归一化时每个维度上的均值和方差,当然为了计算方便,我们可以在 batch_num 次训练过程中,将每一次在BN层归一化时每个维度上的均值和方差进行相加,最后再进行求一次均值即可。

2. Local Response Normalization

近邻归一化(Local Response Normalization)的归一化方法主要发生在不同的相邻的卷积核(经过ReLu之后)的输出之间,即输入是发生在不同的经过ReLu之后的 feature map 中。

LRN的公式如下:

b(i,x,y)=a(i,x,y)(k+α∑min(N−1,i+n/2)j=max(0,i−n/2)a(j,x,y)2) βb(i,x,y)=a(i,x,y)(k+α∑j=max(0,i−n/2)min(N−1,i+n/2)a(j,x,y)2) β

其中:  a(i,x,y)a(i,x,y) 表示第ii个卷积核的输出(经过ReLu层)的feature map上的 (x,y)(x,y) 位置上的值。  b(i,x,y)b(i,x,y) 表示 a(i,x,y)a(i,x,y) 经LRN后的输出。  NN 表示卷积核的数量,即输入的 feature map的个数。  nn 表示近邻的卷积核(或feature map)个数,由自己来决定。  k,α,βk,α,β是超参数,由用户自己调整或决定。

与BN的区别:BN依据mini batch的数据,近邻归一仅需要自己来决定,BN训练中有学习参数;BN归一化主要发生在不同的样本之间,LRN归一化主要发生在不同的卷积核的输出之间。

切分层:

在一些应用中,需要对图片进行切割,独立地对某一部分区域进行单独学习。这样可以对特定部分进行通过调整 感受视野 进行力度更大的学习。

融合层:

融合层可以对切分层进行融合,也可以对不同大小的卷积核学习到的特征进行融合。

例如在GoogleLeNet 中,使用多种分辨率的卷积核对目标特征进行学习,通过 padding 使得每一个 feature map 的长宽都一致,之后再将多个 feature map 在深度上拼接在一起: 

融合的方法有几种,一种是特征矩阵之间的拼接级联,另一种是在特征矩阵进行运算 (+,−,x,max,conv)(+,−,x,max,conv)。

全连接层

全连接层主要对特征进行重新拟合,减少特征信息的丢失;

卷积神经网络之优缺点 优点   • 共享卷积核,对高维数据处理无压力   • 无需手动选取特征,训练好权重,即得特征分类效果好 缺点   • 需要调参,需要大样本量,训练最好要GPU   • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

在学习CNN的时候遇到的一些困惑,以及查阅一些资料后得到的一些答案。

第一个问题:为什么不用BP神经网络去做呢? 1.全连接,权值太多,需要很多样本去训练,计算困难   • 应对之道:减少权值的尝试,局部连接,权值共享

  卷积神经网络有两种神器可以降低参数数目。   第一种神器叫做局部感知野,一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。   第二级神器,即权值共享。

2.边缘过渡不平滑   • 应对之道:采样窗口彼此重叠

参考

  1. 深度学习简介(一)——卷积神经网络
  2. 详解卷积神经网络(CNN)
  3. 【CNN】一文读懂卷积神经网络CNN
  4. 深度学习之卷积神经网络CNN及tensorflow代码实现示例
  5. 卷积神经网络CNN总结
  6. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 卷积层
  • 池化层
    • 归一化层:
      • 切分层:
        • 融合层:
        • 全连接层
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档