卷积神经网络的那些事儿

卷积神经网络的那些事儿

这是我自己对所学内容的总结与思考,图片均来自网络,如有错误,欢迎大家指正,文中有参考链接,若有侵权,烦请告知

学习了卷积神经网络之后,总觉得似懂非懂,虽有了一定的概念,但深究起来整个流程又好像不太顺畅,今天就给大家从头开始理一下。
一、全连接神经网络
在这里插入图片描述
一开始,我们的网络是这样的(关于它的历史就不多赘述了)。最左边是输入层,最右边是输出层,处于输入层和输出层中间的都叫隐藏层,图中的每一个小圆圈都代表一个神经元,处于同一层的神经元之间无联系,第N层每个神经元和第N-1层的每个神经元相连。我们考虑一个输入1000×1000像素的图片,输入层有1000×1000=100万节点。假设第一个隐藏层有100个节点,那么仅这一层就有(1000*1000+1)*100=1亿参数,由此可以看出,一旦节点个数增多,他们之间的连接将会是一个很大的数字,这会大大增加我们的训练难度。
在这里插入图片描述如上图所示,单独拿出隐藏层的一个神经元来分析,都是这样的结构,其中的x、w和b我们很熟悉,就是之前学过的线性分类器(可以参照之前的svm分类器)。但是一定要注意,我们这里多出了一个h(z),这是一个激活函数,它到底有什么用呢?这里极力推荐大家看一下这篇文章神经网络激活函数的作用(不太清楚的最好先看一下,再往下读)
借用作者的总结,激活函数就是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。
(关于激活函数的类别及其优缺点将会在下一章更新)

在有了这个神经网络架构后,我们该如何训练网络呢,这就是之前学到的反向传播,用随机梯度下降算法进行快速优化

  1. 给定的一个输入集X,取其中的一个向量x
  2. 先正向计算x的神经网络,得到其输出值y
  3. 训练向量x有人为标定的标签l(label),计算其预测值跟真实值之间的误差,
    将误差项每一层地反向传播,得到每一层的误差,然后利用每一层的误差去更新每一层的权值去拟合模型

二、卷积神经网络
在讲原理之前,我们先举一个例子来告诉大家,卷积神经网络是干什么的。(例子出于个人理解,仅做参考)
比如我们现在站在一栋大楼面前,它里面林林总总有很多物品,要让一个人说出里面有什么,未免太困难,所以我们用了一群人,每个人只需要关注一样东西,比如第一个人只需要关注里面有没有桌子,第二个人只关注里面有没有椅子,这样一层一层筛查,最后,我们将这些信息汇总起来,就可以得到这栋楼的所有信息。卷积神经网络就做了这样一件事,每个卷积核只收集一种特征,因此,为了得到更多的特征,我们通常会用多个卷积核,最后将所有特征汇聚到一起,根据这些信息来得出一些结论。
在这里插入图片描述
在cs231n的课程中,这幅图出现了多次,它其实就描述了整个架构,我们来详细分析一下它的每一层。

  1. CONV卷积层
    卷积层和之前的全连接层相比,可以很好地保全空间结构。我们之前是将大小为32×32×3的图片展开成一个大小为1×3072的长向量,而在卷积层,我们仍然可以保留这个三维输入的结构。权重(W)是一些小的卷积核,将其在整个图像上移动,遍历所有通道,计算出每一个空间定位时的点积结果(注意是点积而不是矩阵相乘,其结果是一个数字)
    在这里插入图片描述
    在这一层,有几个重要的参数:

1)输入尺寸:W1×H1×D1
2)卷积核(filters)数:K
3)卷积核大小:F
4)步长:S
5) 填充0的宽度:P
6)输出尺寸:W2×H2×D2
W2=(W1-F+2P)/S+1
H2=(H1-F+2P)/S+1
D2=K(深度由卷积核的数量所决定)

  • 需要特别注意的是输入尺寸和填充0的宽度;为避免经过多次卷积后矩阵变得太小,我们通常在矩阵周围填充上一圈零来保证卷积后的矩阵跟原矩阵大小一样。如下图,用输入数据中用绿色填充的部分就是补零填充,再进卷积运算即可得到与原数据一样的大小的输出。所以我们在说输入尺寸的时候,指的是没填充之前的,这里就是5×5(计算输出尺寸不要出错哦)

在这里插入图片描述

  • 接下来,我们借助一个例子来详细地看一下这些参数的计算过程(注意它的三维空间结构)
    在这里插入图片描述
    如上图所示,
    1)我们输入的是一个的图像x尺寸大小为5×5×3;最左边这一列的三个矩阵分别是x[:,:,0]、x[:,:,1]、x[:,:,2],每个矩阵大小是7×7(加上0填充后的);
    2)第二列和第三列分别是两个卷积核w0、w1(我们也可称为滤波器),卷积核数K为2,他们的大小均为3×3×3,注意不要丢掉这两列最下面的b;
    3)滑动步长S为2
    4)填充0的宽度P为1
    5)输出的尺寸W2=(W1-F+2P)/S+1=(5-3+21)/2+1=3
    H2=(H1-F+2P)/S+1=(5-3+2
    1)/2+1=3
    D2=K=2
    以重线标出的数字为例,output中第一个矩阵的第一个数字就等于图中每个蓝色的方框与粉色的方框做点积,再加上b,计算过程=0+(-2-2)+0+1=-3;
    output中第二个矩阵的第一个数字就等于图中每个蓝色的方框与W1的三个矩阵做点积,再加上b,计算过程=2+0+(-2)+0=0;
  1. RELU激活函数
    这里的激活函数和上面全连接层介绍的一致。激活函数可以有很多种,比如Sigmoid函数、Tanh函数,但在这里,我们一般用RELU函数(The Rectified Linear Unit/修正线性单元),它在神经元中,输出为
    在这里插入图片描述
    其函数图像表示为
    在这里插入图片描述
    如果想进一步了解为什么我们通常使用这个函数,可以参见为什么要引入Relu
  2. POOL池化层
    池化层一般夹在连续的卷积层中间,其本质是在尽可能保留图片空间信息的前提下,降低图片的尺寸,增大卷积核感受野,提取高层特征,同时减少网络参数量,预防过拟合。常见的池化层有最大池化层和平均池化层,我们一般用最大池化层。
    最大池化层(Max pooling):用一个区域的最大值来代替整个区域;有一堆神经元的激活值在这个地方,每个值代表某个神经元的激发程度,或者是某组卷积核的激发程度;最大池化就是用一个最显著的来激活它(选最神经的神经)
    在这里插入图片描述
    池化层只是在长和宽的方向上对像素矩阵进行改变,深度方向不存在变化,所以和卷积层不同的是,池化层的过滤器除了在长和宽两个维度上移动之外,它还需要在深度这个维度上移动。
    讲到这里,我们思考以下几个问题:

Q1:为什么可以降低图片空间尺寸?
Q2:为什么要降低图片尺寸?
Q3:我们在做卷积的时候,如果没有0填充,conv 层同样也可以起到降低尺寸的目的,为什么要单独用pooling 层来降低尺寸?
Q4:如何理解有的地方说pooling层引入了不变性?

  • 这些问题的答案在以下链接中均有解答,感兴趣的同学可做参考:
    answer1.
    answer2.
  1. FC全连接
    卷积神经网络最后一层不再需要保全之前的空间结构了,和之前的全连接一样,展开成一个长向量,将所有信息汇聚起来,最后得出分类结论

这只是卷积神经网络一开始的原理部分,希望可以帮助大家加深理解,后续会根据实验结果课程内容,进一步做解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值