0

0

理解 Transformers 中的交叉熵损失及 Masked Label 问题

花韻仙語

花韻仙語

发布时间:2025-10-01 10:51:02

|

700人浏览过

|

来源于php中文网

原创

理解 transformers 中的交叉熵损失及 masked label 问题

本文旨在深入解析 Hugging Face Transformers 库中,使用 GPT-2 等 Decoder-Only 模型计算交叉熵损失时,如何正确使用 masked label,并解释了常见的困惑。通过具体示例和代码,详细阐述了 target_ids 的构建方法,以及如何结合 ignore_index 来控制损失计算的范围,从而避免不必要的计算偏差,并提供了手动计算损失的替代方案。

在使用 Hugging Face Transformers 库进行自然语言处理任务时,尤其是使用 GPT-2 等 Decoder-Only 模型时,理解交叉熵损失的计算方式和 masked label 的作用至关重要。本文将深入探讨 target_ids 的正确构建方法,以及如何利用 ignore_index 来精确控制损失计算的范围,从而避免常见的错误和困惑。

Decoder-Only 模型、输入和目标

在 Hugging Face Transformers 库中,Decoder-Only 模型(如 GPT-2)主要依赖 input_ids、label_ids 和 attention_mask 进行训练。其中,input_ids 代表输入序列的 token IDs,label_ids 代表目标序列的 token IDs,而 attention_mask 用于指示哪些 token 应该被模型关注。

假设我们有一个输入 "The answer is:",我们希望模型学习回答 "42"。将这个句子转化为 token IDs,假设 "The answer is: 42" 对应的 IDs 是 [464, 3280, 318, 25, 5433](其中 ":" 是 25," 42" 是 5433)。

为了让模型学习预测 "42",我们需要设置 label_ids 为 [-100, -100, -100, -100, 5433]。这样,模型就不会学习到 "The answer" 后面应该跟着 "is:",因为这些位置的损失被忽略了。

注意: Decoder-Only 模型要求输入和输出具有相同的形状。这与 Encoder-Decoder 模型不同,后者可以接受 "The answer is:" 作为输入,而 "42" 作为输出。

-100 是 torch.nn.CrossEntropyLoss 的默认 ignore_index。使用 "忽略" 比 "mask" 更准确,因为 "mask" 暗示模型看不到这些输入,或者原始输入被替换为特殊的 "" token。

理解问题的根源

原始问题中,代码 target_ids[:, :-seq_len] = -100 试图将 target_ids 中除了最后 seq_len 个元素之外的所有元素设置为 -100。然而,由于 target_ids 的长度为 seq_len,所以实际上没有任何元素被修改,导致损失计算结果不变。

迭代数据集时的正确方法

在使用滑动窗口迭代数据集时,masked label 的应用需要在不同的迭代步骤中进行调整。以下是一个示例:

微信 WeLM
微信 WeLM

WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。

下载

第一次迭代:

max_length = 1024
stride = 512

end_loc = 1024
input_ids = tokens[0 : 1024]
target_ids = input_ids.clone()
target_ids[:-1024] = -100  # 实际上没有修改任何元素

assert torch.equal(target_ids, input_ids)

trg_len = 1024
prev_end_loc = 1024

在第一次迭代中,由于 target_ids[:-1024] 实际上等于 target_ids[:0],因此 target_ids 没有被修改,损失是基于所有 1024 个 token 计算的。

第二次及后续迭代:

begin_loc = 512
end_loc = 1536
trg_len = 1536 - 1024  # 512

input_ids = tokens[512 : 1536]  # 注意:tokens 512-1024 已经被模型看到过
target_ids = tokens[512 : 1536].clone()
target_ids[:-512] = -100  # 将已经见过的 token 对应的 label 设置为 -100

从第二次迭代开始,target_ids 的前 512 个元素(对应于模型已经见过的 token)被设置为 -100,损失仅基于后 512 个 token 计算。

手动计算损失

如果需要更精细地控制损失计算过程,可以直接从模型获取 logits,然后手动计算交叉熵损失。

from torch.nn import CrossEntropyLoss

outputs = model(encodings.input_ids, labels=None)

logits = outputs.logits
labels = target_ids.to(logits.device)

# 调整 logits 和 labels 的形状,使其匹配
shift_logits = logits[..., :-1, :].contiguous()
shift_labels = labels[..., 1:].contiguous()

# 计算损失
loss_fct = CrossEntropyLoss(reduction='mean')
loss = loss_fct(shift_logits.view(-1, model.config.vocab_size), shift_labels.view(-1))

print(loss.item())

这段代码首先从模型获取 logits,然后将 logits 和 labels 的形状进行调整,使其能够匹配。最后,使用 CrossEntropyLoss 计算损失。

总结:

理解 Decoder-Only 模型中 target_ids 的构建方式,以及如何利用 ignore_index 来控制损失计算的范围,是使用 Hugging Face Transformers 库进行自然语言处理任务的关键。通过正确设置 target_ids,可以避免不必要的计算偏差,并提高模型的训练效果。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6136

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

816

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1064

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1312

2024.03.01

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

25

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

6

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

25

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

3

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

5

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号