[UFLDL] *Train and Optimize
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[Converge] Gradient Descent - Several solvers [Converge] Weight Initialiser [Converge] Backpropagation Algorithm 【BP实现细节】 [Converge] Feature Selection in training of Deep Learning 【特性相关性的影响】 [Converge] Training Neural Networks 【cs231n-lec5&6,推荐】 [Converge] Batch Normalisation
-
- SGD(随机梯度下降)
- LBFGS(受限的BFGS)--> Broyden–Fletcher–Goldfarb–Shanno (BFGS) algorithm
- CG(共轭梯度法)
-
- 而梯度下降法应用在深度网络中的一个缺点是权值的迭代变化值会很小,很容易收敛到的局部最优点;
- 另一个缺点是梯度下降法不能很好的处理有病态的曲率(比如Rosenbrock函数)的误差函数。
卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
顺便理解下相关的概念。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
参考资料 [1] Maxout Networks, 2013 [2] http://www.jianshu.com/p/96791a306ea5 [3] Deep learning:四十五(maxout简单理解) [4] 论文笔记 《Maxout Networks》 && 《Network In Network》 [5] Fully convolutional networks for semantic segmentation, 2015 [6] http://blog.csdn.net/u010402786/article/details/50499864 [7] 深度学习(二十六)Network In Network学习笔记 [8] Network in Nerwork, 2014 [9] Improving neural networks by preventing co-adaptation of feature detectors
1、Maxout Network
提出了一个概念——线性变化+Max操作可以拟合任意的的凸函数,包括激活函数 (such as Relu)。
(1)
如果激活函数采用sigmoid函数的话,在前向传播过程中,隐含层节点的输出表达式为:
W是2维,这里表示取出的是第i列(对应第i个输出节点),下标i前的省略号表示对应所有行中的第i列中的。
(2)
如果是maxout激活函数,则其隐含层节点的输出表达式为:
W是3维,尺寸为d*m*k,
- d表示输入层节点的个数,
- m表示隐含层节点的个数,
- k表示每个隐含层节点展开k个中间节点,这k个中间节点都是线性输出的,而maxout的每个节点就是取这k个中间节点输出最大的那个值。
参考一个日文的maxout ppt 中的一页ppt如下:
这张图的意识是说,紫圈中的隐藏节点展开成了5个黄色节点,取max。Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。
从左往右,依次拟合出了ReLU,abs,二次曲线。
作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是中间节点的个数可以任意多,如下图所示,具体可以翻阅paper[1]。
maxout的一个强假设是输出是位于输入空间的凸集中的….这个假设是否一定成立呢?虽然ReLU是Maxout的一个特例——实际上是得不到ReLU正好的情况的,我们是在学习这个非线性变换,用多个线性变换的组合+Max操作。
Jeff: 是否具有一定的实战价值?还是叫好不叫座?感觉是无关同样的改进,稍微了解下。
2、Network In Network
本文的一些概念,包括1*1卷积,global average pooling都已经成为后来网络设计的标准结构,有独到的见解。
看第一个NIN,本来11*11*3*96(11*11的卷积kernel,输出map 96个)对于一个patch输出96个点,是输出feature map同一个像素的96个channel,但是现在多加了一层MLP,把这96个点做了一个全连接,又输出了96个点
很巧妙,这个新加的MLP层就等价于一个1 * 1 的卷积层,
这样在神经网络结构设计的时候就非常方便了,只要在原来的卷积层后面加一个1*1的卷积层,而不改变输出的size。
注意,每一个卷积层后面都会跟上ReLU。所以,相当于网络变深了,我理解其实这个变深是效果提升的主要因素。
意义在于:成了一个不同特征提取器的综合效果,节省NN空间,但保证效果,这对网络的简化很有意义。
【举例解释,见原文】
这里建立了一个概念,全连接网络可以等价转换到1*1的卷积,这个idea在以后很多网络中都有用到,比如FCN[5]。
3、Global Average Pooling
在Googlenet网络中,也用到了Global Average Pooling,其实是受启发于Network In Network。
Global Average Pooling一般用于放在网络的最后,用于替换全连接FC层,为什么要替换FC?因为在使用中,例如alexnet和vgg网络都在卷积和softmax之间串联了fc层,发现有一些缺点:
(1)参数量极大,有时候一个网络超过80~90%的参数量在最后的几层FC层中;
(2)容易过拟合,很多CNN网络的过拟合主要来自于最后的fc层,因为参数太多,却没有合适的regularizer;过拟合导致模型的泛化能力变弱;
(3)实际应用中非常重要的一点,paper中并没有提到:FC要求输入输出是fix的,也就是说图像必须按照给定大小,而实际中,图像有大有小,fc就很不方便;
作者提出了Global Average Pooling,做法很简单,是对每一个单独的feature map取全局average。要求输出的nodes和分类category数量一致,这样后面就可以直接接softmax了。
作者指出,Global Average Pooling的好处有:
- 因为强行要求最后的feature map数量等于category数量,因此feature map就会被解析为categories confidence maps.
- 没有参数,所以不会过拟合;
- 对一个平面的计算,使得利用了空间信息,对于图像在空间中变化更鲁棒;
举个例子:
假如,最后的一层的数据是10个6*6的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,
这样10 个特征图就会输出10个数据点,将这些数据点组成一个1*10的向量的话,就成为一个特征向量,就可以送入到softmax的分类中计算了
From: https://alexisbcook.github.io/2017/global-average-pooling-layers-for-object-localization/
In mid-2016, researchers at MIT demonstrated that CNNs with GAP layers (a.k.a. GAP-CNNs) that have been trained for a classification task can also be used for object localization.
That is, a GAP-CNN not only tells us what object is contained in the image - it also tells us where the object is in the image, and through no additional work on our part! The localization is expressed as a heat map (referred to as a class activation map), where the color-coding scheme identifies regions that are relatively important for the GAP-CNN to perform the object identification task.
-
- 与Dropout不同的是,它不是随机将隐含层节点的输出清0,
- 将节点中的每个与其相连的输入权值以1-p的概率清0。