作者panruru1224 (booooooored)
看板DataScience
标题[心得] Learning to play Tetris
时间Mon Dec 24 22:39:27 2018
[关键字]:
Tetris, Reinforcement Learning, Monte Carlo Tree Search,
Temporal Difference Learning
[重点摘要]:
利用MCTS和TD实作自我学习的俄罗斯方块机器人
1.影片 & GitHub
https://www.youtube.com/watch?v=EALo2GfZuYU
https://github.com/hrpan/tetris_mcts
2.简介
故事起源於第一次看到 DeepMind 的 Atari 影片
https://www.youtube.com/watch?v=V1eYniJ0Rnk
当时深深觉得这东西实在太神奇了竟然可以自我学习而且达到超人类水准
觉得如果可以用到俄罗斯方块应该蛮有趣的 就开始在闲暇时间读相关的文章
起初以为用 DQN 或是 policy gradient 就可以轻松解决的问题
没想到不管训练多久都消不了几条就放着生灰尘了
直到後来看到 AlphaGo 以後才又燃起了一线希望
也成功让我的机器人成功消了超过1000条
3.关於俄罗斯方块
相信大家应该都玩过了 对游戏规则就不多做说明
一般人大概都不会觉得俄罗斯方块是一款很难的游戏
起初我也这样想 後来仔细想想俄罗斯方块其实需要很长远的计画能力
对一个完全没有先备知识的电脑来说 每个动作都是等价的
假设电脑要消掉一条 (先假设没有 hard drop)
他必须要往前计画约50步才有办法做到 (假设是 20 X 10 的版面)
这对传统的 Q-Learning 来说难度是相当高的
因为 Q-Learning 本身对於 credit assignment 是指数递减
也就是说你如果在第50步得到一分的话 第一步所获得的分数只有 r^49 (0 < r < 1)
几乎跟杂讯没甚麽两样
之所以台面上的俄罗斯方块机器人可以有近人类水准的操作是因为他们大多用了
一些 hard-code 的额外奖励 例: 列的高度 台面有几个洞 平滑程度等等
这些额外奖励可以大量缩短奖励分配的长度 (从每消一条变成每放一块奖励一次)
让这些讯号变得更显着 不过这些奖励只能用在特定游戏中
一旦规则改变就必须在重新写过 而且在一些困难的游戏(例如围棋)中
并不是所有人都有能力去写出这种奖励 所以让机器人可以自我学习是非常重要的
详细要如何用MCTS来解决这个问题就请看GitHub吧
4.心得
从开始解决这个问题开始到现在也过了快两年
刚开始没办法消超过10条到现在可以消超过1000条看起来真的是蛮过瘾的
(而且看起来还没收敛应该可以再更高 不过因为一轮要跑太久(>10hrs)所以放弃了)
过程中也学到了不少python的技巧 可以算是蛮有收获的吧
希望这篇文章可以启发更多对 reinforcement learning 有兴趣的人
(虽然我知道这文章没啥组织性又打的很杂)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.67.208
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1545662371.A.E27.html
1F:推 larsonloreal: 先推再看 12/25 00:35
2F:推 TreeMan: really cool! 12/25 08:09
3F:推 y956403: 大推实作 12/25 11:13
4F:推 st1009: 推推 12/25 12:42
5F:推 tritonight: 推 12/25 12:51
6F:→ panruru1224: 文章也发在reddit上 有些蛮有趣的讨论可以看看 12/25 13:01
8F:推 cutekid: 大推,好厉害(Y) 12/25 13:22
9F:推 woogee: 超强.... 12/25 14:38
10F:推 illegalplan: 刚好期末在做这个 偷偷跟原po讲 DQN跟PG都起不来 12/25 22:36
11F:→ illegalplan: 但是actor-critic可以喔 12/25 22:36
12F:→ panruru1224: 蛮好奇AC可以到多少 有数据吗? 12/25 23:25
13F:→ illegalplan: AC平均只到60行左右 而且action是可能的落地组合 12/25 23:59
14F:→ panruru1224: 蛮有趣的 不过我猜action的设计应该影响很大 12/26 00:28
15F:→ panruru1224: 用落地组合应该可以让planning简化很多 12/26 00:29
16F:→ sizzle0121: 加上prioritized experience replay试试? 12/27 08:48
17F:推 a78998042a: 好强 XDD 12/30 23:23
18F:推 gaexp233008: 推推 01/02 00:38
19F:推 alen84204: 从人类的角度来看感觉每次好不容易有空格出来 结果机 01/07 12:55
20F:→ alen84204: 器又直接把他补上XDD 另外是不是当前方块如过在最低平 01/07 12:57
21F:→ alen84204: 面上无法填补时 机器会自动判对放在最高的位置上阿 01/07 12:58
22F:推 uukoQAQ: 推推 01/08 21:00
23F:推 diabolica: 感想推 12/19 00:21