优化器(Optimizer)¶
这个模块包含一系列用于模型参数更新的优化器。
示例用法:
from singa import optimizer
from singa import tensor
sgd = optimizer.SGD(lr=0.01, momentum=0.9, weight_decay=1e-4)
p = tensor.Tensor((3,5))
p.uniform(-1, 1)
g = tensor.Tensor((3,5))
g.gaussian(0, 0.01)
sgd.apply(1, g, p, 'param') # use the global lr=0.1 for epoch 1
sgd.apply_with_lr(2, 0.03, g, p, 'param') # use lr=0.03 for epoch 2
class singa.optimizer.Optimizer(lr=None, momentum=None, weight_decay=None, regularizer=None, constraint=None)¶
基类:object
Python优化器类的基类。 典型地,优化器有如下作用:
构建优化器
(可选)以参数名为注册每种参数
使用优化器依照给定参数梯度及其他信息更新参数值
它的子类应该重写apply_with_lr函数已用于真实的参数更新。
参数:
lr (float) – 学习速率
momentum (float) – 动量
weight_decay (float) – L2正则化系数,被排除于‘regularizer’之外
regularizer – Regularizer或RegularizerConf实例;如被设置,正则化将被用于apply_with_lr()。 用户也可以在优化器外部做正则化。
constraint – Constraint或ConstraintConf实例;如被设置,正则化将被用于apply_with_lr()。 用户也可以在优化器外部做正则化。
register(name, specs)¶
注册参数,包括为每个参数对象创建正则化和约束条件。 这里参数特定的正则化和约束比全局设置有更高优先级。 如果所有参数对于学习速率、正规化器和约束条件共享相同的设置,则不需要调用该函数。
参数:
name (str) – 参数名
specs (ParamSpec) – protobuf对象,包括正则化和约束条件、学习速率和权值衰减乘子。
apply_regularizer_constraint(epoch, value, grad, name=None, step=-1)¶
如果可用,将采用正则化和约束条件。 如果全局正则化和参数特定的正则化都存在,会采用参数特定的正则化。
参数:
epoch (int) – 训练的epoch ID (完整训练一遍训练数据称为一个epoch)
value (Tensor) – 参数Tensor
grad (Tensor) – 参数梯度Tensor
name (string) – 参数名以索引到特定的规则(正则化或约束条件)
step (int) – 每个epoch内的迭代ID
返回值: 更新后的梯度tensor
apply_with_lr(epoch, lr, grad, value, name=None, step=-1)¶
如果grad非空,则根据给定学习速率更新参数。
子类优化器必须重写这个函数。如果grad为空,将不做任何操作。
参数:
epoch (int) – 训练的epoch ID (完整训练一遍训练数据称为一个epoch)
lr (float) – 学习速率
value (Tensor) – 参数Tensor
grad (Tensor) – 参数梯度Tensor
name (string) – 参数名以索引到特定的规则(正则化或约束条件)
step (int) – 每个epoch内的迭代ID 返回值: 更新后的参数值
apply(epoch, grad, value, name=None, step=-1)¶
假设学习速率生成器配置完成,完成参数更新。 子类不需要重写这个函数。
参数:
epoch (int) – 训练的epoch ID (完整训练一遍训练数据称为一个epoch)
value (Tensor) – 参数Tensor
grad (Tensor) – 参数梯度Tensor
name (string) – 参数名以索引到特定的规则(正则化或约束条件)
step (int) – 每个epoch内的迭代ID
返回值: 更新后的参数值
class singa.optimizer.SGD(lr=None, momentum=None, weight_decay=None, regularizer=None, constraint=None)¶
基类:singa.optimizer.Optimizer
原始的包含动量的随机梯度下降算法。 参数详见Optimizer基类。
apply_with_lr(epoch, lr, grad, value, name, step=-1)¶
class singa.optimizer.Nesterov(lr=None, momentum=0.9, weight_decay=None, regularizer=None, constraint=None)¶
基类:singa.optimizer.Optimizer
包含Nesterov动量的随机梯度下降算法。参数详见Optimizer基类。
apply_with_lr(epoch, lr, grad, value, name, step=-1)¶
class singa.optimizer.RMSProp(rho=0.9, epsilon=1e-08, lr=None, weight_decay=None, regularizer=None, constraint=None)¶
基类:singa.optimizer.Optimizer
RMSProp优化器。构造器参数请参考Optimizer基类。
参数:
rho (float) – [0, 1]间的浮点数
epsilon (float) – 很小的值,以避免数值误差
apply_with_lr(epoch, lr, grad, value, name, step=-1)¶
class singa.optimizer.AdaGrad(epsilon=1e-08, lr=None, weight_decay=None, lr_gen=None, regularizer=None, constraint=None)¶
基类:singa.optimizer.Optimizer
AdaGrad优化器。构造器参数请参考Optimizer基类。
参数:
epsilon (float) – 很小的值,以避免数值误差
apply_with_lr(epoch, lr, grad, value, name, step=-1)¶
class singa.optimizer.Adam(beta_1=0.9, beta_2=0.999, epsilon=1e-08, lr=None, weight_decay=None, regularizer=None, constraint=None)¶
基类:singa.optimizer.Optimizer
Ada优化器。构造器参数请参考Optimizer基类。
参数:
beta_1 (float) – 动量系数
beta_2 (float) – 整合的梯度平方的系数
epsilon (float) – 很小的值,以避免数值误差
class singa.optimizer.CppRegularizer(conf)¶
基类:singa.optimizer.Regularizer
正则化的封装使用C++实现。
参数:
conf (RegularizerConf) – protobuf配置信息
apply(epoch, value, grad, step=-1)¶
class singa.optimizer.L2Regularizer(coefficient)¶
基类:singa.optimizer.Regularizer
L2正则化。
参数:
coefficient (float) – 正则化系数
apply(epoch, value, grad, step=-1)¶
class singa.optimizer.CppConstraint(conf)¶
基类:singa.optimizer.Constraint
约束的封装使用C++实现。
参数:
conf (RegularizerConf) – protobuf配置信息