【发布时间】:2010-10-05 08:31:49
【问题描述】:
我最近在我的大学开设了一门数据压缩课程。然而,我发现“熵”这个词在计算机科学中的使用相当含糊。据我所知,它大致可以转化为系统或结构的“随机性”。
计算机科学“熵”的正确定义是什么?
【问题讨论】:
-
熵正在打开你的干衣机,但没有找到里面已经为你折叠好的衣服
标签: computer-science information-theory entropy data-compression
我最近在我的大学开设了一门数据压缩课程。然而,我发现“熵”这个词在计算机科学中的使用相当含糊。据我所知,它大致可以转化为系统或结构的“随机性”。
计算机科学“熵”的正确定义是什么?
【问题讨论】:
标签: computer-science information-theory entropy data-compression
熵有不同的含义:
在计算中,熵是 由操作收集的随机性 系统或应用程序用于 密码学或其他用途 需要随机数据。这种随机性 通常是从硬件收集的 来源,无论是预先存在的,如 作为鼠标移动或特别 提供随机生成器。
在信息论中,熵是 相关不确定性的测量 带有随机变量。术语由 在这种情况下,它本身通常是指 香农熵 量化,某种意义上 期望值,信息 包含在消息中,通常在 位等单位。等效地, 香农熵是衡量 平均信息内容之一是 当一个人不知道时失踪 随机变量的值
数据压缩中的熵
数据压缩中的熵可能表示您输入到压缩算法的数据的随机性。熵越大,压缩比越小。这意味着文本越随机,您可以压缩的越少。
香农的熵表示 最好的绝对限制 任何无损压缩 沟通:将消息视为 编码为独立的序列 和同分布随机 变量,香农的源代码 定理表明,在极限情况下, 最短的平均长度 编码的可能表示 给定字母表中的消息是他们的 熵除以对数 目标中的符号数量 字母表。
【讨论】:
在 Andrew Hunt 和 David Thomas 所著的优秀著作 The Pragmatic Programmer: From Journeyman to Master 的第 1 章中可以找到我最喜欢的定义,该定义更加注重实际:
软件熵
虽然软件开发是免疫的 从几乎所有的物理定律,熵 打击我们。熵是一个术语 物理学是指数量 系统中的“混乱”。很遗憾, 热力学定律保证 宇宙中的熵趋于 朝着最大值。乱时 软件、程序员的增加 称之为“软件腐烂”。
有很多因素可以 导致软件腐烂。最多 重要的似乎是 心理学或文化在工作 项目。即使你是一个团队 一、你项目的心理可以 一件很微妙的事情。尽管 最好的计划和最好的人,一个 项目仍然会经历破产和 在其生命周期内腐烂。然而在那里 是其他项目,尽管 巨大的困难和不断的 挫折,成功对抗大自然的 倾向于混乱并设法 效果很好。
...
...
破窗户。
一扇破碎的窗户,没有修好 任何相当长的时间, 灌输给当地居民 建立一种被遗弃的感觉——一种 感觉那些不存在的力量 关心建筑物。所以另一个 窗户坏了。人们开始 乱扔垃圾。涂鸦出现。严肃的 结构损坏开始。在一个 时间相对较短, 建筑物损坏超出 业主修复它的愿望,以及 被遗弃的感觉成为现实。
“破窗论”有 启发了新的警察部门 约克等主要城市要破解 放下小东西,以 把大的东西挡在外面。有用: 守在破碎的窗户上, 涂鸦和其他小违规行为 已降低严重犯罪水平。
提示 4
不要忍受破碎的窗户
不要留下“破窗户”(坏 设计,错误的决定,或糟糕的 代码)未修复。尽快修复每一个 因为它被发现。如果有 没有足够的时间来正确修复它, 然后登上它。也许你可以 注释掉有问题的代码,或者 显示“未实施”消息, 或替代虚拟数据。拿 一些防止进一步损害的措施 并表明您处于领先地位 情况。
文字取自:http://pragprog.com/the-pragmatic-programmer/extracts/software-entropy
【讨论】:
我总是遇到香农熵意义上的熵。
来自http://en.wikipedia.org/wiki/Information_entropy:
在信息论中,熵是与随机变量相关的不确定性的度量。在这种情况下,该术语本身通常指的是香农熵,它在期望值的意义上量化了消息中包含的信息,通常以比特等单位为单位。等价地,香农熵是一个人在不知道随机变量的值时所丢失的平均信息内容的量度。
【讨论】:
(来源:mit.edu)
信息论的概念 熵是 物理概念。有很多方法 来描述熵。这是一个措施 随机性的随机性 多变的。这也是衡量 信息量随机 可变或随机过程 包含。也是一个下限 消息的数量 压缩。最后是 是/否问题的平均数量 需要询问随机 实体来确定其价值。
概率计算示例应用程序中的熵方程:
它是一个 rv 的所有值的总和 该值的概率乘以 该概率的日志(即 p(x)logp(x))。这个方程可以 源于第一原则 信息的属性。
【讨论】:
就压缩和信息论而言,源的熵是来自源的符号可以传达的平均信息量(以比特为单位)。通俗地说,一个符号越不可能出现,它的出现带来的惊喜就越大。
如果您的来源有两个符号,例如 A 和 B,并且它们的可能性相同,则每个符号传达相同数量的信息(一位)。具有四个同等可能符号的源每个符号传达两个位。
举个更有趣的例子,如果您的来源有三个符号,A、B 和 C,其中前两个的可能性是第三个的两倍,那么第三个更令人惊讶,但也不太可能。该源的净熵为 1.52,计算如下。
您将熵计算为“平均惊喜”,其中每个符号的“惊喜”是其概率乘以概率的负二进制对数:
binary
symbol weight probability log surprise
A 2 0.4 -1.32 0.53
B 2 0.4 -1.32 0.53
C 1 0.2 -2.32 0.46
total 5 1.0 1.52
(当然)使用二进制日志的负数,因为值在 0 和 1(不包括)之间的日志是负数。
【讨论】:
这是信息论中熵的一个很好的替代解释。
熵是衡量制作过程中所涉及的不确定性的量度 预测。
我们也可以将熵描述为,如果我们在做出初步预测后得到结果,我们会有多么惊讶。
假设我们有一个弯曲的硬币,它在 99% 的情况下会出现正面,而在 1% 的情况下会出现反面。由于只有百分之一的机会得到尾巴,如果我们真的得到尾巴,我们会非常惊讶。另一方面,如果我们得到正面,也不会太令人惊讶,因为我们已经有 99% 的机会获得正面。
假设我们有一个名为Surprise(x) 的函数,它会给我们每个结果带来的惊喜量;然后我们可以平均概率分布上的惊喜量。这个平均惊喜量也可以用来衡量我们的不确定性。这种不确定性称为熵。
更新:
我制作了这个可视化来描述动物图像分类器模型(机器学习)中预测类别的熵和置信度之间的关系。此处,熵用作分类器模型对其预测的信心程度的度量。
该图显示了来自两个分类器模型的预测熵值的比较。右图以相对较高的置信度(较低的熵)预测马的图像,而左边的分类器无法真正区分(较高的熵)它是马、牛还是长颈鹿。
【讨论】:
熵这个词可以用一句话来定义:
想象一下宇宙膨胀的例子:从一开始,所有物质都聚集在大爆炸之前的一个小点上,所以我们可以用“所有物质都在一个点内”来描述这个系统。虽然今天需要更多的信息来描述系统(即宇宙),但需要描述所有行星的位置、它们的运动、它们上面的东西等等。
就信息论而言,该定义也适用:例如:添加到密码(系统)中的字母越多,描述密码所需的信息就越多。然后你可以用不同的单位来测量它,例如位或字符,比如
“hello” = 5 个字符熵 = 40 位熵(如果 charsize 为 8 位)。
由此还得出,您拥有的信息越多,您可以安排这些信息的方式就越多。如果您有 40 位,则可以有 2^40 种不同的方式来安排它们。如果我们在这里谈论密码,那么信息(位)的可能排列越多,破解所需的时间就越长(暴力破解或字典攻击)。
【讨论】:
简单地说,熵定义了随机性。它更像是不可预测的事情。用更专业的术语来说,“在计算中,熵是操作系统或应用程序收集的随机性,用于密码学或其他需要随机数据的用途。这种随机性通常是从硬件来源收集的,要么是预先存在的,例如鼠标移动,要么是专门提供的随机性生成器。”由维基百科定义。
现在可以很容易地得出关于文件的熵的含义,作为对文件中字节的无序程度的度量。有多种单位用于定义熵,例如 nat、shannon 或 hartley。嗯,最常用的单位是香农。根据香农算法,文件的熵必须进入的值范围是 0 到 8。因此,当熵值为零时,可以说结果是确定的。相反,当熵值为 8 时,结果是最不可预测的。 Shannon给出的衡量事件结果随机性的公式是:
Entropy = ∑ pi log(1/pi)
其中 i 是概率为 pi 的事件。
这个等式的结果总是在 0 到 8 之间。
欲了解更多信息,请访问链接:https://www.talentcookie.com/2016/02/file-entropy-in-malware-analysis/
【讨论】:
对于病毒研究人员来说,熵就像一个哈希码。您获得的熵越少,这意味着它可能是加密或压缩代码,可能是病毒。
标准二进制文件的熵比压缩或加密的更高。
【讨论】:
熵在计算机科学中通常具有多种含义。这取决于上下文。在安全性中,熵意味着您放置了多少随机性,例如,当您生成私钥时,许多应用程序要求您移动鼠标以生成熵。这通过获取随机性的“人”元素来生成熵,并将其添加到生成密钥的散列过程中。
现在还有一个熵软件工程的定义。这个定义代表过时的代码,或者已经有许多开发人员编写的代码。通常用于参考何时重构您的软件项目。 “这个项目的代码有大量的熵,因为许多维护它的人目前不在项目中”。
这是我记得的第三个用法示例。在模拟退火的主题中(就计算机科学而言),熵被描述为在算法评估期间发生了多少衰减。
我想回答你的问题,除了你可以在字典中找到的那些之外,没有“熵”这个词的具体定义。计算机科学如何倾向于应用该术语取决于所使用术语的上下文以及它所应用于的内容。
【讨论】:
利用熵很容易做出大事。在我看来,这是一个漂亮的simple and useful concept。
基本上,它量化了平均而言,您将从事件中学到什么,例如掷硬币、执行分支指令或索引数组。
就像一个搜索算法中间的比较操作有一定概率P取一个分支,1-P取另一个分支。
假设 P 是 1/2,因为它在二分查找中。那么如果你选择那个分支,你知道的比以前多 1 位,因为 log(2/1),以 2 为底,是 1。另一方面,如果你选择另一个分支,你也会学到 1 位。
要获得您将学习的平均信息量,请将您在第一个分支上学到的知识乘以您选择该分支的概率,再加上您在第二个分支上学到的知识乘以该分支的概率。
1/2 乘以 1 位,加上 1/2 乘以 1 位,就是 1/2 位加上 1/2 位,或总熵 1 位。这就是您可以期望从该决定中平均学到的东西。
另一方面,假设您在一个包含 1024 个条目的表中进行线性搜索。
在第一次 == 测试中,YES 的概率为 1/1024,因此在该决定中 YES 的熵为
1/1024 times log(1024/1)
或 1/1024 * 10 = 大约 1/100 位。
因此,如果答案是肯定的,您将学习 10 位,但概率约为千分之一。
另一方面,“否”的可能性更大。它的熵是
1023/1024 * log(1024/1023)
或大约 1 倍大致为零 = 大约为零。
将两者相加,平均而言,您将了解该决定的 1/100。
这就是线性搜索慢的原因。每个决策的熵(您可以期望学习多少)太小,因为您必须学习 10 位才能在表中找到条目。
【讨论】:
计算机科学中的熵通常是指一串位的随机性。 下面的问题是关于使其精确:
【讨论】:
简单来说,如果你知道语言中符号的概率,就可以计算出语言中符号的平均信息量。
或者
一种语言的熵是该语言中一个平均符号的信息内容量度
考虑一个公平的硬币;
有两个符号,每个符号的概率为 1/2 所以熵计算为
h =-(1/2*log1/2 +1/2*log1/2)=1
【讨论】:
熵是指偶尔根据客户要求对软件进行改造的程度,因此改造它以满足客户要求的成本变得最大。
【讨论】:
我听说人们滥用熵 w.r.t CS 的热力学定义。
例如在这个系统中,熵肯定在增加。
他们的意思是这段代码越来越糟糕!
【讨论】: