solver是caffe中一个很重要的概念,简单来说solver通过不断 forward和backward计算梯度,用计算得到的梯度对模型进行优化,更新深度神经网络各层的参数,使得loss最小以使模型更好地拟合数据。
1. solver的作用及分类
在caffe中封装的有以下几种solver:
- Stochastic Gradient Descent (type: “SGD”)
- AdaDelta (type: “AdaDelta”)
- Adaptive Gradient (type: “AdaGrad”)
- Adam (type: “Adam”)
- Nesterov’s Accelerated Gradient (type: “Nesterov”)
- RMSprop (type: “RMSProp”)
在以上solver中比较常用的Stochastic Gradient Descent(SGD),也即随机梯度下降,其他的solver我还暂时没有用到过。
solver主要进行以下工作:
- 定义并生成一个网络用来训练和测试
- 反复迭代对网络进行forward和backward计算并更新网络参数
- 根据给定参数定期对训练中的网络进行测试评估
- 根据所给参数在训练过程中定期保存网络权重
solver从最开始初始化的网络模型开始在每次迭代计算过程中都将进行:
- 调用forward function 计算网络输出和loss
- 调用backward function 计算梯度
- 根据所选solver类型的不同相应地根据计算得到的梯度更新网络参数
- 根据所选学习率、solver的类型和历史数据更新solver状态
2. 理论介绍
solver把最优化深度神经网络当做最小化loss的过程。比如有一个含有 D 个训练数据的数据集,我们最优化(也即最小化)的目标就是这
L(W)=1|D|∑i|D|fW(X(i))+λr(W)
其中, fW(X(i)) 是在单个数据 X(i) 上的loss ,