1. CNN的出现
什么是CNN?
卷积神经网络CNN,最擅长的就是图片的处理。它受到人类视觉神经系统的启发。目前 CNN 已经得到了广泛的应用,比如:人脸识别、自动驾驶、美图秀秀、安防等很多领域。
CNN 有2大特点:
- 能够有效的将大数据量的图片降维成小数据量
- 能够有效的保留图片特征,符合图片处理的原则
CNN解决了什么问题?
在 CNN 出现之前,图像对于人工智能来说是一个难题,有2个原因:
- 图像需要处理的数据量太大,导致成本很高,效率很低
- 图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高
比如一个10001000像素的图片,每个像素有RGB3个参数来表示颜色信息。那么一张这样的图片就有 100010003=3百万个参数。于是,就提出了模仿人眼,一次只观察局部信息,比如将10001000像素的图片缩小成200*200像素,并不影响肉眼认出来图片中是一只猫还是一只狗。

至于特征问题,则模仿视觉原理来构建多层特征处理(自底向上逐层处理)。人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)
卷积
卷积可以看作对某个局部的加权求和。其原理是在观察某个物体时受限于观察条件无法一次性观察整体,也不想低效地每个元素逐个观察,于是就从局部开观察。假设我们处理的是二维数据,卷积核的大小一般为11、33、5*5。卷积核的个数对应输出的通道数(out_channels)。
注意,输入通道数(in_channels)核输出通道数(out_channels)是不一样的。比如输入是28*28*192(WDK,K代表通道数,),然后在3x3的卷积核,卷积核数(即输出通道数)为128,那么卷积的参数有3*3*192*128,其中前两个对应的每个卷积里面的参数,后两个对应的卷积总的个数。
池化与激活

池化层的输入一般来源于上一个卷积层,进行池化主要是为了提供鲁棒性,同时减少参数的数量,防止过拟合现象的发生。常见的池化操作有平均池化和最大池化,其中,平均池化指的是计算图像区域的平均值作为该区域池化后的值,最大池化是选图像区域的最大值作为该区域池化后的值。average_pooling 对较形象的特征(如背景信息)保留更好。
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。常用激活函数包括sigmoid函数、Tanh函数、ReLU、softmax函数。一般情况下,在多分类问题中,softmax函数通常用作全链接层的激活函数,而中间层一般使用ReLU。
