GPT损失和是模型模型是否真的学会(困惑度)。

devtools/2024/9/25 11:10:00/
#加入输入如下,label 也就是输出希望是targets
inputs = torch.tensor([[16833, 3626, 6100],   # ["every effort moves",[40,    1107, 588]])   #  "I really like"]targets = torch.tensor([[3626, 6100, 345  ],  # [" effort moves you",[588,  428,  11311]]) #  " really like chocolate"]#2 用模型跑结果
with torch.no_grad():logits = model(inputs)probas = torch.softmax(logits, dim=-1) # Probability of each token in vocabulary
print(probas.shape) # Shape: (batch_size, num_tokens, vocab_size)#3、取出对应的单词的概率
# targets_0 " effort moves you", 这三个单词对应的概率
text_idx = 0
target_probas_1 = probas[text_idx, [0, 1, 2], targets[text_idx]]
print("Text 1:", target_probas_1)# targets_1 " effort moves you", 这三个单词对应的概率
text_idx = 1
target_probas_2 = probas[text_idx, [0, 1, 2], targets[text_idx]]
print("Text 2:", target_probas_2)# 训练模型让对应位置的概率值接近1,最大化概率。在数学优化中,最大化概率分数的对数比分数值本身更容易,所有取个对数log
# 计算所有标记的预测概率的对数值
log_probas = torch.log(torch.cat((target_probas_1, target_probas_2)))
print(log_probas)
# 对所有标记的概率对数值求均值
avg_log_probas = torch.mean(log_probas)
print(avg_log_probas)#在深度学习中,我们通常不是最大化平均对数概率,而是遵循标准惯例来最小化平均对数概率的负值;在我们的例子中,不是最大化-10.7722使其接近0,在深度学习中,我们会最小化10.7722使其接近0。
#负-10.7722的值,即10.7722,在深度学习中也被称为  交叉熵损失:(平均对数概率的负值)
neg_avg_log_probas = avg_log_probas * -1
print(neg_avg_log_probas) 
# 结果是 10.77#交叉上可以直接用pytorch中的一个函数 torch.nn.functional.cross_entropy
logits_flat = logits.flatten(0, 1)
targets_flat = targets.flatten()print("Flattened logits:", logits_flat.shape)
print("Flattened targets:", targets_flat.shape)
# 交叉熵损失
loss=torch.nn.functional.cross_entropy(logits_flat ,targets_flat) # 也就是平均对数概率的负数
print(loss)# 结果也是10.77#一个 与交叉熵损失相关的概念是大型语言模型(LLM)的困惑度
#困惑度perplexity
perplexity = torch.exp(loss)

一个 与交叉熵损失相关的概念是大型语言模型(LLM)的困惑度
困惑度简单地说就是交叉熵损失的指数函数计算结果 e l o s s e^{loss} eloss

较低的困惑度表明模型预测更接近实际分布

困惑度Perplexity
困惑度可以被解释为模型在每一步中对下一个标记的平均不确定性,或者说是模型在预测下一个标记时的“有效词汇表大小”。如果模型的困惑度P,它认为所有可能的词汇中有 P 个词是同等可能的

困惑度的具体解释:

  1. 困惑度的定义:

    • 困惑度是语言模型在预测下一个词时平均感到的“困惑”程度。数学上,它是对模型的交叉熵损失取指数得到的结果。
    • 如果模型的困惑度P,那么可以将 P 解释为模型预测下一个词时,平均来说,它认为所有可能的词汇中有 P 个词是同等可能的。
  2. 可解释性:

    • 困惑度的可解释性来自于它直接与模型的预测不确定性相关。具体来说,困惑度可以被看作是模型在预测下一个词时的“有效词汇表大小”。
    • 例如,假设词汇表中有 47,678 个单词或标记。如果一个语言模型的困惑度是 47,678,那么这意味着模型在每一步预测时,表现得像是随机选择一个词汇表中的任意词,模型没有特别的倾向性。
  3. 极端例子:

    • 如果困惑度为 1,表示模型在每次预测时都非常确定,且只认为一个词是可能的。
    • 如果困惑度等于词汇表大小(如 47,678),表示模型完全不确定,对它来说,词汇表中的每个词都有同等的可能性,这就像是随机选择一个词。

具体例子:

  • 困惑度为 100:

    • 如果一个模型的困惑度为 100,可以理解为这个模型在预测下一个词时,行为上相当于在 100 个同等可能的词中随机选择一个。
    • 尽管词汇表的实际大小可能远大于 100,但模型在这种情况下的“有效词汇表大小”是 100,表明它对大多数词并不确定。
  • 困惑度为 47,678:

    • 在你提到的例子中,如果模型的困惑度是 47,678(假设与词汇表大小相等),这意味着模型对词汇表中的每个单词都感到极大的不确定性,每个单词都有可能被选中。

困惑度(Perplexity)为1的情况表示模型对每一步的预测完全确定,也就是说,模型在预测下一个词时,认为只有一个词是正确的选择,且没有任何不确定性。

困惑度为1的具体含义:

  1. 完全确定性:

    • 困惑度为1时,模型的预测是完全确定的。也就是说,模型在每个预测时都只会选择一个唯一的词,并且它认为这个词是100%正确的。
    • 在这种情况下,模型在预测下一个词时不会有任何犹豫或不确定性。
  2. 理论极限:

    • 困惑度为1是理论上的最佳值,表示模型的性能是完美的。模型在每一步都准确地预测了下一个词,没有任何错误或不确定性。这种情况在实际应用中几乎是不可能的,因为自然语言的复杂性使得模型总是会有一定程度的不确定性。
  3. 实际意义:

    • 如果一个模型在某个任务或数据集上达到困惑度为1,意味着它完全掌握了该数据集上的模式,能够精确预测每一个下一个词。
    • 这种情况可能出现在非常简单的任务中,或者在过拟合的情况下,即模型过于适应训练数据而不能很好地泛化到新的数据。

总结:

困惑度为1表示模型对其预测完全没有不确定性,这意味着模型对每个输入能够唯一确定下一个词。这种情况表明模型表现完美,但在现实中,这种情况非常罕见。通常,困惑度越接近1,说明模型在任务上表现得越好,但也需要小心避免过拟合。


http://www.ppmy.cn/devtools/94201.html

相关文章

【自动驾驶】ROS中的重名问题:工作空间、节点、参数

目录 功能包的重名ROS节点名称重名设置命名空间解决在launch设置命名空间c编码实现 Ros话题重名处理启动时的话题重映射使用launch文件完成话题重映射c编码实现话题重映射全局名称相对名称私有名称 ROS参数设置启动节点时设置launch文件进行设置使用c编码进行设置 功能包的重名…

车身域测试学习、CANoe工具实操学习、UDS诊断测试、功能安全测试、DTC故障注入测试、DBC数据库、CDD数据库、CAN一致性测试、ECU刷写测试

每日直播时间:(直播方式:腾讯会议)周一到周五:20:00-23:00周六与周日:9:00-17:00 进腾讯会议学习的,可以关注我并后台留言 直播内容:&…

Haproxy讲解

Haproxy: haproxy是一个开源的高性能反向代理和负载均衡器,主要用于‌TCP和‌HTTP流量管理。 功能和特点:haproxy能够处理大量的并发连接,支持TCP和HTTP协议,具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站&am…

【Python快速入门和实践009】Python高级编程

9. 高级Python 9.1 迭代器与生成器 迭代器: 迭代器是一种遵循迭代器协议的对象,该协议要求对象实现两个特殊的方法:__iter__() 和 __next__()。__iter__() 方法返回迭代器自身,而 __next__() 方法返回序列中的下一个值。当没有更多的值时&a…

winform中设置DateTimePicker参数为空

在C#中,使用DateTimePicker控件时,您可以将其Value属性设置为null或者DateTime.MinValue来表示没有选定的日期或时间。以下是如何设置默认值为空的示例代码: dateTimePicker1.Value DateTime.MinValue; 或者,如果您希望用户不能…

NPM依赖管理:掌握自动更新行为的策略与实践

引言 在快速发展的JavaScript生态系统中,依赖包的持续更新对于保持项目现代化和安全性至关重要。NPM(Node Package Manager)作为Node.js的包管理器,提供了一套灵活的机制来管理依赖包的更新。本文将详细介绍如何使用NPM设置包的版…

HikariCP连接池:Possibly consider using a shorter maxLifetime value.

相关的SQL总结: session级别: show variables like %timeout%; mysql的global级别: show global variables like %timeout%; # 对应 mysql 修改配置(单位 秒) set global wait_timeout300; set global interacti…

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task2:头脑风暴会,巧灵脑筋急转弯(持续更新)

队伍名称:巧灵脑筋急转弯 队伍技术栈:python,LLM,RAG,大模型,nlp,Gradio,Vue,java 队友:知唐(队长),我真的敲不动…