当前位置: 首页 > news >正文

大模型系列——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无需任何人类历史棋谱&#xff0c;仅使用深度强化学习&#xff0c;从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。 1、围棋知识 &#xff08;1&#xff09;如何简单理解围棋知识 &#xff08;2&#xff09;数子法分胜负&#xff1a;https://zhu…...

原生js实现拖拽上传(拖拽时高亮上传区域)

文章目录 drop相关事件说明-MDN演示代码&#xff08;.html) drop相关事件说明-MDN 演示 代码&#xff08;.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 #提供几何形状的操作和分析&#xff0c;如交集、并集、差集等 pip install -i …...

STM32的hal库中,后缀带ex和不带的有什么区别

在STM32的HAL&#xff08;硬件抽象层&#xff09;库中&#xff0c;后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件&#xff1a; 这些文件通常包含标准的、核心…...

可观测性三大支柱

目录 可观测性成熟度模型 可观测性三大支柱的具体定义如下 指标 日志 链路 可观测性成熟度模型 可观测性成熟度模型&#xff0c;是一种用于衡量和评估企业软件系统内部可观测性的框架或方法&#xff0c;同 时也是一种用于反馈企业可观测性体系建设成熟度水平的框架或方法…...

【银河麒麟高级服务器操作系统·实例分享】裸金属服务器开机失败分析及处理建议

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 裸金属物理服务器开机卡在EFI stub页面…...

模型剪枝实操

文章目录 实验报告&#xff1a;模型剪枝在图像分类任务中的应用摘要实验方法数据集和预处理模型架构剪枝过程实验设置 实验效果性能对比详细分析 结论 实验报告&#xff1a;模型剪枝在图像分类任务中的应用 摘要 本实验通过模型剪枝技术&#xff0c;对一个图像分类模型进行压…...

网安学习路线!最详细没有之一!看了这么多分享网安学习路线的一个详细的都没有!

零基础小白&#xff0c;到就业&#xff01;入门到入土的网安学习路线&#xff01; 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 我把自己报班的系统学习路线&#xff0c;整理拿出来跟大家分享了&#xff01;点击下图&#xff0c;福利&#xff01; …...

Ubuntu18.04安装vscode1.94.2失败安装vscode1.84.2

系统环境&#xff1a;Ubuntu18.04.6 LTS 自己先去vscode官网下载好最新版本的vscode1.94.2&#xff08;不下也行&#xff0c;反正最新版也用不了&#xff0c;哈哈&#xff09; 网址&#xff1a;Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code ed…...

Redis中Lua脚本的使用场景

Redis 中的 Lua 脚本可以用于多种场景&#xff0c;以下是一些常见的使用场景及其对应的 Java 实现示例。 通过使用 Lua 脚本&#xff0c;可以在 Redis 中实现复杂的逻辑和原子操作&#xff0c;同时利用 Java 客户端&#xff08;如 Spring Data Redis&#xff09;方便地执行这些…...

重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量替代 OGG, Kettle 等同步工具&#xff0c;以及基于 Kafka 的 ETL 解决方案&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速仓内数据流转&#xff0c;帮助企业…...

【linux】手动启动sshd

安装openssh-server修改配置文件启动 以下是在常见的Linux系统中手动开启sshd服务的步骤&#xff1a; 1.安装openssh-server CentOS/RHEL系统 首先&#xff0c;以具有管理员权限的用户&#xff08;通常是root&#xff09;登录到系统。检查sshd服务是否已经安装。可以使用以…...

前端项目【本科期间】

1.基于博达网站群的申达办官方网站开发与维护 实习项目:校发展规划中心暨申请更名大学办公室官方网站 技术栈:HTML/CSS/Javascript 博达网站群的入门级指南 -CSDN博客博达网站群的入门级指南 -CSDN博客 网上少的较全的基于博达网站建设指南,CSDN相关内容综合指数NO有.1 …...

深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究

深度学习实践者都知道,在训练神经网络时,正确设置学习率是使模型达到良好性能的关键因素之一。学习率通常会在训练过程中根据某种调度策略进行动态调整。调度策略的选择对训练质量也有很大影响。 大多数实践者采用一些广泛使用的学习率调度策略,例如阶梯式衰减或余弦退火。这些…...

Python毕业设计-基于 Python flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…...

Linux初阶——线程(Part1)

一、线程概念 1、如何理解线程 说到线程&#xff0c;那么我们就要回到进程了。 1.1. 再谈进程 对一个进程来说&#xff0c;它在内存中是这样的&#xff1a; 图1.1-a 其中一个 task_struct 独享一个进程地址空间和一个页表。 而线程其实和进程差不多&#xff0c;是这样的&…...

SpringBoot后端开发常用工具详细介绍——flyway数据库版本控制工具

文章目录 什么是flyway简介为什么要使用flyway 流程介绍整合springboot添加pom文件配置flyway向resource/db/migration添加sql文件 注意事项1. 迁移报错2. 迁移顺序 参考 什么是flyway 简介 为什么要使用flyway 我们在开发时往往会有这样一种情况&#xff1a; 进行软件开发…...

CSS揭秘:7. 伪随机背景

前置知识&#xff1a;CSS 渐变&#xff0c;5. 条纹背景&#xff0c;6. 复杂的背景图案 前言 本篇主要内容依然是关于背景的&#xff0c;无限平铺的背景会显得整齐美观&#xff0c;但又有些呆板&#xff0c;如何实现背景的多样性和随机性&#xff0c;是本篇的核心。 一、四种颜…...

SAP CODE DEMO:查找AL11 指定路径下文件中的内容

有时候需要查找某个具体的内容&#xff0c;在哪个文件内。数据量大的时候可以利用程序查找 选择界面&#xff1a; 路径&#xff0c;和文件名都可以模糊搜查 search string&#xff1a;你要查找的信息。 代码参考如下&#xff1a; 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中,单个区域没有物理…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...