CNN原理
流程
CNN 一般涉及 卷积 ,池化 ,单位化,激活函数 。 其中卷积 已经介绍。
池化(Pooling)
CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是22大小,比如对于max-pooling来说,就是取输入图像中22大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)
对于本文的这个例子,池化操作具体如下:
不足的外面补"0":
经过最大池化操作(比如2*2大小)之后,一幅图就缩小为原来的四分之一了:
然后对所有的feature map执行同样的操作,得到如下结果:
因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。
当对所有的feature map执行池化操作之后,相当于一系列输入的大图变成了一系列小图。同样地,我们可以将这整个操作看作是一个操作,这也就是CNN中的池化层(pooling layer),如下:
通过加入池化层,可以很大程度上减少计算量,降低机器负载。
Normalization
将值都变成 0—1 之间 负值 变成 0 。
激活函数Relu (Rectified Linear Units)
这是一个很小但是很重要的操作,叫做Relu(Rectified Linear Units),或者修正线性单元。它的数学公式也很简单:
![][01]
[01]:http://latex.codecogs.com/png.latex?f(x)%20=%20max(0,%20x)
对于输入的负值,输出全为0,对于正值,原样输出
下面我们看一下本文的离例子中relu激活函数具体操作:
最后,对整幅图操作之后,结果如下:
同样地,在CNN中,我们这一系列操作视为一个操作,那么就得到Relu Layer,如下
CNN
最后,我们将上面所提到的卷积,池化,激活放在一起,就是下面这个样子
然后,我们加大网络的深度,增加更多的层,就得到深度神经网络了:
全连接层(Fully connected layers)
根据结果判定为"X":
在这个过程中,我们定义这一系列操作为”全连接层“(Fully connected layers):
全连接层也能够有很多个,如下:
这一整个过程,从前到后,被称作”前向传播“,得到一组输出,然后通过反向传播来不断纠正错误,进行学习
反向传播 (Backpropagation)
所以刚开始 可以随机假设 N 个 feature 这些feature 可以是随机值 后面会根据 数据 ,不断的修正这些 feature . 来了一个新图 用 这些 feature 去预测 这个东西 。
来源:CSDN
作者:ithinking110
链接:https://blog.csdn.net/ithinking110/article/details/104778487