卷积神经网络各个层级结构,如下图:
上图中CNN要做的事情是:给定一张图片,是车是马还是飞机未知,现在需要模型判断这张图片里具体是一个什么东西
最左边是
中间是
最右边是
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积( 逐个元素相乘再求和 )的操作就是所谓的 ‘卷积’ 操作,也是卷积神经网络的名字来源
举个具体的例子。比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据,右上角是具体的计算过程
在下图对应的计算过程中,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓等。如果想提取图像的不同特征,则可以用不同的滤波器
在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有这么几个参数:
CS231n课程中有一张卷积动图
从图中可以看到:
然后分别以两个滤波器filter为轴滑动数组进行卷积计算,得到两组不同的结果
随着左边数据窗口的平移滑动,滤波器Filter w0 / Filter w1对不同的局部数据进行卷积计算
值得一提的是:左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的 局部感知 机制。打个比方,滤波器就像一双眼睛,人类视角有限,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你会累死,而且一下子接受全世界所有信息,你大脑接收不过来
与此同时,数据窗口滑动,导致输入在变化,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的权重)是固定不变的,这个权重不变即所谓的CNN中的 参数(权重)共享 机制
最后提一点,从图上我们可以看到,每个filter下面都有一个bias,因此要在原来的内积计算结束后,再加上这个bias,得到最终的对应位置值