从昨天开始, 深度学习的元老之一Yann LeCun, 乐总在quora上hold了一个session, 地址如下 。 里面有几个非常有意思的话题, 国内AI媒体新智元马上跟进, 翻译出来了中文版, (标题, LeCun:深度学习突破,对抗式网络最值得期待, 请自行搜索)。
新智元翻译的乐总文章一看完,脑子里翻江倒海, 五味杂陈。 思绪一下子回到了14,5年前, 我快毕业的时代。
我博士毕业是在02年, 毕业前一直在微软实习, 论文的题目是用图模型(graphic model) 做人类舞蹈动作的合成, 大致意思是用跳舞的运动捕捉数据学习一个基于图模型的动态贝叶斯网络, 然后用来合成舞蹈动作。 这样只要提前训练好模型, 就可以生成任意的舞蹈,要多少有多少。 文章发表在siggraph02上, 引用率还不错。 后来为了毕业,顺便用这套框架做了下动态纹理合成, 拿了chinagraph02年的最佳论文奖。 但是一毕业我没待在微软, 去了IBM研究院。 IBM研究院主要做工程研究, 不太涉及基础研究。 大家问我为啥不留在微软, 我给的解释是我贪图享乐, 微软太苦, IBM好一些! 其实内心的苦处, 实在不足为外人道。
我毕业的那个时间节点01-02年, 做计算机视觉的人其实非常痛苦, 传统几何的东西3d geometry做完了。 神经网络因为没有理论基础, 效果受限于计算能力也并不好, 在当时基本被当作骗子。vision的人抓住SVM, boosting 当作救命稻草, 这两个东西工程上都有用, 也号称有统计学习理论做基础。 我当时费了很大力气, 学习了统计学习理论VC维数等知识, 看明白以后, 有点失望, 理论倒是不错, 但是离实践太远, 不能用来指导具体的研究工作。
后来发现Micheal Jordan(UC Berkley教授, 跟打篮球的那个同名) 在贝叶斯网络基础上搞图模型,他当时也是刚刚立山头。 一看就觉得有道理, 特别是动态系统也能放在同一套框架下。 理论完善, 也能操作, 当真找到救命稻草, 救我一命, 得以毕业。
但是图模型虽然理论框架非常完善, 也有对应的学习训练方法: 比如MCMC通杀,就是太慢; 快一点还有变分学习, 凸优化等等; 总之各种学习方法都能尝试,但是仍然存在表现能力太弱的问题。
我要学习人体运动的模型, 从统计意义上讲, 是要估计人体运动所在空间的一个概率分布。 这个空间太大, 我们用贝叶斯方法和人的先验知识,控制模型复杂程度。 加上BIC这样的准则, 保证在有限数据集上训练出结果来。 我一开始就纠结在DBN的观测模型上, 观测模型本质上是要学习从系统内部状态到外部数据表示的一个映射关系。在Jordan的统计框架下用的最多的是混合高斯。 混合高斯其实过分抽象了, 表现不了数据样本的细微分布, 当时也没有深度学习网络这种东西。 找来找去, 我从传统控制领域找来了线性动态系统LDS。 LDS本来就是做动态的, 做对运动建模比混合高斯高到不知哪里去了。 再加上有后面的图模型做高层推断, 一定意义上把舞蹈建模这个问题就解掉了一点点。
现在乐总的文章里提到用深度学习和图模型做结合,用图模型做reasoning。 其实类似我当年的路子, 把LDS换成深度神经网络, 对状态到数据的映射关系表现能力更强。 结合图模型又有一个完备的学习框架, 这样会对深度学习有个大大的提升。
此外乐总还提到对抗式网络的思路, 训练两个网络, 一个做生成, 一个做判决, 两个网络一起竞争, 大家都越来越好, 这样就可以结合有监督和无监督。 让我也回忆起当年做合成时的疑惑。 通常统计学习建模对付问题有两种思路, 一种是估计联合概率分布, 一种是学习条件概率分布。前者其实是最核心的。 有个完全分布,那什么都有了。 但是模型参数太多, 数据有限, 学起来太难。 所以实践中搞搞条件分布, 压缩下供学习的概率空间, 学起来容易些。 对我的生成数据来说, 不管是条件分布, 还是联合分布, 模型受计算能力的限制, 信息量总是有限的, 要用来生成像样的数据, 全random肯定不行, 建模时丢了太多信息。 怎么把丢的东西找回来, 还是得靠知识, Lds动态系统就是利用了人的知识对运动的一种高层抽象。有了lds,就可以基于随机噪声做出像模像样的人体舞蹈动作来。机器就真的能画画,跳舞了。 现在大家都说用深度网络学不出知识。 其实我感觉没那么复杂, 乐总说的这个对抗网络的巧妙设计, 将来发展一定可用来解决这个问题。
总体来说, AI 进步很快, 很有希望!惜乎我只能旁观了, 没法也无时间亲身参与。 但话又说回来, AI进步还是不要太快的好。 原因你懂得!
BTW,有人问我合成怎么做,真的靠噪声驱动模型就可以吗?答案是不可以,模型表示能力毕竟有限,此外一个非线性动态系统,趋向于混沌,你就算模型全对,时间一长也没法预期。那怎么办?加约束。当时的做法实际上是先编舞,再跳舞,人工设定几个关键动作,模型把中间的过程推出来,结果也挺有意思,噪声加的多一点,动作就夸张一点,不加噪声就很直白。
又BTW,当年Cambridge有人来,讨论过为什么语音识别和语音合成完全是两条路,能不能用一个统计框架统一起来。答案是可以,语音识别用的hmm是dbn的特例,合成用template是知识表示,但是语音后边有语义,远比跳舞复杂。当时的计算能力下,统计模型差太远,干不了这事,也许现在技术进步了,有人可以琢磨下。