原作 Seth Weidman
夏乙 问耕 编译自HackerNoon
量子位 出品 | 公众号 QbitAI
过去一年,AI领域最
exciting
的进展可能要数AlphaGo的不断进步。AlphaGo Zero不仅提出了新的网络架构,也带来了一些新的神经网络训练技巧。
虽然DeepMind发表了论文,并在Reddit论坛上进行了一次公开答疑,后来还有人将AlphaGo Zero的算法实现了出来,但如何训练?其中有哪些trick?
发表在HackerNoon上的一篇最新博客文章做出了直观的解读:
先从AlphaGo各个版本一脉相承的两种方法说起:一是前瞻的蒙特卡洛树搜索,二是凭“直觉”来对落子位置进行评估,也就是DeepMind所说的策略网络和价值网络。这两种方法结合起来,构成了每一版AlphaGo的核心。
从更高的层面讨论,AlphaGo Zero的工作方式和AlphaGo差不多,它们都使用了基于MCTS的前向搜索,并辅以神经网络的指导。然而,AlphaGo Zero的神经网络,或者说它的“直觉”,跟AlphaGo的训练方式完全不同。
以下是三个你需要知道的tricks。
Trick 1:如何训练AlphaGo Zero
所谓神经网络学会下围棋,就是能在当前的局面下,判断出下一步的最佳落子位置。DeepMind发现,无论神经网络智能程度如何,从一无所知到围棋大师,使用MTCS总是更好的评估判断方案。
从根本上来说,MCTS是一种前向搜索,如果有足够的时间,人类围棋大师也能完成。这个过程无非是不断脑补棋局未来的变化,评估哪些“套路”可能是最佳方案。
举个例子。第一种落子方案,最终可能导致平局,评估得分就是0.0。接着看第二种方案,神经网络推算出这么下可能会获胜,评估得分为0.5。
这个过程一直持续进行的话,前向搜索总是能够评估出更好的落子方案。
当然,这也要求神经网络能够判断如何下棋落子能带来胜利。基于MCTS的改进评估与神经网络的当前状态,智能体Agent不断地展开自我对局。
DeepMind用来训练AlphaGo Zero的数据,全部都是通过前向搜索和自我博弈产生的。
不使用人类下棋的数据,其实是一个trick。这样的话,对于每个给定的局面,神经网络都能通过执行基于MCTS的前向搜索,再用其提高智能体的棋力。
在这种方法的帮助下,AlphaGo Zero从一无所知成长为围棋大师。
Trick 2: 双头怪
AlphaGo Zero的神经网络,是一个“双头”架构。
这个网络的前20层左右,是常见的神经网络结构。然后跟着是两个“头”,一个头取走了前20层的输出,然后产生了下一步的落子概率,另一个头基于同样的数据,输出当前局面的获胜概率。
这是个不寻常的结构。几乎所有的应用中,神经网络都只给出一个固定的输出。如果有两个不同的输出结果,应该如何学习呢?
答案很简单。请记住,神经网络的本质只是一些数学函数,包括一系列影响决策的参数。所谓训练,就是反复向神经网络展示正确答案,让网络更新参数,使得输出更接近正确答案。
所以,当我们使用一个头进行预测时,只需要更新“身体”和“头1”中的参数。而使用另一个头时,更新“身体”和“头2”中的参数。
这就是DeepMind训练单一、双头神经网络的方法,并且用其来指导MCTS的搜索。有点像AlphaGo使用了两个单独的神经网络。这个trick在技术上被称为硬参数共享的多任务学习(Multi-Task Learning with Hard Parameter Sharing)。
Trick 3: 残差网络
AlphaGo Zero还用了比之前版本更前沿的神经网络架构:残差网络。
残差网络是2015年孙剑在微软亚洲研究院带领的团队开发的,当时AlphaGo第一版的工作已经快要接近尾声。
△
残差网络和普通卷积神经网络的比较
这两种神经网络相关的技巧——用残差网络架构替代卷积架构、用“双头怪”神经网络替代各个单独的神经网络,都能让整个网络的性能增加一倍,两者结合起来,性能又有提升。如下图所示:
小结
上面三个tricks让AlphaGo Zero展现出令人难以置信的能力。