Caffe最优化求解过程

2017/7/6 posted in  Caffe最优化求解过程

将前面几天讲述的不同Layer组合起来就可以构建起完整的CNN/DNN。今天将从Caffe的Solver类入手,对Caffe训练时的流程做深入分析,也就是看Caffe实际是如何“动”起来的。

求解器是什么

从前两天内容我们学习到,Net己经完成部分学习任务(数据前向传播、误差反向传播),而CNN剩下有监督的优化过程、利用每层的梯度生成权值增量则由求解器(Solver)负责.

求解器负责对模型优化,它的KPI(Key Performance Indicator,关键绩效指你,某公司常用的一种员工绩效评定方式)就是让损失函数达到全局最小。

求解器的特性如下:

  • 负责记录优化过程,创建用于学习的训练网络和用于评估学习效果的测试网络。
  • 调用Forward\(\rightarrow\)调用Backward\(\rightarrow\)更新权值,反复迭代优化模型。
  • 周期性的评估测试网络
  • 在优化过程中为模型,求解器状态打快照.

为了让权值从初始化状态向着更好的模型前进,求解器在每次迭代中做了如下事情:

  • 调用Net的前向传播函数来计算输出和损失函数。
  • 调用Net的反向传播函数来计算梯度。
  • 根据求解器方法,将梯度转换为权值增量
  • 根据学习速率、历史权值、所用方法更新求解器状态。

求解器是如何实现的

在卷积神经网络中,有两种类型的层需要学习:卷积层和全连接层(统称权值层,因为它们都有weight参数)。在设计求解器时,学习速率参数的设置也是针对这两个层的

在caffe中我们要适当把握度,控制收敛的参数---学习速率.

我们来具体看一下Caffe是如何对权值学习做到“不偏不倚”的。

算法描述

Caffe中的求解器有以下几种:

  • 随机梯度下降法(Stochastic Gradient Descent, SGD),最常用的一种
  • AdaDelta
  • 自适应梯度法(Adaptive Gradient, ADAGRAD)
  • Adam
  • Nesterov加速梯度法(Nesterov’s Accelerated Gradient, NAG)
  • RMSprop

求解器方法重点是最小化损失函数的全局优化问题,对于数据集D,优化目标是在全数据集D上损失函数平均值:
\[
L(W)=\frac{1}{|{D}|}\sum^{|D|}_{i}{f_w(X^{(i)}) + \lambda{r}(W)}
\]

其中,\(f_w(X^{(i)})\)是在数据实例\(X^{(i)\)上的损失函数,\(r(W)\)为规整项,\(\lambda\)为规整项的权重。数据集\(D\)可能非常大,工程上一般在每次迭代中使用这个目标函数的随机逼近,即小批量数据\(N<<|D|\)个数据实例: