模型训练:BERT的SQuAD任务
智能计算系统 · 187 字
实验目的
熟悉自然语言处理代表性算法BERT的原理,掌握在DLP平台MLU370上移植BERT的方法和流程,并在MLU370上对已经完成预训练的BERT网络模型针对问答任务进行微调训练。具体包括:
- 掌握BERT算法的基本原理,了解自然语言处理问答任务数据集SQuAD。
- 掌握使用PyTorch编写问答系统应用以及移植到DLP平台的方法。
实验过程
网络训练模块
数据准备
![[Pasted image 20260501184017.png]]
优化器和调度器
![[Pasted image 20260501184030.png]]
分布式混合精度训练设置
![[Pasted image 20260501184126.png]]
遍历循环设置
![[Pasted image 20260501184217.png]]
精度验证模块
准备阶段
![[Pasted image 20260501184247.png]]
执行评估
![[Pasted image 20260501184315.png]]
计算评估指标
![[Pasted image 20260501184334.png]]
模型训练与评估
主要包括训练和评估过程。首先,如果选择进行训练,加载训练数据集并进行缓存,然后调用train函数进行模型的训练。训练过程中会计算全局步数和损失。接下来,如果选择进行训练且当前进程为主进程,将训练后的模型、配置和分词器保存到输出目录。然后,如果选择进行评估且当前进程为主进程,会加载训练过程中保存的模型检查点,并在这些检查点上运行评估函数,得到评估结果。最后,输出评估结果。
![[Pasted image 20260501184508.png]]
实验结果
bert_train
![[Pasted image 20260501195106.png]]
bert_test
![[Pasted image 20260501195917.png]]
实验思考
- Transformer 的计算Attention 时,为什么要在Softmax之前除以$\sqrt{d_k}$?
- 执行尺度变换: 在计算 $Q$ 和 $K$ 的点乘后,得到的是输入词与词之间的相关关系。
- 防止梯度消失: 虽然文档中侧重于描述流程,但从技术原理上讲,当 $d_k$(向量维度)较大时,点积结果的量级会变得很大,这会导致 Softmax 函数进入梯度极小的区域。通过除以 $\sqrt{d_k}$ 进行尺度变换,可以有效地将数值拉回到 Softmax 函数较敏感的范围,从而保证训练过程中的梯度稳定性。
- 如果BERT模型初始参数是随机的,即使经过足够长时间的训练也难以取得较好的推理效果,请问这是为什么?
- 缺乏语言理解基础: BERT 的核心思想是通过无监督方式在大规模文本数据上进行预训练,从而学习到“丰富的语言表示”以及“理解上下文语境并进行推理的能力”。随机初始化的模型不具备这些基础知识。
- 任务模式不匹配: 文档强调,BERT 在 SQuAD 等具体任务上的应用是基于预训练模型的下游微调,而不是“从头开始的”。微调的前提是模型已经通过预训练获得了通用的语义特征。
- 模型复杂度过高: 实验中使用的 BERT 模型包含 12 层 Encoder,每层有 12 个 Attention,词向量维度达 768。对于如此庞大的参数量,如果从随机状态开始,下游任务(如 SQuAD)提供的数据量通常不足以支撑模型收敛到理想的推理状态。