TyranitarX Connect.

卷积神经网络

Word count: 802Reading time: 3 min
2019/07/06 Share

一、卷积

对于普通神经网络来说,每层神经元的输入,即是上一层神经元的输出。
假设一张图片为1000×1000,就会出现1000×1000个参数
若下一层神经元个数为10^6个
全连接参数为1000×1000×10^6 =10^12个
这个参数量是非常大的,这样处理不仅会增加训练时计算机的负担,
由于参数量过大,其模型表达能力也非常强。虽然在训练集上效果极佳,但是在训练集上测试效果较差。
即出现过拟合问题。
因此,我们使用了卷积操作来解决这个问题。

输入图像:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
### 卷积核:
1 0 1
:————: :————: :————:
0 1 0
1 0 1
### 输出:
35
:————: :————: :————:
卷积核在输入图像上滑动并进行点积运算,得到卷积后的图像。
其滑动长度叫做步长
输出size=输入size-卷积核size+1

显然,每次卷积会使图像size变小,在CNN中可能有不只一层卷积层。如果图像本身较小,很有可能经过多次卷积操作使图像变为1×1的像素点。这样对描述图片的特征是很不直观的。

因此我们可以使用一种padding操作,在输入图像周围加入值为0的像素点。

0 0 0 0 0 0 0
0 0
0 0
0 0
0 0
0 0
0 0 0 0 0 0 0

当然加入几层padding和卷积核的大小有关,进行合适的处理即能够使输入和输出的size相同。

对于多通道图片,我们将卷积核也变为多通道即可。不通通道图片上卷积参数并不共享,多个通道卷积之后的相应位置像素相加作为最后的输出(activation maps)。

同样,通过多个卷积核,能够产生多通道输出,提取出不同的特征。

二、激活函数

Sigmoid=1/1+e^-x
tanh=tanh(x)
ReLU=max(0,x)
Leaky ReLU=max(0.1x,x)
Maxout
ELU 等

对于卷积神经网络来说,常用的激活函数为ReLU函数。

5 6 -2
-10 0 4
9 -1 7

ReLU激活后->

5 6 0
0 0 4
9 0 7

卷积-Summary

  • P = 边距(padding)
  • S = 步长(stride)
  • 输出Size =(n-p)/s + 1
  • 参数数目 = kw × kh × Ci × Co
    • Ci:输出通道数
    • Co:输出通道数
    • Kw,Kh:卷积核长宽

三、池化

  • 常使用不重叠、不补零
  • 没有用于求导的参数
  • 池化层的参数为步长和池化核的大小
  • 池化用于减少图像尺寸,从而减少计算量
  • 一定程度解决平移鲁棒
  • 一定程度上损失空间位置精度

输入图像:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Max-pool操作
Stride = 2
Kernel_size = 2 * 2
### 输出:
7 9
:————: :————:
17 19

Avg-pool操作
Stride = 2
Kernel_size = 2 * 2

输出:

4 6
14 16

四、全连接层

将上一层的输出展开并连接到每一个神经元上

即普通神经网络层

相比于卷积层,参数数目较大

CATALOG
  1. 1. 一、卷积
    1. 1.1. 输入图像:
  2. 2. 二、激活函数
    1. 2.1. 卷积-Summary
  3. 3. 三、池化
    1. 3.0.0.1. 常使用不重叠、不补零
    2. 3.0.0.2. 没有用于求导的参数
    3. 3.0.0.3. 池化层的参数为步长和池化核的大小
    4. 3.0.0.4. 池化用于减少图像尺寸,从而减少计算量
    5. 3.0.0.5. 一定程度解决平移鲁棒
    6. 3.0.0.6. 一定程度上损失空间位置精度
  • 3.1. 输入图像:
  • 3.2. 输出:
  • 4. 四、全连接层
    1. 4.0.1. 将上一层的输出展开并连接到每一个神经元上
    2. 4.0.2. 即普通神经网络层
    3. 4.0.3. 相比于卷积层,参数数目较大