其他分享
首页 > 其他分享> > CNN卷积神经网络

CNN卷积神经网络

作者:互联网

CNN网络结构

神经网络的发展历史中介绍了,CNN被广泛应用与图像领域,本文对CNN网络结构与算法进行进一步的介绍。

基本网络结构

CNN的网络结构一般包括:

卷积运算

CNN中的卷积运行表示为:

\[S(i,j) = (X*W)(i,j) = \sum_m\sum_nX(i+m)(j+n)W(m,n) \]

其中,X表示输入,W表示卷积核

卷积层

CNN的卷积运算其实就是对输入的局部矩阵和卷积核的矩阵各个位置上的元素相乘再相加。
例如下图,输入为一个3×4的矩阵,卷积核为2×2的矩阵,卷积每次移动的步长为1。首先对输入矩阵左上角的2×2的矩阵与卷积核矩阵进行按位置相乘相加的运算,即得到卷积后第一个元素的值:aw+bx+ey+fz。接着对卷积核向右移动一个位置,对第二个局部矩阵(b,c,f,g)与卷积核进行卷积运算,得到结果: bw+cx+fy+gz,以此类推,最终得到的卷积层输出为一个2×3的矩阵。
image

对卷积层的输出,一般会通过ReLU激活函数(\(Relu(x) = max(0,x)\)),将输出张量中小于0的元素值都变为0。

池化层

池化层的作用是对输入张量的各个子矩阵进行压缩,例如2×2的池化,就是将子矩阵的每2×2个元素变成一个元素,3×3的池化就是将子矩阵的每3×3个元素变成一个元素。
对输入子矩阵的n×n个元素变成一个,一般有两个方法:一个是Max,即取所有元素的最大值。另一个是Average,即取所有元素的平均值。

下图示例:按照最大池化方法,采用2×2的池化,步进为2.
首先对红色2x2区域进行池化,由于此2x2区域的最大值为6.那么对应的池化输出位置的值为6,由于步幅为2,此时移动到绿色的位置去进行池化,输出的最大值为8.同样的方法,可以得到黄色区域和蓝色区域的输出值。最终,我们的输入4x4的矩阵在池化后变成了2x2的矩阵。进行了压缩。
image

CNN前向传播算法

输入层到卷积层的前向传播

输入层是第一层,一般输入层连接的第二层都是卷积层。输入层到卷积层的前向传播的表达式:

\[a^2 = \sigma(z^2) = \sigma(a^1 * W^2 + b^2) \]

其中:上标代表层数,星号代表卷积,b代表偏移向量,\(\sigma\)代表激活函数,一般为ReLU

隐藏层到卷积层的前向传播

类似的,卷积层处于网络结构中间位置的情况下,隐藏层向卷积层的前向传播算法可以表示为:

\[a^l = \sigma(z^l) = \sigma(a^{l-1} * W^l + b^l) \]

隐藏层到池化层的前向传播

池化层的目的是对输入进行压缩,例如输入矩阵是N×N维的,池化大小是K×K的区域,则输出的矩阵是\(\frac{N}{K} * \frac{N}{K}\)维。

隐藏层到池化层前向传播涉及的参数包括:

隐藏层到全连接层的前向传播

全连接层与DNN模型相同,前向传播算法为:

\[a^l = \sigma(z^l) = \sigma(W^la^{l-1}) + b^l \]

这里的激活函数\(\sigma\)一般为sigmoid或tanh。

隐藏层到全连接层前向传播涉及的参数包括:

经过若干全连接层之后,最后一层为softmax输出层,输出层和普通全连接层的唯一区别是使用softmax函数。

CNN前向传播算法小结

输入

输出

CNN的模型输出\(a^L\)

前向传播算法

1、根据输出层的填充大小P,填充原始图片的边缘,得到输入张量\(a^1\)
2、初始化所有隐藏层的参数W、b
3、for \(l\)=2 to \(L-1\):
a) 如果第\(l\)层为卷积层,则输出为:

\[a^l = ReLU(z^l) = ReLU(a^{l-1} * W^l + b^l) \]

b) 如果第\(l\)层是池化层,则输出为:

\[a^l = pool(a^{l-1}) \]

其中pool指按照池化区域大小k和池化标准将输入张量缩小的过程

c) 如果第\(l\)层是全连接层,则输出为:

\[a^l = \sigma(z^l) = \sigma(W^la^{l-1}) + b^l \]

4、对于输出层(第L层):

\[a^L = softmax(z^L) = softmax(W^La^{L-1} + b^L) \]

参考

https://www.cnblogs.com/pinard/p/6483207.html

标签:输出,卷积,矩阵,神经网络,池化,CNN,输入
来源: https://www.cnblogs.com/init0ne/p/16635391.html