论文详解 + TCN 篇知识点补充: Receptive Field_感受野

此篇延伸补充的源头文章链接:


相关主题推荐文章


命名由来

Receptive Field 这个词最易开始是从生物领域被 Convolutional Neural Networks 借用到了它的原理描述上面,生物领域的意思在 wiki 上的原文是: The receptive field of an individual sensory neuron is the particular region of the sensory space in which a stimulus will modify the firing of that neuron. (各自独立的感知神经元组成的感受野是一个特殊的感知空间,此空间接受外部的刺激后会改变受刺激本身的神经单元)。

这就好比 CNN 搭建起来的神经网络,kernal 就像是一个类似 stimuli 的 Receptive Field,每当扫过一个整体图像的小块区域后,就会得出一个彼此经过卷积计算的结果,而此结果就好比 modifying the firing of that neuron.

CNN 的运算机制如下图:

直观的看,如果只简单的任由 Convolution Filter 去扫描一张原始图片数据,那经过几次计算后,很快的整个 output 就会变得非常小,output 显示出来的最终结果也就越来越失真,换个角度也可以解释为:由于单位数据涵盖的原始数据量越来越大了,也就越来越描述不清楚其本身涵盖的东西详细内容是什么。而涵盖量用个专业的名字给冠上就是题目名:Receptive Field


Receptive Field 面积

在设计 CNN architecture 的时候,我们期望的目的是能够尽可能不失真的条件下抓取越多面积的信息,并搜集成特征值归纳在新的矩阵中,因此单就 CNN 的特征抓取这件事情本身而言,设计者会希望在 Receptive Field 大一点的情况下去搜集局域特征会好些,这样考虑的因素就不单只有单一像素的信息,而 output 出来的矩阵会缩小的情况就用 zero padding 去克服,让经过 convolution 计算出来的 output 还是原来的尺寸。

一个 Receptive Field 里面的元素重要程度取决于 CNN 使用的 kernal 内部数值分布,一般而言,设计理念为:越接近 Receptive Field 中间的元素其重要程度越大,越加远离中间元素的其他元素,其影响力相对呈现 exponential 曲线递减。因为如此,了解每一层 kernal 的 Receptive Field 面积成为了一件在构筑框架的时候非常重要的事情,他能够让我们更加深刻的理解该层特征值矩阵是纵观了多少面积的原始数据后的出的结论。

计算 Receptive Field 面积前,先要探讨一个 input picture 经过 kernal 做 convolution 后得出的新矩阵大小,公式如下:

  • n_out = 新的矩阵的大小
  • n_in = 神经网络开始前作为输入的该原始数据(可以是图片或是上一层神经网络输出的结果)
  • p = padding 层数,表示我们在 input 数据上面围了多少层 0 元素(为了维持 input = output)
  • k = kernal 尺寸,扫描 input data 的核的长宽大小
  • s = stride,表示每次 kernal 在扫描的时候步伐长度,一次整体前进几格的设定

如果 kernal 在扫描的过程中,其内部元素都排列紧密(kernal 矩阵之间没有间隔),那么 Receptive Field 的大小也就跟上面的 kernal 本身大小相同了,想要增大 Field 的话,就只能够用更大的 kernal 去完成,但是这也意味着更多的计算量与更多的参数参与计算(占用计算资源的同时还同时占用了内存资源),有没有什么办法可以让计算量不变的情况下使得 Field 增大? 聪明的研究员们给出了一个好的答案:Dilated Convolution。


疏松的 Convolution

原本使用 kernal 的时候,都是让其内部的元素“无缝”排列进行 Convolution,为了 0 成本的增加 Receptive Field,原本“无缝”的排列需要预留一些等宽的空格去做 Convolution,详情如下图:

用疏松的 kernal 去扫描的话,原本适配最左边紧密 kernal 去推导的公式也就需要多一个维度的变量去计算最终的 Receptive Field。让原本紧密的 kernal 中间产生空洞的深入细节和目的下篇文章再详细深究 [点击前往(待开通)],这里还是继续关注公式的推导。

这些放在原本 kernal 元素之间的空格,在实际上代码操作的时候用 0 表示即可,每层 kernal 的感受野都可以被计算出来,但是由于不清楚前一层使用被 dilated 多大的 kernal ,所以我们需要知道前一层的 Receptive Field 大小前提下,才可以对下一层的 RF 做估算。公式如下:

j_out  =  j_in * s                     

r_out  =  r_in + (k - 1) * j_in

  • r_out = 新一层 kernal 的 Receptive Field
  • r_in = 前一层 kernal 的 Receptive Field
  • k = kernal 的尺寸,如果是 3×3 的 kernal,则 k = 3
  • j_out = 表示每个原始 pixel 经过 kernal 做 convolution 之后产生的 feature map 之间,其 map 内部每个结果点背后所消耗的每“坨”原始 pixel 之间的距离

实际运算可以参考上面相关文章下面的链接,内容有 python 的代码提供给大家做操练。整体计算过程中并不关心该 kernal 被放大了几个单位,只关心放大后的 kernal 作为一个新的 kernal 整体,其 Receptive Field 是多少。

大的 Receptive Field 感受野可以让每个单位输出的 convolution 计算结果包含了较大面积的信息,有些图像需要更多的全局信息,或是例如声音信号与文字信号等需要更多更深刻参考前后关系的信息,也都有非常正面的帮助。例如物体识别方面的研究就非常注重感受野的大小,同时也是 Dilated Convolution 扩增卷积的发明所属领域,主要原因在于需要探讨到每个 pixel 所属的分类问题,这时候如果用了一般没被放大的 kernal 的话,感受野不够大的同时,还被 pooling 流程给直接砍掉一大半“较大感受野”信息导致无法还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值