您的位置:首页 > 其它

[CNN]一些个人认为需要理清的细节

2017-09-25 03:54 239 查看
鼎鼎大名的cnn,权值共享、局部感知就不说了。总结一下一些具体细节的问题。

padding

stride

多通道卷积(depth方向)

平移、旋转不变性

pooling

fc

1x1卷积

三维卷积

padding

填充。在输入图片边界进行填充(一般都是zero_padding,【挖个坑】why zero?)。控制输出featuremap的size,并且避免图片边缘信息被舍弃。

参考:https://zhuanlan.zhihu.com/p/27642620

通常大家都想要在卷积时保持图片的原始尺寸。 选择3x3的filter和1的zero padding,或5x5的filter和2的zero padding可以保持图片的原始尺寸。 这也是为什么大家多选择3x3和5x5的filter的原因。 另一个原因是3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。

stride

步幅。移动几个像素。

多通道卷积

在2D卷积中,filter在张量的width维, height维上是局部连接,在depth维上是贯串全部channels的。

类比:想象在切蛋糕的时候,不管这个蛋糕有多少层,通常大家都会一刀切到底,但是在长和宽这两个维上是局部切割。

每个通道的权值不共享。

有几个kernel,就有几个feature map。

每个通道对应位置的卷积结果相加(再套一个激活函数)得到feature map。

平移、旋转不变性

平移

卷积的时候,特征图会随着图像平移而跟着平移。

池化的时候,比如max-pooling,保留局部的最大值,那么图片移动之后那个局部的最大值也很可能是被保留的。

旋转

maxpooling的时候是有一定的旋转不变性的。

pooling

CNN中采用MaxPooling操作有几个好处:

首先,这个操作可以保证特征的位置与旋转不变性,因为不论这个强特征在哪个位置出现,都会不考虑其出现位置而能把它提出来。对于图像处理来说这种位置与旋转不变性是很好的特性,但是对于NLP来说,这个特性其实并不一定是好事,因为在很多NLP的应用场合,特征的出现位置信息是很重要的,比如主语出现位置一般在句子头,宾语一般出现在句子尾等等,这些位置信息其实有时候对于分类任务来说还是很重要的,但是Max Pooling 基本把这些信息抛掉了。

其次,MaxPooling能减少模型参数数量,有利于减少模型过拟合问题。因为经过Pooling操作后,往往把2D或者1D的数组转换为单一数值,这样对于后续的Convolution层或者全联接隐层来说无疑单个Filter的参数或者隐层神经元个数就减少了。

再者,对于NLP任务来说,MaxPooling有个额外的好处;在此处,可以把变长的输入X整理成固定长度的输入。因为CNN最后往往会接全联接层,而其神经元个数是需要事先定好的,如果输入是不定长的那么很难设计网络结构。前文说过,CNN模型的输入X长度是不确定的,而通过Pooling操作,每个Filter固定取1个值,那么有多少个Filter,Pooling层就有多少个神经元,这样就可以把全联接层神经元个数固定住(如图2所示),这个优点也是非常重要的。

缺点:

特征的位置信息在这一步骤完全丢失。在卷积层其实是保留了特征的位置信息的,但是通过取唯一的最大值,现在在Pooling层只知道这个最大值是多少,但是其出现位置信息
c9a8
并没有保留;

另外一个明显的缺点是:有时候有些强特征会出现多次,比如我们常见的TF.IDF公式,TF就是指某个特征出现的次数,出现次数越多说明这个特征越强,但是因为MaxPooling只保留一个最大值,所以即使某个特征出现多次,现在也只能看到一次,就是说同一特征的强度信息丢失了。

各种pooling的优势是什么,原理。

maxpooling看上面。

mean-pooling,即对邻域内特征点只求平均:假设pooling的窗大小是2x2,在forward的时候,就是在前面卷积完的输出上依次不重合的取2x2的窗平均,得到一个值就是当前meanpooling之后的值。backward的时候,把一个值分成四等分放到前面2x2的格子里面就好了。

Stochastic-pooling则介于两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。stochasticpooling方法非常简单,只需对featuremap中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大。而不像max-pooling那样,永远只取那个最大值元素。有关于stochastic pooling理解的例子与代码自己搜 。

full-connected layer

https://www.zhihu.com/question/41037974

全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为h×w的全局卷积,h和w分别为前层卷积结果的高和宽。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: