深度学习生成舞蹈影片01之MDN

阅读难度:★★★★

技能要求:机器学习基础

字数:1136字

阅读时长:6分钟

先案例一个Github的项目:

DanceNet

Dance generator using Variational Autoencoder, LSTM and Mixture Density Network.

自动生成舞蹈动作的深度网络,结合了变分自编码器VAE、LSTM 与混合密度网络MDN。该网络的主要思想即使用VAE生成单张舞蹈图片,并使用 LSTM 将这些舞蹈图片组合成一系列完整的动作,最后联合训练就能生成非常逼真的舞蹈动作。训练完成后,生成的舞蹈效果如下:

本文先介绍MDN:

点击即可GET知识卡片

1

用神经网络拟合任意连续函数

基本上所有的深度学习教程的第一课,都是让大家练习用神经网络拟合任意连续函数。例如tensorflow.js的练习之一:

Fitting a Curve to Synthetic Data

有兴趣可以自行练习下:

https://js.tensorflow.org/tutorials/fit-curve.html

我们如果要拟合:f(x) = 7.0sin(0.75x) + 0.5x,我们很容易通过定义一个包含一个隐藏层和20个节点的神经网络来拟合,结果如下:

如果把x轴跟y轴的数据对换下,再套用之前的神经网络进行拟合,效果并不理想:

x 可能会对应多个 y,我们不管增加多少层,增大多少节点数,都不能拟合多值函数曲线。上图这个是一个多值函数,每一个输入都至少会对应一个输出,而且有些会对应不止一个输出:

有什么办法可以拟合多值函数曲线呢?采用MDN可以很容易做得到。

2

深度混合密度模型

deep mixture density network 

MDN

你也许会想,用神经网络输出多个值并不难,只要定义最后的输出层节点数大于 1 就可以了。是的,你可以定义一个多输出的网络(比如 3),然后每次输出 3 个预测值,然而这个网络的效果肯定是非常差的(你可以自己思考一下为什么)。

现在我们换一种思路——假如我们输出的不是一个值,而是目标值的一个可能分布,比如当 x=1 时,我们得到 y 有两个取值 { 1, -1 },并且每个取值的概率都是 0.5。使用这个思想设计的网络就叫混合密度网络Mixture Density Network:

早在1994年,Christopher M. Bishop就提出Mixture Density Networks,MDN 结合了常规的深度神经网络和高斯混合模型GMM,MDN的结构如上图所示:

neural network + mixture model

下面我们继续了解GMM。

3

高斯混合模型

Gaussian Mixed Model

指的是多个高斯分布函数(正态分布曲线)的线性组合。如下图所示的多个正态分布曲线,拟合出一个分布:

理论上GMM可以拟合出任意类型的分布。回到上文提到的多值函数,使用多个高斯分布的线性组合就可以拟合出来。

高斯分布

4

MDN的应用

MDN我们知道可以用来拟合多值函数后,还有哪些应用呢?除了上文的DanceNet使用了MDN,还可以用于手写字的生成,用连续的概率分布估计横、纵方向的位移,即MDN来估算下一笔的位移,采用的也是LSTM+MDN。

其他的一些应用:

4.1 解决天文学的星体测距问题

http://cbonnett.github.io/MDN.html

4.2 解决篮球轨迹预测问题 

https://github.com/RobRomijnders/RNN_basketball

4.3 生成手写数字

https://github.com/rndbrtrnd/kadenze-deep-creative-apps/blob/master/final-project/glyphs-rnn.ipynb

参考资料:

http://blog.otoro.net/2015/11/24/mixture-density-networks-with-tensorflow

https://github.com/jsn5/dancenet

附上keras实现的MDN:

https://github.com/cpmpercussion/keras-mdn-layer

(0)

相关推荐