SqueezeBERT 简介
squeezebert-uncased
是一种针对英语语言的预训练模型,采用了掩码语言模型(MLM)和句子顺序预测(SOP)作为训练目标。它在原始 BERT-base 模型架构的基础上进行了改进,将点对点的全连接层替换为分组卷积,从而实现了更高的效率。据研究表明,SqueezeBERT 在 Google Pixel 3 智能手机上的运行速度比 bert-base-uncased
快 4.3 倍。
预训练
数据集
SqueezeBERT 的预训练使用了以下两个重要的数据集:
- BookCorpus:包含成千上万本未出版的书籍。
- 英文维基百科:庞大的百科全书内容。
预训练过程
这个模型通过两种任务进行预训练:掩码语言模型(MLM)和句子顺序预测(SOP)。团队使用 LAMB 优化器来训练模型,该优化器以大批量数据和适当的学习率著称。具体来说,他们使用了全局批大小 8192,学习率为 0.0025,热身比例为 0.28。在整个预训练过程中,模型先是以最大序列长度为 128 进行 56,000 步训练,随后以最大序列长度为 512 进行 6,000 步的训练。
微调
在微调阶段,SqueezeBERT 提供了两种方法:
- 不加修饰的微调:在每个 GLUE 任务上对预训练后的 SqueezeBERT 模型进行微调。
- 加以修饰的微调:在 MNLI 任务上通过一个教师模型进行蒸馏微调,然后使用该模型在其他 GLUE 任务上进行进一步有效的蒸馏微调。
这些方法中的超参数细节可在 SqueezeBERT 论文附录中找到。
需要注意的是,目前在仓库中尚未实现使用蒸馏技术微调 SqueezeBERT 的方法。如果该项目的作者林道拉(Forrest Iandola)收到足够的用户反馈支持,他将考虑在 Transformers 中添加此部分的示例代码。目前,这个模型只进行了预训练,还未经过微调。对于大多数文本分类任务,建议从 squeezebert-mnli-headless
开始。
微调教程
例如,可以使用以下命令对 SqueezeBERT 进行 MRPC 文本分类任务的微调:
./utils/download_glue_data.py
python examples/text-classification/run_glue.py \
--model_name_or_path squeezebert-base-headless \
--task_name mrpc \
--data_dir ./glue_data/MRPC \
--output_dir ./models/squeezebert_mrpc \
--overwrite_output_dir \
--do_train \
--do_eval \
--num_train_epochs 10 \
--learning_rate 3e-05 \
--per_device_train_batch_size 16 \
--save_steps 20000
引用信息
如果需要引用 SqueezeBERT 的研究文章,可以参考以下 BibTeX 条目:
@article{2020_SqueezeBERT,
author = {Forrest N. Iandola and Albert E. Shaw and Ravi Krishna and Kurt W. Keutzer},
title = {{SqueezeBERT}: What can computer vision teach NLP about efficient neural networks?},
journal = {arXiv:2006.11316},
year = {2020}
}
通过上述介绍,SqueezeBERT 提供了一种更快速和高效的神经网络模型,无论是在预训练还是在特定任务的微调上都有显著优势。