第四门课:卷积神经网络(第一周)——卷积神经网络

卷积神经网络

  • 1. 计算机视觉
  • 2. 边缘检测示例
  • 3. 更多边缘检测
  • 4. Padding
  • 5. 卷积步长
  • 6. 三维卷积
  • 7. 单层卷积网络
  • 8. 简单卷积网络示例
  • 9. 池化层
  • 10. 卷积神经网络示例
  • 11. 为什么使用卷积?

1. 计算机视觉

应用领域:图片猫识别,目标检测(无人驾驶),图像风格转换(比如转成素描)等等。

面临的挑战:

  • 数据的输入量可能会非常大,例如一张1000×1000的图片,特征向量的维度达到了1000×1000×3(RGB,3通道) = 300万
  • 神经网路中涉及的参数比较多,例如在神经网络中,你也许会有1000个隐藏单元,使用标准的全连接网络,这个矩阵将会含有1000×300万,即30亿个参数。
    ① 如此大量的参数情况下,难以获得足够的数据来防止神经网络发生过拟合
    ② 处理30亿参数的神经网络所需的巨大内存难以应对

你希望模型能处理如此的的数据量。为此,你需要进行卷积计算,下节将用边缘检测的例子来说明卷积的含义。

2. 边缘检测示例

第四门课:卷积神经网络(第一周)——卷积神经网络_第1张图片
例如 6 × 6 6 \times 6 6×6 的单通道灰度图像,检测垂直边缘,构造一个矩阵 [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \left[\begin{array}{rrr}1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1\end{array}\right] 111000111 (过滤器 / / / 卷积核),进行卷积运算 * (convolve)第四门课:卷积神经网络(第一周)——卷积神经网络_第2张图片

import numpy as np
image = np.array([[3,0,1,2,7,4],[1,5,8,9,3,1],[2,7,2,5,1,3],[0,1,3,1,7,8],[4,2,1,6,2,8],[2,4,5,2,3,9]])
print(image)
print('-------')
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(filter_)
print('-------')
from scipy import signal
convolution = -signal.convolve2d(image,filter_,boundary='fill',mode='valid')
print(convolution)
[[3 0 1 2 7 4]
 [1 5 8 9 3 1]
 [2 7 2 5 1 3]
 [0 1 3 1 7 8]
 [4 2 1 6 2 8]
 [2 4 5 2 3 9]]
-------
[[ 1  0 -1]
 [ 1  0 -1]
 [ 1  0 -1]]
-------
[[ -5  -4   0   8]
 [-10  -2   2   3]
 [  0  -2  -4  -7]
 [ -3  -2  -3 -16]]

检测边缘实例:
第四门课:卷积神经网络(第一周)——卷积神经网络_第3张图片

image = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0]])
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(-signal.convolve2d(image,filter_,boundary='fill',mode='valid'))
[[ 0 30 30  0]
 [ 0 30 30  0]
 [ 0 30 30  0]
 [ 0 30 30  0]]

3. 更多边缘检测

可以检测明暗变化方向
第四门课:卷积神经网络(第一周)——卷积神经网络_第4张图片

竖直,水平的过滤器
第四门课:卷积神经网络(第一周)——卷积神经网络_第5张图片
把这9个数字当成参数,通过反向传播学习,边缘捕捉能力会大大增强(可以检查任意角度)

4. Padding

假设原始图片是 n × n n \times n n×n,过滤器是 f × f f \times f f×f,那么输出大小是 ( n − f + 1 ) × ( n − f + 1 ) (n-f+1) \times(n-f+1) (nf+1)×(nf+1)

  • 缺点1,图像每做一次卷积,缩小一点,最后变得很小
  • 缺点2,在角落或边缘区域的像素点在输出中采用较少,丢失了图像边缘位置的许多信息

解决上面的问题:

  • 进行卷积操作前,沿图像边缘填充 p 层像素,令 ( n + 2 ∗ p ) − f + 1 = n ⇒ p = f − 1 2 (n+2*p)-f+1 = n \Rightarrow p = \frac{f-1}{2} (n+2p)f+1=np=2f1,这样可以保持图像大小不变,同时也使得边缘信息发挥作用较小的缺点被削弱

填充多少层,怎么选?

  • 对于Valid 卷积: p = 0 p=0 p=0,不需要填充
  • 对于Same 卷积: p = f − 1 2 p = \frac{f-1}{2} p=2f1 f f f 通常是奇数(对称填充,有中心点)

5. 卷积步长

每次过滤器在图片中移动的步长为s(stride)

输出尺寸为 ( ⌊ n + 2 p − f s ⌋ + 1 ) × ( ⌊ n + 2 p − f s ⌋ + 1 ) (\lfloor \frac{n+2p-f}{s} \rfloor+1) \times (\lfloor \frac{n+2p-f}{s} \rfloor+1) (sn+2pf+1)×(sn+2pf+1)

:数学中的卷积,需要在操作之前对过滤器 顺时针旋转90度 + 水平翻转,深度学习里省略了该步骤,但是不影响,简化了代码

6. 三维卷积

第四门课:卷积神经网络(第一周)——卷积神经网络_第6张图片
输出是一个二维的,每个格子里是对应着 27个元素求和

如果希望对不同的通道进行检测边缘,对 filter 的相应层设置不同的参数就可以了

想要多个过滤器怎么办?(竖直的、水平的,各种角度的)

第四门课:卷积神经网络(第一周)——卷积神经网络_第7张图片

7. 单层卷积网络

第四门课:卷积神经网络(第一周)——卷积神经网络_第8张图片
第四门课:卷积神经网络(第一周)——卷积神经网络_第9张图片

参数的个数跟图片大小无关,跟过滤器相关,假如有10个过滤器,上面每个过滤器有 27 个参数,加上偏置 b,28个再乘以10,共计280个参数。

即使图片很大,参数却很少,这也是卷积神经网络的一个特征,叫作避免过拟合第四门课:卷积神经网络(第一周)——卷积神经网络_第10张图片

8. 简单卷积网络示例

第四门课:卷积神经网络(第一周)——卷积神经网络_第11张图片
除了 卷积层(convolution),还有 池化层(pooling),全连接层(fully connected)。

9. 池化层

除了卷积层,卷积网络也经常使用池化层缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
第四门课:卷积神经网络(第一周)——卷积神经网络_第12张图片
Max 运算的实际作用:

  • 如果在过滤器中提取到某个特征,那么保留其最大值
  • 如果没有提取到这个特征,例如在右上象限中这个特征就不明显,其最大值也还是很小

池化,它有一组超参数 f , s f,s fs,但没有参数需要学习,不需要梯度下降更新
第四门课:卷积神经网络(第一周)——卷积神经网络_第13张图片
池化层特征

  • 最大池化比平均池化更常用
  • 常用的参数值为 f = 2  or  3 , s = 2 f=2 \text{ or } 3,s= 2 f=2 or 3s=2
  • 最大池化时,很少用到 padding(即 p = 0 p=0 p=0
  • 池化层前后的输入输出通道数一样
  • 最大池化只是计算神经网络某一层的静态属性,没有需要学习的参数

10. 卷积神经网络示例

第四门课:卷积神经网络(第一周)——卷积神经网络_第14张图片
尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,它也有可能适用于你的应用程序。
第四门课:卷积神经网络(第一周)——卷积神经网络_第15张图片

11. 为什么使用卷积?

和只用全连接层相比,卷积层 的两个主要优势在于参数共享稀疏连接,全连接层的参数巨大,卷积层需要的参数较少。

原因:

  • 参数共享,特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域
  • 使用稀疏连接,一个输出仅依赖少部分的输入
    第四门课:卷积神经网络(第一周)——卷积神经网络_第16张图片
    神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。

你可能感兴趣的:(吴恩达《深度学习》)