当前位置: 首页 > news >正文

大模型熵-控制模型探索or利用

目录

香农熵:

1. 核心定义:什么是香农熵?

基于策略梯度的方法,如 PPO、AC 等)中,加入熵项的意义:

1. 熵项的本质:衡量策略的随机性

2. 熵项的计算方式(分场景)

(1)离散动作空间(如 Atari 游戏、多分类动作)

(2)连续动作空间(如机器人控制、自动驾驶)

3. 熵项在损失函数中的作用

4. 常见变种:自适应熵系数

总结

代码-基于大模型的输出输出计算熵:

为什么要mask掉熵更大的token,背后的原理是什么?

1. 核心:熵值与模型不确定性的关系

2. 为什么要 mask 高熵 token?典型场景与原理

(1)半监督学习 / 自训练:筛选 “可靠样本” 减少噪声干扰

(2)主动学习:优先标注 “模型不确定的样本”

(3)模型压缩 / 知识蒸馏:保留关键信息,简化模型

(4)对抗训练 / 噪声鲁棒性:减少对 “不稳定 token” 的依赖

3. 反例:何时需要保留高熵 token?

总结

香农熵:

香农熵是信息论的核心概念,用来量化随机事件的不确定性或信息量大小,不确定性越高,香农熵的值越大。

这个概念由克劳德・香农在 1948 年提出,它不仅奠定了现代通信的理论基础,还广泛应用于数据压缩、机器学习(如决策树特征选择)、密码学等领域。

1. 核心定义:什么是香农熵?

对于一个离散的随机变量 X,它的可能取值为 \(x_1, x_2, ..., x_n\),每个取值的概率为 \(p(x_1), p(x_2), ..., p(x_n)\)(满足 \(\sum_{i=1}^n p(x_i) = 1\)),则其香农熵 \(H(X)\) 的计算公式为:

H(X) = -\sum_{i=1}^n p(x_i) \cdot \log_2 p(x_i)

  • 单位:公式中若使用以 2 为底的对数(\(\log_2\)),熵的单位为 “比特(bit)”;若用自然对数(\(\ln\)),单位为 “奈特(nat)”,日常场景中 “比特” 最常用。
  • 特殊情况:当某一事件的概率为 1(必然发生),其他为 0 时,\(H(X) = 0\)(完全确定,无不确定性);当所有事件概率相等(\(p(x_i) = 1/n\))时,熵达到最大值(不确定性最高)。

基于策略梯度的方法,如 PPO、AC 等)中,加入熵项的意义:

在强化学习(尤其是基于策略梯度的方法,如 PPO、A2C 等)中,加入熵项(entropy term) 的核心目的是鼓励策略探索(exploration),避免策略过早收敛到局部最优的确定性策略(确定性策略缺乏探索性)。熵项的计算通常基于策略输出的概率分布,具体方式如下:

1. 熵项的本质:衡量策略的随机性

强化学习中,策略(policy)通常被建模为一个概率分布 \(\pi(a|s)\),表示在状态 s 下选择动作 a 的概率。策略的熵 H(\pi(\cdot|s))定义为:H(\pi(\cdot|s)) = -\sum_{a \in \mathcal{A}} \pi(a|s) \log \pi(a|s)

  • 若策略是确定性的(某个动作概率为 1,其他为 0),熵为 0(无随机性,探索性差)。
  • 若策略是随机的(动作概率分布分散),熵值较高(探索性强)。

因此,在损失函数中加入熵项(通常为负系数,即 - 熵值),可通过梯度下降 “惩罚” 低熵策略,迫使策略保持一定随机性。

2. 熵项的计算方式(分场景)

(1)离散动作空间(如 Atari 游戏、多分类动作)

动作空间 \(\mathcal{A}\) 是有限离散集合(如上下左右),策略 \(\pi(a|s)\) 通常由神经网络输出的类别分布(categorical distribution) 表示(通过 softmax 激活)。

熵项计算为:H(\pi) = -\sum_{a} \pi(a|s) \log \pi(a|s)在代码中,给定神经网络输出的 logits(未归一化的概率),可先通过 softmax 得到概率分布,再计算熵:

import torch
import torch.nn.functional as F# 假设logits是模型输出的未归一化概率,shape=(batch_size, num_actions)
logits = model(state)  # (batch_size, num_actions)
probs = F.softmax(logits, dim=-1)  # 动作概率分布,(batch_size, num_actions)
log_probs = F.log_softmax(logits, dim=-1)  # 对数概率,(batch_size, num_actions)# 计算每个样本的熵:-sum(p * log p)
entropy = -torch.sum(probs * log_probs, dim=-1)  # (batch_size,)# 整个批次的平均熵(用于损失函数)
mean_entropy = entropy.mean()
(2)连续动作空间(如机器人控制、自动驾驶)

动作空间 \(\mathcal{A}\) 是连续区间(如力度、角度),策略 \(\pi(a|s)\) 通常由高斯分布(Gaussian distribution) 表示,即 a \sim \mathcal{N}(\mu(s), \sigma^2(s)),其中 \(\mu\) 是均值,\(\sigma\) 是标准差(由神经网络输出)。

高斯分布的熵解析解为:H(\mathcal{N}(\mu, \sigma^2)) = \frac{1}{2} \log(2\pi e \sigma^2)(与均值 \(\mu\) 无关,仅取决于标准差 \(\sigma\))

import torch# 假设模型输出均值mu和对数标准差log_sigma(避免sigma为负)
mu = model_mu(state)  # (batch_size, action_dim)
log_sigma = model_log_sigma(state)  # (batch_size, action_dim)
sigma = torch.exp(log_sigma)  # 标准差# 高斯分布的熵:0.5 * log(2πeσ²),对每个动作维度计算后求和
entropy = 0.5 * (1 + 2 * log_sigma + torch.log(2 * torch.tensor(torch.pi)))
# 对动作维度求和,得到每个样本的熵
entropy = entropy.sum(dim=-1)  # (batch_size,)# 整个批次的平均熵
mean_entropy = entropy.mean()

3. 熵项在损失函数中的作用

强化学习的策略梯度损失通常由两部分组成:\text{Loss} = -\mathbb{E}[A(s,a) \log \pi(a|s)] - \beta \cdot \mathbb{E}[H(\pi(\cdot|s))]

  • 第一项是策略梯度项(利用优势函数 \(A(s,a)\) 鼓励高回报动作)。
  • 第二项是熵正则项,其中 \(\beta > 0\) 是熵系数(控制探索强度):
    • \(\beta\) 越大,熵项权重越高,策略越倾向于随机(探索性强)。
    • \(\beta\) 越小,策略越倾向于贪婪(利用性强)。

4. 常见变种:自适应熵系数

为了动态平衡探索与利用,一些算法(如 SAC)会使用自适应熵系数,让熵项自动调整到目标值(如 H_{\text{target}} = \log(|\mathcal{A}|),即均匀分布的熵)。此时熵项的损失变为:\text{Loss}_{\text{entropy}} = \beta \cdot (\mathbb{E}[H(\pi)] - H_{\text{target}})通过梯度下降调整 \(\beta\),使实际熵接近目标值。

总结

强化学习中熵项的计算核心是衡量策略概率分布的随机性

  • 离散动作:基于类别分布的熵-\sum p \log p
  • 连续动作:基于高斯分布的解析熵(与标准差相关)。其作用是通过正则化策略,在 “利用已知高回报动作” 和 “探索未知动作” 之间取得平衡。

代码-基于大模型的输出输出计算熵:

计算香农熵代码:

基于每个样本的所有输出计算,值代表输出的分布稳定性:

https://github.com/huggingface/trl/blob/main/trl/trainer/utils.py#L1480

entropies = []
for chunk in flat_logits.split(chunk_size, dim=0):logps = F.log_softmax(chunk, dim=-1)chunk_entropy = -(torch.exp(logps) * logps).sum(-1)entropies.append(chunk_entropy)

计算熵的分布,将熵超出阈值范围的样本过滤掉:

https://github.com/huggingface/trl/blob/main/trl/trainer/grpo_trainer.py#L1797

def get_high_entropy_mask(self, entropies: torch.Tensor, mask: torch.Tensor, threshold: float) -> torch.Tensor:"""Returns a binary mask identifying tokens whose entropy exceeds a given quantile threshold.Args:entropies (`torch.Tensor`):Tensor of shape (batch_size, seq_len) with per-token entropy values.mask (`torch.Tensor`):Binary mask of the same shape as `entropies`, where `1` indicates valid tokens and `0` padding.threshold (`float`):Quantile threshold between `0.0` and `1.0` to select high-entropy tokens.Returns:`torch.Tensor`:Boolean mask of shape (batch_size, seq_len), where `True` indicates tokens with entropy >= thresholdand `False` otherwise."""local = entropies[mask.bool()].float()# Use a negative pad_value as a sentinel because entropy values are always >= 0.# This guarantees that the sentinel cannot collide with any real entropy value.pad_value = -1e9# Pad across processes so that every rank has the same tensor lengthpadded = self.accelerator.pad_across_processes(local, dim=0, pad_index=pad_value)gathered = self.accelerator.gather(padded)# Drop sentinel values (safe because no entropy can be negative)gathered = gathered[gathered != pad_value]if gathered.numel() == 0:return torch.zeros_like(entropies, dtype=torch.bool)entropy_threshold = torch.quantile(gathered, threshold)masked_entropies = entropies * mask.float()entropy_mask = masked_entropies >= entropy_thresholdreturn entropy_mask & mask.bool()  # ensure padding tokens are always masked out

为什么要mask掉熵更大的token,背后的原理是什么?

在模型训练或推理中,“mask 掉熵更大的 token” 是一种基于不确定性量化的策略,其核心原理与模型对 token 的 “置信度” 密切相关。具体来说,熵值越高的 token,代表模型对该 token 的预测不确定性越大(或输出分布越分散)。mask 掉这些 token 的背后逻辑,需要结合具体任务场景(如半监督学习、自训练、模型压缩等)来理解,常见动机如下:

1. 核心:熵值与模型不确定性的关系

首先明确熵值在 token 层面的含义:对于模型输出的 token 概率分布 \(P = [p_1, p_2, ..., p_k]\)(k 为词汇表大小),其熵值H(P) = -\sum p_i \log p_i衡量了分布的 “混乱程度”:

  • 熵值高:概率分布分散(如 \(p_1=0.2, p_2=0.3, p_3=0.5\)),模型对该 token 的预测没有明确倾向,不确定性大(可能是难样本、噪声或模型未学好的部分)。
  • 熵值低:概率分布集中(如 \(p_1=0.95, p_2=0.03, ...\)),模型对该 token 的预测置信度高,不确定性小。

2. 为什么要 mask 高熵 token?典型场景与原理

(1)半监督学习 / 自训练:筛选 “可靠样本” 减少噪声干扰

在半监督学习中,模型常利用未标注数据生成伪标签(pseudo-label)辅助训练。但高熵 token 的伪标签可靠性低(模型自己都不确定),若直接用于训练,可能引入噪声,导致模型性能下降。

  • 策略:mask 掉高熵 token 的伪标签(或不使用这些 token 参与损失计算),只保留低熵、高置信度的 token 作为有效监督信号。
  • 原理:通过过滤低质量信息,让模型专注于学习 “确定的知识”,避免被噪声带偏。
(2)主动学习:优先标注 “模型不确定的样本”

主动学习的目标是用最少的标注成本提升模型性能,核心是筛选 “最有价值” 的样本让人类标注。此时,高熵 token 对应的样本往往是模型知识的薄弱点。

  • 策略:mask 掉低熵 token(模型已掌握),只关注高熵 token 所在的样本,优先标注这些样本。
  • 原理:高熵 token 包含更多模型 “未知” 的信息,标注后能最大程度弥补模型缺陷,提升效率。
(3)模型压缩 / 知识蒸馏:保留关键信息,简化模型

在知识蒸馏中,教师模型向学生模型传递知识时,高熵 token 可能是冗余信息(如无关的修饰词、重复内容),或因教师模型自身不确定而传递错误知识。

  • 策略:mask 掉高熵 token,只让学生模型学习教师模型高置信度(低熵)的输出。
  • 原理:过滤冗余或不可靠的信息,让学生模型聚焦核心知识,提升压缩效率。
(4)对抗训练 / 噪声鲁棒性:减少对 “不稳定 token” 的依赖

在含噪声的数据中(如拼写错误、模糊文本),高熵 token 可能是噪声导致的 “异常值”,模型过度关注这些 token 会降低鲁棒性。

  • 策略:mask 高熵 token,强制模型学习文本中更稳定、低熵的核心语义(如关键词、主体词)。
  • 原理:提升模型对噪声的抗干扰能力,让决策依赖更可靠的特征。

3. 反例:何时需要保留高熵 token?

并非所有场景都要 mask 高熵 token,需根据目标灵活调整:

  • 若目标是发现模型缺陷(如测试集分析),高熵 token 是重要线索(提示模型在哪些 token 上表现差)。
  • 若任务是生成多样化内容(如创意写作),高熵 token 可能对应更多样的选择,需保留以增加输出丰富度。

总结

“mask 高熵 token” 的核心逻辑是:通过过滤模型不确定性高的信息,提升训练效率、减少噪声干扰或聚焦关键知识。其本质是一种 “基于置信度的信息筛选策略”,具体效果依赖于任务目标和数据特性。

http://www.dtcms.com/a/508634.html

相关文章:

  • 视频教学网站开发云服务器做网站新手教程
  • 可信赖的手机网站设计百度竞价托管一月多少钱
  • Flink 1.19 REST API
  • RoniaKit QML仪表盘开发指南:从零开始创建专业仪表板
  • 版本控制与GitLab完整实践指南
  • bash 基础编程的核心语法
  • 中山品牌网站建设报价做网站首页置顶多少钱
  • 京紫元年深圳网站建设欧美风格网站特点
  • 企业网站开发制作合同wordpress禁止图片点击
  • 做英文网站2014上海画册设计
  • 美颜SDK集成实录:打造兼容多端的直播一键美颜系统
  • 资料分析-增长量
  • 网站开发种类视频号推广入口
  • 南通做网站ntwsd椒江设计公司
  • 建设l旅游网站目的及功能定位域名访问过程会不会影响网站访问
  • 做门户网站建设多少钱wordpress js调用
  • 广州企业网站设计制作佛山网站的建设
  • 网络地址转换(NAT)和ISP(互联网服务提供商)
  • a5站长网宁波建网站选哪家好点
  • 三菱PLC与汇川伺服驱动器通讯实现:EtherCAT转CC-Link IE FB协议转换网关配置案例
  • 竞逐AI内容,爱奇艺先出手了
  • 淄博哪有做网站的微信同步wordpress
  • 【AI赋能未来】探索学前教育研究的智能化新范式
  • 网站模板 招聘单位网站建设管理工作总结
  • 在 Ubuntu24.04 上安装 JDK 21(Java 21)
  • 容县网站建设微信公众号流程图
  • Aiseesoft_iPhone_Unlocker
  • 网站开发规范拼多多福利券小程序怎么赚钱
  • 网站建设费用包括哪些内容wordpress边框
  • YOLO V3 目标检测教程:从样本分类到性能评价