![594698c8a17adb0e8c7c9cffef1e85d3.png](https://i-blog.csdnimg.cn/blog_migrate/73c3feda74cfc01e9b5a018119c5c29a.jpeg)
一. 前言
卷积神经网络 (Convolutional neural network, CNN) 可以说是目前应用最为广泛的一种神经网络结构。它是在前向神经网络的基础上进行了一些改动,用来适应输入数据维度较高的情况。它主要是应用于与图片相关的任务,比如说目标检测,实例分割,风格迁移,强化学习等。这一篇文章我们先介绍一下卷积神经网络的基本知识。
![6ac985b47c2abfa1ebd34d756dd7345f.png](https://i-blog.csdnimg.cn/blog_migrate/2b46e5bbe174551f764ad8ee34d67d65.jpeg)
![0ea8c69ca7ea8763e73fa595f148b390.png](https://i-blog.csdnimg.cn/blog_migrate/77a4db67caef3930fc613d15ca670614.jpeg)
![22bb6015778ebb700eb018c135eb1358.png](https://i-blog.csdnimg.cn/blog_migrate/ae4deb9bc2eb214deeff01054eb39e35.jpeg)
![abdeb6a55022b71bb4c03e2bdaa239dc.png](https://i-blog.csdnimg.cn/blog_migrate/b472d360d8f0f038cdc8067f5f15b18c.jpeg)
二. 为什么卷积神经网络?
首先,考虑既然有了前向神经网络,为什么要提出卷积神经网络呢?这里把全连接的前向神经网络图再摆出来一次:
![bbd0617b1113a4f07900a87a93e003e0.png](https://i-blog.csdnimg.cn/blog_migrate/ed264771f8af00987c6dafeef3ce3142.jpeg)
前向神经网络的输入是一个一维的向量,那么如果输入是一个图片可怎么办呢?
在计算机的世界中,图片就是被存储成一个数字矩阵,数字的大小代表着我们视觉上的图片颜色。如下图所示,左边的矩阵可视化之后就是右边的图片,数字的范围是0-255,数字越大则表示图片的灰度越深。这是一个单通道的图片,而要组成一个彩色图片需要RGB (红绿蓝) 三个通道,即为三个矩阵concat在一起。
![2577b8b1888c1004535968c433771557.png](https://i-blog.csdnimg.cn/blog_migrate/57cf2f333faba023767ae41eed67dbb2.jpeg)
假设输入是一个大小为
- 一种是把它压缩成
的向量,再输入到上面这个前向神经网络中。
- 另一种就是把第一层的一维输入变成二维, (包含通道数) 的图片作为输入,下一层的每一个neuron只与前面一层的一小部分连接。这样就可以有效的保留二维信息。
按照第一种方式,假设隐含层的神经元个数是
卷积神经网络就是按照上面第二种方式来做的。而且每一层不再是一个一维向量,而是一个三维的张量(
三. 卷积神经网络结构
这里介绍一下卷积神经网络的结构。以下图这个简单的10分类卷积神经网络为例:
![2444cb0a2007dd03ecba1aed43d76ade.png](https://i-blog.csdnimg.cn/blog_migrate/32eb0fe28a37e0b697b3ac15c54701d2.jpeg)
先解释一下这个图。第一层输入图片的尺寸是
搭建卷积神经网络的一般部件(module)有:卷积层(convolutional layer),下采样层(downsampling),上采样层(upsampling layer),全连接层(fully connected layer),池化层(pooling layer),批量正则化(batchnorm),dropout layer等。图 2 其实就已经包含了大部分必须的部件(上一段加粗的部分)。
限于篇幅,这一篇文章只是希望大家能够对神经网络有一个基础的认识,而在下一篇文章我们再详细介绍这些关键的module。之后就可以按照自己的意愿搭建属于自己的神经网络啦~
三. 总结
虽然CNN包含很多的内容,但是如果要自己造一个简单的卷积神经网络是不难的,就对上面这些部件进行合理的组合而已。现在基于 Python 已经有很多关于神经网络的开源平台,比如说 Google的Tensorflow,Facebook的Pytorch,还有很好上手的Keras。之前分别使用过这些平台,它们都已经是非常模块化,简单几行命令就可以定义一个神经网络。在之后的文章我们会详细介绍神经网络编程。
不管是前向神经网络还是卷积神经网络,他们本质上就是特征提取,通过有监督的训练,使得网络可以从较高维的原始数据中提取与目标最相关的低维特征(向量)。由于图片的高维特征,使得前向神经网络不能很好的处理它,因此发展出来卷积神经网络。
下一篇文章我们一一详细介绍卷积层(convolutional layer),池化层(pooling layer),上采样层(upsampling layer),全连接层(fully connected layer),池化层(pooling layer),批量正则化(batchnorm),dropout layer。
文中图片均来源于网络。
欢迎扫描二维码,关注微信公众号“统计学习”
![0091f20adaca14e2d53ceed9be54ecae.png](https://i-blog.csdnimg.cn/blog_migrate/6009b29c86324089f653692865d299e1.png)