吴恩达深度学习——《卷积神经网络》

http://www.javashuo.com/article/p-eqsipnop-r.html


CV问题分为三类:图像分类、目标检测、神经风格迁移。

1. 为什么要使用CNN?

  • 因为全连接的输入层特征太多,3million的特征,难以找到这么多的数据量与之匹配,很难不过拟合。
  • 那么该如何处理大尺寸的图像呢?——CNN

使用传统神经网络处理机器视觉的一个主要问题是输入层维度很大。例如一张64x64x3的图片,神经网络输入层的维度为12288。如果图片尺寸较大,例如一张1000x1000x3的图片,神经网络输入层的维度将达到3百万,使得网络权重W非常庞大。这样会造成两个后果,

  • 一是神经网络结构复杂,数据量相对不够,容易出现过拟合;
  • 二是所需内存、计算量较大。解决这一问题的方法就是使用卷积神经网络(CNN)。


2. 卷积的基础

  • 卷积运算是卷积神经网络最基本的组成部分。
  • 图像的边缘检测通过与相应的滤波器进行卷积来实现。
  • 边缘取绝对值后,可以抹去0度和180度方向的区别,即去掉边缘的符号特性。
  • 垂直边缘、水平边缘、Sobel/Scharr滤波器。
  • 如果想要检测图像的各种边缘特征,则filter的数值一般通过模型训练得到。CNN的主要目的就是计算出这些filter的数值,确定了filter之后,CNN浅层网络就实现了对图片所有边缘的检测。
  • 将滤波器的9个参数作为参数,让CNN经过反向传播来进行训练,得到训练出的边缘检测滤波器。
  • padding不希望每次识别边缘或其他特征时都缩小,所以padding。
  • 卷积步长:跳步长进行卷积,不是逐个滑动卷积
  • 相关与卷积,CNN指的是相关,不是卷积,因为卷积要翻转180再相关。因为滤波器算子一般水平或垂直对称,180度旋转影响不大。

 

2.1 三维卷积

你可以检测多个特征,输出的通道数就是你要检测的特征数。4×4×2的2就是边缘检测器的个数,也就是滤波器的个数,也就是想要提取的特征个数。2就是三维立方体的深度,depth or channel。

2.2 如何构建卷积神经网络的卷积层

对于CNN而言,权重就是filters,权重就是这些滤波器。用的是valid conv,所以size会越来越小。

 

一个简单的卷积网络CNN的例子: 

这里写图片描述

2.3 池化层 pooling layers

  • 池化层用来缩减模型的大小,提高计算速度,提高所提取特征的鲁棒性。

池化的必要性:如果滤波器提取到某个特征,那么保留其最大值。如果没有提取到,那么提取的最大值也比较小。

  • max pooling的作用就是:只要在任何一个区域内提取到某个特征,它都会保留在最大化的池化输出里。
  • max pooling比average pooling更常用,但也有例外。在深度很深的神经网络,可以用平均池化来分解规模为7*7*1000的网络的表示层,在整个空间内求平均值,得到1*1*1000.

这里写图片描述

max pooling;average pooling。实际应用中,max pooling比average pooling更为常用。

2.4 CNN网络示例

与LeNet-5非常相似的网络如下:

由于pool层没有权重,所以与conv在一起,划在一层里面。所以将conv+pool视为一层。

这里写图片描述

CNN网络的超参数太多,尽量不要自己设置,而是去看别人用的好的参数。