描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121307478
对话大师
我们需要一次解决所有问题
——访wiki创造者 Ward Cunningham 1
CaffeOnSpark解决了三大问题
——对话雅虎机器学习平台负责人 2
务实至上:“PHP之父”Rasmus Lerdorf访谈录 4
科研的秘诀
——对话微软研究院负责人 Peter Lee 5
无人机的背后
宾夕法尼亚大学工程学院院长VijayKumar专访 6
Alan Kay和他的浪漫愿景 10
Alan Kay谈OO和FP 12
Alan Kay谈读书 14
百问Alan Kay 17
Peter Norvig:人工智能将是软件工程的重要部分 28
MINIX 30年之经验教训谈 31
2016技术盘点
盘点2016年的移动 Web发展 36
2016年人工智能技术进展大盘点 38
2016数据库技术盘点 44
2016年OpenStack总结 49
VR技术这一年的发展要点与未来展望 51
2016年游戏行业年终盘点
——逃离还是守望?市场破局的一年 54
互联网应用面面观
小米网技术架构变迁实践 57
途牛网站无线架构变迁实践 59
搜狗商业平台基础架构演化实践 62
58同城高性能移动Push推送平台架构演进之路 66
QQ会员活动运营平台的架构设计实践 70
基于Spark的百度图搜变现系统架构 73
快的打车架构实践 78
饿了么移动App的架构演进 80
宅米网性能优化实践
—初创互联网公司的野蛮成长 82
深入理解自动化测试架构 85
电商系统的高并发设计和挑战 88
淘宝大秒系统设计思路 92
百度分布式交互查询平台
—PINGO 架构迭代 95
高并发金融应用架构优化与平台创新 98
阅文集团分布式文件系统的设计与实现 101
从0到1,一号店通用推荐平台的搭建 105
先进的银行反欺诈架构设计 107
高可用性系统在大众点评的实践与经验 109
VIPServer:阿里智能地址映射及环境管理 系统详解 112
小米异步消息系统实践 116
Motan:支撑微博千亿调用的轻量级RPC框架 118
360云查杀服务从零到千亿级PV的核心架构变迁 120
乐视商城抢购系统深度实践 125
携程移动端架构演进与优化之路 126
技术解析开源大数据构造
群雄逐鹿,看2015开源大数据框架迭代 133
Jaguar,一种基于 YARN 的长时服务自动扩展架 134
HDFS EC:将纠删码技术融入HDFS 136
基于SQL on Hadoop的数据仓库技术 140
Spark 多数据源计算实践及其在 GrowingIO的实践 144
Impala的信息仓库:解读TQueryExecRequest 结构 147
Spark Streaming实践和优化 152
分布式数据库挑战与分析 154
Apache Eagle :分布式实时大数据性能和安全 监控平台 157
大数据驱动下的微博社会化推荐 161
物联网开发初探
风口的物联网技术 165
物联网开发中意想不到的那些“坑” 166
无人机的GPS欺骗及防护措施 169
11个热门物联网开发平台的比较 172
物联网大数据平台TIZA STAR架构解析 174
Spark核心技术与实践
Spark 学习指南 177
Streaming DataFrame:无限增长的表格 178
层次化存储:以高性价比终结Spark的I/O瓶颈 179
Spark在美团的实践 181
向Spark开炮:1.6版本问题总结与趟坑 185
Spark在蘑菇街的实践 187
Spark MLlib 2.0前瞻 190
科大讯飞基于Spark的用户留存运营分析及技术实现 192
Spark Streaming与Kafka集成分析 195
Spark Streaming在猎豹移动的实践 198
Spark Streaming构建有状态的可靠流式处理应用 200
Spark Streaming在腾讯广点通的应用 204
Spark Streaming ES构建美团App 异常监控平台 210
基于Spark一栈式开发的通信运营商社交网络 212
基于 Spark 的公安大数据实时运维技术实践 218
在Apache Spark 2.0中使用
——DataFrames 和SQL的步 221
在 Apache Spark 2.0 中使用
——DataFrames 和 SQL 的第二步 226
走进VR开发世界
VR 开发从何入手 229
VR硬件演进与其游戏开发注意事项 229
VR语境下的人机交互 233
使用Cocos开发 ——一款简单的 3D VR 抓钱游戏 235
制作3A级VR游戏的难点
——专访焰火工坊 CTO 王明杨 237
并非只有游戏才是 VR
——专访 VR 制作人、导演董宇辉 239
走进VR游戏开发的世界 240
叙事、画面和音效:解析VR游戏设计要点 245
VR 和 AR 需要什么样的自然表达? 248
使用Unity开发HoloLens应用 249
VR应用设计的8个建议 252
用虚幻4开发搭积木的VR游戏 255
人工智能60年,后深度学习时代关键技术进展
语音识别系统及科大讯飞实践 259
使用深度学习打造智能聊天机器人 261
无人驾驶:人工智能三大应用造就 “老司机” 265
知人知面需知心
——论人工智能技术在推荐系统中的应用 269
流动的推荐系统
——兴趣 Feed 技术架构与实现 272
SLAM刚刚开始的未来 277
运用增强学习算法提升推荐效果 279
以性别预测为例谈数据挖掘分类问题 282
FPGA:下一代机器人感知处理器 285
Google AlphaGo 技术解读
——MCTS DCNN 289
基于Spark的异构分布式深度学习平台 294
拓扑数据分析在机器学习中的应用 298
揭秘深度强化学习 300
“无中生有”计算机视觉探奇 302
知识图谱如何让智能金融“变魔术” 305
机器码农:深度学习自动编程 308
图计算系统进展和展望 311
ICML 2016精选论文 315
SIGIR 2016精选论文 317
KDD 2016精选论文 318
NIPS 2016精选论文 320
容器技术经验谈
Docker 的“谎言” 323
Kubernetes微服务架构应用实践 324
使用Docker实现丝般顺滑的持续集成 327
Mesos高可用解决方案剖析 330
新型资源管理工具 Myriad 使用初探 334
基于OpenStack和Kubernetes构建组合云平台
——网络集成方案综述 335
超融合架构与容器超融合 339
容器集群管理技术对比 342
现实中的容器技术运用案例 343
展望Docker 1.10镜像新面貌 346
谈谈 Unikernel 348
关于Docker你不知道的事
——Docker Machine 350
再谈容器与虚拟机的那S
Google AlphaGo 技术解读 —MCTS DCNN
文 / 李理
2016 年 1 月,Google DeepMind 的文章在《自然》杂志发表, AlphaGo击败欧洲围棋冠军樊麾并且将要在3月份挑战李世石。 围棋和深度学习再次大规模高热度地出现在世人眼前。
围棋的估值函数极不平滑,差一个子局面就可能大不相同, 同时状态空间大,也没有全局的结构。这使得计算机只能采用 穷举法并且因此进展缓慢。Google 的 AlphaGo 通过 MCTS 和深度 学习的结合实现了围棋人工智能的突破,已经击败人类职业选 手。本文分析这两种技术在围棋 AI 的应用以及 AlphaGo 的创新。
MCTS
MCTS(Monte Carlo Tree Search)和 UC T(Upper Con?dence Bound for Trees)
MCTS 算法就是从根节点(当前待评估局面)开始不断构建 搜索树的过程。具体可以分成 4 个步骤,如图 1 所示。
图 1 from A Survey of Monte Carlo Tree Search Methods
■ Selection
使用一种Policy从根节点开始,选择一个“紧急”(urgent) 的需要展开(expand)可展开(expandable)的节点。可展开的 节点是非叶子节点(非游戏结束局面),而且至少还有一个孩 子没有搜索过。比如图1展示的选择过程,终选择到的节点 不一定是叶子节点(只要它还有未搜索过的孩子就行)。
■ Expansion
选中节点的一个或者多个孩子展开并加入搜索树,图1的 Expansion 部分展示了展开一个孩子并加入搜索树的过程。
■ Simulation
从这个展开的孩子开始模拟对局到结束,模拟使用的策略 叫 Default Policy。
■游戏结束有个得分(胜负),这个得分从展开的孩子往 上回溯到根节点,更新这些节点的统计量,这些统计量会影响 下一次迭代算法的 Selection 和 Expansion。
经过足够多次迭代之后(或者时间用完),我们根据某种 策略选择根节点好的一个孩子(比如访问次数多,得分 高等)。
上面的算法有两个 Policy:Tree Policy 和 Default Policy。 Tree Policy 决定怎么选择节点以及展开;而 Default Policy 用于 Simulation(也有文献叫 playout,就是玩下去直到游戏结束)。
MCTS 着重搜索更 urgent 的孩子,当然偶尔也要看看那些不那·么 promising 的孩子,说不定是潜力股。这其实就是 exploit 和 explore 平衡的问题。另外,MCTS 直接 Simulation 到对局结束, “回避”了局面评估的难题。
既然是 exploit 和 explore 的 问 题, 把 UCB 用 到 MCTS 就 是 UCT 算法(MCTS 是一族算法的统称,不同的 Tree Policy 和 Default Policy 就是不同的 MCTS 算法)。
UCT 算法
Selection 和 Expansion 的公式如上,和 UCB 很类似,只是 多了一个常量 Cp,用来平衡 exploit 和 explore。
每个节点v都有两个值, N(v)和Q(v),代表v访问过的次数(每 次迭代都是从 root 到结束状态的一条 Path,这条 Path 上的每个 点都被 visit 一次)和v的回报,如果这次 Simulation 己方获胜, 则Q(v) 1,否则Q(v)-1。(1、3、5… 层代表自己,2、4、6… 代 表对手,如果终我方获胜,1、3、5都要加一而2、4、6都 要减一)。
具体的计算公式如上,每次选孩子时都用上面的公式计算 得分。项就是这个节点的平均回报(exploit term)和第二 项就是 explore term,访问次数少的节点更应该被 explore。当 N(v)=0时第二项值为无穷大,所以如果某个节点有未展开的孩 子,总是优先展开,然后才可能重复展开回报高的孩子。
UCT 算法的特点
■ Aheuristic
不需要估值函数,因此也就不需要各种启发式规则、领域 知识,从而“回避”了围棋估值函数难的问题。
■ Anytime
可以任何时候结束,迭代的次数越多就越准确 。
■ Asymmetric
和人类的搜索类似,搜索树是不对称的,不是固定层次的, 而是“重点”搜索 promising 的子树。
UCT 在围棋领域的变种和改进
All Moves As First(AMAF)和 Rapid Action Value Estimation(RAVE)
这是很多开源 MCTS 围棋使用的一个变种。
如图 2 我们首先通过 UCT 的 Tree Policy 选择了 C2 和 A1,然后 Default Policy 选择了 B1、A3、C3,终黑棋获胜。
普通的 MCTS 会更新 C2 和 A1 的 N(v) 和 Q(v),而 AMAF 认为:既然在 Simulation 的过程中黑方选择了 B1 和 C3,在 root 节点时也可以选择 B1 和 C3,那么这次模拟其实也可以认为 B1 和C3对获胜是有帮助的,root节点的B1和C3也有贡献(标志为*),也应该更新统计量,让下次选择它的概率大一点。同理白棋在simulation的时候选择了A3,在C2也可以选择A3(有*的那个),那么 C2 对于白棋失败也是有责任的,那么下次在 C2 的时候白棋应该避免选择 A3。这样一次迭代就能多更新一些节点(那些没有直接 Selection 的也有一些统计量)。
图 2 AMAF
这个想法对于围棋似乎有些道理(因为不管哪个顺序很可能导致一样的局面,前提是没有吃子),而且实际效果也不错。但是在别的地方是否可以使用就需要看情况了。
这里有两类统计量:直接 selection 的节点统计量 (A1,C2) 和间接 selection 的节点 (B1,C3,A3)。这两种权重应该是不一样的。
所以比较直观的想法是给它们不同的权重 αA (1-α)U,这就是 α-AMAF。
这个权重 α 是固定的,RAVE 认为随着模拟次数的增加 α应该减少才对(没有真的模拟是可以用这些间接的统计量,如果有了真的更准确的估计,这些间接的统计量就应该降低权重,这个想法也很自然)。
RAVE 使用上面的公式动态调整 α,随着 v(n) 的增加,α的值不断下降。
Simulation 的改进
默认的 Default Policy 随机的选择走法模拟到结束,这在没有任何先验知识的时候是可以的。但是人类在“探索”未知局面时不是随机“探索”的,也是用一个估值函数指导的,去探索那些更 promising 的局面。
具体方法很多,比如 Contextual Monte Carlo Search,
Fill the Board 以及各种基于 Pattern 的方法。细节就不再展开讨论了。
MCTS 的并行搜索
Leaf Parallelisation
简单的是 Leaf Parallelisation,一个叶子用多个线程进行多次 Simulation,完全不改变之前的算法,把原来一次 Simulation的统计量用多次来代替,这样理论上应该准确不少。但这种并行的问题是需要等待慢的那个结束才能更新统计量,而且搜索的路径数没有增多。
Root Parallelisation
多个线程各自搜索各自的 UCT 树,后投票。
Tree Parallelisation
这是真正的并行搜索,用多个线程同时搜索 UCT 树。当然统计量的更新需要考虑多线程的问题,比如要加锁。
另外一个问题就是多个线程很可能同时走一样的路径(因为大家都选择目前看起来 Promising 的孩子),一种方法就是临时的修改 virtual loss,比如线程 1 在搜索孩子 a,那么就给它的Q(v) 减一个很大的数,这样其他线程就不太可能选择它了。当然线程 1 搜索完了之后要记得改回来。
《A Lock-free Multithreaded Monte-Carlo Tree SearchAlgorithm》使用了一种 lock-free 的算法,这种方法比加锁的方法要快很多,AlphaGo 也用了这个方法。
Segal 研究了为什么多机的 MCTS 算法很难,并且实验得出结论使用 virtual loss 的多线程版本能比较完美地 scale 到 64个线程(当然这是单机一个进程的多线程程序)。这也将是AlphaGo 的 scalability 的瓶颈。
使用了UCT算法之后,计算机围棋能提高到KGS 2d的水平。
…….
评论
还没有评论。