混合密度网络

来源:互联网 发布:琴太脸型数据 编辑:程序博客网 时间:2024/05/23 19:14

原文地址:http://blog.csdn.net/qq_35160701/article/details/51597295

5.6 混合密度网络

之前的建模中都把条件概率分布选为高斯分布,但在实际的机器学习中,经常会遇到与⾼斯分布差别相当⼤的概率分布。例如,在逆问题( inverse problem )中,概率分布可以是多峰的,这种情况下,⾼斯分布的假设就会产⽣相当差的预测结果。 
作为逆问题的⼀个简单的例⼦,考虑机械臂的运动学问题,如图所⽰。正向问题( forward problem )是在给定连接角的情况下求解机械臂末端的位置,这个问题有唯⼀解。然⽽,若想把机械臂末端移动到⼀个具体的位置,我们必须设定合适的连接角。于是,我们需要求解逆问题,它有两个解。

这里写图片描述

因此需要一个对条件概率密度建模的⼀般的框架。可以这样做:为 p(tx) 使⽤一个混合模型,模型的混合系数和每个分量的概率分布都是输⼊向量 x的一个比较灵活的函数,这就构成了混合密度网络( mixture density network )。对于任意给定的 x 值,混合模型提供了⼀个通用的形式,⽤来对任意条件概率密度函数 p(tx) 进⾏建模。 
这⾥,我们显式地令模型的分量为高斯分布,即: 

p(tx)=k=1Kπk(x)N(tμk(x),σ2k(x)I)

这是异方差模型( heteroscedastic model )的⼀个例⼦,因为数据中的噪声方差是输⼊向量 x 的⼀个函数。我们也可以使⽤高斯分布以外的其他分布,例如,如果目标变量是⼆值的而不是连续的,我们就可以使用伯努利分布。 
我们已经把情况具体到了各向同性的协方差的情形(即 σ2k(x)I ,协方差矩阵与单位矩阵成比例),虽然可以通过使用 Cholesky 分解(http://blog.csdn.net/acdreamers/article/details/44656847)表示协方差的方式,将混合密度网络扩展到可以处理更⼀般的协方差的情形,但是我们不能假设条件概率分布 p(tx) 能够关于 t 的分量进⾏分解(这与标准的平⽅和回归模型不同),这是由于概率分布是⼀个混合分布。 
下图所示的神经⽹络可以是⼀个两层的网络,网络具有 S 形(双曲正切)隐含单元。如果混合模型中有 K 个分量,且 t 有 L 个分量,那么网络就会有 K个输出单元激活(记作 aπk )确定混合系数 πk(x) ,有 K 个输出(记作 aσk )确定核宽度 σk(x) ,有 K × L 个输出(记作 aμkj )确定核中⼼ μk(x)的分量 μkj(x) 。⽹络输出的总数为 (L+2)K ,这与通常的⽹络的 L 个输出不同。通常的⽹络只是简单地预测⽬标变量的条件均值。

这里写图片描述

混合系数必须满⾜下⾯的限制: 

k=1Kπk(x)=1,0πk(x)1

可以通过使⽤⼀组 softmax 输出来实现: 
πk(x)=exp(aπk)Kl=1exp(aπl)

类似地,⽅差必须满⾜ σ2k(x)0 ,因此可以使⽤对应的⽹络激活的指数形式表⽰,即: 
σk(x)=exp(aσk)

最后,由于均值 μk(x) 有实数分量,因此它们可以直接⽤⽹络的输出激活表⽰: 
μkj(x)=aμkj

混合密度⽹络的可调节参数由权向量和偏置组成。这些参数可以通过最⼤似然法确定,或等价地使⽤最⼩化误差函数(负对数似然函数)的⽅法确定。误差函数为: 
E(ω)=n=1Nln{k=1Kπk(xn,ω)N(tnμk(xn,ω),σ2k(xn,ω)I)}

为了最⼩化误差函数,我们需要计算误差函数 E(ω) 关于 ω 的分量的导数。如果得到了误差函数关于输出单元激活的导数的表达式,那么就可以通过标准的反向传播⽅法来计算误差函数关于 ω 的分量的导数。由于误差函数由⼀组项的求和式构成,每⼀项都对应⼀个训练数据点,因此我们可以考虑对于特定的模式 n 的导数,然后通过求和的⽅式找到 E 的导数。 
由于我们处理的是混合概率分布,因此⽐较⽅便的做法是把混合系数 πk(x) 看成与 x 相关的先验概率分布,从⽽就引⼊了对应的后验概率,形式为: 
γnk=γk(tnxn)=πkNnkKl=1πlNnl

其中 Nnk=N(tnμk(xn),σ2k(xn)) 
关于控制混合系数的⽹络输出激活的导数为: 
Enaπk=πkγnk

类似地,关于控制分量均值的⽹络输出激活的导数为: 
Enaμkl=γk{μkltnlσ2k}

最后,关于控制分量⽅差的⽹络激活函数为: 
Enaσk=γnk{Ltnμk2σ2k}

这里写图片描述

0 0