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

信息熵|atttion矩阵的注意力熵

显著图可以看作是模型的注意力图,它标识了模型对输入图像某些区域的关注程度。我们使用 blob 区域(连通的显著区域)来检测模型关注的部分,然后计算这些区域的概率分布,再通过熵来衡量这些区域的“信息量”或“分散度”。

举个简单的例子:

Step 1: 假设有一个 4x4 的注意力图 x
x = [
    [0.1, 0.2, 0.4, 0.1],
    [0.1, 0.5, 0.3, 0.2],
    [0.7, 0.6, 0.2, 0.1],
    [0.1, 0.3, 0.4, 0.2]
]
Step 2: 计算均值 m

对于每个像素,我们可以计算注意力图 x 的均值。假设均值为:

m = mean(x) = 0.3
Step 3: 通过均值识别显著区域

我们认为那些大于均值 m 的区域更“显著”,所以创建一个二值掩码 B_mask

B_mask = [
    [0, 0, 1, 0],
    [0, 1, 1, 0],
    [1, 1, 0, 0],
    [0, 1, 1, 0]
]

 这张 4x4 的掩码图表示了显著区域的连通分量(blob),比如第 (0,2) 位置的 1 表示这个像素比均值大,因此是一个显著区域的一部分。

Step 4: 计算 blob 中的激活值和总值

现在我们需要计算这些 blob 的激活值。假设我们将 x 的显著区域重新计算(即通过 relu 操作),得到:

x_reactivated = [
    [0, 0, 0.1, 0],
    [0, 0.2, 0, 0],
    [0.4, 0.3, 0, 0],
    [0, 0.1, 0.2, 0]
]

然后我们计算每个 blob 的总激活值 p_u 和整个显著区域的总值 B

  • p_u 是每个连通区域内的激活值和掩码值相乘再求和。
  • B 是整个显著区域的总激活值。
假设:
  • p_u = [0.1, 0.2, 0.3, 0.4] 代表四个 blob 的激活值。
  • B = 1.0 是所有显著区域的总激活值。
Step 5: 计算每个 blob 的概率 p_n

每个 blob 的激活值 p_u 除以总值 B,得到它们的概率 p_n

p_n = p_u / B = [0.1 / 1.0, 0.2 / 1.0, 0.3 / 1.0, 0.4 / 1.0]
     = [0.1, 0.2, 0.3, 0.4]
Step 6: 计算熵 H

根据熵的公式:

H = - Σ (p_n * log(p_n))

我们将这些概率代入公式计算熵:

H = - (0.1 * log(0.1) + 0.2 * log(0.2) + 0.3 * log(0.3) + 0.4 * log(0.4))

逐步计算:

H ≈ - (0.1 * -2.3 + 0.2 * -1.61 + 0.3 * -1.2 + 0.4 * -0.92)
H ≈ - (-0.23 - 0.322 - 0.36 - 0.368)
H ≈ 1.28
Step 7: 计算损失

最后,将熵值除以样本数和注意力头的数量来计算最终损失。这个熵值代表模型在显著区域的分散度,值越高说明模型的关注越分散,值越低则说明模型更集中地关注特定区域

总结:

这个示例展示了如何通过注意力图计算显著区域的熵值,并以此作为损失函数的一部分来优化模型。高熵表示模型对多个区域的注意力分散,低熵则表示模型对少数区域的关注更集中。在实际应用中,目标是通过最小化熵来鼓励模型专注于特定的显著区域。


http://www.kler.cn/a/295028.html

相关文章:

  • Java反射原理及其性能优化
  • 【Python】图片处理
  • Jmeter5.X性能测试
  • 【自学笔记】神经网络(1)
  • MySQL表转移数据的三种方式
  • xrc的比赛
  • 设计并用Java实现一个简易的规则引擎
  • Python | Leetcode Python题解之第392题判断子序列
  • 【leetcode详解】爬楼梯:DP入门典例(附DP通用思路 同类进阶练习)
  • 使用Protocol Buffers传输数据
  • 在vscode中用virtual env的方法
  • git如何灵活切换本地账号对应远程github的两个账号
  • 代码随想录:279. 完全平方数
  • 如何在Selenium中使用Chrome进行网络限速
  • ComfyUI+Krea免费利用AI制作网站萌宠IP,五步搞定制作AI萌宠
  • React 响应事件
  • 【Godot4.3】多边形的斜线填充效果基础实现
  • 在Ubuntu 20.04上安装Nginx的方法
  • 懒人笔记-opencv4.8.0篇
  • 【详解 Java 注解】
  • 一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)
  • 分数阶微积分MATLAB计算
  • 将你的github仓库设置为web代理
  • Java零基础-如何在分布式系统中进行日志管理?
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备
  • Vulnhub:Dr4g0n b4ll 1