1. Optimizer
class Optimizer(object):
def __init__(self, params, defaults):
self.defaults = defaults
self.state = defaultdict(dict)
self.param_groups = [] # 每个元素是字典:{"params":"param_groups"}
...
主要参数:
- defaults: 优化器超参数
- state: 参数的缓存,如momentum的缓存
- param_groups: 管理的参数组
- _step_count: 记录更新次数,学习率调整中使用
2. 基本函数
2.1 zero_grad()
- 功能: 清空所管理的参数的梯度(PyTorch中张量梯度不会自动清零)
2.2 step()
- 功能: 执行一步更新,优化方法有很多,SGD,PROP,Adam…
2.3 add_param_group()
- 功能: 添加参数组,比如卷积层和全连接用不同学习率
2.4 state_dict()和load_state_dict()
- 功能:
- state_dict: 获取优化器当前状态信息字典
- load_state_dict: 加载状态信息字典
3. PyTorch中的优化器
3.1 optim.SGD
optim.SGD(params, lr=required, momentum=0, dampening=0, weight_decay=0, nesterov=False)
- 主要参数:
- params: 管理的参数组
- lr: 初始学习率
- momentum: 动量系数, β \beta β
- weight_decay: L2正则化系数
- nesterov: 是否采用NAG
3.2 optim.Adagrad
- 自适应学习率梯度下降法
3.3 optim.RMSprop
- Adagrad的改进
3.4 optim.Adadelta
- Adagrad的改进
3.5 optim.Adam
- RMSprop结合Momentum
3.6 optim.Adamax
- Adam增加学习率上限
3.7 optim.SparseAdam
- 稀疏版的Adam
3.8 optim.ASGD
- 随机平均梯度下降
3.9 optim.Rprop
- 弹性反向传播,通常是一股脑塞全部数据场合
3.10 optim.LBFGS
- BFGS的改进