美文网首页嵌牛IT观察
Rethink DL | 卷积神经网络

Rethink DL | 卷积神经网络

作者: d5cc63d9e177 | 来源:发表于2020-12-12 08:53 被阅读0次

姓名:韩宜真

学号:17020120095

转载自:https://mp.weixin.qq.com/s/st_tL-rnqSxjiR77qniLtw

【嵌牛导读】本文介了卷积神经网络。

【嵌牛鼻子】卷积 神经元

【嵌牛提问】卷积神经网络的定义是怎样的?

【嵌牛正文】CNN(Convolution Neural Network,卷积神经网络)作为一种经典的 DNN 结构,上世纪90年代就已经被提出了,却沉寂近20年。有趣的是,在2012年 AlexNet 大放异彩后,CNN 在随后几年近乎卷席了整个图像处理领域,很有点戏剧性。近些年,CNN 在语音处理、NLP 领域也发展迅速。本文会介绍 CNN 的相关概念,并具体介绍一些有趣的 CNN 架构。

CNN

CNN 其实可以看作 DNN 的一种特殊形式。它跟传统 DNN 标志性的区别在于两点,Convolution Kernel 以及 Pooling。

Convolution Kernel

卷积

说起 Convolution Kernel,首先要解释一下 Convolution(卷积)。一般我们接触过的都是一维信号的卷积,也就是

在信号处理中,是输入信号,是单位响应。于是输出信号就是输入信号响应的延迟叠加。这也就是一维卷积本质:加权叠加/积分。

那么对于二维信号,比如图像,卷积的公式就成了

假设现在 Convolution Kernel 大小是,我们就可以化简上式为

看公式很繁琐,我们画个图看看,假如 Convolution Kernel 如下图

那么,从 Input Image 到 Output Image 的变化如下

可以看出,其实二维卷积一样也是加权叠加/积分。需要注意的是,其中 Convolution Kernel 进行了水平和竖直方向的翻转。

Convolution Kernel 的意义

Convolution Kernel 其实在图像处理中并不是新事物,Sobel 算子等滤波算子,一直都在被用于边缘检测等工作中,只是以前被称为 Filter。图像处理的同学应该有印象。

Convolution Kernel 的一个属性就是局部性。即它只关注局部特征,局部的程度取决于 Convolution Kernel 的大小。比如用 Sobel 算子进行边缘检测,本质就是比较图像邻近像素的相似性。

也可以从另外一个角度理解 Convolution Kernel 的意义。学过信号处理的同学应该记得,时域卷积对应频域相乘。所以原图像与 Convolution Kernel 的卷积,其实对应频域中对图像频段进行选择。比如,图像中的边缘和轮廓属于是高频信息,图像中区域强度的综合考量属于低频信息。在传统图像处理里,这些物理意义是指导设计 Convolution Kernel 的一个重要方面。

CNN 的 Convolution Kernel

CNN 中的 Convolution Kernel 跟传统的 Convolution Kernel 本质没有什么不同。仍然以图像为例,Convolution Kernel 依次与 Input 不同位置的图像块做卷积,得到 Output,如下图。

同时,CNN 有一些它独特的地方,比如各种定义,以及它属于 DNN 的那些属性:

CNN 可以看作是 DNN 的一种简化形式,Input 和 Output 是 DNN 中的 Layer,Convolution Kernel 则是这两层连线对应的,且与 DNN 一样,会加一个参数 Bias

一个 Convolution Kernel 在与 Input 不同区域做卷积时,它的参数是固定不变的。放在 DNN 的框架中理解,就是对 Output Layer 中的神经元而言,它们的和是相同的,只是与 Input Layer 中连接的节点在改变。在 CNN 里,这叫做 Shared Weights and Biases

在 CNN 中,Convolution Kernel 可能是高维的。假如输入是维的,那么一般 Convolution Kernel 就会选择为维,也就是与输入的 Depth 一致

最重要的一点,在 CNN 中,Convolution Kernel 的权值其实就是,因此不需要提前设计,而是跟 DNN 一样利用 GD 来优化

如上面所说,Convolution Kernel 卷积后得到的会是原图的某些特征(如边缘信息),所以在 CNN 中,Convolution Kernel 卷积得到的 Layer 称作 Feature Map

一般 CNN 中一层会含有多个 Convolution Kernel,目的是学习出 Input 的不同特征,对应得到多个 Feature Map。又由于 Convolution Kernel 中的参数是通过 GD 优化得到而非设定的,于是的初始化就显得格外重要了

以上内容中关于 CNN 的 GD 推导,我并没有细讲。有兴趣的同学自行 Google 即可。

Pooling

Pooling 的本质,其实是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行压缩。如下图,表示的就是对 Feature Map 邻域内的值,选择最大值输出到下一层,这叫做 Max-Pooling。于是一个的 Feature Map 被压缩到了。

除此之外,还有Mean-Pooling,Stochastic-Pooling 等。它们的具体实现如名称所示,具体选择哪一个则取决于具体的任务。

Pooling 的意义,主要有两点:

第一个显而易见,就是减少参数。通过对 Feature Map 降维,有效减少后续层需要的参数

另一个则是 Translation Invariance。它表示对于 Input,当其中像素在邻域发生微小位移时,Pooling Layer 的输出是不变的。这就增强了网络的鲁棒性,有一定抗扰动的作用。

小结

从上面我们可以看出来,CNN 里结构大都对应着传统图像处理某种操作。区别在于,以前是我们利用专家知识设计好每个操作的细节,而现在是利用训练样本+优化算法学习出网络的参数。在实际工程中,我们也必须根据实际物理含义对 CNN 结构进行取舍。

但是,随着 Convolution 的堆叠,Feature Map 变得越来越抽象,人类已经很难去理解了。为了攻克这个黑箱,现在大家也都在尝试各种不同的方式来对 CNN 中的细节进行理解,因为如果没有足够深的理解,或许很难发挥出 CNN 更多的能力。不过,这就是另外一个很大的课题了。

相关文章

网友评论

    本文标题:Rethink DL | 卷积神经网络

    本文链接:https://www.haomeiwen.com/subject/edrsgktx.html