大模型中top-ptop-ktemperature如何共同使用——Gemma为例子

2024-04-17 12:44

本文主要是介绍大模型中top-ptop-ktemperature如何共同使用——Gemma为例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:
大模型文本生成——解码策略(Top-k & Top-p & Temperature)
大模型源码理解-以Gemma为例子

摘要

之前系统学习了大模型的解码方式,Top-p, Top-k, Beam-search, Greedy, temperature等等,具体使用的时候,也清楚采用这些方式混合使用,但是具体怎么混合,有些模糊。看了一篇相关文章大模型文本生成——解码策略(Top-k & Top-p & Temperature),如下图所示,解决了我一些理解方面的问题,但是感觉还有有些模糊,仔细研究了一下Gemma,记录一下。

结论

先说一下结论,Gemma是怎么解码的,主要研究top-p & top-k &temperature是如何使用的,temperature>top-p>top-k(其实top-p和top-k可以算作并行,同时使用)。与上图的结论略有区别,可能不同得模型策略方便略有区别吧。

代码分析

通过代码进行分析,是如何实现三种策略混合使用。
我觉得,top-p和top-k,一起使用,保留同时满足top-p&top-k的概率值。

class Sampler(nn.Module):def __init__(self, vocab_size: int):super().__init__()self.vocab_size = vocab_size@torch.no_grad()def forward(self,embedding: torch.Tensor,hidden_states: torch.Tensor,output_positions: torch.Tensor,temperatures: Union[torch.Tensor, None],top_ps: torch.Tensor,top_ks: torch.Tensor,embedding_bias: Optional[torch.Tensor] = None,) -> torch.Tensor:# Select the last element for each sequence.# (batch_size, input_len, hidden_size) -> (batch_size, hidden_size)hidden_states = hidden_states.index_select(#1, output_positions).squeeze(dim=1)logits = torch.matmul(hidden_states, embedding.t())#计算不同得Token得分情况if embedding_bias is not None:#是否增加bisa,这个无关紧要logits += embedding_biasif temperatures is None:#temperature为空则设置贪婪匹配则选择最大得概率,GPT中好像是0进行贪婪匹配return torch.argmax(logits, dim=-1).squeeze(dim=-1)# Apply temperature scaling.logits.div_(temperatures.unsqueeze(dim=1))#预测得结果去除以temperature,修改分布# Calculate probabilities with softmax.probs = torch.softmax(logits, dim=-1, dtype=torch.float)#进行softmax归一化probs_sort, probs_idx = torch.sort(probs, dim=-1, descending=True)#从大到小进行排序# Apply top-p, top-k.#这里进行top-pprobs_sum = torch.cumsum(probs_sort, dim=-1)top_ps_mask = (probs_sum - probs_sort) > top_ps.unsqueeze(dim=1)probs_sort = torch.where(top_ps_mask, 0, probs_sort)#这里进行top-ktop_ks_mask = torch.arange(probs_idx.shape[-1],device=probs_idx.device)top_ks_mask = top_ks_mask.expand(probs_idx.shape[0], -1)top_ks_mask = top_ks_mask >= top_ks.unsqueeze(dim=1)#这里top-p和top-k同时起作用,同时满足top-p和top-k得结果才有概率值,否则就为0#因为top_ks_mask判断大于top_ks得为True, 大于得不是我们得范围,所以top_ks_mask就补0, 不为True,则补top-p得结果probs_sort = torch.where(top_ks_mask, 0, probs_sort)# Re-normalization.probs_sort.div_(probs_sort.sum(dim=-1, keepdim=True))probs = torch.gather(probs_sort,dim=-1,index=torch.argsort(probs_idx, dim=-1))next_token_ids = torch.multinomial(probs,num_samples=1,replacement=True).squeeze(dim=-1)return next_token_ids

这篇关于大模型中top-ptop-ktemperature如何共同使用——Gemma为例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911828

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2