AlphaGo战胜人类围棋冠军已经好几年过去了,这个话题已经不热了,国内介绍这个项目原理的技术文章也非常多。遗憾的是国内并没有出现几个类似的成功案例,这个问题值得玩味。是不是在实践的路上有很多隐形的关键问题没有公开出来,就算把AlphaGo的源码公开,我们拿过来也做不出一个成功的应用呢?
        学以致用,为了做出一个能用的强化学习模型必须动手实践。首先得有一台训练用的机器,专用的强化学习工作站太贵,本人只好网购了一台专门配置玩游戏的电脑,主要就是需要英伟达的显卡。丐中丐版的2080Ti加上酷睿i9其他一切从简,全部配置下来不到两万RMB。AlphaZero的报道里面有围棋,国际象棋,日本将棋,可惜还没有中国象棋,可能老外都不会下吧,正好可以选这个项目来练手。想起小时候老爸教我象棋的时候,总是不用心,经验套路也都不去记,只是凭着自己的感觉走,总想着不要被别人发现自己的小心机......,多年过去了象棋一直走的不好,也一直下不过老爸;现在好了,我人是练不出来了,但我会写代码啊,我把机器练出来帮我。

硬件准备

软件准备

AI人工智能(调包侠)速成之路九(AlphaZero代码实战1:强化学习介绍)
AI人工智能(调包侠)速成之路十(AlphaZero代码实战2:蒙特卡洛树搜索)
AI人工智能(调包侠)速成之路十一(AlphaZero代码实战3:神经网络实现)
AI人工智能(调包侠)速成之路十二(AlphaZero代码实战4:人机对战实现)
AI人工智能(调包侠)速成之路十三(AlphaZero代码实战5:AI自对弈训练)

万事俱备只欠动手

AlphaZero巧妙了使用MCTS搜索树和神经网络一起,通过MCTS搜索树优化神经网络参数,反过来又通过优化的神经网络指导MCTS搜索。两者一主一辅,非常优雅的解决了这类状态完全可见,信息充分的棋类问题。
        使用Tensorflow2实现神经网络的部分。现在只剩最关键的模型训练部分了。

训练网络的步骤基本上都套路化了,但是决定成败和学习快慢的因素非常多,相关的技巧与理论指导也在不断发展,从入门到放弃也都发生在这个阶段。这个阶段也最能体现开发人员的基本素养和能力(概念清晰,灵活多变,善于尝试)。就像没有学不好的学生只有教不好的老师一样,每个神经网络模型就像是一个幼稚的学生,我们知道他/她/它一定可以成为“天才”,超越一切有机生物。但是我们是那个可以把他/她/它培养出来的好老师吗?

具体看下我们这个主体是19层残差网络的模型(因为只有一块显卡做训练,参数再多恐怕活不到训练出来的那天了...),需要训练的参数量是10366836个。训练神经网络模型的本质就是按照一定的方法不断调整这10366836个参数值,最后让这些参数合作起来输出的结果接近或者超越人类。人脑大约有120亿个脑细胞,最多不到10%是充分发展了的并常加以运用的,其余的仍处在未充分发展或完全没有发展的原始状态。对比起来看可以得出两个结论:1,以现在的网络规模来对抗人脑基本上还是很难完成的任务,所以很多模型训练失败是常态。2,人一生中浪费最大的资源或许就是我们的脑细胞吧......。

经过7*7*24小时,差不多到10万个局面数量级的训练后,中国象棋AI初级版终于练成了。迫不及待地的抄了个web界面做交互,后台调用训练出来的模型计算给结果。
web界面通过JS把走棋信息传到服务器,然后存入MySql数据库,AI模型循环读取数据库内容,遇到新存入的走棋信息就调用模型计算然后把结果再存入对应的数据表里面。Web界面本地循环读应答数据,有了内容就在界面上显示出来。

测试了一下棋力,确实很厉害。反正我是下不过了,自己做出了一个超过自己单项智力的软件我是应该高兴呢,还是高兴呢?
        接下来做什么呢,年轻人不讲武德,找个“大师”去虐虐?

也不知道大师都在哪里找,先下个QQ游戏,里面的"新中国象棋"试试手。网上下棋游戏都是限时间的,还要把自动网络对弈的功能实现出来。上网搜索了下按键精灵里面有个大漠插件功能很全,自动网络对弈直接调用插件就能实现了。
主要是识别窗口界面的棋盘状态(用大漠插件的自动找图找色功能实现),AI计算出对答着法后再调用大漠插件鼠标键盘接口自动下棋,完美。

不讲武德

初出茅庐

腾讯天天象棋 评测升级

消灭一切有机生物

”超过全国99.89%的棋友“目前止步到这里了,主要的问题是每步限时一分半钟就要出结果计算量不够,有时候得到的步数不是最优的。另外15分钟一局的总限时也会造成80个回合以后时间用尽了超时判负。现在是贫穷限制了想象力。要有更好的结果需要提升硬件,还需要继续自对弈训练模型。不知道能不能遇到富贵闲人赞助一笔资金,让这个不讲武德的年轻人完成目标。。。

王者象棋 通关

2021年2月贴吧上看到目前网上最专业的象棋等级评测 https://ke.wechess.cn/ (象棋微学堂 王者象棋)。用上面强化学习训练出来的中国象棋AI初级版对弈评测,6个等级全部顺利通关(家冠、村冠、镇冠、县冠、市冠、省冠)。

王者象棋 评测升级

经验总结

通关的过程比较顺利,程序用50个线程同时做蒙特卡洛树搜索,开始的时候每走一步棋每个线程递归搜索300次。中途遇到输棋的情况就把循环次数增大再继续评测(没有什么级别是循环次数后面加个零不能解决的,如果真的不能解决那就加两个零...)。
最后通关省冠的时候用的是50个线程,每一步棋递归搜索6000次。每一次递归搜索相当于是从当前局面一直考虑到棋局结束的时候,然后把每个中间局面都打分递归累计到当前局面的树节点上,50*6000等于30万。也就是说每走一步棋就进行了30万次的模拟对弈,然后选出得分最高的一个着法。可以看出来思考的深度和广度精确度都是超过人类棋手极限的,真正是”一力降十会“。

就像人脑做加减乘除肯定被电脑碾压一样。随着芯片计算能力的数量级提高,可以预见不久的将来所有棋类项目人类棋手都会被AI碾压(棋院的老头退休后,年轻人估计不会再去接力了)。就像手机里面自带的计算器小工具一样,有谁会觉得自己的心算能力超强要去跟计算器比比看呢?

AI人工智能(调包侠)速成之路十四(中国象棋AI网络机器人:AI技术综合应用实现)相关推荐

  1. 作为一名数据分析+人工智能调包侠,我天天在公司瞎捣鼓什么?

    相信很多人学python可能最终目的是冲着从事人工智能而来,这里不得不说,真正的人工智能门槛高,而且对学历.数学功底.编程能力等等都是有很高的要求,下面是我截图拉勾上海地区人工智能首页招聘信息,图中可 ...

  2. 深度学习时代,调包侠没有未来,但是这个“包”有

    来源:AI科技评论 本文长度为2300字,建议阅读5分钟 本文为大家介绍了NumPy的现状. 工欲善其事必先利其器~ 今日我"代码之神"把装备拉满,势必要大干一场! 在编程中只会H ...

  3. 前几行 python_调包侠神器2.0发布,Python机器学习模型搭建只需要几行代码

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI Python开源机器学习建模库PyCaret,刚刚发布了2.0版本. 这款堪称「调包侠神器」的模型训练工具包,几行代码就能搞定模型编写.改进 ...

  4. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)

    Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...

  5. python调包师_为“Python调包侠” 画像

    很多从事IT行业的朋友:包括运维.测试.数据分析.网络安全,在北上广每月工资1.5万/月以上,有的甚至到达2万/月,碰到职业瓶颈了,工资碰到天花板.有的朋友认为自己会Python编程,其实还是处在&q ...

  6. ai二维码插件_送你60款AI脚本插件包,已整合成插件面板的形式,方便在AI中调用...

    送你60款AI脚本插件包,已整合成插件面板的形式,方便在AI中调用. (领取方式见文章末尾) [AI脚本插件合集包] 此AI插件包目前有66款ai脚本插件,已经整合成插件面板的形式,方便在AI中调用. ...

  7. 六级考研单词之路-十四

    title: 六级考研单词之路-十四 date: 2020-12-01 11:11:45 tags: 六级考研单词之路 Day14 1.grant[v.允许,承认,授予:n.授予物,补助金,同意] e ...

  8. python调包侠_拒绝调包侠,不需要高级算法和数据结构技巧

    大多数工科学生或者刚刚入门近年来比较火的"人工智能"相关算法的同学,在选择语言的时候,都会选择MATLAB. Python .R等等这些高级语言,对自己所学的算法进行实现和调试.这 ...

  9. 程序员修炼之路(十四)IT外企那点儿事--也说跳槽

    最近一个月一直在忙项目,几乎没什么时间写博客,今天中午才有时间看看csdn,在论坛上看到一篇很好的文章,分享给大家.也给自己留作备用. 原文地址:http://www.cnblogs.com/forf ...

  10. python模仿百度云桌面_利用百度云接口实现车牌识别!人称Python调包侠!

    一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开 ...

最新文章

  1. 提高WPF程序性能的几条建议
  2. php 取多级分类,php – 获取所有类别(多级)
  3. 跳槽必加薪?跳槽是涨薪最快的方式么
  4. mac sublime java_Mac环境下使用SublimeText写Java代码
  5. 【前端】CSS使用总结
  6. 怎么在html中加入pjax,网页添加Pjax代码实现无刷新加载
  7. AttributeError: 'numpy.int64' object has no attribute 'translate'
  8. 【案例】做一个电话簿(二)
  9. 微信开发者工具 http 调试
  10. 企业级无线无缝漫游之思创漫游3.0 Plus ,三层漫游
  11. educoder考试可以切屏吗_线上考试真的好多人作弊吗?
  12. Android系统里面的服务器和客户端的概念解析
  13. QT如何去掉布局(Layout)内控件之间的空隙
  14. tcp图片13包java怎么接收_13. TCP协议中的动态数据传输:应对小数据包
  15. UI设计——以网易云音乐为例
  16. 国学大师林语堂献宝:英文学习八要诀
  17. java tess4j 示例_java 使用tess4j实现OCR的最简单样例
  18. 基于antd pro框架,配置接口apiUrl前缀
  19. faker和劫的图片_faker亲手画的劫被曝光,看到他的画,众人心里久久不能平息...
  20. Android 软键盘 弹出,默认隐藏,强制隐藏,自动变大写等

热门文章

  1. 二维vector初始化方法
  2. 在线c语言编程网站_学编程有哪些好的网站推荐?
  3. 【安卓项目】期末大作业——“记账宝”APP开发案例
  4. 如何做一个本地漫画党:了解漫画+下载漫画+漫画APP推荐
  5. Oracle Exadata初探
  6. 原生PHP配置paypal支付接口成功!不用Composer!
  7. Nmap内网扫描端口
  8. html静态网页模板如何上传,html – 如何使用模板生成静态网页?
  9. B2C电子商务开发的网店管理系统
  10. catia中的螺旋伞齿轮画法_CATIA齿轮绘制方法