pytorch_pretrained_bert源码阅读

由于最近在看有关spanbert的repo(用于抽取式的QA),顺便阅读了一下pytorch_pretrained_bert的源码,在这里记录一下pytorch_pretrained_bert中有用的内容。

1. 关于optimization.py

所有的优化器都是基于Optimizer这个类写的,主要是得实现step函数。

def __init__(self, params, lr=required, warmup=-1, t_total=-1, schedule='warmup_linear',
                 b1=0.9, b2=0.999, e=1e-6, weight_decay=0.01,
                 max_grad_norm=1.0):

__init__参数

第一个形参是待优化的参数,在主程序中一般是以model.parameter()传入

lr:learning_rate

warmup:用于调整学习率(只与学习率有关,在第一阶段学习率逐渐上升,在第二阶段学习率再逐渐减小)

t_total:表示的是training阶段的最大step数,大于这个数,学习率会变为0,因此训练结束

schedule:warmup第二阶段lr下降的策略,有线性下降、余弦下降等等

b1、b2、e:这些参数都是Adam优化器所必须的参数

weight_decay:表示每次参数更新时,在减去梯度时,还应该减去原始参数值的多少(这个参数在SGD条件下等价于L2正则化,主要目的是防止过拟合)

max_grad_norm:给梯度设置一个bound

关于weight_decay可参考这一篇文章都9102年了,别再用Adam + L2 regularization了 - 知乎 (zhihu.com),要注意的是,Adam使用weight_decay时,不用直接加在梯度上(如下红色),具体的原因看文章吧,懒得写了。

下面这部分写一下model.parameter和model.state_dict这两个属性的区别,可参考model.parameters()与model.state_dict() - 知乎 (zhihu.com)

另外说一下,model.parameter的结果是一个列表,其中每一个元素记为p,则p有下面的属性。

p.data 直接看这个参数的值

p.grad 看这个参数是否存在,不存在为None

p.grad.data 看这个参数的梯度

p.required_grad 看这个参数是否能被更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值