卷积神经网络
使用卷积的原因主要是减少计算复杂度,节省开销。
卷积其实就是一个滤镜
使用滤镜的过程就是在原图不断移动的过程。
例子:
从最左上角开始,把滤镜(3*3)中的每一个值和原图(5*5)中的每一个值做点乘。然后每计算一次移动一步。就可以得到右边这个新的矩阵。
CONV(convolution layer)卷积层
RELU(ReLU layer)线性整流层
POOL(pooling layer) 池化层
FC(fully connected layer) 全连接层
和其他神经网络一样我们通过梯度下降和反向传播来调整权重。不一样的是这里调整的是滤镜矩阵参数。
假设我们滤镜矩阵大小是3*3,有两个滤镜,那么我们需要通过梯度下降和反向传播调整3*3*2,一个18个参数。
卷积层
举例
举例:下图是50*50因为RGB,所有图片尺寸是50*50*3
如果是灰色,就是50*50*1
我们选择滤镜尺寸是5*5*3,选择32个滤镜,步长5.向右移动10次就对第一行做完卷积。然后向下再对下一行卷积。
一个向下10次,就对整张图做完卷积。所以卷积之后得到一个10*10*32的矩阵。
线性整流层(ReLU)
ReLU函数:在某一点之前f(x)=0,之后是线性的。
池化层
池化层和卷积层一样都需要滤镜filter,不同的是这个滤镜不需要权重,它只做一件事,就是找最大值。
例子:假设用一个长宽都为2的滤镜处理左边的矩阵,步长也是2,池化后就得到下图结果。
全连接层
最后一步,为什么叫全连接呢?因为把所有的值都用上了,生成最终的输出output。
假设经过刚才池化之后,得到一个5*5*3的矩阵。一个75个值,可以转换成一个1*75的矩阵。
最后输出可能有两个结果,那么我们就用一个75*2的矩阵乘以1*75的矩阵。就得到了1*2的矩阵。
实际应用中,卷积层,线性整流层,池化层,可能都不止一层,训练好之后我们就会得到滤镜。
当需要识别某个物体的时候,卷积网络就会对这张图片做卷积,线性整流,池化,最后全连接,
输出神经网络判断的这张图片是某个物体的概率。