[CNN]一些个人认为需要理清的细节
2017-09-25 03:54
239 查看
鼎鼎大名的cnn,权值共享、局部感知就不说了。总结一下一些具体细节的问题。
padding
stride
多通道卷积(depth方向)
平移、旋转不变性
pooling
fc
1x1卷积
三维卷积
参考:https://zhuanlan.zhihu.com/p/27642620
通常大家都想要在卷积时保持图片的原始尺寸。 选择3x3的filter和1的zero padding,或5x5的filter和2的zero padding可以保持图片的原始尺寸。 这也是为什么大家多选择3x3和5x5的filter的原因。 另一个原因是3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。
类比:想象在切蛋糕的时候,不管这个蛋糕有多少层,通常大家都会一刀切到底,但是在长和宽这两个维上是局部切割。
每个通道的权值不共享。
有几个kernel,就有几个feature map。
每个通道对应位置的卷积结果相加(再套一个激活函数)得到feature map。
卷积的时候,特征图会随着图像平移而跟着平移。
池化的时候,比如max-pooling,保留局部的最大值,那么图片移动之后那个局部的最大值也很可能是被保留的。
旋转
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理解的例子与代码自己搜 。
全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为h×w的全局卷积,h和w分别为前层卷积结果的高和宽。
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分别为前层卷积结果的高和宽。
相关文章推荐
- jdk环境配置需要注意的一些细节
- C++ 一些需要注意的细节
- lua 一些需要注意的细节
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- js 常见的一些小问题 需要注意的细节
- Android编程一些需要关注的细节
- 个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
- Javascript - 一些需要注意的细节
- tcpcopy mysql功能由于细节比较多,需要处理的内容还有一些,版本只能拖后发布
- 一些java编程时需要注意的细节
- Android通知栏微技巧一些需要注意的小细节
- MicroC/OS-II RTOS的一些个人需要记录的要点
- javaScript一些需要注意的细节
- Android开发的一些需要注意的细节
- 金万钠说:“上面写的都是我想到的自己觉得比较重要的一些地方,还有很多细节是需要在实践中慢慢摸索和总结的。”
- 个人认为一些比较重要的题和答案
- ireport+struts2集成开发总结二:一些需要注意的小细节
- 字符串处理strlen函数需要注意的一些小细节问题
- 网站代码优化需要注意的一些细节