Machine-Learning之CNN介绍

作者把晚上回家打dota和工作间隙聊天的宝贵时间拿出来,了解学习了Machine-Learning的一些东西。拿出来写写。这些文章只是作者的一些简单理解,作者本人还没有写过多少相关代码,本文通过借鉴其他文章和书籍加工而成。

前言

为什么要学习Machine-Learning(简称ML)? 作者觉得一方面是不被人忽悠,就像某些8核芯片,听起来很厉害还高大上,可还不如人家苹果的单核能力强。另一方面几大EDA公司已经开始了machine-learning的研发,之后我们用的工具一定会有相关的算法在里面,说不定工具还可以采用用户自己研发的machine-learning算法。

ML毕竟是已经发展了几十年的东西,要完全掌握ML,需要很多的时间去学习了解各种算法和原理。本文只是从宏观上了解一下相关的内容。在ML里面,听过最多的单词就是卷积神经网络(CNN),CNN是图片识别中比较成功,也比较经典的一种算法。本文就来介绍介绍CNN。CNN 大体上来说分为C和NN,C就是卷积(Convolution),NN 就是神经网络(Neural Network)。所以我们先需要了解一下什么是卷积。

CNN之卷积操作

卷积,这个词不好理解,需要举几个例子来辅助理解。

时域卷积例子:当前事物的状态和前一时刻,前前一时刻,前前前一时刻.....的激励相关。将初始时刻的状态和所有时刻的激励叠加起来就是卷积操作。前一刻状态和当前激励叠加,可以认为是当前时刻的卷积操作。

空域卷积例子: 当前坐标的状态和上下左右各个周围的状态有关。就像颜色渐变一样。将当前位置状态和周围状态叠加,可以认为是当前坐标的卷积。

CNN主要处理的是图像识别问题,所以需要用到空域卷积。空域卷积需要两个参数:

1, 范围。中间的像素点和周围多大范围有关。这个没有一个确定的值,有一圈,两圈,三圈等等,换句话说就是一个3*3,5*5或者7*7的矩形。下面的矩形叫做卷积核。

2,权重。卷积操作用的是线性关系,以3*3的卷积核为例,每个框中权重设为W ,那么当前像素经过卷积后值Y就是下面的方程式:

对每个像素点都用同样的卷积和进行一次卷积操作则图片完成了一次卷积。卷积前后大小并不会发生变化。假设我们的图片大小是1024*768,在经过786432此卷积后,生成新的图片大小仍然为1024*768。

如果我们的图片是黑白图片,我们只需要一个矩形的卷积核就行了。如果是一个RGB色彩的图片,每个像素上有RGB三层,我们就需要一个3*3*3的一个立方体卷积核。中间一个像素点和上下左右前后各个方向都有关系。

下面我们看两个经过卷积操作后的图形,卷积核大小是3*3,。可以发现花的形状更加明显了。所以卷积操作又被认为是特征提取操作。

不同权重的卷积核,提取的特征不一样。为了提取更多的特征,我们需要多个卷积核,假设我们取64个卷积核。那么一张图片经过这64个卷积和后就变为了64张图片,每张图片又叫做FeatureMap。所以经常在各种文档中可以看到下面的情况: 一张图片进过一次卷积后,要么变成了多张,要么变为了三维的立方体

CNN之激活函数

卷积的操作实际就是不同像素点经过不同权重之后线性叠加的算法。换句话说卷积就是线性的函数。一个线性的函数是无法模拟这个难以捉摸的世界的,所以我们需要激活函数,将线性函数转化为非线性函数。刚开始接触这个转化概念可能不理解这个转化的意义,会觉得转化后会偏离真实值。确实是这样的,不过我们可以用数量来弥补。就像tou票一样,每个人都对候选人有各种不同的看法,但是tou票只能有两种选择,投和不投。只要tou票人数足够多,就可以逼近真实的值,即选出最合适的人。

激活函数也有很多种算法,最早期的叫做sigmoid(又称logistic函数),现在比较流行的是ReLU激活函数,以及各种改良的relu函数,总之是非线性的函数。

上面进过一次卷积操作可以叫一层(layer),一次激活函数操作也可以叫一层,这两个操作合起来还可以叫做一层。不过一般取合起来的操作叫做一层layer。一般会多次进行多次卷积和激活,即使用多层.

CNN之池化

池化英文叫做pooling,可以认为是图片压缩。经过卷积后,图片的大小并没有变,1024*768的图片仍然是1024*768的。这么大的图片并不利于我们后续的操作,一方面是计算量太大,另一方面是特征还不明显,我们需要压缩一下更突出特征。压缩的方法有多种,如平均压缩,最大压缩,最小压缩

例如下图所示,原来4*4大小的图片,经过池化(压缩),变成了2*2大小。这里池化核选取了2*2的,或者说压缩率是2*2.

CNN之数据变化

下图显示了经典的VGG16模型中卷积部分,这里黑色方块共13层,即进行了13次卷积(激活操作包含在了卷积操作中),红色方块共5层,即进行了5次池化。可以发现,方块虽然越来越小,但是却越来越厚。越来越小是因为进行了多次池化操作。越来越厚是因为卷积核数目一次比一次多,这是因为需要对特征的特征,特征的特征的特征进行不断的提取,所以后一次的卷积核数目一定大于或等于前一次的卷积核。

在有的文章中,卷积池化操作是下面的一张图,总之就是图片的size原来越小,图片个数越来越多。到此为止卷积操作部分就说完了,下节我们再说说神经网络NN部分。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181114G0VOPR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券