大模型系列——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
相关文章:
大模型系列——AlphaZero/强化学习/MCTS
AlphaGo Zero无需任何人类历史棋谱,仅使用深度强化学习,从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。 1、围棋知识 (1)如何简单理解围棋知识 (2)数子法分胜负:https://zhu…...
原生js实现拖拽上传(拖拽时高亮上传区域)
文章目录 drop相关事件说明-MDN演示代码(.html) drop相关事件说明-MDN 演示 代码(.html) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"…...
python道格拉斯算法的实现
废话不多说 直接开干 需要用到模块 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple math #对浮点数的数学运算函数 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple shapely #提供几何形状的操作和分析,如交集、并集、差集等 pip install -i …...
STM32的hal库中,后缀带ex和不带的有什么区别
在STM32的HAL(硬件抽象层)库中,后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件: 这些文件通常包含标准的、核心…...
可观测性三大支柱
目录 可观测性成熟度模型 可观测性三大支柱的具体定义如下 指标 日志 链路 可观测性成熟度模型 可观测性成熟度模型,是一种用于衡量和评估企业软件系统内部可观测性的框架或方法,同 时也是一种用于反馈企业可观测性体系建设成熟度水平的框架或方法…...
【银河麒麟高级服务器操作系统·实例分享】裸金属服务器开机失败分析及处理建议
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 裸金属物理服务器开机卡在EFI stub页面…...
模型剪枝实操
文章目录 实验报告:模型剪枝在图像分类任务中的应用摘要实验方法数据集和预处理模型架构剪枝过程实验设置 实验效果性能对比详细分析 结论 实验报告:模型剪枝在图像分类任务中的应用 摘要 本实验通过模型剪枝技术,对一个图像分类模型进行压…...
网安学习路线!最详细没有之一!看了这么多分享网安学习路线的一个详细的都没有!
零基础小白,到就业!入门到入土的网安学习路线! 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了! 我把自己报班的系统学习路线,整理拿出来跟大家分享了!点击下图,福利! …...
Ubuntu18.04安装vscode1.94.2失败安装vscode1.84.2
系统环境:Ubuntu18.04.6 LTS 自己先去vscode官网下载好最新版本的vscode1.94.2(不下也行,反正最新版也用不了,哈哈) 网址:Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code ed…...
Redis中Lua脚本的使用场景
Redis 中的 Lua 脚本可以用于多种场景,以下是一些常见的使用场景及其对应的 Java 实现示例。 通过使用 Lua 脚本,可以在 Redis 中实现复杂的逻辑和原子操作,同时利用 Java 客户端(如 Spring Data Redis)方便地执行这些…...
重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台
使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...
【linux】手动启动sshd
安装openssh-server修改配置文件启动 以下是在常见的Linux系统中手动开启sshd服务的步骤: 1.安装openssh-server CentOS/RHEL系统 首先,以具有管理员权限的用户(通常是root)登录到系统。检查sshd服务是否已经安装。可以使用以…...
前端项目【本科期间】
1.基于博达网站群的申达办官方网站开发与维护 实习项目:校发展规划中心暨申请更名大学办公室官方网站 技术栈:HTML/CSS/Javascript 博达网站群的入门级指南 -CSDN博客博达网站群的入门级指南 -CSDN博客 网上少的较全的基于博达网站建设指南,CSDN相关内容综合指数NO有.1 …...
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
深度学习实践者都知道,在训练神经网络时,正确设置学习率是使模型达到良好性能的关键因素之一。学习率通常会在训练过程中根据某种调度策略进行动态调整。调度策略的选择对训练质量也有很大影响。 大多数实践者采用一些广泛使用的学习率调度策略,例如阶梯式衰减或余弦退火。这些…...
Python毕业设计-基于 Python flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…...
Linux初阶——线程(Part1)
一、线程概念 1、如何理解线程 说到线程,那么我们就要回到进程了。 1.1. 再谈进程 对一个进程来说,它在内存中是这样的: 图1.1-a 其中一个 task_struct 独享一个进程地址空间和一个页表。 而线程其实和进程差不多,是这样的&…...
SpringBoot后端开发常用工具详细介绍——flyway数据库版本控制工具
文章目录 什么是flyway简介为什么要使用flyway 流程介绍整合springboot添加pom文件配置flyway向resource/db/migration添加sql文件 注意事项1. 迁移报错2. 迁移顺序 参考 什么是flyway 简介 为什么要使用flyway 我们在开发时往往会有这样一种情况: 进行软件开发…...
CSS揭秘:7. 伪随机背景
前置知识:CSS 渐变,5. 条纹背景,6. 复杂的背景图案 前言 本篇主要内容依然是关于背景的,无限平铺的背景会显得整齐美观,但又有些呆板,如何实现背景的多样性和随机性,是本篇的核心。 一、四种颜…...
SAP CODE DEMO:查找AL11 指定路径下文件中的内容
有时候需要查找某个具体的内容,在哪个文件内。数据量大的时候可以利用程序查找 选择界面: 路径,和文件名都可以模糊搜查 search string:你要查找的信息。 代码参考如下: report z00R010 NO STANDARD PAGE HEADING…...
【华为HCIP实战课程二十四】中间到中间系统协议IS-IS配置实战,网络工程师
一、IS-IS整体架构 将Level-1路由器部署在非骨干区域,Level-2路由器和Level-1-2路由器部署在骨干区域。 每一个非骨干区域都通过Level-1-2路由器与骨干区域相连! 1、在IS-IS中,每个链路可以属于不同的区域,OSPF中每个链路属于同一个区域 2、在IS-IS中,单个区域没有物理…...
【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理},gitlab的使用
【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理} git Git 详细安装教程(详解 Git 安装过程的每一个步骤) TortoiseGit 【TortoiseGit】TortoiseGit安装和配置详细说明...
篇章十一 打包构建工具
文章目录 一、gulp1. 流2. gulp 的作用3. gulp 的安装、检测和卸载 二、webpack1. 打包样式资源2. 打包 html 资源3. 打包图片资源4. 压缩 html 代码5. 生产环境基本配置 三、vite 打包构建工具,都是依赖于 node 环境进行开发,底层封装的内容就是 node 里…...
青少年编程与数学 02-002 Sql Server 数据库应用 06课题、数据库操作
青少年编程与数学 02-002 Sql Server 数据库应用 06课题、数据库操作 课题摘要:一、数据库的文件组成二、系统数据库三、创建数据库四、数据库配置1. 修改数据库文件大小和增长设置2. 添加或移除数据文件3. 设置数据库选项4. 配置数据库的恢复模型5. 管理数据库的访问权限6. 使…...
MacOS下载安装Logisim(图文教程)
本章教程主要介绍如何在MacOS系统中安装Logisim。 一、Logisim是什么? Logisim是一个用于电子逻辑门电路模拟的教育工具软件。它允许用户通过图形界面构建和测试复杂的数字逻辑电路,如加法器、解码器、编码器、寄存器、内存等,从而帮助学生理解计算机硬件的工作原理。 二、如…...
Flink CDC系列之:调研应用Flink CDC将 ELT 从 MySQL 流式传输到 StarRocks方案
Flink CDC系列之:调研应用Flink CDC将 ELT 从 MySQL 流式传输到 StarRocks方案 准备准备 Flink Standalone 集群准备 docker compose为 MySQL 准备记录使用 Flink CDC CLI 提交作业 同步架构和数据更改路由变更清理 本教程将展示如何使用 Flink CDC 快速构建从 MySQ…...
一次元空间FullGC导致OOM问题分析
原文,作者:kkyeer 原文需要翻墙,所以转载。 现象 观测平台告警:FullGC次数大于阈值,5分钟内大于11次,频次大概1-2周有一次 告警后服务概率性会自动恢复,控制台打印 Exception: java.lang.OutOf…...
Web前端开发工具和依赖安装
各种安装: node.js https://nodejs.org/zh-cn/ 安装完node.js 可以使用npm,npm跟随nodejs一起安装 node --version 查看已安装node.js的版本,确认是否安装nodejs npm -v 查看npm版本npm install <Module Name> 安装模块 npm insta…...
【学习心得】远程root用户访问服务器中的MySQL8
一、Ubuntu下的MySQL8安装 在Ubuntu系统中安装MySQL 8.0可以通过以下步骤进行1. 更新包管理工具的仓库列表: sudo apt update 2. 安装MySQL 8.0,root用户默认没有密码: sudo apt install mysql-server sudo apt install mysql-client 【…...
lust变频器维修电梯变频器CDD34.014.W2.1LSPC1
LUST伺服在安装时须注意,不可有任何的铁屑、螺丝、导线等掉人驱动器内。在安装完成后应作基本的检测动作,如对地阻抗,和短路检测等。 所有的安装及使用事项需要符合安全规定,并且也需要符合当地的相关规定和灾害预防措施。DC BUS…...
跨越地域限制:在线原型设计软件的自由与便捷
网络原型设计软件因其便捷性和灵活性,在现代设计工作中扮演着至关重要的角色。与传统的桌面端软件相比,网络原型设计工具无需安装,不受地域限制,且兼容各种操作系统,无论是Linux、Solaris、Mac还是Windows,…...
建设网站西丽/最专业的seo公司
文章目录 前言I、定时器的基本用法1.1 添加计时器1.2 往运行循环添加timer1.3 保证定时器的运行不受UI事件影响II 停止定时器的方案2.1 invalidate的用法2.2 FireDate的用法III CADisplayLink 与 NSTimer 有什么不同?3.1 精确度3.2 使用场合3.3 注意事项IV、使用CALayer 实现时…...
wordpress 餐饮 主题/搜索引擎广告案例
php保存二进制原始数据为图片的程序代码得到post过来的二进制原始数据,选择一个生成路径及图片的名字,之后写入,思路很显而易见//生成图片$imgDir uploadImg/;$filename"nissangcj".$mobile.".jpg";///要生成的图片名字…...
做淘宝网站多少钱/重庆网络推广专员
时间进入到3月份,春天的气息也好似弥漫到了整个手机圈,一年中新机的高产期近在眼前,近期有换机需求的同学可要擦亮双眼了。机情问答:6000元买三星or苹果?努比亚α能玩吃鸡吗本周一,独立成为子品牌的红米&am…...
word文档做网站/营业推广
ES6为Array增加了find(),findIndex函数。 find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined。 findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。 他们的都是一个查找回调函数…...
英文网站制作注意点/网站统计数据
1.明确哪些代码是多线程代。 2.明确共享数据。 3.明确多线程运行代码中哪些语句是操作共享数据的。 synchronized作为修饰符放函数上。同步函数使用的锁是:this验证:开启两个线程,一个同步代码块,一个同步函数。 class Ticket …...
企业网站建设需要哪些费用/推广点击器
在上篇文章写到我们为什么要分层.有很多读者提出来很多宝贵的意见.让我受益匪浅,深深的感觉到自己的水平"还有很大的提升空间".首先感谢这些朋友们,我会进一步总结完善自己的想法. 截取了部分朋友的留言,感谢他们: 这次我用对比的方式描述一下,分层到底分出了什么.俗…...