hub.strategy

在PaddleHub中,Strategy类封装了一系列适用于迁移学习的Fine-tune策略。Strategy包含了对预训练参数使用什么学习率变化策略,使用哪种类型的优化器,使用什么类型的正则化等。

Class hub.finetune.strategy.AdamWeightDecayStrategy

  1. hub.AdamWeightDecayStrategy(
  2. learning_rate=1e-4,
  3. lr_scheduler="linear_decay",
  4. warmup_proportion=0.0,
  5. weight_decay=0.01,
  6. optimizer_name="adam")

基于Adam优化器的学习率衰减策略

参数

  • learning_rate: 全局学习率,默认为1e-4

  • lr_scheduler: 学习率调度方法,默认为”linear_decay”

  • warmup_proportion: warmup所占比重

  • weight_decay: 学习率衰减率

  • optimizer_name: 优化器名称,默认为adam

返回

AdamWeightDecayStrategy

示例

  1. ...
  2. strategy = hub.AdamWeightDecayStrategy()
  3. config = hub.RunConfig(
  4. use_cuda=True,
  5. num_epoch=10,
  6. batch_size=32,
  7. checkpoint_dir="hub_finetune_ckpt",
  8. strategy=strategy)

Class hub.finetune.strategy.DefaultFinetuneStrategy

  1. hub.DefaultFinetuneStrategy(
  2. learning_rate=1e-4,
  3. optimizer_name="adam",
  4. regularization_coeff=1e-3)

默认的Finetune策略,该策略会对预训练参数增加L2正则作为惩罚因子

参数

  • learning_rate: 全局学习率。默认为1e-4

  • optimizer_name: 优化器名称。默认adam

  • regularization_coeff: 正则化的λ参数。默认为1e-3

返回

DefaultFinetuneStrategy

示例

  1. ...
  2. strategy = hub.DefaultFinetuneStrategy()
  3. config = hub.RunConfig(
  4. use_cuda=True,
  5. num_epoch=10,
  6. batch_size=32,
  7. checkpoint_dir="hub_finetune_ckpt",
  8. strategy=strategy)

Class hub.finetune.strategy.L2SPFinetuneStrategy

  1. hub.L2SPFinetuneStrategy(
  2. learning_rate=1e-4,
  3. optimizer_name="adam",
  4. regularization_coeff=1e-3)

使用L2SP正则作为惩罚因子的Finetune策略

参数

  • learning_rate: 全局学习率。默认为1e-4

  • optimizer_name: 优化器名称。默认为adam

  • regularization_coeff: 正则化的λ参数。默认为1e-3

返回

L2SPFinetuneStrategy

示例

  1. ...
  2. strategy = hub.L2SPFinetuneStrategy()
  3. config = hub.RunConfig(
  4. use_cuda=True,
  5. num_epoch=10,
  6. batch_size=32,
  7. checkpoint_dir="hub_finetune_ckpt",
  8. strategy=strategy)

Class hub.finetune.strategy.ULMFiTStrategy

  1. hub.ULMFiTStrategy(
  2. learning_rate=1e-4,
  3. optimizer_name="adam",
  4. cut_fraction=0.1,
  5. ratio=32,
  6. dis_blocks=3,
  7. factor=2.6,
  8. frz_blocks=3)

该策略实现了ULMFiT论文中提出的三种策略:Slanted triangular learning rates, Discriminative fine-tuning, Gradual unfreezing。

  • Slanted triangular learning rates是一种学习率先上升再下降的策略,如下图所示:

hub.strategy - 图1

  • Discriminative fine-tuning是一种学习率逐层递减的策略,通过该策略可以减缓底层的更新速度。

  • Gradual unfreezing是一种逐层解冻的策略,通过该策略可以优先更新上层,再慢慢解冻下层参与更新。

参数

  • learning_rate: 全局学习率。默认为1e-4。

  • optimizer_name: 优化器名称。默认为adam。

  • cut_fraction: 设置Slanted triangular learning rates学习率上升的步数在整个训练总步数中的比例,对应论文中Slanted triangular learning rates中的cut_frac。默认为0.1,如果设置为0,则不采用Slanted triangular learning rates。

  • ratio: 设置Slanted triangular learning rates下降的最小学习率与上升的最大学习率的比例关系,默认为32,表示最小学习率是最大学习率的1/32。

  • dis_blocks: 设置 Discriminative fine-tuning中的块数。由于预训练模型中没有记录op的层数,Paddlehub通过op的前后关系推测op所在的层次,这会导致诸如LSTM这类计算单元的op会被当作是不同层的op。为了不使层次划分太细,我们将层次进行了分块,用块的概念代替原论文中层的概念,通过设置dis_blocks即可设置块的个数。默认为3,如果设置为0,则不采用Discriminative fine-tuning。

  • factor: 设置Discriminative fine-tuning的衰减率。默认为2.6,表示下一层的学习率是上一层的1/2.6。

  • frz_blocks: 设置Gradual unfreezing中的块数。块的概念同“dis_blocks”中介绍的概念。

返回

ULMFiTStrategy

示例

  1. ...
  2. strategy = hub.ULMFiTStrategy()
  3. config = hub.RunConfig(
  4. use_cuda=True,
  5. num_epoch=10,
  6. batch_size=32,
  7. checkpoint_dir="hub_finetune_ckpt",
  8. strategy=strategy)

Class hub.finetune.strategy.CombinedStrategy

  1. hub.CombinedStrategy(
  2. optimizer_name="adam",
  3. learning_rate=1e-4,
  4. scheduler=None,
  5. regularization=None,
  6. clip=None)

Paddlehub中的基类策略,上文的所有策略都基于该策略,通过该策略可以设置所有策略参数。

参数

  • optimizer_name: 优化器名称,默认为adam。

  • learning_rate: 全局学习率,默认为1e-4。

  • scheduler: 学习率调度方法,默认为None,此时不改变任何默认学习率调度方法参数,不采取任何学习率调度方法,即:

  1. scheduler = {
  2. "warmup": 0.0,
  3. "linear_decay": {
  4. "start_point": 1.0,
  5. "end_learning_rate": 0.0,
  6. },
  7. "noam_decay": False,
  8. "discriminative": {
  9. "blocks": 0,
  10. "factor": 2.6
  11. },
  12. "gradual_unfreeze": 0,
  13. "slanted_triangle": {
  14. "cut_fraction": 0.0,
  15. "ratio": 32
  16. }
  17. }
  • regularization: 正则方法,默认为None,此时不改变任何默认正则方法参数,不采取任何正则方法,即:
  1. regularization = {
  2. "L2": 0.0,
  3. "L2SP": 0.0,
  4. "weight_decay": 0.0,
  5. }
  • clip: 梯度裁剪方法,默认为None,此时不改变任何默认正则方法参数,不采取任何梯度裁剪方法,即:
  1. clip = {
  2. "GlobalNorm": 0.0,
  3. "Norm": 0.0
  4. }

返回

CombinedStrategy

示例

  1. ...
  2. # Parameters not specified will remain default
  3. scheduler = {
  4. "discriminative": {
  5. "blocks": 3,
  6. "factor": 2.6
  7. }
  8. }
  9. # Parameters not specified will remain default
  10. regularization = {"L2": 1e-3}
  11. # Parameters not specified will remain default
  12. clip = {"GlobalNorm": 1.0}
  13. strategy = hub.CombinedStrategy(
  14. scheduler = scheduler,
  15. regularization = regularization,
  16. clip = clip
  17. )
  18. config = hub.RunConfig(
  19. use_cuda=True,
  20. num_epoch=10,
  21. batch_size=32,
  22. checkpoint_dir="hub_finetune_ckpt",
  23. strategy=strategy)