深度学习的那些有趣案例

  随着阿尔法狗(AlphaGo)和李世石那场艺人瞩目的人机围棋大赛落下帷幕,人们对于深度学习的热议和探讨也越发的高涨。其实作为深度学习的基础人工神经网络在上个世纪四五十年代就被提出来了,但是受限于当时的计算能力和数据规模,而且神经网络的”黑盒”不具解释性,导致神经网络的相关研究一直不瘟不火的。
  正如当前积累了大量的电子数据的同时,单点计算能力以及大规模分布式集群研究和实现,让大数据的概念被炒的红红火火,似乎现在嘴边不挂个云计算、大数据,都不好意思跟别的搞IT的说话。内行看门道,外行看热闹,大家可以说可以聊,但不必过于的神话这些概念,就像是我之前听的一个讲座上说的,这些搞云计算和大数据的,其实都是给我们数据挖掘和数据分析提供工具和服务的,如果你是一个在互联网行业的淘金者,那么云计算和大数据就是先进的铲子、筛子这类工具,而对应的互联网公司无谓就是卖或者租这些工具的,甚至有一些为我们扮演者端茶倒水的角色。数据挖掘、分析等核心技术和思路并没有因为大数据和云计算的概念产生很大的变化。
  现今深度学习已经取得了较大的突破,一方面表现为Google Brain、Google驾驶、百度语音Deep Speach等一系列振奋人心的深度学习成果展现出来,传统的语音、图像等机器学习的领域被深度学习一个个攻破;另一方面各家各类的诸如Caffe、Theano、Torch、MXNet等深度学习框架展现出了百花齐放的态势,深度学习作为当今机器学习的热点,给人一种大有可为的景象。

  首先,为当今深度学习的四大金刚(大牛)致敬,正是他们的存在,使得深度学习不仅在理论上不断的被完善和突破,而且更是把深度学习推向了图像、语音、文字等实用领域,附带着一波波小牛混文凭水文章,一批批专家骗科研混经费。请接受吾等草根屁民一拜。
深度学习的四大金刚
  (Yann LeCun,Geoffrey Hinton, Yoshua Bengio, Andrew Ng)

  之前看过了解过一些深度学习的知识(在NLP上面的使用可以参看拙作DL_python),所以针对深度网络在此说个两句,然后面对各个大型公司的深度成果,你没有那么多的训练数据,更没有那么大的计算能力,所以对我们个体户没啥意义,倒是有一些框架和应用可以在我们PC(如果Nvidia显卡支持CUDA,也可以使用独立显卡)上跑,个人可以复现修改,因此这些案例本人摘录下来以飨读者。
  深度神经网络按照原理和结构可以分为两类:CNN(卷积神经网络)和RNN(循环神经网络),前者一般有固定的输入纬度,各个平行的神经元之间没有直接的联系,其侧重于输入的空间关系,常用于图像这类信息的处理;后者在相邻的神经元之间会有直接的联系,在每个神经元中会有一个控制开关,用于平衡上一个时间序列神经元的输入和当前序列输入对当前神经元输入的权重比例,由于强调的是时间序列,相当于之前序列(历史记忆)会影响到当前神经元,因此对于自然语言这类信息的处理十分的合适。RNN根据神经元内部的设计不同,有可以分为:LSTM、GRU等,大致来说,GRU出现的晚一些,其内部结构稍微简洁一些,且训练收敛的速度比较快,需要的训练数据比较少,而LSTM最终效果会好些。其实在神经网络中,网络深度、神经元个数、训练集合的大小都会影响到最终神经网络的效果,在此两种神经元类型的差异性在一定程度上就不足为道了。同时,我个人感觉后面的文章,都侧重于设计单个神经元的结构,有着让他更加符合生物神经元的原理,包括ReLu等激活函数的设计,以期待更接近生物神经元会得到更好的学习效果。

1.画风合成

  利用图像让深度网络学习图像对应的画风和色调,在训练过程中各个神经元调整好了参数,然后再使用一幅画作为输入,深度网络就会用这幅画的内容加上之前训练的画风和色调,生成一副新的图像(图片和内容来自于这里) :
梵高式的小猫
  上面是MXNet的一个案例,当然其图像也不仅限于梵高的《繁星点点》,在原作者文章的案例中还包括透纳的《运输船遇难》, 爱德华·蒙克的《尖叫》,毕加索的《Femme Nue Assise》等(请原谅我借机文艺了一把),效果 都很和谐唯美。
  如果你不想手动操作,这儿有个现成的网站可以试试看!

2.机器作诗

  国内的BosonNLP算是在中文处理方面做的十分深入的一家了,去年上线了一款古体诗生成机器人,发布者说是使用深度学习的技术 ,框架是Theano+Keras,估计是运用LSTM或者GRU对五万首古体唐诗进行训练产生的,较好的生成结果加上古色古香的字体背景,广大V2er的评价还是相当高的。
机器作诗

3.自动文本生成

  上面算是一个本土的文本生成了,国外的研究就更加激动人心了。在The Unreasonable Effectiveness of Recurrent Neural Networks 中,算是对RNN文本生成做的惟妙惟肖了:其不仅可以模仿Paul Graham、Shakespeare写作,甚至还能模仿生成Latex、C语言等结构化的文本。真是逆天了,难道是要革命解放码农的节奏么!!!(代码风格还不错,还知道些注释哈)
机器人码代码

4.深度学习的图像内容描述

  按照作者的综述,其原理就是:通过大量的图像以及图像的文本描述作为训练数据,用CNN网络训练图像部分,然后用双向RNN训练描述文本,然后通过一种方式将两种模型进行对齐,就形成了图像和文本的一种特殊关联。此后再有新的图像输入,就可以用这个模型来生成新的文本描述了。作者的例子图像的描述都是比较贴切的。
机器人码代码

  就先写到这里了,后面有遇到新的好玩的再整理加进来吧!

更新(20160330):
  之前发的那个网站,直到现在都没发给我结果,不想花钱的话想必是要排很长很长的队了,不知道要等到猴年马月去了。于是自己用MXNet的案例,自己在电脑上跑了一个!
  这个库需要下载一个几十兆的VGG模型,算是用的人家的现成的了,然后GeForce 840M 2G显存的显卡报错说内存不足,我也是醉了,果真穷鬼不要玩深度学习~~然后用的CPU计算的,50次迭代大概要十几分钟,这些图来之不易啊。
  原图:
原图

  不同迭代次数下的效果图(可见迭代次数越多,感觉内容图像的影响就越强,抽象感觉越弱):
迭代次数

  不同风格下的效果图:
不同风格

更新(20160412):
DeepArt.io的照片其实还是给我了,只是淹没在了邮件中。感觉效果不错啊!
深度狗

参考