大模型系列——AlphaZero/强化学习/MCTS

AlphaGo Zero无需任何人类历史棋谱,仅使用深度强化学习,从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。

1、围棋知识

(1)如何简单理解围棋知识

(2)数子法分胜负:https://zhuanlan.zhihu.com/p/37673325

(3)如何数目分胜负:https://www.zhihu.com/question/284822816/answer/2897667581

(4)3分钟围棋入门视频(总共近2小时):b站 

2、强化学习

强化学习(Reinforcement Learning)是机器学习里面一个分支。如果说强化学习在AlphaGo之前版本里面还是初试牛刀的话,那在AlphaGo zero里面强就真正大显神威。根据deepmind的论文,新版本AlphaGo Zero经过三天的训练轻易达到对老版本的100:0的胜率,并且完全无需人类棋谱。可以说,AlphaGo Zero仅仅三天的成就就远远超过了人类数千年的围棋探索。

强化学习和传统机器学习的区别有如下几点:

  • 传统机器学习假设算法本身对于环境无影响,强化学习破除了这个限制,能够考虑到了算法对于环境的影响, 这使得强化学习特别适合解决多回合博弈或者顺序决策问题。在传统机器学习中,如果你预测完了之后你根据据测去做多或着做空这个股票,那么其他的股票买家可能因为你的行为改变了自身行为,你原来的训练的模型便会失效,而强化学习可以考虑到这点。
  • 在强化学习中,数据是在运行过程中自主收集。AlphaGo Zero之所以能够完全摒弃人类知识就是因为所有的数据都是通过机器互博生成。

用强化学习解决问题,我们需要首先把要解决的问题转化成为一个环境(environment)。环境需要如下的要素:

  • 状态空间(state space):对于围棋来说,每一个棋盘布局(记为s)就是一个状态。所有可能的棋盘布局就是状态空间。
  • 动作空间 (action space):对于围棋来说,所有可能落子的位置就是一个动作空间
  • 可行动作 (allowable action): 在给定状态下,什么动作是可行,什么是不可以的。在围棋里,就是给定一个棋盘,哪里可以落子,哪里不可以。
  • 状态转化:你落子之后,对手可能会下的子。如果是两台alpha zero互搏的话,相互是对方环境的一个部分。
  • 奖励函数:你落子之后得到的信号。在围棋里面,就是胜率的一个正函数。胜率越大,奖赏越大。

在强化学习里面,知识可以通过一个称为状态-动作值函数(state-action value function) 的结构的存储。通常大家用符号Q(s,a)来表示这个函数,这就是所谓Q-learning的来历。简而言之,Q(s,a)是对于状态s,采取动作a的期望奖励(expected reward)。

强化学习知识(理论):https://zhuanlan.zhihu.com/p/25319023

3、AlphaZero实战

AlphaZero实战:从零学下五子棋(附代码):https://zhuanlan.zhihu.com/p/32089487

3.1 模型训练

本节参考:https://zhuanlan.zhihu.com/p/30339643

训练步骤如下:

(1)构造MCTSPlayer self_play一些轮次后(批量进行),收集构造批次训练数据(包括当前状态,可能的行动概率,胜率),其中winners_z为1或者-1,如下:

zip(states, mcts_probs, winners_z)

(2)利用self_play数据训练策略价值网络。

(2)构造MCTSPlayer和MCTS_Pure(每个子节点的概率都一样)两个玩家,对战n_games次,返回胜率。

(3)若胜率为最佳,则保存当前模型。

(4)重复以上步骤game_batch_num次。

注意:这里MCTS是AlphaZero能够通过self_play不断变强的最重要的原因,相当于用能力不这么强的模型尝试多次后取更有可能胜利的判断。刚开始模型准确率基本为0,但让其仿真模拟N次后,知道哪些落子路径有一定的胜率。将这些路径作为训练数据,训练模型后,模型有一定准确率,MCTS仿真N次后,得到更佳的路径,最终不断变强。

3.2 实际对战

整体步骤如下:

(1)构造Human和MCTSPlayer两个玩家,进入start_play方法的while循环中

(2)交替出子

(3)若判断有人胜出则结束。

1、MCTSPlayer计算出子流程(Play)

(1)利用MCTS策略模拟执行500次,获取子节点访问次数。注意:本代码中_n_playout为500,每一个playout中敌我双方走了N步(不超过当前树的最大深度),直到产生了新的路径节点才结束本次仿真。

(2)所有仿真结束后,根据父节点下所有一级子节点的访问次数构造概率,获得下一步落子位置。

这里面T为温度参数,T越大,表示温度越高,落子位置越随机,否则位置越确定,代码中temp参数为0.01。公式实验如下:

visits = [2,10, 8, 4, 1]

softmax(1.0/0.001*np.log(np.array(visits)))
array([0.00000000e+00, 1.00000000e+00, 1.23023192e-97, 0.00000000e+00,
       0.00000000e+00])
>>> softmax(1.0/0.01*np.log(np.array(visits)))
array([1.26765060e-070, 1.00000000e+000, 2.03703598e-010, 1.60693804e-040,
       1.00000000e-100])
>>> softmax(1.0/0.1*np.log(np.array(visits)))
array([9.24622380e-08, 9.02951542e-01, 9.69536836e-02, 9.46813317e-05,
       9.02951542e-11])
>>> softmax(1.0/1*np.log(np.array(visits)))
array([0.08, 0.4 , 0.32, 0.16, 0.04])

可以看出,当temp为1时,概率就比较均匀了。否则为0.001时,虽然10和8差距小,但概率都集中到了10这个为止。


最后说下最终落子的采样逻辑,按概率随机选择一个:

random.choice说明如下:
If an ndarray, a random sample is generated from its elements.
>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], # randomdtype='<U11')

2、MCTS推演落子规则-(Select)

在每一个节点s,AlphaGo Zero会根据如下的公式来选择下一次落子位置:

其中Q(s, a)是对于状态动值函数的估计值。U(s,a)是一个confidence interval 的upbound。决定探索(exploration)的程度。

代码实现如下:

 从代码中可以看出U由P、当前节点访问次数、父节点访问次数组成,当前节点访问次数越低,值越高,结合c_puct(代码中为5)赋予探索权重。

2、MCTS推演落子规则-(Expand and Evaluate)

 (1)当棋局没有结束且仿真到叶子节点时(select参考上述步骤),则需要Expand操作添加新的行为策略节点,并将本次仿真后的胜率更新到Q值,继续下一次仿真。

3、MCTS更新Q值-(Backup)

(1)更新节点和父节点Q值

一次仿真结束后,调用_policy进行策略和胜率评估,这里的胜率是node节点对手的胜率,因此当前节点的Q值更新是-leaf_value。另外由于是交替进行,父节点是leaf_value。

这里leaf_value是最终盘面的胜率,相当于最终的奖励。用于更新Q,根据访问次数平均权重 

4、alphago和alphazero对比

4.1 AlphaGo 和 AlphaZero 的区别

本段参考:https://zhuanlan.zhihu.com/p/634880256

(1) Policy network 和 Value network 的神经网络 前几层参数是共享的

(2)一开始没有 Supervised Learning of Policy Network (SL policy network) 的环节,也就是说完全没有加入任何人类先验知识在里边,直接暴力上强化学习。

。这一点 AlphaZero 就是完全颠覆了人类传统棋理,可见 AlphaZero 在没有人类先验知识的情况下,不仅仅可以学习到人类的走棋模式,也可以创造出自己的走棋模式,而且这种走棋模式还更加合理。

其他较好文章:https://zhuanlan.zhihu.com/p/30339643

minigo解读:https://zhuanlan.zhihu.com/p/352536850 

minigo实现:https://github.com/tensorflow/minigo

5、问题

 (1)大模型中若使用MCTS,那么策略和价值如何定义?

在数学题中,可以分解子问题作为action

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/459352.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年【金属非金属矿山(地下矿山)安全管理人员】考试报名及金属非金属矿山(地下矿山)安全管理人员复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试报名是安全生产模拟考试一点通生成的&#xff0c;金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员证模拟考试题库是根据金属非金属矿山…

uniapp开发【选择地址-省市区功能】,直接套用即可

一、效果展示 二、代码 <template><view><view class="user_info"><view class="item"

【动手学强化学习】part2-动态规划算法

阐述、总结【动手学强化学习】章节内容的学习情况&#xff0c;复现并理解代码。 文章目录 一、什么是动态规划&#xff1f;1.1概念1.2适用条件 二、算法示例2.1问题建模2.2策略迭代&#xff08;policyiteration&#xff09;算法2.2.1伪代码2.2.2完整代码2.2.3运行结果2.2.4代码…

Elastic Stack - FileBeat 入门浅体验

Filebeat 是 Elastic Stack 中的一个轻量级日志转发器&#xff0c;主要用于收集和转发日志数据。Filebeat 作为代理安装在您的服务器上&#xff0c;可以监控您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将其转发到 Elasticsearch 或 Logstash 进行索引。 一…

Xcode文件默认存储位置-使用c++file保存文件默认路径以及设置为路径为当前项目路径

Xcode文件默认存储位置-使用cfile保存文件默认路径以及设置为路径为当前项目路径 1.概述 使用Xcode工具开发时候&#xff0c;遇到C调用file创建文件后&#xff0c;在当前项目中找不到文件路径。这是由于xcode会将文件保存到默认设置的路径。下面是查看文件默认存储路径和修改…

Linux高手进阶

查看系统资源占用&#xff1a; top&#xff1a;查看CPU、内存使用情况&#xff0c;类似 windows 的任务管理器 默认 5秒刷新一次语法&#xff1a; 直接输入 top按 q 或 ctrl c 退出内容详解&#xff1a; 第一行&#xff1a; top&#xff1a;命令名称 -系统时间up 23:57 min &…

单位不同的现货黄金价格怎么换算?

在国际贵金属市场上&#xff0c;现货黄金的价格是以“美元/盎司”来计算的&#xff0c;一金衡盎司的精确定义是31.1034768 克&#xff0c;早在1828年5月19日的国会法案中&#xff0c;这个单位就已经被美国采用作官方的造币重量标准。 国际现货黄金和国内金价价格的换算公式是&a…

大型项目成功秘诀:软件工程师的实践经验分享 ​

一、介绍 本指南适用于刚开始管理大型复杂项目的软件工程师。这些项目通常具有高度的模糊性&#xff0c;需要战略指导&#xff0c;远远超出了常规工程任务的范围。 通常&#xff0c;工程师们并不是因为自己主动选择而掌管这些项目&#xff0c;而是因为这些项目是交给他们的。…

深度学习-学习率调整策略

在深度学习中&#xff0c;学习率调整策略&#xff08;Learning Rate Scheduling&#xff09;用于在训练过程中动态调整学习率&#xff0c;以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。下面介绍一些常见的学习率调整策…

vue前端使用pdfjs与pdfdist-mergeofd 实现预览pdf并翻页,同时解决预览pdf显示模糊的问题

vue前端使用pdfjs与pdfdist-mergeofd 实现预览pdf并翻页&#xff0c;同时解决预览pdf显示模糊的问题 插件介绍 pdfdist-mergeofd插件的作用可查看这篇文章&#xff0c;同时使用ofdjs和pdfjs遇到的问题&#xff0c;和解决方法——懒加载 该插件主要是为了解决pdfjs和ofdjs同时…

【PUCCH——Format和资源集】

PUCCH 信道格式&#xff0c;就是指对于PUCCH信道&#xff0c;在时域上占据多少个OFDM符号&#xff0c;频域上占据多少个RB&#xff0c;传输比特数多少的一种约定。 NR中&#xff0c;在38.213-9.2.2节对PUCCH 格式进行了定义&#xff0c;目前&#xff0c;一共有5种格式&#xf…

【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引

文章目录 一、数据存储方式二、二维网格二维线程块三、二维网格一维线程块四、一维网格一维线程块 为了方便下次找到文章&#xff0c;也方便联系我给大家提供帮助&#xff0c;欢迎大家点赞&#x1f44d;、收藏&#x1f4c2;和关注&#x1f514;&#xff01;一起讨论技术问题&am…

软件测试工程师晋升方向,你选对了吗?

在信息技术行业中&#xff0c;软件测试工程师是一个至关重要的角色&#xff0c;他们负责确保软件的质量和稳定性。然而&#xff0c;随着经验和技能的增长&#xff0c;软件测试工程师也面临着晋升和职业发展的问题。本文将探讨软件测试工程师的晋升方向&#xff0c;为有志于在软…

关键词排名技巧实用指南提升网站流量的有效策略

内容概要 在数字营销的世界中&#xff0c;关键词排名的影响不可小觑。关键词是用户在搜索引擎中输入的词语&#xff0c;通过精确选择和优化这些关键词&#xff0c;网站能够更轻松地被目标用户发现。提升关键词排名的第一步是了解基本概念&#xff0c;包括关键词的分类、重要性…

NVR设备ONVIF接入平台EasyCVR视频分析设备平台视频质量诊断技术与能力

视频诊断技术是一种智能化的视频故障分析与预警系统&#xff0c;NVR设备ONVIF接入平台EasyCVR通过对前端设备传回的码流进行解码以及图像质量评估&#xff0c;对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要&#xff0c;因为它能够确保监…

前端八股文第一篇

自我介绍&#xff1a;我的优势以及和这个岗位的匹配度。 为什么想进我们公司&#xff1a;HR想听有没有对这个岗位进行充分了解。 以前做的项目&#xff1a;你的思路&#xff0c;你的贡献&#xff0c;你的总结是什么。 介绍最失败的事情&#xff1a;有没有总结和反思。 要求…

SolidWorks 导出 URDF 中的惯性矩阵错误问题

系列文章目录 前言 一、 dsubhasish09于2021年5月23日发表评论 在装配体中定义由多个零件组成的 link 时&#xff0c;单个零件质心处各自的惯性值&#xff08;在使用相似性变换使其与关节坐标系平行后&#xff09;会直接相加&#xff0c;从而得到净惯性矩阵&#xff0c;而不是…

鸿蒙UI开发——基于组件安全区方案实现沉浸式界面

1、概 述 本文是接着上篇文章 鸿蒙UI开发——基于全屏方案实现沉浸式界面 的继续讨论。除了全屏方案实现沉浸式界面外&#xff0c;我们还可以使用组件安全区的方案。 当我们没有使用setWindowLayoutFullScreen()接口设置窗口为全屏布局时&#xff0c;默认使用的策略就是组件安…

鸿蒙学习总结

鸿蒙&#xff08;HarmonyOS&#xff09;&#xff0c;做为国产自主研发设计的第一个操作系统&#xff0c;从开放测试以来一直备受关注。其纯血鸿蒙版&#xff08;HarmonyOS NEXT&#xff09;也于进日发布。过去的一段时间里&#xff0c;我站在一个移动开发者的角度对HarmonyOS进…

【electron8】electron实现“图片”的另存为

注&#xff1a;该列出的代码&#xff0c;都在文章内示例出 1. 另存为按钮事件&#xff1a; const saveAsHandler async () > {const { path, sessionId } recordInfoif(typeof message ! string) return;// 因为我的图片是加密的&#xff0c;所以我需要根据接口返回的路…