BERT使用

BERT-based Models

BertForPreTraining

预训练包括以下两个任务:

  • Masked Language Model(MLM):训练模型根据上下文理解单词的意思
  • Next Sentence Prediction(NSP):训练模型理解预测句子间的关系。

对应的类:

  • BertForMaskedLM:基于BertOnlyMLMHead,只进行 MLM 任务的预训练;
  • BertLMHeadModel:基于BertOnlyMLMHead,这一模型是作为 decoder 运行的版本;
  • BertForNextSentencePrediction: 基于BertOnlyNSPHead,只进行 NSP 任务的预训练。

Fine-tune模型

BertForSequenceClassification

  • 作用:句子分类(也可以是回归)任务
  • 输入:句子对
  • 输出:句子标签
  • 结构:BERT(有pooling层)+dropout+线性输出层
  • num_labels=1,默认为回归任务,使用 MSELoss;否则认为是分类任务

BertForMultipleChoice

  • 作用:多项选择
  • 输入:一组分次输入的句子
  • 输出:选择某一句子的单个标签
  • 结构:BERT(有pooling层)+dropout+一维线性输出层
  • 输入量为[batch_size, num_choices]数量的句子

BertForTokenClassification

  • 作用:序列标注(词分类)
  • 输入:单个句子文本
  • 输出:每个 token 对应的类别标签
  • 结构:BERT(无pooling层)+dropout+线性输出层

BertForQuestionAnswering

  • 作用:做问答
  • 输入:1v1问答
  • 输出:预测答案的起始位置和结束位置
  • 结构:BERT(无pooling层)+ 线性输出层
  • 对超出句子长度的非法 label,会将其压缩(torch.clamp_)到合理范围

BERT训练与优化

AdamW

BERT的优化器,出自论文《Fixing Weight Decay Regularization in Adam》,用于修复Adam的权重衰减错误。论文指出,L2正则化和权重衰减在大部分情况下并不等价,只在 SGD 优化的情况下是等价的;而大多数框架中对于 Adam+L2正则使用的是权重衰减的方式,两者不能混为一谈。

Warmup

Warmup是指

  • 在训练初期,使用较小的学习率(从 0 开始),在一定步数(比如 1000 步)内逐渐提高到正常大小(比如 2e-5),避免模型过早进入局部最优而过拟合;
  • 在训练后期,再慢慢将学习率降低到 0,避免后期训练还出现较大的参数变化。

在Huggingface的实现中,可以使用多种 warmup 策略:

TYPE_TO_SCHEDULER_FUNCTION = {
    SchedulerType.LINEAR: get_linear_schedule_with_warmup,
    SchedulerType.COSINE: get_cosine_schedule_with_warmup,
    SchedulerType.COSINE_WITH_RESTARTS: get_cosine_with_hard_restarts_schedule_with_warmup,
    SchedulerType.POLYNOMIAL: get_polynomial_decay_schedule_with_warmup,
    SchedulerType.CONSTANT: get_constant_schedule,
    SchedulerType.CONSTANT_WITH_WARMUP: get_constant_schedule_with_warmup,
}
  • CONSTANT:保持固定学习率不变;
  • CONSTANT_WITH_WARMUP:在每一个 step 中线性调整学习率;
  • LINEAR:上文提到的两段式调整(最常用);
  • COSINE:和两段式调整类似,只不过采用的是三角函数式的曲线调整;
  • COSINE_WITH_RESTARTS:训练中将上面 COSINE 的调整重复 n 次;
  • POLYNOMIAL:按指数曲线进行两段式调整。
    具体使用参考transformers/optimization.py

参考

datawhale文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值