优化器
管理并更新模型中的可学习参数的值,使得模型输出更接近真实标签。
初始化函数
class Optimizer(object):
def __init__(self, params, defaults):
# 优化器超参数,是一个dict{超参数:值}
self.defaults = defaults
# 参数的缓存,如momentum的缓存
self.state = defaultdict(dict)
# 管理的参数组,每个参数组用字典存储
self.param_groups = []
param_groups = [{'params':para_groups}]
基本方法:
zero_grad() # 清空所管理参数的梯度
step() # 执行一步更新
add_param_group() # 添加参数组,不同参数,可以设置不同学习率
state_dict() # 获取优化器当前状态信息字典
load_state_dict() # 加载状态信息字典
Tips:
- 优化器通过地址管理参数,节省内存消耗
学习率(learning rate)
学习率过大会梯度爆炸,过小收敛慢
动量(momentum)
结合当前梯度与上一次更新信息,用于当前更新。
指数加权平均:
y = ∑ i N ( 1 − β ) ∗ β i ∗ θ N − i y=\sum^N_i(1-\beta)*\beta^i*\theta_{N-i} y=∑iN(1−β)∗βi∗θN−i
前面的值对当前值的影响,
β
\beta
β 为影响权重(记忆周期 ),记忆过往数值个数
1
1
−
β
\frac{1}{1-\beta}
1−β1,
N
N
N 为所有值的个数 。