来自:哈工大SCIR

论文名称:Recall and Learn: Fine-tuning Deep Pretrained Language Models with Less Forgetting

论文作者:陈三元,侯宇泰,崔一鸣,车万翔,刘挺,余翔湛

原创作者:陈三元

论文链接:https://arxiv.org/abs/2004.12651

本文转载自:哈工大SCIR

1. 简介

通过精调预训练深层语言模型,很多NLP任务都取得了巨大的提升。然而,这样的顺序迁移学习通常会遇到灾难性遗忘问题。为此,我们提出了且回忆且学习的机制,通过采用多任务学习同时学习预训练任务和目标任务。我们提出了预训练模拟机制在没有预训练数据时回忆预训练的知识,以及目标迁移机制将学习目标逐步迁移至目标任务上。实验表明我们在GLUE上达到了的最优性能。我们还将提出的机制集成到Adam优化器中,提供了开源的RecAdam优化器(https://github.com/Sanyuan-Chen/RecAdam)。

2. 背景

在本节中,我们介绍两种迁移学习范式:顺序迁移学习和多任务学习。它们都旨在通过在多个任务中迁移知识来提升模型的学习性能,但是适用于不同的情景。

2.1 顺序迁移学习

顺序迁移学习(Sequential Transfer Learning)依次学习源任务和目标任务,通过从源任务迁移知识,来提高模型在目标任务上的性能。它通常包括两个阶段:预训练和适应。在预训练阶段,我们使用损失函数在源任务上训练模型。在适应阶段中,我们使用损失函数在目标任务上进一步训练预训练得到的模型。适应方法通常包括精调和特征提取:精调会更新预训练模型的所有参数,而特征提取会将预训练模型视为特征提取器,并在适应阶段将预训练参数保持固定。顺序迁移学习近些年被广泛地使用,已经发布的深层预训练语言模型在众多NLP任务上都取得了巨大的成功[1, 2, 3]。虽然将深层预训练语言模型适应目标任务非常有效,但它容易发生灾难性遗忘的问题:当模型从目标任务中学习新知识时,它会忘记先前从源任务中学习到的知识。

2.2 多任务学习

多任务学习(Multi-task Learning)同时学习多个任务,并通过在这些任务之间共享知识来提高模型在所有任务上的性能[4, 5]。通过多任务学习的方式,我们使用以下损失函数同时在源任务和目标任务上训练模型:

其中是平衡这两个任务的超参数。由于源任务上的损失始终是优化目标的一部分,多任务学习可以内在地避免灾难性遗忘问题。为了克服顺序迁移学习的灾难性的遗忘问题(如2.1节讨论),我们可以将多任务学习的思想直接应用于深层预训练语言模型的适应阶段吗?实际上,会存在以下两个挑战:

  1. 我们在适应阶段无法访问预训练数据来计算。

  2. 适应阶段的优化目标是,而多任务学习旨在优化,即和的加权和。

3. 方法

在本节中,我们介绍了预训练模拟机制(3.1节)和目标迁移机制(3.2节),用来分别克服以上提及的两个挑战(如2.2节讨论)。预训练模拟机制使模型无需预训练数据即可学习源任务,而目标迁移机制则使模型逐渐专注于学习目标任务。我们还介绍了RecAdam优化器(3.3节),用来将这两种机制集成到常用的Adam优化器中。

3.1 预训练模拟机制

对于无法获得预训练数据的第一个挑战,我们提出了预训练模拟机制,将源任务的优化目标近似为二次惩罚,使得模型的参数与预训练模型的参数保持接近。

我们借鉴弹性权重合并(Elastic Weight Consolidation)方法[6, 7],使用拉普拉斯方法和模型参数之间的独立性假设来近似源任务的优化目标。由于EWC需要预训练数据,因此我们进一步引入了更强的独立性假设,并得出了与预训练数据无关的二次惩罚。以下我们介绍详细的推导过程。

从概率的角度,源任务的学习目标是在给定源任务数据的条件下优化模型参数的负对数后验概率:

预训练模型参数可以被认为是参数空间上的一个局部最小收敛点,并满足以下公式:

由于无法直接求解优化目标,我们使用拉普拉斯方法[8]局部近似优化目标:

其中是优化目标在参数为时关于参数的Hessian矩阵,是关于参数的常数项,所以我们可以在训练时将其忽略。

由于预训练模型在源任务上已经收敛,可以通过经验Fisher信息矩阵进行近似求解:

其中是源任务数据中的独立同分布的样本数量,是负对数先验概率在参数为时关于参数的Hessian矩阵。

由于过高的计算复杂度,EWC方法使用的对角线值来近似计算,并且忽略先验Hessian矩阵:

其中是模型参数所对应的对角Fisher信息矩阵值。

由于我们无法得到预训练的数据集,我们进一步引入一个更强的假设来近似计算:每一个对角Fisher信息矩阵值与相应的模型参数是相互独立的:

最终,我们近似得到的源任务的优化目标是模型参数和预训练参数之间的二次惩罚:

其中是二次惩罚的系数值。

3.2 目标迁移机制

对于多任务学习的优化目标与适应阶段不一致的第二项挑战,我们提出了目标迁移机制,通过使用退火系数使优化目标逐步迁移至目标任务上的损失函数。

我们用退火函数代替多任务学习优化目标中的系数,其中表示精调阶段的更新时间步数。于是,我们的损失函数表示为包含退火系数的多任务学习的优化目标:

具体地,为了更好地平衡多任务学习和精调,我们使用sigmoid退火函数[9, 10]计算:

其中和是控制退火函数的速率和时间步数的超参数。

图1 目标迁移机制:我们用退火函数代替多任务学习优化目标中的系数。精调和多任务学习可以视为我们的方法的特例(和)。

如图1所示,在训练进程的开始阶段,模型通过更多地关注预训练任务来更多地学习一般性知识。随着训练的进行,模型逐渐关注于目标任务,并在回忆预训练任务的知识的同时更多地学习目标领域的特定知识。在训练进程的最后阶段,模型完全专注于目标任务的学习,最终收敛时的优化目标是。

精调和多任务学习可以视为我们的方法的特例。当时,我们的方法可以视作为精调。模型首先使用在源任务上进行预训练,然后使用学习目标任务。当时,是一个常函数,我们的方法可以视作为多任务学习。模型使用损失函数同时学习源任务和目标任务。

3.3 优化器

Adam优化器[11]通常被用于精调深层预训练语言模型。我们提出Recall Adam(RecAdam)优化器,将预训练模拟机制(3.1节)和目标平移机制(3.2节)机制的核心因子二次惩罚项和退火系数融入Adam优化器,并将它们从梯度更新算法中解耦。

[12]观察到L2正则化和权重衰减对于诸如Adam的自适应梯度算法并不相同,通过将权重衰减从Adam梯度更新算法中解耦,得到AdamW优化器,并且从理论上和经验上证实可以有效地提高Adam的性能。

同样地,当使用Adam优化器精调预训练语言模型时,我们有必要将二次惩罚和退火系数从梯度更新算法中解耦。否则,二次惩罚和退火系数都将通过梯度更新规则进行调整,从而导致不同的模型权重所对应二次惩罚的大小是不同的。

算法1中显示了Adam和RecAdam之间的比较,其中SetScheduleMultiplier(t)(第11行)代指获取步长比例因子的过程(例如预热技术)。

算法1的第6行显示了如何使用原始的Adam优化器实现二次惩罚和退火系数。目标任务的损失函数的梯度与二次惩罚的梯度的加权和通过梯度更新规则进行调整,从而导致模型权重之间有着不一致量级的二次惩罚。例如有着较大梯度的权重将具有更大的二阶矩v,从而会受到相较于其他权重更小的惩罚。

通过使用RecAdam优化器,我们在算法1的第12行中将二次惩罚的梯度与退火系数从梯度更新算法中解耦。这样,只有目标任务的损失函数的梯度在优化步骤中进行调整,并且训练模型的所有权重将以相同的比率进行更有效的惩罚。

由于RecAdam优化器仅是基于Adam优化器的一行算法的修改,因此我们可以通过提供其他参数(预训练模型的参数以及预训练模拟机制和目标迁移机制的超参数)来很方便使用RecAdam优化器。

4. 实验结果

我们使用深层预训练语言模型BERT-base[13]和ALBERT-xxlarge[3] 在通用语言理解评估(GLUE)数据集[14]进行实验来评估我们的方法。

表1显示了基于BERT-Base和ALBERT-xxlarge模型在GLUE数据集的开发集上我们提出的RecAdam精调方法与普通精调方法的单任务单模型的比较结果。表2显示了基于BERT-Base模型在GLUE数据集的测试集上我们提出的RecAdam精调方法与普通精调方法的单任务单模型的比较结果。

表1 GLUE 数据集的开发集上的最先进的单任务单模型结果。

表2 GLUE 数据集的测试集上的单任务单模型结果,由 GLUE 服务器进行评分。我们提交 了在每个开发集上得到的最佳模型的结果。

4.1 基于BERT-base的结果

基于BERT-base模型,我们在GLUE数据集8个任务中的7个任务上实现了优于基线方法的开发集结果,并且平均在每个任务上提高了1.0%的中位数结果和1.1%的最大值结果。

尤其对于训练数据较小(<10k)的任务,与普通的精调方法相比,我们的方法可以实现显着的提升(平均+1.7%)。由于训练数据的缺乏,这些任务上进行的普通的精调会较为脆弱,并且容易出现过拟合和灾难性遗忘的问题[15, 16]。借助所提出的RecAdam方法,我们可以通过在学习目标任务时回忆预训练任务的知识从而实现更好的精调。

值得注意的是,相较于普通精调BERT-large模型,我们可以通过使用RecAdam方法精调BERT-base模型在一半以上的任务上获得更好的结果(RTE:+ 4.0%,STS:+ 0.4%,CoLA:+ 1.8%,SST:+ 0.4%,QQP:+ 0.1%),并且在所有GLUE任务上平均能够取得更好的中位数结果(+ 0.5%)。得益于RecAdam方法可以有效地减少灾难性遗忘,我们可以使用包含更少参数的预训练模型来获得更好的实验结果。

为了验证开发集上的最佳模型的泛化性,表2提供了在GLUE数据集的测试集上的基于BERT-base的模型的单任务单模型的结果。与开发集上的结果类似,我们在GLUE数据集8项任务中的7项任务上取得了相同或更好的结果,并且平均提高了1.0%的分数。相比于训练数据较大(>10k)的任务上的结果(平均+ 0.3%),我们在训练数据较小(<10k)的任务中获得了更大的改进(平均+ 1.7%)。这与我们在开发集的提升效果是一致的,体现了所提出的RecAdam方法的泛化性和有效性。

4.2 基于ALBERT-xxlarge的结果

基于最先进的ALBERT-xxlarge模型,我们在GLUE数据集的8个任务中的5个任务上实现了优于基线方法的开发集结果,并在GLUE数据集的开发集上实现了单任务单模型的最先进的平均中位数结果90.2%。

与基于BERT-base模型的结果相似,我们发现我们的提升主要来自训练数据较少(<10k)的任务,我们可以基于ALBERT-xxlarge模型在这些任务上平均提高+ 1.5%的性能。此外,与[3]的结果相比,我们可以无需在MNLI任务上进行第二阶段的预训练,在RTE(+0.1%),STS(-0.1%)和MRPC(+ 1.0%)任务上取得相似或更好的中位数结果。

总体而言,基于ALBERT-xxlarge模型,我们平均在每个任务上提高了0.7%中位数结果,较低于我们基于BERT-base模型所获得的提升(+ 1.0%)。借助于先进的模型设计和预训练技术,ALBERT-xxlarge在GLUE数据集上获得了显著的性能提升,从而较难取得进一步的提升。

4.3 初始化分析

表3 不同的模型初始化策略的比较:预训练初始化策略和随机初始化策略

通过使用基于预训练模拟机制和目标迁移机制的RecAdam方法,我们可以使用随机值初始化模型参数,并在学习新任务的同时回顾预训练任务的知识。

那么初始化策略的选择是否会对我们的RecAdam方法的性能产生影响呢?表2显示了基于不同初始化策略使用RecAdam方法精调BERT-base模型的结果比较。结果表明,基于随机初始化策略和预训练初始化策略,RecAdam精调方法都可以在所有的四个任务上得到优于普通精调方法的结果。对于STS任务,通过预训练初始化的模型可以得到与随机初始化相同的结果。对于其他任务(CoLA,MRPC,RTE),随机初始化模型是更优的选择。这是因为通过随机初始化策略,模型会受益于更大参数搜索空间。相比而言,如果使用预训练模型的参数进行初始化,模型的搜索空间将受限于预训练模型参数附近,从而使模型较难去逃离次优的局部最小区域从而在目标任务上取得更好的性能。

4.4 遗忘分析

图2 在CoLA数据集上使用有着不同的值的RecAdam方法精调BERT-base的学习曲线。

如3.2节所述,我们使用目标迁移机制实现了多任务精调方法,使模型的学习目标逐渐从源任务迁移到目标任务。其中超参数用来控制目标迁移的速率。

图2显示了在CoLA数据集上使用有着不同的值的RecAdam方法精调BERT-base模型所得到的学习曲线。如3.2节所述,精调和多任务学习可以视为我们方法的特殊情况(和)。

如图2a所示,对于越大的目标迁移速率,模型可以更快地收敛于目标任务。随着的减小,由于从预训练知识的回忆到目标任务的学习的迁移速率减慢,模型需要更长的时间收敛到目标任务。

图2b显示了在精调过程中预训练知识的遗忘度。我们通过使用精调模型和预训练模型的权重之间的欧氏距离来度量预训练知识的遗忘度。在很早的时间步数时,由于我们使用随机初始化策略和预训练知识的回忆机制,欧几里得距离呈现出急剧地下降。接着,随着模型逐步关注于目标任务的学习,曲线以不断下降的增长率逐步地上升。随着目标迁移速率的减小,我们发现在精调收敛时,模型可以更少地遗忘预训练的知识。

总体而言,我们的方法在精调和多任务学习之间进行有效的桥接。当我们使用较小的时,模型可以更少地遗忘从源任务中学习的知识,但是存在无法完全收敛于目标任务的风险。通过在预训练知识的回忆和新任务的学习之间取得良好的权衡,我们的方法不仅可以收敛于目标任务,而且可以有效地减少源任务知识的遗忘,从而稳定地实现比普通的精调方法更优的性能。

5. 结论

在本文中,我们通过桥接两种迁移学习范例:顺序迁移学习和多任务学习,有效缓解了适应深层预训练语言模型时的灾难性遗忘问题。为了解决联合训练预训练任务时缺少预训练数据的问题,我们提出了一种预训练模拟机制在没有数据时学习预训练任务。接着,我们提出了目标迁移机制,以更好地平衡预训练的回忆和目标任务的学习。实验证明了我们的方法在迁移深层预训练语言模型方面的优势。我们还通过将提出的机制集成到Adam优化器中提供了开源的RecAdam优化器,以促进自然语言处理社区更好地使用深层预训练语言模型。

6. 参考文献

[1] Rahaf Aljundi, Francesca Babiloni, Mohamed Elhoseiny, Marcus Rohrbach, and Tinne Tuytelaars. 2018. Memory aware synapses: Learning what (not) to forget. In Proceedings of the European Conference on Computer Vision, pages 139–154.

[2] Gaurav Arora, Afshin Rahimi, and Timothy Baldwin. 2019. Does an lstm forget more than a cnn? an empirical study of catastrophic forgetting in nlp. In Proceedings of the Australasian Language Technology Association, pages 77–86.

[3] Roy Bar Haim, Ido Dagan, Bill Dolan, Lisa Ferro, Danilo Giampiccolo, Bernardo Magnini, and Idan Szpektor. 2006. The second PASCAL recognising textual entailment challenge.

[4] Luisa Bentivogli, Ido Dagan, Hoa Trang Dang, Danilo Giampiccolo, and Bernardo Magnini. 2009. The fifth PASCAL recognizing textual entailment challenge. In Proceedings of TAC.

[5] Samuel Bowman, Luke Vilnis, Oriol Vinyals, Andrew Dai, Rafal Jozefowicz, and Samy Bengio. 2016. Generating sentences from a continuous space. In Proceedings of The SIGNLL Conference on Computational Natural Language Learning, pages 10–21.

[6] Rich Caruana. 1997. Multitask learning. Machine learning, 28(1):41–75.

[7] Daniel Cer, Mona Diab, Eneko Agirre, Inigo LopezGazpio, and Lucia Specia. 2017. Semeval-2017 task 1: Semantic textual similarity multilingual and cross-lingual focused evaluation. In Proceedings of the International Workshop on Semantic Evaluation, pages 1–14. Association for Computational Linguistics.

[8] Xinyang Chen, Sinan Wang, Bo Fu, Mingsheng Long, and Jianmin Wang. 2019. Catastrophic forgetting meets negative transfer: Batch spectral shrinkage for safe transfer learning. In Proceedings of the Advances in Neural Information Processing Systems, pages 1906–1916.

[9] Alexandra Chronopoulou, Christos Baziotis, and Alexandros Potamianos. 2019. An embarrassingly simple approach for transfer learning from pretrained language models. In Proceedings of NAACL, pages 2089–2095. [10] Ido Dagan, Oren Glickman, and Bernardo Magnini. 2006. The PASCAL recognizing textual entailment challenge. In Machine learning challenges. evaluating predictive uncertainty, visual object classification, and recognizing textual entailment, pages 177– 190. Springer.

[11] Matthias De Lange, Rahaf Aljundi, Marc Masana, Sarah Parisot, Xu Jia, Ales Leonardis, Gregory Slabaugh, and Tinne Tuytelaars. 2019. Continual learning: A comparative study on how to defy forgetting in classification tasks. arXiv preprint arXiv:1909.08383.

[12] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019. BERT: pre-training of deep bidirectional transformers for language understanding. In Proceedings of the North American Chapter of the Association for Computational Linguistics, pages 4171–4186. Association for Computational Linguistics.

[13] William B Dolan and Chris Brockett. 2005. Automatically constructing a corpus of sentential paraphrases. In Proceedings of the International Workshop on Paraphrasing.

[14] Robert M. French. 1999. Catastrophic forgetting in connectionist networks. Trends in Cognitive Sciences, 3(4):128 – 135.

[15] Danilo Giampiccolo, Bernardo Magnini, Ido Dagan, and Bill Dolan. 2007. The third PASCAL recognizing textual entailment challenge. In Proceedings of the ACL-PASCAL workshop on textual entailment and paraphrasing, pages 1–9. Association for Computational Linguistics.

[16] Ian J Goodfellow, Mehdi Mirza, Da Xiao, Aaron Courville, and Yoshua Bengio. 2013. An empirical investigation of catastrophic forgetting in gradient-based neural networks. arXiv preprint arXiv:1312.6211.

本期责任编辑:李忠阳

本期编辑:彭   湃

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!后台回复【五件套】
下载二:南大模式识别PPT后台回复【南大模式识别】

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读

专辑 | 情感分析


整理不易,还望给个在看!

EMNLP 2020 | RecAdam: 在更少的遗忘下精调预训练语言模型相关推荐

  1. EMNLP 2021 | 大道至简:微软提出可生成高质量文本表示的预训练语言模型

    ©作者 | 常馨 学校 | 北京邮电大学硕士生 研究方向 | NLP.信息检索 Abstract 基于自动编码器的语言模型在 Dense Retrieval(DR)中受到越来越多的关注,因为其训练编码 ...

  2. COLING 2020 | CharBERT:字符敏感的预训练语言模型

    ©PaperWeekly 原创 · 作者|张琨 学校|中国科学技术大学博士生 研究方向|自然语言处理 论文标题: CharBERT: Character-aware Pre-trained Langu ...

  3. CancerGPT:使用大型预训练语言模型进行少样本药物配对协同作用预测

    文章目录 一.论文关键信息 二.基础概念 三.主要内容 1. Motivations 2. Insights 3. 解决方案的关键 4. 实验结果 四.总结与讨论

  4. 本周阅读清单:从NeurIPS 2020到EMNLP 2020

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考.在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果.如果你也希望让自己的科研成果被更多人看到, ...

  5. 速览EMNLP 2020上录取的知识图谱相关论文

    文 | 泽宇 源 | 知乎 前不久,自然语言处理领域三大顶会之一的 EMNLP 2020 发布了论文录取的结果.在EMNLP 2020论文正式出版之前,泽宇搜集了目前Arxiv上已经发布出来的录取在E ...

  6. EMNLP 2020论文分析:知识图谱增强语言模型或是未来的发展趋势!

    在EMNLP 2020的论文投递中,知识图谱的研究热度不减,并成为继续推动NLP发展的重要动力之一. 在EMNLP 2020中,知识图谱领域有了哪些最新研究进展呢?作者从中选出了30篇文章,对未来2- ...

  7. EMNLP 2020 | Facebook稠密向量召回方案

    0. 背景 机构: Facebook AI.华盛顿大学.普林斯顿大学 作者: Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Le ...

  8. UC伯克利摘最佳论文、Hugging Face获最佳demo,EMNLP 2020奖项公布

    作者|魔王.杜伟.小舟 来源|机器之心 刚刚,正在进行中的 EMNLP 2020 大会公布了一系列奖项,其中最佳论文奖由加州大学伯克利分校的研究者获得,爱丁堡大学华人博士生 Yanpeng Zhao ...

  9. @所有人,EMNLP 2020 干货集锦来了!

    ⬆⬆⬆              点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 2020年10月30日-12月4日,AI TIME 共邀请了23位海内外优秀讲者,与大家分享了精彩的 ...

  10. 谷歌 ICLR 2020 | 向量化召回也需要『预训练』

    作者 | 黄挂 编辑 | NewBeeNLP 今天分享的paper是来自谷歌的:PRE-TRAINING TASKS FOR EMBEDDING-BASED LARGE-SCALE RETRIEVAL ...

最新文章

  1. R使用neuralnet包构建神经网络回归模型并与线性回归模型对比实战
  2. 51nod 1275 连续子段的差异
  3. force oracle delete type,3.Oracle Interface Configuration Tool (OIFCFG) 命令参考
  4. Selenium with Python 001 - 安装篇
  5. 机器学习第十篇:如何评价模型效果评估
  6. 人工智能实战_第一次作业_杨佳宁_16141032
  7. 更新10_linux,时隔十年,QQ更新了Linux版本
  8. SAP与阿里云的深度合作 为企业提供领先的SaaS 服务
  9. 掘金外链即将失效?论如何用脚本一次性下载/替换失效的外链图片
  10. (转)淘淘商城系列——使用solrj来测试索引库
  11. uva-10341-二分法
  12. 23届计算机专业毕设Java选题参考
  13. 基于java springboot android安卓商城购物平台源码(毕设)
  14. can和could的用法_can和could的区别和用法
  15. ZCMU-1345: 国际象棋
  16. CVPR 2022 | SwinTextSpotter:基于文本检测与识别更好协同的场景文本识别
  17. Linux提高:僵尸进程
  18. 变步长龙格库塔法matlab代码,matlab龙格库塔法变步长龙格库塔法.doc
  19. 支付宝无障碍体验提升之路
  20. 百度分享不支持https的最简单解决方案

热门文章

  1. C语言成语设计第一次作业
  2. 使用app loader上传iOS应用
  3. 自制 Chrome Custom.css 设置网页字体为微软雅黑扩展
  4. [转]NS2上实现一个简单的路由协议
  5. ROS:launch文件的语法规范
  6. Sitecore 6.4 升级Sitecore 8.2.7准备
  7. javascript 忍者秘籍读书笔记(二)
  8. Qt 程序打包发布总结 转
  9. Hadoop伪集群部署
  10. js 实现读取json 文件,实现批量发送请求