跟我学神经网络3-卷积神经网络

公众号

欢迎关注《汽车软件技术》公众号,回复关键字获取资料。

1. 关键词

卷积ReLU池化PyTorchGoogle Colab

2. 引言

前两章已经学习率基本的神经网络及其求解方法,但神经网络从研究走向实用,还需要进一步演化。以图像识别为例,每个像素作为一个神经元,需要计算非常多的权重,是不现实的。

3. 结构

卷积神经网络同样来自生物学,动物视觉皮层只响应一部分覆盖范围内的周围单元(接受域),提高了效率。下图是一个典型结构:

object-detection

包含了:

  1. 卷积(Convolution)层
  2. 线性整流(ReLU)层
  3. 池化层(Pooling)
  4. 全连接(Fully connected)层

下面分别介绍。

4. 卷积

卷积是为提取区域内特征进行的一种运算,公式如下:
S ( i , j ) = ( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( i + m , j + n ) K ( m , n ) S(i,j)=(I*K)(i,j)=\sum_m\sum_nI(i+m,j+n)K(m,n) S(i,j)=(IK)(i,j)=mnI(i+m,j+n)K(m,n)
其中:

  • I I I 是输入;
  • K K K 是核函数;
  • S S S 是特征映射。
  • i , j i,j i,j 是输出的索引;
  • m , n m,n m,n 是核函数索引。

假设输入3x4,卷积核2x2,步幅是1,得到输出2x3,见下图,其中 S 0 , 0 = ∑ m = 0 1 ∑ n = 0 1 I ( 0 + m , 0 + n ) K ( m , n ) = a w + b x + e y + f z S_{0,0}=\sum\limits_{m=0}^1\sum\limits_{n=0}^1I(0+m,0+n)K(m,n)=aw+bx+ey+fz S0,0=m=01n=01I(0+m,0+n)K(m,n)=aw+bx+ey+fz。步幅指的是区域平移的间隔。

convolution

卷积与全连接神经网络对比,有以下特点:

  • 稀疏交互:输出单元只和一部分输入单元关联;
  • 参数共享:卷积核中的每个参数都重复使用;
  • 等变表示:将输入或卷积核经过平移、旋转等操作,不会影响最终的输出结果,特征不变。

基于上述特征,卷积网络权重数量明显减少。

以此网络做对比:

对比卷积网络全连接网络
权重数量2x2=4(3x4)x(2x3)=72

对比不同图像的卷积计算:

图像例子层数
灰度手写字识别1
彩色RGB3

4.1 核函数

通常根据经验选取,例如图像处理的边缘检测,可以使用如下的核:

edge-detection-kernel

处理效果如下:

dege-detection-example

当输入是多维的,比如彩色RGB图像,深度是3,卷积核也对应深度是3。

4.2 填充

使用卷积计算后,输出比输入维度减小,有时为了保持相同的维度,需要在输入填充0。如下图所示,填充后,维输入和输出维度相同。

padding

5. 线性整流

之前已经介绍过 sigmod 函数,当前机器学习领域主要应用 ReLU 函数。
f ( x ) = x + = max ⁡ ( 0 , x ) f(x)=x^+=\max(0,x) f(x)=x+=max(0,x)

activation-functions

ReLU 梯度: x &lt; = 0 , f ′ = 0 ; x &gt; 0 , f ′ = 1 x&lt;=0,f&#x27;=0;x&gt;0,f&#x27;=1 x<=0,f=0;x>0,f=1。ReLU 在0点不可导,一般按0处理。

6. 池化

使用多个核进行卷积计算,得到一组输出,对输出采样时使用的方法称为池化。一般使用2x2最大池化,保留特征值。下图是最大池化,步幅是2。

max-pooling

7. 降维采样

输入经过卷积或池化后,输入和输出的维度关系如下:
W o u t = W i n − F + 2 P S + 1 W_{out}=\frac{W_{in}-F+2P}{S}+1 Wout=SWinF+2P+1
其中:

  • W i n W_{in} Win 是输入维度;
  • F F F 是卷积核或池化维度;
  • P P P 是填充维度;
  • S S S 是步幅;
  • W o u t W_{out} Wout 是输出维度。

8. 例子

本文基于 CIFAR10 数据集,使用 PyTorch 实现一个图像识别例子,PyTorch 是当下最流行的人工智能库,参考 PyTorch 文档

cifar10

按照以下步骤:

  1. 使用 torchvision 加载和正则化的 CIFAR10 数据集;
  2. 定义一个卷积神经网络;
  3. 定义一个损失函数;
  4. 使用训练数据集进行训练;
  5. 使用测试数据集进行测试。

代码部署在 Google Colab,使用 Google 服务器进行计算,提供了 GPU/TPU 加速。

后续完善卷积层和池化层的反向传播算法。

9. 附录

9.1 中英文对照表

英文中文缩写数学符号
Convolution卷积 s ( t ) = ( x ∗ w ) ( t ) s(t)=(x*w)(t) s(t)=(xw)(t)
Convolutional Neural Network卷积神经网络CNN
Equivariant Representations等变表示
Feature Map特征映射
Kernel w w w
Max Pooling最大池化
Padding填充
Parameter Sharing参数共享
Pooring池化
Receptive Field接受域
Sparse Interactions稀疏交互
Stride步幅

9.2 扩展阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值