7x24快讯 ·

深度学习那些好玩且易于实现的案例

-1. 一个日文的博客——ディープラーニングで新しいポケモン作ろうとしたら妖怪が生まれた

链接:http://bohemia.hatenablog.com/entry/2016/08/13/132314

讲如何通过利用DCGAN生成Pockmon Go的宠物形象的文章。因为全是日文,我也不是特别懂日文,所以在这里就不班门弄斧了。感兴趣的自己看看吧? ?...

0. GitHub - Rochester-NRT/RocAlphaGo: An independent, student-led replication of DeepMind's 2016 Nature publication, "Mastering the game of Go with deep neural networks and tree search" (Nature 529, 484-489, 28 Jan 2016), details of which can be found on their website https://github.com/Rochester-NRT/RocAlphaGo.
链接:https://github.com/Rochester-NRT/RocAlphaGo

这个项目火遍大江南北啊,就是第三方根据AlphaGo的论文给出的实现。最近工作太忙没空去看具体细节,底层用的是keras,具体的细节大家可以看看paper。另外今天发现了一个不错的slide: http://www.slideshare.net/ShaneSeungwhanMoon/how-alphago-works

当初和李世石大战的时候有很多”专家“都出来讲过这篇paper,包括在下……简单来说,AlphaGo的架构和传统的围棋AI相比并没有传统的创新,传统的机器博弈的架构包括三部分:

? 主体:AlphaBeta树
? 走子策略:某一步走哪最好
? 局面静态评估:当前谁更厉害

每当对方走出一步棋,我方就开始用走子策略判断一批优秀的候选着法,然后我们开始YY对方,针对我方的每一着,给对方选出一批优秀的着法进行对抗,以深入分析我方走子的可行性。然而由于棋局的复杂性,我们无法演绎到比赛结束,于是到达一定深度后,我们对当前的局势进行估计,然后根据这个分数反推回去,得到我们最好的招数,也就是下棋人常说的”下棋要多看几步“。

那么AlphaGo的厉害之处就在于,它把其中的第二、三项换成了CNN,CNN一来我们就得到了两个好处:1)它有强大的非线性映射能力,算出来的招数很厉害;2)CNN的深度学习能力使得搞围棋不用像过去搞围棋的人一样得花大量时间学围棋了!这点也是当初DeepMind在介绍Atari时说过的,一招CNN,搞定无数领域的难题。曾几何时,我们做博弈的写评估函数,都得对某种棋有很深的认识,基本上得做到业余中的佼佼者;现在有了CNN,你还是可以成为佼佼者,但是这方面的作用明显没有过去那么有用了。

实际上现在大环境是什么都可以拿深度学习的东西试试,所以用CNN搞围棋不奇怪,但是能搞成这个事还是很牛的,而在这其中,训练数据就很关键了。个人认为这其中最厉害的还是用增强学习训练policy的部分,实际上这种完全信息的博弈天生就可以看作马尔可夫决策过程(MDP),而增强学习又是解决MDP的一把好手。将AlphaBeta树中的对手想象成Environment中一种看不见的力量,一个Agent的决策模型就自然形成了。至于后续的增强学习的细节,可以看论文中的介绍。

1. GitHub - jisungk/deepjazz: Deep learning driven jazz generation using Keras & Theano!

链接:https://github.com/jisungk/deepjazz

这个是用LSTM写jazz风格的旋律,也是蛮厉害的!跑起来很容易,库用的是Theano,python人民的老朋友!相对比较简单。

首先是music21这个库,一个很强大的为音乐人士准备的库(我以前怎么没发现这个库,真心很赞!)

2. 最近AlphaGo太火了,于是乎推荐一个增强学习玩Flappy Bird的代码:

GitHub - yenchenlin1994/DeepLearningFlappyBird: Flappy Bird hack using Deep Reinforcement Learning (Deep Q-learning).
链接:https://github.com/yenchenlin1994/DeepLearningFlappyBird

亲测有效,很有意思,相信它足够好玩,也能激发大家的兴趣

由于我之前用keras和caffe多一些,所以对tensorflow了解不多,这里贴个中文的文档供大家参考源代码:

TensorFlow官方文档中文版_TensorFlow中文教程_TensorFlow开发中文手册[PDF]下载
链接:https://wiki.jikexueyuan.com/project/tensorflow-zh/

flappy bird的程序主题上有两个部分,一部分可以算作“预测”,就是根据模型指示具体的操作,一部分是“学习”,就是根据对局的信息调整模型。

整个项目的根基就是这个游戏本身,在增强学习中可以看作是“Environment”,也就是能接收Action并反馈Next State和Reward的。作者使用了别人写好的现成的程序,不过还是在此基础上做了一定的修改,使游戏能够返回这两个信息。对于Next State,则是下一个时刻的图画信息,对于Reward,主要就是能分了,穿过一对管子得一分,死掉得负分。

预测部分:作者采用了E&E的策略,除了以模型进行判定之外,还以一定概率随机操作。

学习部分:当数据集收集到一定数量后开始学习,对于非完结的状态,要根据Bellman Equation进行Return的计算(Return和Reward有一定的差别)。然后将(state,action,return)扔给模型学习。

模型:CNN,具体的参数README讲得很清楚。

总体来看这就是一个模仿Atari实现的项目,不过他一板一眼地把把Atari的经验借鉴了过来,也做到不错的智能效果,所以值得一赞。

我仔细地看了关于这个项目的介绍,发现他的思想和Deep Mind的另一个增强学习的项目很相近,那就是Atari游戏。我找到了一个Github项目,没有亲测,后面有时间会做一下实验:

GitHub - kuz/DeepMind-Atari-Deep-Q-Learner: The original code from the DeepMind article + my tweaks
链接:https://github.com/kuz/DeepMind-Atari-Deep-Q-Learner

两个项目都是用CNN代替增强学习中的state-action-table,项目中的state就是当前的图像(4帧),action就是用户的操作(Flappy Bird就是点一下,昨天和同事聊同事还在说真正游戏里每点一下的轻重是有区别的,我想这个AI应该没有考虑这一点),由于这个空间十分大,我们用CNN来表示它,而学习的关键,也就是把这个表(模型)学习出来。

先简单写一下,回头详细地谢谢。

3.深度学习的在github有一个合集:

GitHub - kjw0612/awesome-deep-vision: A curated list of deep learning resources for computer visio
链接:https://github.com/kjw0612/awesome-deep-vision

推荐一下,感兴趣的话可以过一过

参与评论