Python求共轭函数,怎么求一个函数的共轭函数

MINE:随机变量互信息的估计方法

互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。互信息代表了两个随机变量的相关程度或者说依赖程度,因此在数据科学中是一种应用广泛的度量标准。

网站设计制作、成都网站制作过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。创新互联建站还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。

互信息能够捕捉随机变量之间的非线性统计依赖,因此可以作为变量之间真正的依赖关系的度量。然而,互信息的度量一直以来都是困难的。目前的方法仅限于对离散变量互信息的估计以及一些已知概率分布的连续变量,对于一般任务来说,互信息的估计是困难的。本文提出一种基于KL散度对偶表示的神经网络方法(称为MINE),其为互信息的估计提供了一种通用的解决方案。

对于两个随机变量 和 ,它们的互信息表示为:

和 之间的互信息可认为是在给定 时变量 所减少的不确定性:

另外, 和 的互信息等价于其联合分布 和其边缘分布的乘积 之间的KL散度:

KL散度的定义为:

也就是说联合分布和边缘分布的乘积之间的KL散度越大,随机变量之间的依赖程度就越大。到目前为止,互信息的估计问题就转化为了KL散度的估计问题。

MINE中应用的关键技术是KL散度的对偶表示,主要采用Donsker-Varadhan表示,同时也对比了f-divergence表示,两种方法分别记作MINE和MINE-f。

f-divergence的定义如下:

f-divergence衡量分布 和 之间的差异程度,满足在 和 完全一致的情况下取得最小值为 ,在有所差异的情况下值为一个正数,这一点可以通过凸函数的性质得到:

和 完全一致时:

和 有差异时:

事实上KL散度就是f-divergence的一个特例:

每一个凸函数都有一个共轭函数(Conjugate Function),记作 ,公式为:

这个函数也就是说要找出给定 的情况下变动 能达到的最大值,限制 必须要在 的定义域内,以下图为例,给定不同的 ,代入所有的 能得到的最大值就是 :

按照上面的方式能够理解前面的公式。那么 的图像是什么样子的呢?我们可以按照以下方式来考虑,在给定 ,使 变动,那么就能得到一条以 为斜率的直线,对于不同的 就对应着不同的直线:

而此时,要求 ,就只需要从 的位置坐垂线,这样与垂线相交最上面的直线对应的 就是能使得 取得最大值的 :

那么在整个 的定义域上,将位于最上面的直线的片段连接起来就是 的图像了,当然这只是便于理解的一种形象化的思路:

按照上面的思路,可以很直观地看出 也是凸函数。

另外,我们按照上面的方式把有关 的共轭函数的每条直线都画出来:

得到的共轭函数的图像像是一个指数函数,其实 的共轭函数就是 ,求解共轭函数可以直接用数学的方法计算出来,对于 来说,先把 代入前面共轭函数的表达式:

对于括号里面的式子 ,给定 ,需要求解 来使最大化 ,可以直接对 求导,也就有 ,然后解得 ,也就是说,对于给定的 ,能使得 最大的 就是 ,将 代入原来的式子就可以求得共轭函数了:

另外(在满足 是闭凸函数的条件下,这里就不深究了)有 是 的共轭函数, 也是 的共轭函数,也就是说:

是 互为共轭函数:

这叫做二次共轭。

由上面二次共轭的内容,那么对于f-divergence中的凸函数 ,就可以用 来替换它:

现在对于任意的一个 ,它的输入是 ,输出是 ,将 代入上面的式子中,一定有以下关系:

上面的不等式是恒成立的,我们也就得到了 的下界,来调整函数 ( 是任意的)使得这个下界取得最大值就可以用这个最大值来得到 :

下表中展示了一些不同的divergence对应的函数以及它的共轭函数:

现在我们知道当 时f-divergence就是KL散度(KL-divergence),而此时 的共轭函数为 ,将这些代入上面的式子,得到KL散度的f-divergence表示:

接下来为了与论文中使用的符号一致,我们可以将上述结论写为:

注意这里的 代表任意函数 。在本文提出的深度方法中, 是一个神经网络,此时 就不是任意函数了, 可以取到的所有函数的集合,记作 。现在可以得到 的下界:

通过梯度下降的方法不断学习 ,就可以使用这个下界近似两个分布 和 之间的KL散度。

Donsker-Varadhan表示来源于 Asymptotic evaluation of certain markov process expectations for large time. IV 这篇文章,其具体的形式为:

类似的,当 是一个神经网络时,得到用于估计 的下界:

直观上来看,对于固定的 ,Donsker-Varadhan表示中的下界总是比f-divergence表示要大。MINE主要采用的是Donsker-Varadhan表示,实验中MINE效果要比MINE-f要好一些。

根据上面的理论对于两个随机变量 和 的互信息,假设 是由 参数化的神经网络,记作 ,参数 ,互信息的边界就可以表示为:

其中:

上面式子中的期望可以通过以下方式估计:

①从分布 和 中采样,样本 和 可以简单地通过丢弃样本 中的 获得;

②沿着batch维度打乱联合分布的样本。

接下来,对于一个分布 ,我们用 代表其与 个 样本相关的经验分布。

使用 代表神经网络参数化的函数集合,MINE定义为:

下面是MINE的算法,MINE-f也类似:

对于MINE而言,一个mini-batch内随机梯度下降的梯度为:

这里 代表一个mini-batch的样本。由于损失函数中 的存在,导致上式梯度中的第二项分子分母都有求期望的过程,然而当用采样来代替期望的时候,分子分母的期望应该独立采样,不能使用同一个mini-batch的样本。因此上式的梯度是有偏的,原因就是第二项分子分母的样本不独立。

矫正的方法是将分母上的 改用真正的 。这个值不是采用采样的方法估计的,在文中是采用滑动平均的方法计算 ,将该值记为 。则梯度变为:

该式相当于在原有的梯度的基础上,在后一项前面乘以了一个权重 , 相当于当前mini-batch的 均值和滑动平均的 均值的比值。注意 在计算中被当做一个常数。虽然 中也包含有参数 的项,但并不参与梯度的计算。

现在由梯度 反推目标函数,得到:

因此 MINE 的偏差校正过程仅需要在原始目标函数的后一项乘以一个常数 。

MINE: Mutual Information Neural Estimation

【深度学习 111】MINE

F-GAN MINE

共轭函数与原函数关系

共轭函数与原函数关系如下:原函数约束很多,不一定是凸函数,也就是说原函数是一个也许有很多极小值的多维空间函数,它是不容易求最小值的。用来拟合,容易陷入局部最小值,得到的结果不够泛化。

原函数约束很多,不一定是凸函数,也就是说原函数是一个也许有很多极小值的多维空间函数,它是不容易求最小值的。用来拟合,容易陷入局部最小值,得到的结果不够泛化。

举例:一个训练好的分类器,对一些东西分类很准(拟合误差达到局部极小值),泛化能力很差(拟合误差不是全局最小)。通过求共轭函数,我们把它原函数映射到另一个多维空间(自变量都变了),变成一个新函数,这个函数是凸的,而且它的最大值小于等于原函数的最小值。这样求原函数最小值问题,变成一个无约束凸函数的求最大值问题。

那就很简单了,只要求新函数的唯一鞍点(梯度为零)。这样原本难以进行全局最优拟合的问题,变成可以拟合最优了。

请问什么是取共轭?怎样对一个函数取共轭,请举几个例子。谢谢

取共轭是对复数而言:

若 a, b为实数,z=a + bj 为复数,其中:j=√(-1) 为虚数单位;

那么复数 z 的共轭为:z* = a - bj :

举例:z = 2+3j,那么z的共轭z*=2-3j

z=5-7j,那么z*=5+7j

对一个复值函数: z(x)=a(x)+jb(x),其中a(x)和b(x)都是实值函数,x为实数,

那么z(x)的共轭为:z*(x)=a(x) - jb(x):

举一例:a(x)=cosx,b(x)=sinx

z(x)=a(x)+jb(x)=cosx +j sinx

z*(x)=cosx - jsinx

总之,一个复数取共轭,原来的实部不变,虚部变号,即可。

若z=a+bi(a,b∈R),则  =a-bi(a,b∈R)。共轭复数所对应的点关于实轴对称。两个复数:x+yi与x-yi称为共轭复数,它们的实部相等,虚部互为相反数。

扩展资料:

在复平面上,表示两个共轭复数的点关于X轴对称,而这一点正是"共轭"一词的来源。两头牛平行地拉一部犁,它们的肩膀上要共架一个横梁,这横梁就叫做"轭"。如果用z表示x+yi,那么在z字上面加个"一"就表示x-yi,或相反。

复数的加法法则:设z1=a+bi,z2=c+di是任意两个复数。两者和的实部是原来两个复数实部的和,它的虚部是原来两个虚部的和。两个复数的和依然是复数。即 (a+bi)±(c+di)=(a±c)+(b±d)i.

减法法则:两个复数的差为实数之差加上虚数之差(乘以i)

即:z1-z2=(a+ib)-(c+id)=(a-c)+(b-d)i

乘法法则:把两个复数相乘,类似两个多项式相乘,结果中i2 = -1,把实部与虚部分别合并。两个复数的积仍然是一个复数。

即:z1z2=(a+bi)(c+di)=ac+adi+bci+bdi2=(ac-bd)+(bc+ad)i.

除法法则:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商运算方法:将分子和分母同时乘以分母的共轭复数,再用乘法法则运算。

参考资料来源:百度百科——共轭复数

pythonr如何引入复数

数学中复数有a+bi表示,python中复数是由一个实数和一个虚数组合构成,表示为:x+yj

一个复数有一对有序浮点数 (x,y),其中 x 是实数部分,y 是虚数部分。

我们可以通过help(a)命令来查看复数的帮助文档。

Help on complex object:

我们通过dir(a)命令,发现复数有这些属性。

复数的第一个属性是模,也是绝对值abs(),这里abs(a)和a.__abs__()是等效的。我们对a取模,没有改变a。

同样复数的__add__()属性也不会改变a的值,a.__add__(x)会返回a和x的和。注意x为一个单位的虚值时不能写成j(这样j就是一个变量),而要写成1j。

复数的内建属性:

复数对象拥有数据属性,分别为该复数的实部和虚部。

复数还拥有 conjugate 方法,调用它可以返回该复数的共轭复数对象。

复数属性:real(复数的实部)、imag(复数的虚部)、conjugate()(返回复数的共轭复数)

复数还有很多其它内部属性,我们以后慢慢学习。

python怎么输出方程的共轭复根

只要能给出方程根的表达式,python就能输出,复数也是。

比如方程    x^2 + x + 1 = 0

∆ = -3 0,有一对共轭复根,直接韦达定理公式扔给python就行

(-1 + (-3)**(1/2))/2

(-0.49999999999999994+0.8660254037844386j)

(-1 - (-3)**(1/2))/2

(-0.5-0.8660254037844386j)

共轭波函数怎么求

z=a-bj。取共轭是对复数而言:若a,b为实数,z=a+bj为复数,其中:j=√(-1)为虚数单位;那么复数z的共轭为:z=a-bj。共轭函数亦称对偶函数、极化函数,函数的某种对偶变换。


本文名称:Python求共轭函数,怎么求一个函数的共轭函数
网站URL:http://hbruida.cn/article/hcsijo.html