经过了第一节关于什么是卷积的介绍,这里结合相关的网络结构来回顾下什么是卷积神经网络:
首先回顾一下我们2D的卷积的局部感受野的概念,即对输入图像的一部分聚焦进行观察,其余部分不管,通过移动窗口遍历整个输入图像的股过程。
那么一个新的概念需要了解下,就是卷积核的大小(kernel size),以RGB三通道的图像为例,这里选取的卷积核大小为3*3的矩阵,我们三个通道分别得到三个卷积操作后的计算结果,而最终的output是三个通道的卷积操作结果的线性相加如下图所示:
回收第一张图,这里可以更直观的理解局部感受野和三个通道叠加的过程
除此之外呢我们还需要理解两个概念,也就是padding和stride顾名思义,第一个单词有补丁的意思,其操作类似打补丁的一个过程,如下图,我们知道因为卷积核大小不同,我们最终输出的结果会是和我们卷积核大小相同甚至是更小的一个矩阵,这样原来的输入矩阵是不是就降维了,维数变少了,但是有的时候我们不希望维数变少,咋办呢,打补丁,给原来的输入矩阵在x和y方向分别拓展n个纬度,也就是类似一个打补丁的过程,这样我们可以看到原来我们对边缘图像只处理一次,但是通过padding操作我们能够更充分的处理边缘要素,而且解决了图像尺寸越来越小的问题。
stride可以理解为步长,就是我们每次移动窗口的距离,这个移动包括x方向的也包括y方向的
这里我们结合到具体的网络参数设定,以这个[4,3,5,5]为例,第一个是batch代表输入有多少个图像,很明显这里input是4,第二个参数3代表的是channels通道数,因为我们是RGB三个通道,后边两个就是我们卷积核的长和宽的纬度参数了。再举个具体的例子:
这里x是输入层的信息,b是batchsize即图片张数,28*28是图像的像素,其构成对应矩阵的维数,最后一个3是通道数RGB三个通道。第二个One K代表的是一个卷积核,[3,3,3]对应的是三个通道和卷积核大小为3*3,multi-k顾名思义多个卷积核,这里具体有几个了,第一个参数告诉我们呢,16个,之后的参数就很尝龟了,步长为stride=1,padding操作是给长宽两个维度各自适应补全使得输出的图像尺寸与输入的不发生改变,bias是偏置,因为是16个卷积操作,自然会有16个卷积output注意这里不是最终output,然后对应每个卷积有一个偏置从而会有16个。最后output结果就是前面删和输入一样,只是这里通道数增加了由3变成了16,这样对应一个升维的过程,将原来的输入映射到更高的维度进行观察其中的高维特征。这是卷积操作发挥效力的奥妙。
后边这个图是LeNet-5卷积网络的结构,之前有见过。具体的代码实现如下:
最后不要落下了,之前这些都是前馈传递过程,那么梯度下降呢,这里还是得提下:
梯度我们知道是对Loss函数对其中某一层的一个w进行求偏导的过程,我们列写一下输出output的计算公式如下:
根据链式法则,我们知道最终的偏导计算结果就是输入的矩阵上面的对应元素值再乘以Loss函数与输出值求得的偏导。