深度强化学习——AlphaGo实例讲解(5)

news2024/9/20 21:22:49

现在我们来分析AlphaGo这个实例,看看深度强化学习是怎么样用来玩围棋游戏的

AlphaGo的主要设计思路:

首先是训练,要分3步来做:

1、behavior cloning:这是一种模仿学习,alphaGo模仿人类玩家,从16W局人类的游戏当中学习出一个策略网络。behavior cloning是一种监督学习,其实就是多分类,不是强化学习,AlphaGo使用behavior cloning来初步学习策略网络

2、使用强化学习来进一步训练这个策略网络,具体是用策略梯度算法,AlphaGo让策略网络做自我博弈,拿胜负结果来训练策略网络,强化学习可以让策略网络变得更强

3、训练一个价值网络,AlphaGo用的不是actor-critic算法,actor-critic算法要同时训练价值网络和策略网络,AlphaGo是先训练策略网络,然后用策略网络来训练价值网络

当AlphaGo和李世石下棋的时候用的不是策略网络,而是蒙特卡洛树搜索,搜索的时候要用到价值网络和策略网络,他们可以指导搜索,排除掉没有必要的搜索动作

 策略网络的架构&如何训练策略网络:

17的含义:把当前黑色棋子的位置用1个矩阵来表示,把之前7步的黑色棋子的位置用另外7个矩阵来表示,为了表示黑色棋子,需要用到8个矩阵,同样,为了表示白色棋子还需要8个矩阵,前16个矩阵是对黑白棋子位置的描述,第17个矩阵如果是全1的话,就表示现在该下黑色棋子了,如果是全0的话,就表示现在该下白色棋子了

8这个数字是个超参数,是做使用试出来的

此时状态就可以用这个19*19*17的tensor来表示了

如何设计?

用一个tensor来表示AlphaGo的状态,把tensor作为状态网络的输入

最后使用1个或者多个全连接层输出一个361维的向量

输出层的激活函数必须使用softmax,因为输出的是一个概率分布

围棋最多有361个动作,所以神经网络的输出应该是一个361维的向量,输出向量的每一个元素对应的是一个放棋子的位置,也就是动作,向量的元素都是每个动作的概率值

由于从头训练神经网络耗时太长,所以先直接从人类你记录的比赛当中初步学习 

behavior cloning只需要让策略网络去模仿人的动作就可以了,不需要奖励,也不是强化学习,模仿学习和强化学习的区别就是有无奖励

使用tensor来表示棋盘上的格局:

把动作at*=281做one-hot encode,变成了一个361维的向量,这个向量是全0的,只有第281个元素是1,把这个one-hot encode记作向量yt

使用CrossEntropy来衡量人类玩家的动作yt与策略网络的预测pt之间的差异,作为损失函数

其实你仔细想一下behavior cloning就是多分类,棋盘上有361个位置,其实就是有361个类别,策略网络的输出就是每一个类别的概率,人类玩家的动作是361当中的一个,把人类玩家的动作看作是ground-truth真实的标签,其实这个问题跟图片分类完全一样,图片分类有汽车、猫、狗的类别,而这里的类别是361个位置,图片分类中的target是猫、狗这样的标签,这里的target是人类玩家放棋子的位置,所以behavior cloning就是多分类,有361个类

behavior cloning最大的缺陷是什么?

》当前状态st没有出现在训练数据当中(策略网络没有见过当前状态st)

在强化学习之后,即使当前棋盘上的状态很奇怪,策略网络也能应对自如

具体怎么样用强化学习来训练策略网络呢?

》AlphaGo让两个策略网络来做博弈,一个叫做Player另一个叫做Opponent

每下完一句围棋,把胜负作为奖励,靠奖励来更新Player的参数,Playe没下一步棋子,Opponent也要跟着走一步,相当于随机状态转移,Opponent也是用策略网络来控制的,但是Opponent的参数不用学习

那么怎么样定义奖励呢?

前面的奖励都是0,只有最后一个奖励要么是-1要么是1

如何直观理解?

》agent赢了则每一步都是好棋,agent输了则每一步都是臭棋,我们无法区分一句博弈里哪一步是好棋哪一步是臭棋,我们只能把每一步都同等对待,拿最终结果说话,给所有动作都有相同的回报

玩完一句游戏我们就知道ut的值了,要么是+1要么是-1,我们还可以指定策略网络Π的参数θ=θt,就可以计算近似的策略梯度了

这里的ut不是前面的ut,而是每个时刻的rt,所以需要连加

现在还有一个小问题就是策略网络有可能会犯错误而导致输掉比赛,也就是模型不稳定,比策略网络更好的办法是蒙特卡洛树搜索

为了做蒙特卡洛树搜索,还需要一个价值网络,这里的价值网络和之前的不太一样,这里的价值网络是对状态价值函数V的近似而不是对Q的近似

最新的AlphaGo Zero是让两个神经网络共享一个卷积层,这是因为这两个网络都需要把状态是19*19*17的tensor作为输入,底层的卷积从输入中提取特征,而这些特征对于两个神经网络都适用,所以呢让两个神经网络共享一个卷积层是很合理的

价值网络的输出是一个标量,是对当前状态s的打分,表示当前的胜算有多大

策略网络和价值网络是分别训练的,而不是同时训练的,AlphaGo先训练策略网络Π,然后再训练价值网络V,价值网络V是靠策略网络Π帮助训练的,而actor-critic算法是同时训练两个网络

价值网络的学习就像是一个回归问题一样,把真实观测到的ut作为target,价值网络的预测是v(st,w)

那么哪里体现了策略网络辅助价值网络了呢?

训练价值网络V的时候在第一步要用策略网络做自我博弈

回顾一下:

1、首先使用模仿学习,根据人的棋谱来初步训练策略网络

2、使用策略梯度算法,来进一步训练策略网络

3、结束训练策略网络之后,再单独训练一个价值网络V

至此AlphaGo的训练结束了

那么实战的时候, AlphaGo使用的是策略网络还是价值网络呢?

》都不是,AlphaGo实战的时候使用的是蒙特卡洛树搜索。蒙特卡洛树搜索不需要训练,可以直接拿来跟人下棋,之前学习的两个神经网络就是为了帮助蒙特卡洛树搜索

人类下棋的时候要往后算好几步,这样赢得可能性更大,这就是为啥AI会向前看,而不仅仅是用策略函数来算出一个动作,比如你当前玩游戏可能会获得满足,但是在未来可能会没有通过考试,最终得不偿失,虽然这个动作在当下是最优的,但是在未来却未必如此

搜索的主要思想:

1、选择一个动作a,当然要根据动作的好坏程度,以不同的概率去选择,可行的动作很多不可能使用枚举算法,所以要排除不好的动作,只去搜索好的动作,使用的就是策略网络,来去排除不好的动作(概率值比较低的)

2、让策略网络做自我博弈,直到游戏结束,看这次是胜还是负

3、然后根据是胜还是复和价值函数这两个因素来给a打分

4、重复这个过程很多次,所以每个动作都有很多个分数

5、可以看一下哪个动作的总分最高,这个分数就能反映出动作的好坏,AlphaGo就会执行总分最高的动作

蒙特卡洛树搜索具体是这样做的:

分数由两部分组成:

1、Q(a),他是搜索计算出来的分数,叫做动作价值,其实在Go的例子中Q(a)就是一张表,记录了361个动作的分数

2、另一个是策略网络Π给a打的分数除以(1+N(a)) ,这里的N是动作a被选中的次数,动作越好策略网络Π给a打的分数就会越高,这一项就会越大,但是如果动作a已经被探索好多次了,分母N(a)就会变大,降低动作a的分数,这样可以避免探索同样的动作太多次,η是超参数需要手动去调整

以下过程都是Go在模拟

1、一开始所有的Q(a)都=0,一开始的时候完全由策略函数Π来决定探索哪个动作,做了很多次搜索之后N(a)的值会变大,使得第二项变得很小,这样策略函数Π就变得无关紧要了,这时候探索哪个动作完全由Q(a)来决定

2、

这里的对手相当于环境,这里的策略是状态转移函数,对手的动作会产生新的状态st+1,虽然我不知道对手怎么想的,即我不知道状态转移函数,但是可以使用Π来近似p

3、评估

从状态st+1开始,后面就让策略网络来做自我博弈,双方都由策略网络控制,双方挨个放棋子,一直到分出胜负为止,此时得到奖励rt,赢了+1,输了-1,这个奖励rt可以用来评价状态st+1的好坏

除了用奖励来评价st+1,Go还用V来评价,价值网络V是之前训练出来的,直接把状态st+1输入进来

由于这个模拟会重复很多次,所以每个状态下都会有很多记录,每个动作at都会有很多个这样的子节点,所以at就会对应很多条记录,把at下面所有的记录做一个平均,作为at新的价值Q(at) 

解释以下Go算这个Q的目的,蒙特卡洛树搜索的第一步selection的时候要选出最好的动作来搜索,做选择的时候就要用到这个Q值,Q值就是所有记录的V值的平均

假设已经做了成千上万次搜索了,这时候哪个动作好已经很明显了,限制AlphaGo可以做真正的决策了

一个动作a的Q值和Π越大,N(a)就越大,所以N(a)可以反应动作的好坏,AlphaGo的决策很简单,就是选中N值最大的动作,执行这个动作

AlphaGo每走一步,都要进行成千上万次的模拟,每次模拟都会重复以上四步,通过成千上万次的模拟AlphaGo就有了每个动作的Q分数和N分数,AlphaGo会选中N值最大的动作,执行这个动作,真正地下一步棋,为了走这一步棋,AlphaGo已经进行了成千上万次的模拟

当李世石走完一步,再次轮到AlphaGo的时候,他会再次重来一次蒙特卡洛树搜索,这次会重新把Q和N初始化为0,然后做成千上万次模拟

简单小结一下:

训练价值网络就是在做回归

虽然可以使用策略网络来下棋,但是更好的办法是蒙特卡洛树搜索

老版本是模仿人类玩家,新版本是模仿蒙特卡洛树搜索

如果是在虚拟环境的话,behavior-cloning可能是有害的,但是在物理世界当中,还是很有必要的,因为这样可以最大化地减少损失

新版本的AlphaGo是如何训练策略网络的?

1、观测到状态st

2、让策略网络做一个预测,输出每个动作的概率值,把策略网络的输出记作向量p,他是一个362维的向量
3、做蒙特卡洛树搜索,做很多次模拟,会得到每一个动作被选中的次数Na,对这361个数Na做归一化,让他们变成概率值,记作n

4、我们希望策略网络做出的决策p接近搜索做出的决策n,即减小L

5、使用梯度下降减少Loss

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32平衡小车 pid简单学习

自动控制系统 自动控制系统可分为开环控制系统和闭环控制系统。 1、开环控制系统开环控制系统(open-loop control system)指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。 2、闭环控…

c++入门(下)

C入门(下) 对于C的基础语法的讲解,由想要实现多次重复的函数,引出宏函数和inline的内联函数的对比,对于inline的讲解和运用,在后,C语言中的NULL和C中独特的nullptr的相比两者的比较&#xff0c…

kong(4):限流配置

Kong 提供了 Rate Limiting 插件,实现对请求的限流功能,避免过大的请求量过大,将后端服务打挂。 Rate Limiting 支持秒/分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最 多 100 次请求&…

Windows Server 2012R2 安装mysql 丢失VCRUNTIME140_1.dll------亲测

无去启动此程序,因为计算机中丢失VCRUNTIME140_1.dll。尝试重新安装该程序以解决此问题。 1.解决思路 说到底还是缺少底层的依赖,先下载依赖然后安装,最后安装vc。要不然vc是安装不成功。 下载安装--一下的插件 安装过程中需要重启一次电脑。 注意:必…

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现,Java(1)

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现&#xff0c;Java&#xff08;1&#xff09; 权限&#xff1a; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:n…

VUE3子组件-业务代码优化

Vue3子组件 1.简介 Vue 3组件的主要优势之一就是它们可以帮助你将你的应用程序分解成可维护和可重用的部分。当你在应用程序中多次使用相同的代码时&#xff0c;你可以将它们抽象成一个组件&#xff0c;然后在应用程序中的多个地方使用该组件&#xff0c;而不必每次都编写相同…

5年了,终于入职阿里测试岗位,直接涨薪30K...

前言 本科毕业后就一直从事软件测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事功能测试的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半后开始沪漂生活&#xff0c;又摸爬滚打了…

阿里巴巴软件测试面试过了,起薪20k

普通二本计算机专业毕业&#xff0c;从毕业后&#xff0c;第一份接触测试的工作是在一家通讯小公司&#xff0c;大部分接触的工作是以功能测试为主&#xff0c;一直都是几千块钱工资&#xff0c;还一度被派出差&#xff0c;以及兼职各种产品、运维、运营的活&#xff0c;感觉自…

Cleer ARC II 音弧

戴上Cleer ARC II 音弧解放双耳&#xff0c;享受更自由的音符 用惯了各种入耳式耳机&#xff0c;换上开放式耳机&#xff0c;戴着确实更加舒服&#xff0c;特别是我现在用的这款Cleer ARC II 音弧&#xff0c;戴上还不容易掉&#xff0c;很适合运动使用。这款耳机采用一种耳挂佩…

JavaEE1(4/23)

目录 1.计算机CPU 2.CPU和GPU的区别 3.线程 4.内存是如何分配的 5.进程的调度 6.线程和进程的区别和联系&#xff1f; 1.计算机CPU 主频 &#xff1a;运算速度 3.73Ghz 表示每秒计算37.3亿次 基准速度&#xff1a;最小计算速度 睿频&#xff1a;最大运行速度 超频&…

【头歌C语言程序设计】结构体解答

写在前面 这道题总体来说还是偏难的&#xff0c;如果只看代码比较难以理解&#xff0c;当结构体的文章发出后&#xff0c;就有许多小伙伴问我这个问题&#xff0c;我开始意识到&#xff0c;可能我对这道题所作的解答还不够&#xff08;不装了&#x1f601;&#xff0c;根本没有…

Python进阶篇(三)-- TCP套接字与UDP套接字编程

1 Python3 网络编程 1.1 介绍 本文将首先利用 Python 实现面向TCP连接的套接字编程基础知识&#xff1a;如何创建套接字&#xff0c;将其绑定到特定的地址和端口&#xff0c;以及发送和接收数据包。其次还将学习 HTTP 协议格式的相关知识。在此基础上&#xff0c;本篇将用 Pyt…

Spring boot项目编译后未能加载静态资源文件

起因: 因甲方爸爸加了一个紧急的需求: 需要搞一个文件上传和下载功能. 我心中想:这不简单,搞个资源服务器,将上传文件放上去,然后访问资源链接就行了. 但接下来甲方爸爸说 不需要这莫麻烦,直接将文件放服务器里,用的时候下载到资源文件夹下就行. 我心里想: 我擦嘞 还能这样!! 然…

【C++】—— STL简介(了解)

前言&#xff1a; 在上节&#xff0c;我们简单的认识了模板的基本概念。今天我简单的给大家介绍一下关于 STL 。 目录 &#xff08;一&#xff09; 什么是STL &#xff08;二&#xff09; STL的版本 &#xff08;三&#xff09; STL的六大组件 &#xff08;四&#xff09;…

Tomcat概述以及部署与优化

一、Tomcat概述 1、Tomcat的概念 Tomcat是Java语言开发的&#xff0c;服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&am…

Python入门基础小练习

通过前面的两个篇章Python-入门基础篇和Python-入门基础语句篇大家应该已经认识了python基础的语句和函数了&#xff0c;并且可以使用pycharm编译器创建.py文件进行运行了&#xff0c;今天适当的来一些小练习&#xff0c;给枯燥的学习增添一些趣味性。 判断一个数是否为偶数 …

linux服务器实现百万并发遇到的问题以及解决思路

目录 前言服务器与客户端的配置介绍server 代码client 代码遇到的问题error too many open files为什么会出现这个问题解决这个问题的思路 killed&#xff08;已杀死&#xff09;为什么会出现这个问题解决这个问题的思路 最终结果学到的经验教训 前言 在完成百万并发服务器的时…

搭建家庭影音媒体中心 - 公网远程连接Jellyfin流媒体服务器

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

MySQL高级第十六篇:数据库日志有哪些(慢查询日志、通用查询日志、错误日志和二进制日志)

MySQL高级第十六篇&#xff1a;数据库日志有哪些&#xff08;慢查询日志、通用查询日志、错误日志和二进制日志&#xff09; 一、MySQL支持的日志有哪些&#xff1f;1. 日志类型总结2. 日志有什么缺点吗&#xff1f; 二、通用查询日志&#xff08;slow query log&#xff09;三…

【开发工具】idea2023.1社区版设置优化,媲美旗舰版

相信大家很多时候都是用旗舰版来开发&#xff0c;各种序列号破解包各种搞&#xff0c;但说不定哪天又失效了那天又爆泄漏隐私安全问题。随着idea的版本升级破解也不好搞了&#xff0c;所以我就直接用了社区版&#xff0c;经过一番折腾发现社区版一点不比旗舰版差&#xff0c;可…