李宏毅机器学习笔记(九)——卷积神经网络(CNN)

一.图像的特点

  以前的问题中,我们的输入是一个明显的n维向量,但对于一张图片,或者是可以与图片类比的内容(比如说棋盘等等),如果我们想要使用神经网络,按照以前的思想,那就是把图片也转化成一个n维向量。
  当然,依靠之前的神经网络,反正是全连接的,那转化方式就不重要了,直接摊平去按照以前的方式去处理就好了,但是随之麻烦也就来了,因为图片具有以下特点:
  1.图片一般比较大,经常是1k×1k像素,再加上为三种原色合成而来,所以一个样本的输入维数竟有7位数之多,既然输入多,那么中间层的数量和每层神经元的数量也要设置很多(不然欠拟合,无法处理那么多输入特征),因此就造成了参数的数量过多,几乎无法训练。
  2.神经网络的总体方法即为“找到特征”,而对于图片的特征,则和之前的不同:图片的特征一般就处在一个很小的区域。
在这里插入图片描述
  3.图片同一个特征可能处在图片的不同位置。这个道理也很简单,就比如一张图片上有比较小的手写数字,然后这个数字可能在图片的不同位置上,从而特征也跟着一起移动。
  4.将图片整体缩小基本不会改变图片的内容(这里与以前的图片压缩原理不同,这里是讲几个像素进行取平均等操作,图片压缩是采用数据降维等方法去除一些信息);且各种修图操作也不会改变内容(适当修改颜色,旋转图片,涂鸦等等)。即所谓的“图片也是有健壮性的”,过拟合带来的影响可能会更严重。

二.卷积神经网络的原理

1.卷积层

  根据上面的特征1和2,我们就希望我们的神经网络中,不再是全连接,而是每次参与运算的神经元仅仅是相邻的一块区域;而且由于特征3,我们要对所有的相邻的区域都进行处理,因此卷积层也应运而生。当然,卷积核,边填充,还有具体的操作方式,老师的视频讲的十分的生动。最重要的一点就是,卷积层其实就是全连接层的删减版,是根据图片特征来特意设计的。下面供上神图:
在这里插入图片描述
  当然,这张图上每一个卷积核都相当于16个神经元,然后假设有10个卷积核,那所谓的下一层就有俩160个神经元。比较头疼的就是这里的梯度下降因为参数共享,所以可能会比较麻烦。**但是所有的CNN的反向传播都是交给框架来处理,不会真的有人试图手动训练CNN吧不会吧不会吧。**当然,方法论上道理是相同的,共享就是复合求导的时候有更多加项罢了,一层层反向传播还是可以计算的。
  当然卷积层还有一些细节要处理。
  首先是卷积核的步长问题,为了能够提取到最多的信息,一般都是1;当然这个其实可以作为超参数,就类似于设定网络的层数一样。
  其次是卷积核会导致边角的地方比较小,利用率比较低。例如上图中6×6的图片,经过3×3的卷积核,即使步长为1,也缩减为了4×4。这个问题,如果图片很大,那么其实不是问题,减少的微乎其微;但如果图片本来就比较小了,那么可以在图片的周围取补一定的0来使图片增大,保证经过卷积层后的大小和之前期望值相同。
  最后一个问题就是所谓的三维卷积问题。假设我们现在的图片是三种颜色,大小是32,也就是3×32×32。那么我们就可以把最前面这个维度看成是特征。我们想想我们之前的神经网络是做了什么,都是组合这些特征来得到新的特征,而不是每个特征单独去看,分解成多个特征,这样没有意义。因此,对应的每个卷积核也要综合考虑这些特征来挖掘出新的一个特征。所以,如果有k个3×5×5的卷积核,那么每个卷积核其实是进行一个75维的运算再经过激活函数,即最终得到k×28×28的下一层,这个k又成为了新的特征数。也就是这一层的特征数与上一层的特征数无关,但是一个显然的道理是,这一层的特征数一定应该是比上一层的特征数要多的,不然就没有所谓的学习新特征的意义了。
在这里插入图片描述

2.池化层

  通过上面的卷积层步骤我们可以看出,虽然使用的参数不多,但是正常来说如果步长是1,每层特征数又越来越多,那么后面每层的大小就还是会越来越大,因此我们还需要一个所谓的筛选过滤的问题。
  就像最开始我们的特征3所说,如果我们找到了鲜明的特征,那么只要保留这个特征,然后将图片尺寸进行一个缩减,那么对图片本身影响不大(当然要求一般维度不是太小)。那么池化层应运而生。
  如果是保留特征,而卷积层的目的就是学特征,找到特征就有比较大的权重,那自然而然就是一个区域内保留最大的那个值。当然所谓的区域大小步长等也算是超参数,但总之会使得维数减少4倍以上。
在这里插入图片描述

3.全连接层

  当我们的特征差不多都提取的差不多,需要综合考虑的时候,加上维度 不是太大的时候,我们就可以再使用全连接层,最后得到结果了,如下图所示。
在这里插入图片描述
  当然我们其实是可以把每个全连接层看成卷积层的。假设输入是 k 1 k_1 k1维向量而输出是 k 2 k_2 k2维,有趣的是我们可以把输入看成是 k 1 ∗ 1 ∗ 1 k_1*1*1 k111的图片,然后构造 k 2 k_2 k2 k 1 ∗ 1 ∗ 1 k1*1*1 k111的卷积核,最后再加个激活函数,从而这种 1 ∗ 1 1*1 11的卷积完全模拟了全连接的步骤。

三.查看CNN的学习内容

  我们搭建完CNN经过训练后,可以得到好的结果,我们这时候就想看看CNN到底学到了什么。其实有两种方式,一种是根据输入,来看每个特征后的结果;第二种方式是根据判断结果,去找到最适合的输入。
  第一种的方式其实是比较简单的,就正常的进行预测,这次不仅仅输出结果了,要把中间的图像部分也做一个输出,对下面的图片有如下的结果,可见结果还是鲜明可解释的。
在这里插入图片描述

  第二种的思想如下:我们训练时是把 x x x作为了输入,通过 y y y来确定使得 y ^ \hat y y^最接近 y y y w w w。那在训练后 w w w已经固定,那我们就可以把 w w w作为输入,通过 y y y来确定使得 y ^ \hat y y^最接近 y y y x x x
  当然下图是使得输出数字为0-8的置信度最大的图片,显然得到的结果和我们想象的不同,完全没有办法用人的角度去解释。
在这里插入图片描述
  当然,我们可以这样想,我们每次进行分类,不一定总是一定使得分类的结果最鲜明(99.999%+这种),一般是足够鲜明即可(例如99%),这一般就引起了过拟合现象,从而造成了图像就像电视机收不到信号一样。
  因此我们应该进行正则化处理,让所谓的亮点少一些。既然这里的参数是 x x x本身了,那对应的L1或者L2正则化等等的正则化项也是加上 x x x。最后结果如下图所示,其实还是难以解释…
在这里插入图片描述
  所以一般paper或者ppt中的图都是用第一种方法来正向查看提取到的特征,因为反向来看输入的最优情况很难去解释,即使机器确实是学到了一些东西的

四.CNN的其余应用

  理论上只要是类似于图像,在一个区域内可以提取特征的内容,都可以利用CNN。老师的课上也举了十分多的例子,这部分的扩展内容将在最后的论文扩展篇再详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值