深度学习部分概念解析 - 1

1.优化方法介绍

这里说的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的值最小。

  • SGD
    • SGD是stochastic gradient descent的简称,即随机梯度下降。此外还有BGD,B指的是batch,意思为批量梯度下降。对于训练数据集,我们先将其分为n个batch,每个batch包含m个样本,

      x t+1=x t+Δx t
      Δx t=−ηg t

      其中,η为学习率,gt为x在t时刻的梯度。
  • momentum

    • SGD方法的一个缺点是,其更新方向完全依赖于当前的batch,十分不稳定,为了解决这个问题,研究者们提出momentum。momentum的意思是动量,旨在模拟物体运动时候所具有的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向,这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:
      Δx t=ρΔx t-1−ηg t

      其中,ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始 时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。η 是学习率,即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。ρ 与 η 之和不一定为1。
  • Adagrad(每个变量有自己的节奏)

    • 上面提到的方法对于所有参数都使用了同一个更新速率。但是同一个更新速率不一定适合所有参数。比如有的参数可能已经到了仅需要微调的阶段,但又有些参数由于对应样本少等原因,还需要较大幅度的调动。Adagrad就是针对这一问题提出的,自适应地为各个参数分配不同学习率的算法。伯克利加州大学读博士的Jhon Duchi,提出了AdaGrad(Adaptive Gradient),字面上理解就是自适应学习率。AdaGrad的基本思想是对每个变量用不同的学习率,这个学习率在一开始比较大,用于快速梯度下降。随着优化过程的进行,对于已经下降很多的变量,则减缓学习率,对于还没怎么下降的变量,则保持一个较大的学习率。其实就是每个变量都随着学习的进行,根据历史学习率累积总量来决定当前学习率减小的程度。根据AdaGrad的特性,对于下面这种函数会比一般的梯度下降有很大的优势,如图2-52中等高线所示的情况。

      图2-52中,中间区域上下方向梯度变化明显,但是左右方向梯度非常平缓。如果是一般的梯度下降,学习率过大的话则会沿着图2-52中的上下方向震荡,如果学习率过小则会像图2-52中的虚线箭头所示,到达B位置后,以一个极其缓慢的速度向A点前进。

常见的是上面几个,因此记录下,还有其它几种优化机制的原理,请参考
http://blog.csdn.net/u012759136/article/details/52302426

2.ResNet

ResNet(residual network)是什么?为什么叫残差啊?我们先看看residual 的解释:

深度学习部分概念解析 - 1_第1张图片

下面我们看看ResNet的具体内容是什么?残差网络的基本结构如下图所示

这里写图片描述

可以看到ResNet只是在输入X和输出之间引入了一个捷径,也就是说加了一条路,这条路上没有任何障碍。

此外,从另一种角度来看,残差网络也可以看成下面的样式,直白了说,残差网络其实是很多并行子网络的组合,整个残差网络其实相当于一个多人投票系统(Ensembling)。

这里写图片描述

但是看到这里,我也不清楚为什么取名为残差,记住就好咯。ResNet被设计者用来解决深度网络的梯度消失问题,它确实有用!我们看看一些经典的ResNet例子

这里写图片描述

看到这里想到,其实ResNet的理念很有用,而且在现有的实验基础上已经表现出一定的优势,然而个人觉得ResNet的优势可能不止于此。如果把神经网络与人脑类别,个人还是相信其中有这样的结构。但是我们实现的ResNet有一个问题在于,基本上都是重复的神经单元,大脑中的神经单元应该会有分类的吧,比如说左脑处理某某,右脑处理某某。如果目前的神经网络科学发展往这个方向下去的话,感觉会有突破,这里先做一个预测咯。

3.Local Response Normalization(LRN)

Local Response Normalization,即局部响应归一化层,是在局部响应归一化层完成一种“临近抑制”操作,这个的设计实现是在caffe中。而加入这层有什么意义呢?

    神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
     深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
     Hinton等人在12年NIPS的论文”Image Classification with Deep Convolutional Neural Network”中认为,LRN层模仿生物神经系统的侧抑制机制,对局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,提高模型泛化能力。Hinton等人在ImageNet上的实验表明,添加LRN层可以分别把Top 1和Top 5的error rate降低1.4%和1.2%。LRN的几个超参数,local_size, alpha, beta等,需要在验证集上选择最优值。论文中推荐的值为local_size = 5, alpha=, beta = 0.75.

参考文献
1.http://book.51cto.com/art/201710/555102.htm
2.http://blog.csdn.net/luo123n/article/details/48239963
3.http://blog.csdn.net/buyi_shizi/article/details/53336192
4.https://www.zhihu.com/question/26871787/answer/70965904

你可能感兴趣的:(deep-learning)