鼎鼎大名的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层只知道这个最大值是多少,但是其出现位置信息并没有保留;
- 另外一个明显的缺点是:有时候有些强特征会出现多次,比如我们常见的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分别为前层卷积结果的高和宽。