可变学习步长
在开始之前,我也曾想过是否应该先从二元操作中跳出来,或者增加batchsize的功能,思来想去,还是先来说说优化器吧~
优化器的本质就是调节学习率。以一个“V”形状的一元函数为例,对于不在谷底的任何一点,导数值都是相同的,如果训练过程中不能逐渐降低学习率,则函数收敛到某个值后就不能很好收敛了。但实际上参数w所处的优化空间本就是一个黑盒子,为了能够在优化空间未知的情况下进行优化,一些自适应的补偿变化策略被提出来了。
本节会简单地给之前提到的框架添加一些自适应的学习率变化策略。
框架预处理
首先,在正式开始之前,对上次的代码进行少许修正,主要是针对一些变量名的书写进行规范化。
具体来说:
- 统一了类中变量名为大写字母起头
- 将可训练参数的指示符Flag更替为Trainable
- 将lr更替为Learning_rate
- 新增函数calculate,用于完成当前节点的计算部分,forward函数会依次调用父节点的forward以及本节点的calculate,提高代码重用性
- 新增函数calculate,每个节点需要实现自身的calculate函数
- 将错误的英文updata更新为update
- Trainable的默认值为False
In [2]