熵最小化Entropy Minimization (一): 基本认识

article/2025/7/18 15:15:58

文章目录

    • 1. 前置知识
      • Softmax函数
      • 信息熵(Entropy)
    • 2. 熵最小化
    • 3. 案例理解
    • 4. 总结

熵最小化是一种利用未标记数据的策略,其核心思想是鼓励模型对未标记数据做出“自信”的预测,即预测概率分布尽可能尖锐(Peaky)而非平坦(Flat)。熵最小化在半监督学习(Semi-Supervised Learning, SSL)和域自适应(Domain Adaptation, DA)中得到广泛应用。

例如,源域有标签,目标域无标签,在目标域数据上应用熵最小化,鼓励模型在目标域上做出自信的预测(降低预测的不确定性)。具体的迁移学习应用,可以看文末提供的文献。

1. 前置知识

Softmax函数

也称归一化指数函数[1],使每一个元素的范围都压缩在(0,1)之间,并且所有元素的和为1 。
σ ( z ) j = e z j ∑ k = 1 K e z k for  j = 1 , … , K . \sigma(\mathbf{z})_j = \frac{e^{z_j}}{\sum_{k = 1}^K e^{z_k}} \quad \text{for } j = 1, \ldots, K. σ(z)j=k=1Kezkezjfor j=1,,K.
eg:

import math
z = [1.0, 2.0, 3.0]
z_exp = [math.exp(i) for i in z] # z_exp=[2.72, 7.39, 20.09] 
sum_z_exp = sum(z_exp) # 30.19 
softmax = [round(i / sum_z_exp, 2) for i in z_exp] # softmax=[0.09, 0.24, 0.67]

信息熵(Entropy)

在信息论里面,熵是对不确定性的测量。熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少[2]。通俗来说,事件发生的概率越高(P越大),则该事件暗含的信息量越少,熵越小(H越小),事件不确定性越低。

熵用于度量系统的混乱程度,熵越大(H越大),系统越混乱,不确定性越大(P越小)。

H ( X ) = − ∑ i P ( x i ) log ⁡ P ( x i ) , \mathrm{H}(X) =- \sum_{i} \mathrm{P}(x_i) \log \mathrm{P}(x_i), H(X)=iP(xi)logP(xi),

直观解释[3]:
在这里插入图片描述

eg:

import numpy as npT1 = np.array([0.33, 0.33, 0.34])  # 事件1
T2 = np.array([0.15, 0.7, 0.15])   # 事件2H1 = -np.sum(T1 * np.log(T1)) # 1.0985
H2 = -np.sum(T2 * np.log(T2)) # 0.8188

可以看出,T1概率分布更均匀,熵更大(不确定性更高);T2概率分布更集中,熵更小(不确定性更低)。

2. 熵最小化

下面从熵最小化的梯度角度理解其作用。首先,定义softmax函数和信息熵H(x):

Softmax:
p k = e z k ∑ j = 1 K e z j , k = 1 , 2 , … , K p_k = \frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}}, \quad k = 1, 2, \ldots, K pk=j=1Kezjezk,k=1,2,,K
Entropy:
H = − ∑ k = 1 K p k log ⁡ p k H = -\sum_{k=1}^K p_k \log p_k H=k=1Kpklogpk

对 logits z m z_m zm 的偏导
∂ H ∂ z m = − ∑ k = 1 K ∂ ( p k log ⁡ p k ) ∂ z m = − ∑ k = 1 K ( ∂ p k ∂ z m ∗ log ⁡ p k + p k ∗ ∂ log ⁡ p k ∂ z m ) = − ∑ k = 1 K ( ∂ p k ∂ z m ∗ log ⁡ p k + ∂ p k ∂ z m ) = − ∑ k = 1 K ∂ p k ∂ z m ( log ⁡ p k + 1 ) = − ∂ p m ∂ z m ( log ⁡ p m + 1 ) − ∑ k = 1 , k ≠ m K ∂ p k ∂ z m ( log ⁡ p k + 1 ) , 第一项 k = m ,第二项 k ≠ m \begin{align*} \frac{\partial H}{\partial z_m} &= -\sum_{k=1}^K \frac{\partial(p_k \log p_k)}{\partial z_m} \\ &= -\sum_{k=1}^K \left(\frac{\partial p_k}{\partial z_m}*\log p_k + p_k*\frac{\partial \log p_k}{\partial z_m} \right) \\ &= -\sum_{k=1}^K \left(\frac{\partial p_k}{\partial z_m} * \log p_k +\frac{\partial p_k}{\partial z_m} \right) \\ &= -\sum_{k=1}^K \frac{\partial p_k}{\partial z_m} \left(\log p_k + 1 \right) \\ &= -\frac{\partial p_m}{\partial z_m} \left(\log p_m + 1 \right)-\sum_{k=1,k\neq m}^K \frac{\partial p_k}{\partial z_m} \left(\log p_k + 1 \right) \text{, 第一项$k=m$,第二项$k\neq m$} \\ \end{align*} zmH=k=1Kzm(pklogpk)=k=1K(zmpklogpk+pkzmlogpk)=k=1K(zmpklogpk+zmpk)=k=1Kzmpk(logpk+1)=zmpm(logpm+1)k=1,k=mKzmpk(logpk+1)第一项k=m,第二项k=m
其中,Softmax的偏导数有两种情况:

① 当 k = m k=m k=m时, p m = e z m / ∑ j = 1 K e z j p_m=e^{z_m}/\sum_{j=1}^{K}e^{z_j} pm=ezm/j=1Kezj
∂ p k ∂ z m = e z m ∗ ∑ j = 1 K e z j − e z m ∗ e z m ( ∑ j = 1 K e z j ) 2 = e z m ∑ j = 1 K e z j × ∑ j = 1 K e z j − e z m ∑ j = 1 K e z j = e z m ∑ j = 1 K e z j × ( 1 − e z m ∑ j = 1 K e z j ) = p m ( 1 − p m ) \begin{align*} \frac{\partial p_k}{\partial z_m} &= \frac{e^{z_m}*\sum_{j=1}^{K}e^{z_j}-e^{z_m}*e^{z_m}}{(\sum_{j=1}^{K}e^{z_j})^2} \\ &= \frac{e^{z_m}}{\sum_{j=1}^{K}e^{z_j}} \times \frac{\sum_{j=1}^{K}e^{z_j}-e^{z_m}}{\sum_{j=1}^{K}e^{z_j}} \\ &= \frac{e^{z_m}}{\sum_{j=1}^{K}e^{z_j}} \times \left(1-\frac{e^{z_m}}{\sum_{j=1}^{K}e^{z_j}}\right) \\ &= p_m(1-p_m) \end{align*} zmpk=(j=1Kezj)2ezmj=1Kezjezmezm=j=1Kezjezm×j=1Kezjj=1Kezjezm=j=1Kezjezm×(1j=1Kezjezm)=pm(1pm)
② 当 k ≠ m k\neq m k=m时, p k = e z k / ∑ j = 1 K e z j p_k=e^{z_k}/\sum_{j=1}^{K}e^{z_j} pk=ezk/j=1Kezj
∂ p k ∂ z m = 0 ∗ ∑ j = 1 K e z j − e z k ∗ e z m ( ∑ j = 1 K e z j ) 2 = − e z k ∑ j = 1 K e z j × e z m ∑ j = 1 K e z j = − p k p m \begin{align*} \frac{\partial p_k}{\partial z_m} &= \frac{0*\sum_{j=1}^{K}e^{z_j}-e^{z_k}*e^{z_m}}{(\sum_{j=1}^{K}e^{z_j})^2} \\ &= -\frac{e^{z_k}}{\sum_{j=1}^{K}e^{z_j}} \times \frac{e^{z_m}}{\sum_{j=1}^{K}e^{z_j}} \\ &= -p_kp_m \end{align*} zmpk=(j=1Kezj)20j=1Kezjezkezm=j=1Kezjezk×j=1Kezjezm=pkpm
即,Softmax的偏导数为:

∂ p k ∂ z m = { p m ( 1 − p m ) if  k = m − p k p m if  k ≠ m \frac{\partial p_k}{\partial z_m} = \begin{cases} p_m(1 - p_m) & \text{if } k = m \\ -p_kp_m & \text{if } k \neq m \end{cases} zmpk={pm(1pm)pkpmif k=mif k=m
将Softmax的偏导数带入上式:
∂ H ∂ z m = − ∂ p m ∂ z m ( log ⁡ p m + 1 ) − ∑ k = 1 , k ≠ m K ∂ p k ∂ z m ( log ⁡ p k + 1 ) , 第一项 k = m ,第二项 k ≠ m = − [ p m ( 1 − p m ) ( log ⁡ p m + 1 ) + ∑ k = 1 , k ≠ m K ( − p k p m ) ( log ⁡ p k + 1 ) ] = − p m [ ( 1 − p m ) ( log ⁡ p m + 1 ) − ∑ k = 1 , k ≠ m K p k ( log ⁡ p k + 1 ) ] = − p m [ log ⁡ p m + 1 − p m log ⁡ p m − p m − ∑ k = 1 , k ≠ m K p k log ⁡ p k − ∑ k = 1 , k ≠ m K p k ] = − p m [ log ⁡ p m + 1 − ∑ k = 1 K p k log ⁡ p k − ∑ k = 1 K p k ] , 其中 ∑ k = 1 K p k = 1 = − p m ( log ⁡ p m − ∑ k = 1 K p k log ⁡ p k ) = − p m ( log ⁡ p m + H ) \begin{align*} \frac{\partial H}{\partial z_m} &= -\frac{\partial p_m}{\partial z_m} \left(\log p_m + 1 \right)-\sum_{k=1,k\neq m}^K \frac{\partial p_k}{\partial z_m} \left(\log p_k + 1 \right) \text{, 第一项$k=m$,第二项$k\neq m$} \\ &= -\left[p_m(1-p_m)(\log p_m+1) + \sum_{k=1,k\neq m}^K (-p_kp_m)(\log p_k+1) \right] \\ &= -p_m\left[(1-p_m)(\log p_m+1) - \sum_{k=1,k\neq m}^K p_k(\log p_k+1) \right] \\ &= -p_m\left[\log p_m+1-p_m\log p_m-p_m - \sum_{k=1,k\neq m}^K p_k\log p_k-\sum_{k=1,k\neq m}^K p_k \right] \\ &= -p_m\left[\log p_m+1 - \sum_{k=1}^K p_k\log p_k-\sum_{k=1}^K p_k \right] \text{, 其中$\sum_{k=1}^K p_k=1$}\\ &= -p_m\left(\log p_m - \sum_{k=1}^K p_k\log p_k \right) \\ &= -p_m\left(\log p_m + H \right) \\ \end{align*} zmH=zmpm(logpm+1)k=1,k=mKzmpk(logpk+1)第一项k=m,第二项k=m= pm(1pm)(logpm+1)+k=1,k=mK(pkpm)(logpk+1) =pm (1pm)(logpm+1)k=1,k=mKpk(logpk+1) =pm logpm+1pmlogpmpmk=1,k=mKpklogpkk=1,k=mKpk =pm[logpm+1k=1Kpklogpkk=1Kpk]其中k=1Kpk=1=pm(logpmk=1Kpklogpk)=pm(logpm+H)
即,
∂ H ∂ z m = − p m ( log ⁡ p m + H ) \boxed{\frac{\partial H}{\partial z_m} = -p_m\left(\log p_m + H \right) } zmH=pm(logpm+H)

参数更新
z m : = z m − η ∗ ∂ H ∂ z m = z m + η ∗ p m ( log ⁡ p m + H ) \boxed{z_m:=z_m-\eta*\frac{\partial H}{\partial z_m}=z_m+\eta*p_m(\log p_m + H)} zm:=zmηzmH=zm+ηpm(logpm+H)

  • 当模型预测的确定性很大(概率值大、熵很小),即 ( log ⁡ p m + H ) → 0 (\log p_m+H)\rightarrow 0 (logpm+H)0,则梯度很小,参数 z m z_m zm微调(更新幅度小)。
  • 当模型预测的确定性很小(概率值小、熵很大),即 ( log ⁡ p m + H ) > 0 (\log p_m+H)> 0 (logpm+H)>0,则梯度较大,增大模型预测输出 z m z_m zm的数值,以提升预测的确定性。

3. 案例理解

下面采用一个简单的案例,观察熵最小化对参数更新的影响。

import numpy as np
import matplotlib.pyplot as plteta = 0.5    # 学习率
n_iter = 20  # 增加迭代次数
z = np.array([1.0, 0.8, 0.5], dtype=np.float32) # 初始logits# 存储历史记录
history = {'z': [z.copy()], 'p': [], 'entropy': [], 'max_prob': []}for i in range(n_iter):# 计算梯度:dH/dzz_exp = np.exp(z)p = z_exp / z_exp.sum()log_p = np.log(p + 1e-8)H = -np.sum(p * log_p)grad_z = -p * (log_p + H)# 更新:z = z - eta*grad_zz = z - eta * grad_z# 记录历史history['z'].append(z.copy())history['p'].append(p.copy())history['entropy'].append(H)history['max_prob'].append(p.max())# 可视化结果
plt.figure(figsize=(15, 10))# 1. 概率变化
plt.subplot(2, 2, 1)
for i in range(3):probs = [p[i] for p in history['p']] # plt.plot(probs, label=f'Class {i+1}')
plt.title('Class Probabilities')
plt.xlabel('Epoch')
plt.ylabel('Probability')
plt.legend()
plt.grid(True)# 2. 熵变化
plt.subplot(2, 2, 2)
plt.plot(history['entropy'], color='r')
plt.title('Entropy Minimization')
plt.xlabel('Epoch')
plt.ylabel('H(p)')
plt.grid(True)# 3. 最大概率变化
plt.subplot(2, 2, 3)
plt.plot(history['max_prob'])
plt.title('Max Probability')
plt.xlabel('Epoch')
plt.ylabel('max(p)')
plt.grid(True)# 4. Logits变化
plt.subplot(2, 2, 4)
for i in range(3):logits = [z[i] for z in history['z'][:-1]]plt.plot(logits, label=f'z_{i+1}')
plt.title('Logits Evolution')
plt.xlabel('Epoch')
plt.ylabel('Logit Value')
plt.legend()
plt.grid(True)plt.tight_layout()
plt.show()

结果:

在这里插入图片描述

4. 总结

  • 熵最小化,迫使主导类的概率进一步增大,次要类概率进一步降低,进而降低模型的预测不确定性;
  • 在无监督DA中,熵最小化使模型对未标记样本的预测变得更加确定,从而实现了降低预测熵的目的;
  • 相反,如果我们想增大模型预测的不确定性,提升多样性,就可以最大化熵。

进一步学习

  • Grandvalet, Yves, and Yoshua Bengio. “Semi-supervised learning by entropy minimization.” Advances in neural information processing systems 17 (2004).
  • Mingsheng Long, Han Zhu, Jianmin Wang, and Michael I Jordan. Unsupervised domain adaptation with residual transfer networks. In Advances in Neural Information Processing Systems, pages 136–144, 2016.
  • Zhang, Jing, et al. “Importance weighted adversarial nets for partial domain adaptation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
  • Zhang, Yabin, et al. “Domain-symmetric networks for adversarial domain adaptation.” Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019.
  • Wu, Xiaofu, et al. “Entropy minimization vs. diversity maximization for domain adaptation.” arXiv preprint arXiv:2002.01690 (2020).

参考

[1] Softmax函数 - 维基百科,自由的百科全书

[2] 熵 (信息论) - 维基百科,自由的百科全书

[3] 熵正则(pytorch实现)_熵正则化-CSDN博客

[4] 熵正则化(entropy regularization) - 知乎

[5] 推导一下最小化信息熵的作用 - 没有名字啊的文章 - 知乎


http://www.hkcw.cn/article/HbhYAKbeaw.shtml

相关文章

jmeter:登录接口的token用于下一个接口

1、创建线程组 -》 添加 登录请求,在登录请求里面添加【正则表达式】 正则表达式提取器 引用名称:newtoken 正则表达式:token"."(*?) 模板: 1 1 1 匹配数字(0代表随机):0 缺省值:null 2、创建…

Leetcode 2005. 斐波那契树的移除子树游戏

1.题目基本信息 1.1.题目描述 斐波那契树是一种按这种规则函数 order(n) 创建的二叉树: order(0) 是空树。 order(1) 是一棵只有一个节点的二叉树。 order(n) 是一棵根节点的左子树为 order(n - 2) 、右子树为 order(n - 1) 的二叉树。 Alice 和 Bob 在玩一种…

类 Excel 数据填报

类 Excel 填报模式,满足用户 Excel 使用习惯 数据填报,可作为独立的功能模块,用于管理业务流程、汇总采集数据,以及开发各类数据报送系统,因此,对于报表工具而言,其典型场景之一就是利用报表模…

TreeMap、TreeSet和HashMap、HashSet

目录 一、TreeMap&TreeSet 1.数据结构: 2.时间复杂度: 3.键/元素: 4.TreeMap基本操作: (与 HashMap 类似,但 put, get, remove 等操作会根据键的顺序进行): 5.TreeMap遍历: 6.TreeSet基本操作 (与 HashSet 类…

电工基础【2】自锁、互锁、正反转电路

04 自锁、正反转电路 我们讲一下这个自锁和正反转。 自锁电路图示例图 加了一个这个 KM1 自锁。加了 KM1 的辅助触头,它怎么实现呢?它怎么就自锁了呢?没加它的时候为什么是点动?加它为什么自锁? 讲解一下。首先我们…

【计算机网络】传输层UDP协议

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹: 【计算机网络】应用层协议Http——构建Http服务服务器 🔖流水不争,争的是滔滔不…

day40python打卡

知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练代码…

2022-2023-2-移动机器人设计与实践-期末B

2022-2023-2-移动机器人设计与实践-期末A-CSDN博客 本文介绍了《移动机器人设计与实践》课程期末考试试卷B卷的内容与参考答案。试卷包含分析题、设计题、实践题和编程题四部分,总分100分。分析题考察学生对空中、水面和地上三种移动机器人模型运动机制及应用场景的…

DM8部分函数的功能分别举例说明

DM8部分函数的功能分别举例说明 1 环境说明2 函数功能使用示例2.1 AVG OVER2.2 COUNT OVER2.3 MIN OVER,MAX OVER,SUM OVER2.4 DENSE_RANK2.5 ROW_NUMBER2.6 FIRST2.7 LAG2.8 WM_CONCAT 3 更多达梦数据库全方位指南:安装 优化 与实战教程 1 环境说明 Cp…

大语言模型 24 - MCP 自动操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory

点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…

【多线程初阶】线程状态 线程安全

文章目录 1.线程状态线程的状态及状态转移 2.多线程带来的风险 - 线程安全(重点)线程安全问题产生的原因如何解决线程安全问题 1.线程状态 EE的第一篇总览中有提到过 进程的状态 1.就绪 2.阻塞 这都是从操作系统的视角看待的 Java线程也是对操作系统线程的封装,针对状态这里…

Python 序列的修改、散列和切 片(Vector类第4版:散列和快速等值 测试)

Vector类第4版:散列和快速等值测试 我们要再次实现__hash__ 方法。加上现有的__eq__ 方法,这会把 Vector 实例变成可散列的对象。 示例 9-8 中的__hash__ 方法简单地计算 hash(self.x) ^ hash(self.y)。这一次,我们要使用^(异或…

ai姿势项目

链接:https://pan.baidu.com/s/1dGSt7wEk8w6O7zlgme3CUQ?pwd=x60y 提取码:x60y --来自百度网盘超级会员V2的分享 配置环境 conda create -n 环境名称 python=3.8conda activate 环境名称 如果你运行程序的话会报错 ModuleNotFoundError: No module named mediapipe 进…

LoRA:高效微调预训练模型的利器

LoRA(Low-Rank Adaptation) 的思想:冻结预训练模型权重,将可训练的低秩分解矩阵注入到Transformer架构的每一层(也可单独配置某一层)中, 从而大大减少在下游任务的可训练参数量。 核心原理 对于预训练权重矩阵 ,LoRA限制了其更新…

越界检测算法AI智能分析网关V4打造多场景化的应用解决方案

一、方案概述 随着社会发展,传统安防系统在复杂环境下暴露出误报率高、响应慢等短板。AI智能分析网关V4依托先进算法与强大算力,实现周界区域精准监测与智能分析,显著提升入侵防范效能。本方案通过部署该网关及其越界检测功能,为…

使用SkiaSharp打造专业级12导联心电图查看器:性能与美观兼具的可视化实践

前言 欢迎关注dotnet研习社,今天我们研究的Google Skia图形库的.NET绑定SkiaSharp图形库。 在医疗软件开发领域,心电图(ECG)数据的可视化是一个既有挑战性又极其重要的任务。作为开发者,我们需要创建既专业又直观的界面来展示复杂的生物医学…

24位高精度数据采集卡NET8860音频振动信号采集监测满足自动化测试应用现场的多样化需求

NET8860 高分辨率数据采集卡技术解析 阿尔泰科技的NET8860是一款高性能数据采集卡,具备8路同步模拟输入通道和24bit分辨率,适用于高精度信号采集场景。其输入量程覆盖10V、5V、2V、1V,采样速率高达256KS/s,能够满足多种工业与科研…

2025年05月30日Github流行趋势

项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:13040今日star数:1864项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

PCB设计实践(三十一)PCB设计中机械孔的合理设计与应用指南

一、机械孔的基本概念与分类 机械孔是PCB设计中用于实现机械固定、结构支撑、散热及电气连接的关键结构元件,其分类基于功能特性、制造工艺和应用场景的差异,主要分为以下几类: 1. 金属化机械孔 通过电镀工艺在孔内壁形成导电层,…

TC/BC/OC P2P/E2E有啥区别?-PTP协议基础概念介绍

前言 时间同步网络中的每个节点,都被称为时钟,PTP协议定义了三种基本时钟节点。本文将介绍这三种类型的时钟,以及gPTP在同步机制上与其他机制的区别 本系列文章将由浅入深的带你了解gPTP,欢迎关注 时钟类型 在PTP中我们将各节…