基于熵的不确定性预测 (基于熵的不确定采样)
译者|朱先忠
审校|重楼
在剑桥大学负责神经成像和人工智能钻研迷信家时期,我面临着经常使用最新的深度学习技术,尤其是nnU,在复杂的大脑数据集上启动图像宰割的应战。在这项上班中,我留意到存在一个清楚的差距:对不确定性预计的漠视!但是,不确定性关于牢靠的决策却是至关关键的。
在深化钻研无关细节之前,您可以轻易检查我的存储库,其中蕴含本文中讨论的一切代码片段。
不确定性在图像宰割中的关键性
在计算机视觉和机器学习畛域,图像宰割是一个外围疑问。无论是在医学成像、智能驾驶汽车还是机器人畛域,准确的宰割关于有效的决策至关关键。但是,一个经常被漠视的方面是与这些宰割关系的不确定性的权衡。
为什么我们要关心图像宰割中的不确定性?
在许多实践运行中,不正确的宰割或许会造成可怕的结果。例如,假设一辆智能驾驶汽车误认了一个物体,或许医学成像系统失误地标志了一个肿瘤,结果或许是劫难性的。不确定性预计为我们提供了一个权衡模型对其预测的确定度的目的,从而做出更理智的决策。
我们还可以经常使用熵作为不确定性的度量来改良我们神经网络的学习。这一畛域被称为被动学习。无关这一想法的更多的细节将在下一篇文章中讨论,不过关键想法还是确定模型最不确定的区域,以便将重点放在这些区域上。例如,我们可以让卷积神经网络(CNN)对大脑启动医学图像宰割,但对患有肿瘤的受试者体现十分差。而后我们可以集中精神取得更多这种类别的标签。
了解熵概念
熵(Entropy)是从热力学和消息论中借来的一个概念,它量化了系统中的不确定性或随机性。在机器学习的背景下,熵可以用来测量模型预测的不确定性。
在数学上,关于具备概率品质函数P(X)的团圆随机变量X,熵H(X)定义为:
或许在延续的状况下:
熵越高,不确定性就越大;反之亦然。
上方,我们给出一个经典的例子来辅佐充沛把握熵这个概念:
情景1:两面不平均的硬币
构想一下,一枚非平均的硬币,侧面向上的概率为p=0.9,反面向上的概率为1-p=0.1。
于是,它的熵是:
状况2:两面平均的硬币
如今让我们构想一个两面平均的硬币,它的侧面和反面都着地的概率都是p=0.5。于是,其熵为:
熵更大时,这与我们之前所说的分歧,即有:更多的不确定性=更多的熵。
实践上,值得留意的是,p=0.5对应于最大熵:
熵的可视化形容(作者自己自制图像)
从直觉过去看,平均散布对应熵最大的状况。假设每个结果都是雷同或许的,那么这将对应于最大的不确定性。
熵在图像宰割中的成功
为了将其与图像宰割咨询起来,请思索在深度学习中,最终的Softmax层通常提供每个像素的类别概率。可以基于这些Softmax输入来容易地计算每个像素的熵。
但这是如何上班的呢?
当模型对属于特定类别的特定像素十分有信念时,Softmax层对该类别显示出高概率(~1),而对其余类别显示出十分小的概率(~0)。
Softmax图层(十分有信念的情景,作者自制图片)
雷同,当模型不确定时,Softmax输入更平均地散布在多个类别中。
Softmax层的不确定性状况(作者自制图片)
显然,上方的概率结果体现得比拟扩散,假设你还记得的话,这凑近于平均散布的状况,由于模型不可选择哪个类别与像素关系。
假设你能保持浏览到如今,那就太好了!这说明你应该对熵的上班原理有很好的直觉了解了。
案例钻研:医学影像学
接上去,让我们经常使用一个医学成像的实践例子来说明这一点,特意是胎儿的T1大脑扫描的状况。无关这个案例钻研的一切代码和图像都可以在我的Github存储库中找到。
1.用/target=_blankclass=infotextkey>Python编程计算熵
正如我们之前所说,我们正在经常使用神经网络给出的Softmax输入张量。这种方法不依赖于详细的模型,它只经常使用每个类别的概率。
上方,让我们来廓清一些关于我们正在处置的张量的维度的关键内容。
假设经常使用2D图像,则Softmax层的形态应为:
这象征着,关于每个像素(或三维像素),我们都有一个大小为Classes的向量,这样就确定了一个像素属于我们所领有的每个类别的概率。
于是,熵应该是沿着第一维度的计算结果:
defcompute_entropy_4D(tensor):"""计算具无形态(number_of_classes,256256256)的4D张量上的熵。参数:tensor(np.ndarray):形态(number_of_classes,256,256,256)的4D张量。前往值:np.ndarray:形态(256,256,256)的3D张量,相应于每一个像素的熵值。"""#首先,沿着类别坐标轴归一化张量,使其示意概率sum_tensor=np.sum(tensor,axis=0,keepdims=True)tensor_normalized=tensor/sum_tensor#计算熵entropy_elements=-tensor_normalized*np.log2(tensor_normalized+1e-12)#减少一个小数,以防止log(0)entropy=np.sum(entropy_elements,axis=0)entropy=np.transpose(entropy,(2,1,0))total_entropy=np.sum(entropy)returnentropy,total_entropy
2.可视化基于熵的不确定性
如今,让我们在图像宰割的每个切片上经常使用热图来可视化不确定性。
T1扫描(左),宰割(中),熵(右):作者自制图像
让我们看看另一个例子:
T1扫描(左),宰割(中),熵(右):作者自制图像
结果看起来很棒!理想上,我们可以看到这是分歧的,由于高熵区位于形态的轮廓处。这是反常的,由于模型并不真正疑心每个区域两边的点,而是很难发现的边界或轮廓。
做出知情决策
总体来看,本文引见的上述这种不确定性可以经过多种不同的模式经常使用:
关键收获
最后,假设你青睐这篇文章,并且想了解更多的关系消息的话,请检查这个代码仓库:
译者引见
朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机老师,自在编程界老兵一枚。
原文题目:EntropybasedUncertntyPrediction,作者:FrançoisPorcher
揭开“熵”的神秘面纱
混乱?不确定?还是惊讶?
熵的概念起初让人困惑,是因为用这么多词来形容它:无序、不确定、惊讶、不可预测、信息量等。如果你现在对熵还是迷惑不解,那么是时候揭开它神秘的面纱了!
1948年,克劳德-香农在他的论文“A Mathematical Theoty of Communication”首次提出了 信息熵 这个概念。
香农当时在寻找一种能够在 不损失信息 的情况下 高效(率) 的 发送信息 的方式。
上面的介绍可能对你来说不是很明显,我们来根据一些例子来了解高效和无损的发送消息意味着什么。
假设你想从东京给纽约发送一条关于今天东京天气的消息,如下图。
这样效率高吗?
在这种场景下,东京的发送端和纽约的接收端都知道沟通的消息是关于东京的天气,所以像类似于今天、“东京”、“天气”之类的词没必要发送。我们只需要告诉天气的具体情况就可以了。
这样是不是变短了很多?但我们能不能更进一步?
因为目前我们只需要告诉“YES”或NO这种二进制的信息。所以我们需要精确的1位来编码上述信息。0代表“好天气”,1代表“坏天气”。
这样是不是更短了?
是的,在只有 两种可能 的信息(“Fine”和“Not fine”)的情况下,我们完成了对其无损的编码和解码。
但是,我们还想知道是“多云”还是“下雨”更多的信息呢?这样1个bit是没法表达这么多情况的?
那使用2个bits呢?能解决上述问题吗?
这样我们可以表达所有情况了。只需要2 bits便可发送信息。
但是有这么一个问题,:“多云”和“下雨”多属于“坏天气”,这样一来,“坏天气”就 多余 了,让我们去掉它。
所以更改后的编码,第一位表达了“好或者坏”。第二位表达了“多云或者下雨”。
但是如果东京下雪了怎么办?目前我们没法来表达“下雪”?
所以只能再增加一位,来表达“下雨”或者“下雪”之类的天气。
我们把“下雨”的编码做了变化: 11 -> 110,增加了下雪 : 111 ,110和111明显不同,但为什么不用 原来的11 来继续表达“下雨”呢,因为在多个编码连续发送的时候,11易造成歧义,意思可能表达不明确。
举个例子,“下雨”:11,“下雪”:111。那么5-bit的“”既可以解码为“下雨、下雪”,也可以解码为“下雪、下雨”。所以我们用‘110’来编码“下雨”,这样‘’ 编码 “下雨、下雪”,‘编码“下雪、下雨 ”,就不会有歧义。
所以,我们用3-bit来编码时,第一位代表“好或坏”,第二位代表“多云或其他”,第三位代表“下雨或下雪”。
举个例子,“”,代表着“好、多云、下雨、下雪”。“”代表着“下雨、好、多云、下雪”。这样看起来,没有歧义,也无损且足够高效。
实际上,天气的类型不仅是这4种,在此我们只是简化下它。
至此,我们编码成功,但如果我们想知道现在的这种编码形式是不是达到了 最小可能平均编码长度 呢?这样就涉及到了如何计算平均编码长度?
假设我们利用了上述的无损编码从东京发送了很多次天气信息到纽约,然后经过统计,获得了各种天气的概率分布。
接着,我们计算下发送这些信息的 平均字节数 。
(0.6 x 1 bit)+(0.38 x 2 bits)+(0.01 x 3 bits)+(0.01 x 3 bits)=1.42 bits
经过计算,利用上述编码形式的话,每个信息的平均编码需要1.42个bits。上述的公式也表明了,平均字节数依赖于所编码的信息的概率分布。
假设,东京更容易下雨和下雪,那么平均编码长度又会有什么变化?
(0.1 x 1 bit)+(0.1 x 2 bits)+(0.4 x 3 bits)+(0.4 x 3 bits)=2.7 bits
经过计算,我们需要2.7 bits.我们可以通过改变“下雪”和“下雨”的编码,来减小平均编码长度。
(0.1 x 3 bit)+(0.1 x 3bits)+(0.4 x 1 bits)+(0.4 x 2 bits)=1.8 bits
经过计算,1.8 bits,远小于上述的2.7 bits
尽管这种编码产生了较小的平均编码长度,但是我们的代价是失去了先前编码方案中的良好语义性。但是,我们着眼于平均编码长度,不关心编译的语义和解码的难易程度。
至此,我们学会了如何计算平均编码大小,但是怎么样的 编码方案 才能达到 最小平均编码大小 的目的呢?
假设我们知道了天气的概率分布,那么怎么计算对应的最小平均编码长度的编码方案呢?
“下雨”的最我码方案是什么?需要几位?
方案1:我们用1位去编码“下雨”,那么“0”代表“下雨”。为了包含所有情况且不含歧义,至少还需要2位去表达其他信息。
在这用情况下,不是最佳的,因为“好”和“多云”更容易发生,所以我们应该给他们保留1位,来使得平均编码长度更小。用超过1位来编码“下雨”,因为它出现的频率更低。
方案2:用2位编码“下雨”。把“下雨”和“好”做个交换。
但这样还是存在着和方案一相同的问题:用更多的bits去描述更容易出现的类型(如多云,用 3bits来描述)
方案3:用3位编码“下雨”。把“多云”和“下雨”做一交换。这样我们得到了最小平均编码长度。
(0.5 x 1 bit)+(0.25 x 2bits)+(0.125 x 3 bits)+(0.125 x 3 bits)=1.75 bits
方案4:用4位编码“下雨”。这样编码就会变得冗余。所以,用3 bits 编码最合适。但是回顾整个流程,我们经过了 很多次试错 才找到了最终的答案。那有没有其他方法更容易找到答案呢?
那么问题转化为:给定概率分布,是否存在简单的方法来计算无损的平均编码长度的最小值?也就是我们 如何计算熵 ?
假设我们有8种消息类型,且每种都是等可能性发生。那么在不含歧义的情况下,去编码它们需要的最小字节数是多少?
面对八种不同的情况,我们需要多少bits去编码?
1 bit可以编码0或1(2个值)。2 bits可以编码4个值。3 bits可以编码8个值,3 bits = 2x2x2 = 8 (000, 001, 010, 011, 100, 101, 110 and 111)。
如果我们减少位数,那么就会造成歧义。如果增加位数,那么就会造成冗余。实际上,如果我们有N个不同的取值,需要用bits来表达的话,那么只需要
举个例子,
换句话说,如果一个消息类型在N次中发生了1次,那么上述的式子就给出了其最我码长度。假设 P=1/N,则其代表了消息发生的概率,那么上式也可以这么表达:
让我们结果之前的知识,计算最小平均编码长度(以bits为单位),也就是熵:
P(i)是第i个消息类型的概率。 您可能需要坐下来思考这个公式的简洁性和美感。 其实这个公式并没有魔力,我们仅使用 每种消息类型的最我码 大小来计算 平均编码大小 。
继续用上述天气的例子来加深我们的理解。
所以,其最小平均编码长度(也就是熵):
(0.5 x 1 bit)+(0.25 x 2 bits)+(0.125 x 3 bits)+(0.125 x 3 bits)=1.75 bits
熵有很多类比:无序,不确定,惊讶,不可预测,信息量等等。
如果熵很高(平均编码长度很大),则意味着有许多具有小概率的消息类型。因此,每次新消息到达时,与以前的消息类型相比都不同。您可能会将其视为 无序 或 不确定性 或 不可预测性 。
如果某消息类型的概率比其他消息类型小得多,则会出现意外情况,因为平均上来说,你会期望其他更频繁发送(概率更高)的消息类型。
此外, 罕见的消息类型 比更频繁的消息类型具有 更多信息 ,因为它消除了其他可能性并告诉我们更具体的信息。
在天气预报中,发送下雨”(”下雨“”的概率分布为12.5%),我们将概率分布(“好,多云,下雪”)的不确定性降低了87.5%,前提是我们之前没有信息。如果我们发送“好”(50%),我们只会将不确定性降低50%。
如果熵高,则平均编码长度明显是长的,这意味着每个消息倾向于具有更多(特定)信息。同样,这就是高熵与无序,不确定性,惊讶,不可预测性,信息量相关的原因。
低熵意味着我们大多数时候都会收到 更可预测 的信息,这意味着* 更少的无序 , 更少的不确定性 , 更少的惊喜 , 更多的可预测性 和 更少(特定)的信息 。
我希望这些类比不再让你感到困惑。
本文首先介绍了 信息熵 概念的提出,以及如何计算它。
接着以天气的例子说明了如果无损和高效的编码信息,怎么计算 编码长度 ,然后到计算 平均编码长度 。
接着,又经过 多次试错 最后找到了 最小平均编码长度 的编码方案。
然后,怎么快速的找到最小的平均编码长度,也就是让随机过程中的每个事件的编码最小,你的整体肯定会最小。
最后说明了高熵和低熵以为这什么。
通过本文,我们收获了:
参考链接:
熵值法原理
在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越大;信息量越小,不确定性越大,熵也越小。根据熵的特性,我们可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大。
熵值法是指用来判断某个指标的离散程度的数学方法。离散程度越大,对该指标对综合评价的影响越大。可以用熵值判断某个指标的离散程度。
熵值法和熵权法的区别
1、熵值法和熵权法是两种不同的信息熵算法,用于评估数据的随机性和不确定性。
2、熵值法是一种统计学方法,用于评估一个数据集的信息熵值。它基于概率论,通过计算数据集中每一项数据的熵值来评估数据的随机性和不确定性。
3、熵权法是一种决策理论方法,用于评估数据对决策的影响。它通过对数据的不确定性、随机性进行权值评估,以决定该数据对决策的重要程度。
简而言之,熵值法是用于评估数据的不确定性,而熵权法是用于评估数据对决策的影响。这两种方法都在信息科学、统计学、决策理论等领域有广泛的应用。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。