梅科尔工作室-深度学习第五讲 CNN-卷积神经网络

目录

前言

1.计算机视觉

 1.1. 计算机视觉分类

2. CNN

3. 卷积层

3.1. 什么是卷积

3.2. 动态卷积操作

4. 池化层

5.激活函数的作用


前言

本文记录梅科尔工作室深度学习培训的第五讲CNN算法的学习笔记,感谢泓利哥的讲解!

参考文章链接:CNN笔记:通俗理解卷积神经网络_v_JULY_v的博客-CSDN博客_cnn卷积神经网络


1.计算机视觉

计算机视觉的应用领域如下图所示

 1.1. 计算机视觉分类

 (a) lmage Classification:

图像分类,用于识别图像中物体的类别(如: bottle、cup、cube)

(b) Object Localization:
目标检测,用于检测图像中每个物体的类别,并准确标出它们的位置

(c) Semantic Segmentation:
图像语义分割,用于标出图像中每个像素点所属的类别,属于同一类别的像素点用一个颜色标识

(d) Instance Segmentation:
实例分割,值得注意的是。(b)中的目标检测任务只需要标注出物体位置,而(d)中的实例分割任务不仅要标注出物体位置,还需要标注出物体的外形轮廓

2. CNN

CNN的两大特点:

  1. 能够有效的将大数据量的图片降维成小数据量
  2. 能够有效的保留图片特征,符合图片处理的原则

 CNN解决的两大问题:

  1. 图像需要处理的数据量太大,导致成本很高,效率很低
  2. 图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高

 CNN层级结构如图所示

最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。

CONV:卷积计算层,线性乘积 求和。
RELU:激励层,ReLU是激活函数的一种。
POOL:池化层,简言之,即取区域平均或最大。

FC:全连接层

3. 卷积层

3.1. 什么是卷积

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

    非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。

比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据。(对应相乘再相加)

 

中间滤波器filter与数据窗口做内积,其具体计算过程则是:4*0 + 0*0 + 0*0 + 0*0 + 0*1 + 0*1 + 0*0 + 0*1 + -4*2 = -8

3.2. 动态卷积操作

 在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有这么几个参数: 
  a. 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
  b. 步长stride:决定滑动多少步可以到边缘。 

  c. 填充值zero-padding:在外围边缘补充若干圈0,避免边缘值浪费

 动态演示如下:

 如上图所示,可以分析出这个卷积操作中有

  • 两个神经元,即depth=2,意味着有两个滤波器。
  • 数据窗口每次移动两个步长取3*3的局部数据,即stride=2。
  • zero-padding=1。

4. 池化层

池化(Pooling),有的地方也称汇聚,实际是一个下采样(Down-sample)过程,用来缩小高、长方向的尺寸,减小模型规模,提高运算速度,同时提高所提取特征的鲁棒性。简单来说,就是为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合。

池化层通常出现在卷积层之后,二者相互交替出现,并且每个卷积层都与一个池化层一一对应。

常用的池化函数有:平均池化(Average Pooling / Mean Pooling)、最大池化(Max Pooling)、最小池化(Min Pooling)和随机池化(Stochastic Pooling)等,其中3种池化方式展示如下。

在这里插入图片描述

实例解析: 

 上图所展示的是取区域最大,即上图左边部分中 左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,左下角2x2的矩阵中3最大,右下角2x2的矩阵中4最大,所以得到上图右边部分的结果:6 8 3 4。

5.激活函数的作用

常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。这里先简要介绍下最基础的sigmoid函数。

 sigmoid的函数表达式如下

 其中z是一个线性组合,比如z可以等于:b + * + *。通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1。

    因此,sigmoid函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):

也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。

    压缩至0到1有何用处呢?用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

    举个例子,如下图(图引自Stanford机器学习公开课)

但是实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化,可以尝试ReLU激活函数。 

ReLU激活函数 

 ReLU的优点是收敛快,求梯度简单


总结

这次学习笔记到此结束,多是参考大佬的文章讲解,此文章属于入门级,这也是对于CNN的初步学习与理解,还需要更加深入的学习才能够收获更多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值