solver

solver 通过协调Net进行前向传播计算和反向传播的梯度计算(forward inference and backward gradients ),来对参数进行更新,从而实现loss减少的目的。Caffe的学习模型被分为两部分:由 solver 进行优化、更新参数,由 Net 计算出 loss 和 gradient。

Caffe支持的solver有以下:

  • Stochastic Gradient Descent (type: “SGD”),随机梯度下降
  • AdaDelta (type: “AdaDelta”)
  • Adaptive Gradient (type: “AdaGrad”),自适应梯度
  • Adam (type: “Adam”)
  • Nesterov’s Accelerated Gradient (type: “Nesterov”) and
  • RMSprop (type: “RMSProp”)

The Solver:

  • 创建用于学习的训练网络和用于评估网络性能的测试网络
  • 通过调用forward / backward过程和更新参数来迭代的优化学习模型
  • 周期性的评估网络在测试中的性能
  • 保存整个优化过程中model和solver state的快照

每次迭代过程中:

  1. 调用 Net 的前向过程计算出输出和 loss;
  2. 调用 Net 的后向过程计算出梯度(loss 对每层的权重 w 和偏置 b 求导);
  3. 根据下面所讲的 Solver 方法,利用梯度更新参数;
  4. 根据学习率(learning rate),历史数据和求解方法更新 solver 的状态,使权重从初始化状态逐步更新到最终的学习到的状态。

solvers 的运行模式有 CPU/GPU 两种模式。