深度学习与大模型 习题及答案 第7章-大模型概述-课后习题_第1页
深度学习与大模型 习题及答案 第7章-大模型概述-课后习题_第2页
深度学习与大模型 习题及答案 第7章-大模型概述-课后习题_第3页
深度学习与大模型 习题及答案 第7章-大模型概述-课后习题_第4页
深度学习与大模型 习题及答案 第7章-大模型概述-课后习题_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章大模型概述问答题

1.简述Transformer模型的基本结构。答:Transformer模型核心基于自注意力机制,由编码器(Encoder)和解码器(Decoder)两大模块构成,辅以输入嵌入、位置编码、层归一化及全连接层。编码器通常堆叠N个相同层,每层含多头自注意力机制与前馈神经网络,且均搭配残差连接和层归一化,负责提取输入序列的全局上下文特征;解码器同样堆叠N层,在编码器层结构基础上,新增掩码多头自注意力(防止前瞻)和编码器-解码器交叉注意力(关联输入特征),负责逐元素生成目标序列。输入嵌入将离散元素转为向量,位置编码注入序列顺序信息,最终通过输出层映射为目标词汇概率分布,实现并行计算与全局依赖捕捉。简述Transformer模型中编码器的工作流程。答:编码器先对输入序列做嵌入转换,叠加位置编码以注入顺序信息,得到初始向量。随后向量进入多头自注意力机制,通过拆分查询、键、值并独立计算注意力,捕捉全局依赖后拼接投影。接着经残差连接与层归一化稳定训练,再输入前馈神经网络进行非线性映射。最后重复残差连接与层归一化,形成单编码器层输出。该流程堆叠N次后,输出含全局上下文特征的向量,完成输入序列的特征提取。

3.简述Transformer模型中解码器的工作流程。答:解码器先对目标序列做嵌入转换并叠加位置编码,得到初始向量。向量先经掩码多头自注意力机制(屏蔽后续信息)捕捉前文依赖,再通过残差连接与层归一化。随后进入交叉注意力机制,以自身输出为查询、编码器输出为键值,关联输入序列特征,同样经残差连接与层归一化。接着输入前馈神经网络做非线性映射,再经残差连接与层归一化,形成单解码器层输出。该流程堆叠N次后,通过输出层映射为词汇概率分布,逐元素生成目标序列。二、实践题

利用BERT模型进行英文文本的精准分类任务。要求:使用PyTorch和Transformers库包,数据集任选。答:基于PyTorch和Transformers库实现BERT英文文本精准分类的完整代码示例,选用经典的IMDB影评情感分类数据集(二分类:正面/负面),代码兼顾可读性与实用性,包含数据预处理、模型构建、训练及评估全流程。运行环境准备#安装依赖库包pipinstalltorchtransformersdatasetsscikit-learn2、代码实现importtorchimporttorch.nnasnnfromtorch.utils.dataimportDataLoaderfromtransformersimportBertTokenizer,BertForSequenceClassification,AdamWfromtransformersimportget_linear_schedule_with_warmupfromdatasetsimportload_datasetfromsklearn.metricsimportaccuracy_score,classification_report#1.配置参数DEVICE=torch.device("cuda"iftorch.cuda.is_available()else"cpu")MODEL_NAME="bert-base-uncased"#基础版BERT(小写英文)BATCH_SIZE=16EPOCHS=3LEARNING_RATE=2e-5MAX_SEQ_LEN=128#文本最大长度#2.加载数据集(IMDB影评情感分类)dataset=load_dataset("imdb")train_dataset=dataset["train"]test_dataset=dataset["test"]#3.加载BERT分词器tokenizer=BertTokenizer.from_pretrained(MODEL_NAME)#4.数据预处理函数defpreprocess_function(examples):#分词:截断/填充到指定长度,返回tensor格式encoding=tokenizer(examples["text"],truncation=True,padding="max_length",max_length=MAX_SEQ_LEN,return_tensors="pt")#整理标签(IMDB标签为0/1,直接转换为tensor)encoding["labels"]=torch.tensor(examples["label"])returnencoding#应用预处理并转换为PyTorch数据集train_encoded=train_dataset.map(preprocess_function,batched=True)test_encoded=test_dataset.map(preprocess_function,batched=True)#设置数据集格式(适配PyTorchDataLoader)train_encoded.set_format(type="torch",columns=["input_ids","attention_mask","labels"])test_encoded.set_format(type="torch",columns=["input_ids","attention_mask","labels"])#创建数据加载器train_loader=DataLoader(train_encoded,batch_size=BATCH_SIZE,shuffle=True)test_loader=DataLoader(test_encoded,batch_size=BATCH_SIZE,shuffle=False)#5.加载BERT分类模型(预训练+分类头)model=BertForSequenceClassification.from_pretrained(MODEL_NAME,num_labels=2#二分类任务(正面/负面)).to(DEVICE)#6.配置优化器和学习率调度器optimizer=AdamW(model.parameters(),lr=LEARNING_RATE)total_steps=len(train_loader)*EPOCHSscheduler=get_linear_schedule_with_warmup(optimizer,num_warmup_steps=0,num_training_steps=total_steps)#7.训练函数deftrain_epoch(model,loader,optimizer,scheduler):model.train()total_loss=0.0forbatchinloader:#数据移至GPU/CPUinput_ids=batch["input_ids"].to(DEVICE)attention_mask=batch["attention_mask"].to(DEVICE)labels=batch["labels"].to(DEVICE)#前向传播outputs=model(input_ids=input_ids,attention_mask=attention_mask,labels=labels)loss=outputs.losstotal_loss+=loss.item()#反向传播+优化loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),1.0)#梯度裁剪防止爆炸optimizer.step()scheduler.step()optimizer.zero_grad()avg_loss=total_loss/len(loader)returnavg_loss#8.评估函数defevaluate(model,loader):model.eval()all_preds=[]all_labels=[]withtorch.no_grad():forbatchinloader:input_ids=batch["input_ids"].to(DEVICE)attention_mask=batch["attention_mask"].to(DEVICE)labels=batch["labels"].to(DEVICE)outputs=model(input_ids=input_ids,attention_mask=attention_mask)#获取预测结果(取logits最大值对应的类别)preds=torch.argmax(outputs.logits,dim=1)all_preds.extend(preds.cpu().numpy())all_labels.extend(labels.cpu().numpy())#计算准确率和分类报告accuracy=accuracy_score(all_labels,all_preds)report=classification_report(all_labels,all_preds,target_names=["负面","正面"])returnaccuracy,report#9.主训练流程if__name__=="__main__":forepochinrange(EPOCHS):print(f"\n=====Epoch{epoch+1}/{EPOCHS}=====")#训练train_loss=train_epoch(model,train_loader,optimizer,scheduler)print(f"训练损失:{train_loss:.4f}")#评估accuracy,report=evaluat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论