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的快照
每次迭代过程中:
- 调用 Net 的前向过程计算出输出和 loss;
- 调用 Net 的后向过程计算出梯度(loss 对每层的权重 w 和偏置 b 求导);
- 根据下面所讲的 Solver 方法,利用梯度更新参数;
- 根据学习率(learning rate),历史数据和求解方法更新 solver 的状态,使权重从初始化状态逐步更新到最终的学习到的状态。
solvers 的运行模式有 CPU/GPU 两种模式。