comment:: 本文提出了一种利用神经网络来生成混合模型的方法,理论上在训练样本支撑下,能够模拟任意分布。

摘要

最小化均方误差、交叉熵等损失函数,会使神经网络输出一个接近目标数据的、以输入向量为条件的条件均值(即以均值作为输出的点估计)。 对于分类问题,神经网络的输出为均值向量,其中的每个元素均代表了相应类别的后验预测概率,我们可以选择其中最优者作为最终决策;但当目标变量为连续型变量时,神经网络输出只有一个条件均值,仅能够提供对其属性的有限描述。特别是当神经网络存在多个可能的映射输出时(如一个输入对应多个输出的某混合模型)问题更明显,因为此时输出的均值不对应正确的值,甚至压根儿没有任何意义。在本文中,我们介绍了一种新的网络模型,该模型将传统神经网络与混合密度模型结合,形成的完整系统被称为 混合密度网络(Mixture Density Network)。 理论上,任意概率分布都可以通过多个基础概率分布(如高斯)混合而成,因此本文提出的模型原则上可以表示任意以输入向量为条件的概率分布,就像传统神经网络可以表示任意函数一样(pdf)。

注: 名称被起为密度网络,显然特指目标变量为连续型变量的情况。

1 概述 pdf

神经网络模型广泛应用于涉及关联映射的场景中,其目的是学习从一组 dd 维输入变量 x{x1,,xd}\mathbf{x} \equiv \{x_1,\ldots,x_d\} 到一组 cc 维输出变量 t{t1,,tc}\mathbf{t} \equiv \{t_1,\ldots,t_c\} 的转换。在实践中,此类网络使用一组有限数量 nn 的样本进行训练,我们用 {xq,tq}\{\mathbf{x}^q,\mathbf{t}^q\} 表示,其中 q=1,,nq = 1, \ldots, n 。网络训练的核心目标不是记住训练数据,而是对数据的底层生成器进行建模,以便当训练后的网络输入一个新的 x\mathbf{x} 值时,可以对输出向量 t\mathbf{t} 做出最好的预测xx

对数据生成器最泛化和最完整的描述是统计描述(White,1989),用 输入-目标 空间中的联合概率密度 p(x;t)p(\mathbf{x};\mathbf{t}) 来表示生成器。该密度函数表示数据点 (x;t)(\mathbf{x};\mathbf{t}) 落在一个小区域 (Δx;Δt)(\Delta \mathbf{x}; \Delta \mathbf{t}) 中的概率,根据积分规则,该概率可以由 p(x;t)ΔxΔtp(\mathbf{x};\mathbf{t})\Delta \mathbf{x}\Delta \mathbf{t} 给出并被归一化( 即 p(x;t)dxdt=1\int p(\mathbf{x};\mathbf{t}) d \mathbf{x} d\mathbf{t} = 1),以给出 输入-目标 空间中任意一个数据点处的概率。请注意,如果数据生成器本身会随时间或空间发生变化,那么我们必须将时间或空间也视为联合概率密度中的一个变量。在本文中,我们将注意力聚焦在静态分布上,但如果将其视为连续自适应的,则本文介绍的模型也可以被扩展到非平稳问题。

对于我们正在考虑的关联映射问题,按照概率公式,将联合概率密度分解为 目标数据 的条件密度(以输入数据为条件)和 输入数据 的无条件密度的乘积会比较方便。

其中:

  • p(tx)p(\mathbf{t} \mid \mathbf{x}) 表示 x\mathbf{x} 取特定值时 t\mathbf{t} 的概率密度。为了对新的 x\mathbf{x} 预测其相应的 t\mathbf{t},我们需要对 p(tx)p(\mathbf{t} \mid \mathbf{x}) 建模。
  • 输入数据 的密度 p(x)=p(x;t)dtp(\mathbf{x}) =\int p(\mathbf{x}; \mathbf{t}) d \mathbf{t} 在对训练网络的预测进行验证时,起着重要作用(Bishop,1994)。

传统神经网络最小化 均方误差损失函数 ,会输出一个与 目标数据 接近的条件均值(即目标的一个点估计值)的神经网络函数。交叉熵损失函数 也有类似效果。对于 目标变量 采用独热编码方案的分类问题,上述条件均值表示每个类别的后验概率,因此可以视为提供了最优解。

然而,对于涉及连续变量预测的问题,条件均值只能代表对目标数据统计特性的有限描述,这对于许多应用来说是不够的。此类应用中有一类非常重要的 逆问题,其中单个输入对应的目标数据经常对应多个值。在这种情况下,传统的最小二乘法可能会给出完全误差的结果。

所谓逆问题,指某个函数的逆函数对应的问题,当函数为一对一映射时,其逆函数有时却会出现一对多映射。例如,给定一些医疗症状,估计出病人可能患有的疾病清单。或者,给定一个机器人手臂的理想位置,计算出所有机器人关节应该朝哪个角度旋转,以便机器人手臂能够到达理想位置。
对于上述逆问题,给出均值作为答案不太可能是正确答案,所以用传统神经网络的均方误差法训练行不通。
除了逆问题外,此处还隐含着另外一类应用,即不确定性估计。在很多应用中,只给出条件均值这样一个点估计是不够的,例如:安全性要求较高的应用需要知道预测的(不)确定性水平。如果此时能够给出目标数据可能的分布,则后续可以完成很多传统神经网络无法完成的任务。

在本文中,我们介绍了一类新的神经网络模型,称为混合密度网络 (MDN),它克服了上述限制,并为条件密度函数 的建模提供了一个通用框架。该模型通过将 传统神经网络混合密度模型 相结合而形成,而 传统最小二乘法 则是该模型的一个特例。实际上,它们的软件实现代表了对标准神经网络模型的直接修改。我们通过玩具问题和涉及机器人逆运动学的问题证明了 MDN 的有效性。

示例 1: 正问题的传统神经网络预测结果,每个输入对应一个目标,不存在多值问题(粉红色点为预测结果)

示例 2: 逆问题的传统神经网络预测结果,当反过来通过目标数据预测输入数据时,会对应一对多映射问题,此时将均值作为预测结果往往是误差的(粉红色点为预测结果)

示例 3: 逆问题的混合密度网络预测结果,给定每个输入值,神经网络输出高斯混合模型的一组参数(粉红色点为预测结果的随机样本)

示例4: 正问题的混合密度网络预测结果,与传统神经网络预测给出点估计结果不同,MDN 可以给出一个分布(粉红色点为预测结果的随机样本)。

2 传统的最小二乘法 pdf

2.1 基本原理

神经网络训练的常用方法是最小化在一组训练数据上定义的平方和误差,其形式为:

其中,nn 为训练样本数量,cc 为目标变量的维度, tk\mathbf{t}_k 表示目标向量的第 kk 个分量,fk(x;w)f_k (\mathbf{x};\mathbf{w}) 表示与该分量对应的神经网络映射函数的输出,数组 w\mathbf{w} 表示神经网络的一系列自适应参数(即权重和偏差)。

2.2 最小二乘法的性质

我们首先考虑最小二乘求解的性质。在实际应用中,我们只能处理有限的数据集。这意味着必须限制神经网络模型的复杂度,以控制偏差和方差之间的平衡。使用更大的数据集可以使模型更加灵活(即偏差较小),且不会过拟合(即不会导致方差增加)。理论上,在数据集趋于无限大时,神经网络的偏差和方差都可以降为零,得到最小二乘的最优解。在此极限下,可以用联合概率密度上的积分代替 平方和误差函数 (2)(2) 中有限数据点的求和:

为方便理解,在 (3)(3) 中引入了额外的全局因子 1/n1/n。由于神经网络模型 fk(x;w)f_k (\mathbf{x}; \mathbf{w}) 可以非常灵活,所以形式上我们可以通过 平方和误差函数 相对于 fk(x;w)f_k(\mathbf{x}; \mathbf{w}) 的微分,来实现最小化:

将 (4) 代入 (5),并使用 (1),我们可以得到满足最小化条件的神经网络函数表达式:

其中 w\mathbf{w}^{\ast} 表示满足最小化的一组权重值,符号 tkx\langle t_k \mid \mathbf{x} \rangle 表示条件均值。根据均值的定义,关于 t\mathbf{t} 的任意函数 Q(t)Q(\mathbf{t}) 的条件均值可以被定义为:

因此,神经网络函数的输出结果由 目标变量 的条件均值给出(以输入向量为条件)。这个结果如 图 1 所示,对神经网络的实际应用具有许多重要意义。

图 1:由输入变量 x{x} 和相应的目标变量 t{t} 值组成的一组数据点(黑点)。图中同时显示了最小平方误差产生的函数(黑色实线),该解由目标变量在 xx 处的条件均值给出。也就是说,对于给定 xx 值(例如 x0x_0 ),最小二乘函数值由目标变量 tt ( 相对于概率密度 p(tx)p(t \mid x),见 x0x_0 处的垂向高斯状曲线 ) 的条件均值 tx\langle t \mid x \rangle 给出。

我们也可以通过以不同形式重写平方和误差来得出该结果。通过在 (4)(4) 中的方括号内加减 tkx\langle t_k\mid x \rangle,并再次使用 (1)(1),我们可以得到:

可以注意到,误差函数仅通过 (8)(8) 中的第一项依赖于网络权重,当满足 (6)(6) 时,该项会出现最小值。因此,我们再次看到了 误差函数的全局最小值由目标数据的条件均值 给出。第二项 (9)(9) 给出了误差函数在其全局最小值附近的残差值,可以看出它对应于目标变量在其条件均值附近的平均方差。

因此,通过最小二乘法训练标准神经网络的结果,实际上可以得到目标变量的两个近似统计量,其一是表现为 输入向量 x\mathbf{x} 的某个函数 的条件均值,由 fk(x;w)f_k(\mathbf{x};\mathbf{w}) 给出;其二是围绕该条件均值的数据均方差,由误差函数达到最小值时该处的残差给出。如果能够知道这两个统计量,就可以构造一个中心为 fk(x;w)f_k(\mathbf{x};\mathbf{w}) 、方差为全局参数(取决于残差)的高斯分布,来对 x\mathbf{x} 处的目标变量建模。这里需要注意的是:尽管最小二乘法的使用并不要求目标变量必须服从高斯分布,但事实上它也无法区分高斯分布和具有相同统计量的其他任何分布。

相反,如果我们假设目标数据的条件分布确实是高斯分布,反而能够使用最大似然法得到最小二乘形式。假设目标数据由以下条件概率密度函数控制:

其中 σ\sigma 为全局方差参数,目标数据(假设为多元)的各分量之间相互独立。 Fk(x)F_k (\mathbf{x}) 是目标变量第 kk 个分量 tkt_k 的均值,并被视为 x\mathbf{x} 的一般性函数。此时目标向量的完整条件密度由下式给出:

底层的真实生成函数 Fk(x)F_k(\mathbf{x}) 是未知的,也正是我们寻求确定的基本量。关于 Fk(x)F_k(\mathbf{x}) 的知识以及参数 σ\sigma 的值, 给了我们一个完整描述数据生成过程的框架(在高斯假设内)。因此,我们希望通过一个参数化的函数 fk(x;w)f_k(\mathbf{x}; \mathbf{w})Fk(x)F_k(\mathbf{x}) 建模。前馈神经网络是此类参数化函数的一个强大选择,因为它们可以有效地表示多元非线性函数,原则上可以近似的任意形式的函数。

函数 fk(x;w)f_k(\mathbf{x}; \mathbf{w}) 中的参数 w\mathbf{w} 的值必须从有限训练样本集 {xq,tq}\{ \mathbf{x}^q, \mathbf{t}^q\} 中确定。这可以通过最大似然法来实现。如果假设训练数据从 (11)(11) 给出的分布中独立抽取产生,那么该数据集的整体似然由每个数据点的似然之积给出:

其中使用了 (1)(1)。数值 L\mathcal{L} 是参数 w\mathbf{w} 的函数,可以通过最大化 L\mathcal{L} 来确定w\mathbf{w} 的近似值。在实践中,乘积形式会带来计算上的困难,而且采用最小化可能更为习惯,因此通常将上式改造为最小化 L\mathcal{L} 的负对数,也就时常称的误差函数:

最小化 EE 等效于最大化 L\mathcal{L},因为负对数是单调函数。

使用 (11)(11)(12)(12)(13)(13) ,并用 fk(x;w)f_k(\mathbf{x}; \mathbf{w})F(x)F (x) 建模,我们可以将 EE 写成以下形式:

请注意, (14)(14) 中只有第三项取决于参数 w\mathbf{w},因此参数的值可以通过最小化该项来确定。此外,因子1/21/2 可以省略,因为它对 w\mathbf{w} 的最小化没有影响。这样就产生了神经网络训练中常用的标准平方和误差函数 (见 图 2 ):

在计算 ESE^S 的导数时,为了方便起见,保留了 1/21/2 的因子。通常, fk(x;w)f_k(\mathbf{x}; \mathbf{w}) 是参数 w\mathbf{w} 的非线性函数(例如多层感知机)。ESE^S 的最小化是一个典型的非线性优化问题,存在大量可采用的标准技术。

得到参数最优解 w\mathbf{w}^\ast 之后,条件方差 σ\sigma 的解可以通过 (14)(14) 中的 EE 相对于 σ\sigma 的最小化来计算。这种最小化很容易推导:

上式表明, σ2\sigma^2 的最优解由平方和误差函数在其达到最小值时的残差给出。

2.3 分类问题

对于分类问题,目标值通常会选择 one-hot 编码方案,对于属于 ClC_l 类的输入 xqx^q,其目标值为 tkq=δklt_k^q = \delta_{kl}。目标值的概率分布由下式给出:

其中 P(Clx)P(C_l \mid \mathbf{x})x\mathbf{x} 属于 ClC_l 类的概率。将 (17)(17) 代入 (6)(6) 可得:

因此,当权重的最优解 w\mathbf{w}^\ast 确定后,神经网络的输出为一个表示类别分布的向量,其中每个分量分别对应该类别的贝叶斯后验概率。从此意义上说,神经网络输出可以被认为是最优的,因为一旦估计了适当的损失矩阵,后验概率允许进行最小风险的分类。例如,如果目标是最小化错误分类的数量(对应于单位矩阵给出的损失矩阵),则每个新输入都应该分配给具有最大后验概率的类。

需要注意的是,分类任务中经常使用的 交叉熵误差 也能够导致神经网络的输出近似为条件均值。证明如下,对于有限数据集,交叉熵误差函数可以写为:

在数据集趋于无限大时,这可以写成:

像以前一样通过微分,并利用(1)和(7),可以得到:

这样神经网络的输出再次表示了目标变量的条件均值。

2.4 小结

大多数传统的神经网络应用只使用由 fk(x;w)f_k(\mathbf{x}; \mathbf{w}) 给出的预测结果,它近似于目标变量的条件均值(以输入向量为条件)。我们已经看到,对于分类问题,这可以代表最优解。然而,对于面临连续变量预测问题时,条件均值仅表示了一个非常有限的统计量。对于许多应用来说,获得有关目标变量概率分布的完整描述将带来相当大的好处。因此,我们引入了混合密度网络(MDN),它原则上可以表示任意的条件分布,就像传统的神经网络可以表示任意非线性函数一样。

3 混合密度网络 pdf

3.1 初步设想

传统最小二乘技术可以在假设数据服从高斯分布的情况下,从最大似然法推导出来。这激发了用 混合模型(复杂)替换高斯分布(简单)的想法,因为从理论上讲,混合模型具有表示任意分布的灵活性。混合模型将 目标数据 的条件概率密度表示为核函数的线性组合,形式为:

其中 mm 是混合模型中组分的数量。参数 αi(x)\alpha_i(\mathbf{x}) 称为 混合系数,可以视为目标向量 t\mathbf{t} 生成自混合模型第 ithi^{th} 个分量的先验概率(以 x\mathbf{x} 为条件)。

请注意,混合系数是输入向量 x\mathbf{x} 的函数。函数 ϕi(tx)\phi_i(\mathbf{t} \mid \mathbf{x}) 表示目标向量 t\mathbf{t} 的第 ithi^{th} 个核的条件密度。核函数的选择是多样的。本文将把注意力限制在高斯核上( 即所有分量均服从高斯分布 ):

其中向量μi(x)\boldsymbol{\mu}_i(\mathbf{x}) 表示第 ithi^{th} 个核的中心,对应混合模型的组分 μik\mu_{ik} 。在 (23)(23) 中,我们假设目标向量的各分量 在分布的各组分内 是统计独立的( 即在各高斯核内部,目标向量的各分量之间相互独立,协方差矩阵表现为对角形式 ),并且各目标分量均为同方差σi(x)\boldsymbol{\sigma}_i(\mathbf{x}) 。通过为每个高斯核引入完全协方差矩阵,可以放宽这个假设,但其代价是更复杂的形式化。原则上,这种复杂化是不必要的,因为由 (23) 形式的核构成的高斯混合模型,能够将任何给定的密度函数逼近到任意精度,前提是 混合系数高斯参数(均值和方差) 选择正确。因此,(22)(22)(23)(23) 给出的表示完全是通用性。特别是,相较于 (11)(11) 中的单一高斯表示,它并不假设 t\mathbf{t} 的分量满足统计独立要求。

对于任何给定的 x\mathbf{x} 值,混合模型为建模任意条件密度函数 p(tx)p(\mathbf{t}|\mathbf{x}) 提供了t通用形式。我们现在将混合模型的各种参数,即混合系数 αi(x)\alpha_i(\mathbf{x}) 、均值 μi(x)\boldsymbol{\mu}_i(\mathbf{x}) 和方差 σi(x)\boldsymbol{\sigma}_i(\mathbf{x}) ,视为 x\mathbf{x} 的通用(连续)函数,并通过以 x\mathbf{x} 作为输入的传统神经网络来对这些参数建模。我们将这种 前馈网络混合模型 的组合结构称为 混合密度网络 (MDN),其基本结构如 图 2 所示。通过选择(具有足够数量核函数的)混合模型和(具有足够数量隐藏单元的)神经网络,MDN 可以根据需要接近任意条件密度 p(tx)p(\mathbf{t}|\mathbf{x})

图 2:混合密度网络由一个前馈神经网络组成,该网络的输出决定了混合密度模型中的参数。此混合密度模型进一步可以表示目标变量的条件概率密度函数(以神经网络的输入向量为条件)。

3.2 混合密度的建模

MDN 的神经网络要素可以是任意具有近似能力的标准前馈结构。在本文中,我们考虑了一个标准的多层感知器,具有一个含 sigmoid 单元 的隐藏层和一个含 线性单元 的输出层,我们使用 zjz_j 来表示输出变量。请注意,神经网络输出的变量总数为 (c+2)×m(c + 2) \times m ,这与传统神经网络的 cc 个输出不同。

?? 此处为何为 (c+2)×m(c+2)\times m ?
假设目标向量有 cc 个分量,每个分量都由 mm 个组分混合而成,则需要估计 mm 个混合系数、mm 个方差、m×cm \times c 个各组分中的目标分量均值,因此神经网络的总输出为 (c+2)×m(c+2)\times m 个。

(1)混合系数单元

需要注意的是,混合系数 αi(x)\alpha_i(\mathbf{x}) 必须满足约束:

这可以利用 softmax 函数,建立 αi(x)\alpha_i(\mathbf{x}) 与神经网络输出之间的关系来实现:

其中 ziαz_i^{\alpha} 表示相应的网络输出。上式可以被看作是二值逻辑斯蒂 sigmoid 的泛化,确保 αi\alpha_i 位于 (0,1)(0,1) 范围内且总和为 11,以满足概率要求。

(2)方差单元

方差 δi\delta_i 表示 尺度(Scale)参数,可以方便地用神经网络输出的指数形式来表示:

在贝叶斯框架中,这对应于在假设神经网络输出 ziαz_i^\alpha 服从均匀分布时,选择了一个无信息先验。这种表示方法还有一个额外的好处:可以避免一个或多个方差变为零的病理情况。

(3)均值单元

中心 μi\boldsymbol{\mu}_i 表示 位置(Location)参数,可以直接由神经网络输出表示:

(4)误差函数

和之前一样,我们可以使用(12)(12)构造一个似然函数,然后通过取似然的负对数定义一个误差函数,如(13)(13),给出混合密度网络的误差函数形式:

其中,峰值 qq 对应的误差贡献为:

其中 ϕi(tx)\phi_i(\mathbf{t} \mid \mathbf{x})(23)(23) 给出。

注意: 此处峰值的数量应当为 m×cm \times c

我们删除了 qp(xq)\sum_qp(\mathbf{x}^q) 这个项,因为它独立于混合模型的参数,也独立于神经网络权重。请注意,上式形式上等同于 Jacobs 等人的 “竞争本地专家” 模型中使用的误差函数 (Jacobs et al., 1991)。但是,这里给出的解释却大相径庭。与其试图在多个相互竞争的更简单的网络模块之间施加软竞争,不如对输出变量的完整条件概率密度进行建模。根据该密度函数,原则上可以计算任何涉及输出变量的所需统计量。

为了最小化误差函数,需要计算误差 EE 相对于神经网络权重的导数。这可以通过使用标准的 “反向传播” 程序来估计,只要我们获得神经网络输出单元误差导数的合适表达式。

误差函数 (28)(28) 是由多项式的总和组成,每个峰值 qq 对应一个,因此可以考虑先得到特定峰值 qq 所对应的误差导数 δkq=Eq/zk\delta_k^q=\partial E^q/\partial z_k,然后再通过对所有峰值求和得到 EE 的导数。误差导数 δkq\delta^q_k 类似 “误差”,也是一个标量,可以通过神经网络进行反向传播,并得到权重迭代所需的导数。这将在 第 4 节 中进一步讨论。在此基础上,标准优化算法(例如 共轭梯度准牛顿 方法等)可被用于寻找 EE 的最小值。或者,如果使用了随机梯度下降之类的小批量优化算法,则可以在每个批次后分别更新权重。

注:
(1)输出层神经网络单元数为 (c+2)×m(c+2) \times m
(2)本节从理论上给出了总误差 EE 的解析公式,但其涉及 π,μ,σ\pi,\mu,\sigma 三种不同类型的输出单元的组合,在用于机器学习时,可能需要做调整,最好能做到端对端训练。
(3)考虑到反向传播的适应性,可能需要将总误差的梯度分解到不同类型的输出单元上。

3.3 损失函数及其分解

(1)引入一个中间概率

我们已经提到核 ϕi\phi_i 可以被视为先验概率为 αi\alpha_i 的模型组分对应的条件密度函数。为了使后续分析更为方便,在这里根据贝叶斯定理引入第 ii 个组分的后验概率:

注意,这里的后验概率总和为 11

(2)混合系数的导数

首先考虑对应于混合系数 αi\alpha_i 的那些网络输出的导数。使用 (29)(29)(30)(30) 我们得到

我们现在注意到,作为 softmax 激活函数 (25)(25) 的结果,αi\alpha_i 的值取决于对先验有贡献的所有神经网络输出,因此我们有:

依据链式法则:

结合 (32)(32)(33)(33)3434,我们得到了与混合系数有关的神经网络输出的导数:

(3)方差的导数

与方差参数 σi\sigma_i 对应神经网络输出的导数,利用 (29)(29)(30)(30) 以及 (23)(23) 给出:

使用 (26)(26), 我们有:

将这些结合在一起,我们得到与方差参数有关的神经网络输出的导数:

(4)均值的导数

由于参数 μik\mu_{ik} 直接由 zikz_{ik} 网络输出给出,使用 (29)(29)(30)(30),连同 (23)(23),我们有:

(35)(35)(38)(38)(39)(39) 给出的误差函数(相对于网络输出的)导数,可用于标准优化算法以找到误差的最小值。在本文中,神经网络权重的优化采用了 BFGS 准牛顿算法。

(5)收敛性分析

在上一节中,我们在趋于无限数据集的情况下考虑了标准最小二乘神经网络的性质。我们现在对混合密度网络进行相应的分析。取 (28)(28)(29)(29) 的无限数据集,可以将误差函数写成形式:

如果我们将 EE 关于 ziα(x)z_i^\alpha(x)ziμ(x)z_i^\mu(x)ziσ(x)z_i^\sigma(x) 的导数设置为零( 当数据覆盖了所有可能性时,理论上导数应当为零 ),则经过一些代数推导后,可以得出,当误差函数达到最小值时,混合模型参数应当满足:

其中 πiπi(x,t)\pi_i \equiv \pi_i(x, t),条件均值由 (7)(7) 定义。

这些结果具有非常自然的解释。对于输入向量 xx 的每个值,(41)(41) 表明先验 αi(x)\alpha_i (x) 由相应的后验概率给出(在目标数据的条件密度上进行平均)。类似地,核中心 (42)(42) 由目标数据的条件均值给出,由该核的后验概率加权。方差参数 (43)(43) 由围绕相应核中心的目标数据方差的条件均值给出,并由该核的后验概率加权。

3.3 预测

一旦 MDN 被训练,它就可以针对输入向量的任何给定值预测目标数据的条件密度函数。就预测目标向量值的问题而言,这个条件密度代表了对数据生成者的完整描述。从这个密度函数,我们可以计算出在不同应用中可能感兴趣的更具体的量。在这里,我们讨论一些可能性。最简单的统计数据之一是平均值,对应于目标数据的条件平均值,由下式给出

我们曾在 (23)(23) 使用过。这等效于由最小二乘训练的标准网络计算的函数。因此,传统的最小二乘结果是 MDN 的一种特殊情况。我们同样可以评估密度函数关于条件平均的方差,给出

这比相应的最小二乘结果更据通用性,因为这个方差被允许是 xx 的一般函数。对于条件分布的其他矩,也可以获得类似的结果。

对于许多问题,我们可能有兴趣为输出向量找到一个特定值。对于给定的输入向量 xx,输出向量的最可能值由条件密度 p(tx)p(t \mid x) 的最大值(众数)给出。由于该密度函数由混合模型表示,因此寻找其全局最大值的位置是一个非线性优化问题。虽然存在解决此类问题的标准技术(Press 等人,1992),但这些技术本质上是迭代的,计算成本很高。因此,对于处理速度要求很高的应用,我们需要找到一种更快的近似方法。

如果我们假设密度函数的组分之间没有太强烈的重叠,那么最可能的 tt 值应当由密度最高的组分核中心给出。从 (22)(22)(23)(23) 中,我们看到具有最大中心值的分量由下式给出:

对应的中心 μi\mu_i 表示最可能的输出向量,具备很好地近似。

或者,我们可能更希望考虑各组分的总“概率质量”,这适用于具有有限数量分支的多值映射应用,此类应用中,往往感兴趣的是能够找到与最可能分支相对应的表示向量。( 这种方法也不太容易受到稀疏数据区域的小方差数据影响 )。下一节将讨论此类问题的一个示例,其中涉及机器人手臂的运动学。

由于混合模型的每个组分均已归一化,ϕi(tx)dt=1\int \phi_i (t \mid x) dt = 1 ,最可能的分支通常被假设为那些分离良好且重叠可忽略不计的组分,即:

所需的 tt 值由相应组分的密度中心 μi\mu_i 给出。

需要注意的是:我们还可以结合应用需要,从混合密度中计算出各种其他统计量。

4 软件实现 pdf

相较于传统神经网络,唯一的变动是对误差函数定义的修改。我们可以将误差函数视为一个“模块”,它接受神经网络的输出向量 zqz^q(对于特定峰值 qq)和相应的目标向量 tqt^q,并且返回该模型对应的误差 EqE^q ,以及该误差关于神经网络输出 zqz^q 的导数 δq\delta^q

图 3:为了软件实现的目的,可以将误差函数视为一个模块,其输入为神经网络的输出向量 zqz^q(对于特定峰值 qq)和相应的目标向量 tqt^q,并且其输出为峰值 qq 的误差 EE ,及其关于神经网络输出 zqz^q 的导数 zEq\nabla_zE^q

误差函数关于某个网络权重 ww 的导数通过链式法则获得:

其中 δiq=Eq/zi\delta_i^q=\partial E^q/\partial z_i 可以被解释为通过神经网络反向传播的 (c+2)×m(c+2) \times m 个 “误差”。

对于传统平方和误差函数(单峰值),δq\delta ^q 的计算比较简单,直接用 zq\mathbf{z}^qtq\mathbf{t}^q 之间的差来表示:

但对于混合密度网络来说,相对复杂一些,公式 (51)(51)(52)(52) 必须替换为适当的表达式。

首先指定峰值 qq 的误差函数 EqE^q(29)(29) 给出,而向量 δ\boldsymbol{\delta} 中的元素由 (35)(35)(38)(38)(39)(39) 给出。混合密度网络在面向对象的语言(如 C++)中实现起来特别简单和自然,因为误差模块可以表示为一个误差函数类,该类具有输入神经网络输出单元 zq\mathbf{z}^q 和真实目标数据 tq\mathbf{t}^q 的成员函数,而且能够返回误差值 EE 以及其关于神经网络输出单元的导数 δq\boldsymbol{\delta}^q。另外,误差函数类也应当含有预测成员函数,用于返回给定输入 x\mathbf{x} 时的条件概率密度值,或者返回从条件概率密度派生的其他统计量(如与某类核中心相对应的向量)。

对于涉及大量输入变量的应用程序,混合密度网络的计算复杂度与使用平方和误差函数训练的标准网络差别并不显著,因为大部分计算成本在于信号通过网络进行前向和后向传播本身,而不在于误差函数及其导数的计算。对于具有大量输入的神经网络(第一层中有大量权重),神经网络本身的计算需求将超过评估误差函数及其导数的成本。

在任何使用基于梯度的方法来执行误差最小化的算法中,可以通过比较从解析表达式获得的误差导数与使用有限差分计算的误差导数来对软件进行检查。这两种方法之间的紧密一致性能够表明大部分代码已正确实现。请注意,如果使用对称中心差分而不是简单的有限差分,则会获得显着提高的精度,因为在后一种情况下,我们有:

其中 ϵ\epsilon 为一个小参数,而中心差分

其中的校正项要小得多。当然,为了在误差最小化中使用,解析表达式应该优先使用有限差分公式,因为它们不仅更准确,而且计算效率也更高(Bishop,1995)。

5 一个简单的逆问题示例

(略)

6 机器人动力学

(略)

7 讨论pdf

在本文中,我们介绍了一类新的网络,称为混合密度网络,它可以对一般条件概率密度进行建模。相比之下,涉及平方和误差函数的最小化的传统网络方法仅允许确定目标数据的条件平均值以及单个全局方差参数。我们已经说明了将混合密度网络用于简单的 1 输入 1 输出映射和机器人逆运动学问题。在这两个示例中,所需的映射都是多值的,因此条件平均值无法很好地表示。

还有许多其他方法可以处理从一组示例数据中学习多值映射的问题。然而,一般来说,这些都与生成一个特定的解决方案(即多值映射的一个分支)有关。相比之下,混合密度网络关注的是对输出变量的完整条件密度函数进行建模,因此对所需映射给出了完整的一般描述。从条件密度中,可以提取更具体的信息。特别是,我们讨论了评估条件密度矩(例如均值和方差)以及选择多值映射的特定分支的方法。

混合密度网络的实现很简单,对应于误差函数的修改,以及对网络输出的不同解释。 MDN 比标准模型更复杂的一个方面是模型阶数选择问题。在将神经网络应用于有限数据集时,必须优化模型的复杂程度以提供最佳的泛化性能。这可以通过改变隐藏单元的数量(以及自适应参数的数量)来完成,就像本文中的模拟所做的那样。它也可以通过使用添加到误差函数中的正则化项来完成,或者通过在训练期间使用“提前停止”来限制网络中自由度的有效数量。 MDN 也必须解决同样的模型复杂性问题。

另外还有选择适当数量的核函数的问题。内核数量的变化通过改变输出单元的数量(对于给定的隐藏单元数量)导致网络中自适应参数数量的变化,因此这两个问题有些相互关联。对于涉及离散多值映射的问题,重要的是核函数的数量至少等于映射的最大分支数。然而,使用比这更多数量的核函数可能不会产生什么不良影响,因为网络总是可以选择通过将相应先验设置为较小的值来“切换”冗余核,或者通过给它们相似的  和参数来组合核。对本文讨论的涉及核过剩问题的初步实验表明,网络性能没有显着降低。未来的研究将关注混合密度网络模型阶数选择的自动化,以及这些网络在一系列大规模应用中的性能

参考资料

  1. Mixture Density Networks with TensorFlow
    MDN的原理及在tensorflow中的简单应用

  2. Mixture Density Networks for Galaxy distance determination in TensorFlow
    MDN解决天文学的星体测距问题

  3. Applying Deep Learning to Basketball Trajectories
    MDN解决篮球轨迹预测问题
    代码 :https://github.com/RobRomijnders/RNN_basketball
    论文: http://www.large-scale-sports-analytics.org/Large-Scale-Sports-Analytics/Submissions_files/paperID07.pdf

  4. Handwriting generating with RNN
    RNN+MDN生成手写数字
    代码: https://github.com/rndbrtrnd/kadenze-deep-creative-apps/blob/master/final-project/glyphs-rnn.ipynb

    .