DQN(Deep Q Network )强化学习

DQN(Deep Q Network )强化学习

强化学习神经网络

之前我们所谈论到的强化学习方法都是比较传统的方式, 而如今, 随着机器学习在日常生活中的各种应用, 各种机器学习方法也在融汇, 合并, 升级. 而我们今天所要探讨的强化学习则是这么一种融合了神经网络和 Q learning 的方法, 名字叫做 Deep Q Network. 这种新型结构是为什么被提出来呢? 原来, 传统的表格形式的强化学习有这样一个瓶颈.

神经网络的作用

我们使用表格来存储每一个状态 state, 和在这个 state 每个行为 action 所拥有的 Q 值. 而当今问题是在太复杂, 状态可以多到比天上的星星还多(比如下围棋). 如果全用表格来存储它们, 恐怕我们的计算机有再大的内存都不够, 而且每次在这么大的表格中搜索对应的状态也是一件很耗时的事. 不过, 在机器学习中, 有一种方法对这种事情很在行, 那就是神经网络. 我们可以将状态和动作当成神经网络的输入, 然后经过神经网络分析后得到动作的 Q 值, 这样我们就没必要在表格中记录 Q 值, 而是直接使用神经网络生成 Q 值. 还有一种形式的是这样, 我们也能只输入状态值, 输出所有的动作值, 然后按照 Q learning 的原则, 直接选择拥有最大值的动作当做下一步要做的动作. 我们可以想象, 神经网络接受外部的信息, 相当于眼睛鼻子耳朵收集信息, 然后通过大脑加工输出每种动作的值, 最后通过强化学习的方式选择动作.

更新神经网络

接下来我们基于第二种神经网络来分析, 我们知道, 神经网络是要被训练才能预测出准确的值. 那在强化学习中, 神经网络是如何被训练的呢? 首先, 我们需要 a1, a2 正确的Q值, 这个 Q 值我们就用之前在 Q learning 中的 Q 现实来代替. 同样我们还需要一个 Q 估计 来实现神经网络的更新. 所以神经网络的的参数就是老的 NN 参数 加学习率 alpha 乘以 Q 现实 和 Q 估计 的差距. 我们整理一下.

我们通过 NN 预测出Q(s2, a1) 和 Q(s2,a2) 的值, 这就是 Q 估计. 然后我们选取 Q 估计中最大值的动作来换取环境中的奖励 reward. 而 Q 现实中也包含从神经网络分析出来的两个 Q 估计值, 不过这个 Q 估计是针对于下一步在 s’ 的估计. 最后再通过刚刚所说的算法更新神经网络中的参数. 但是这并不是 DQN 会玩电动的根本原因. 还有两大因素支撑着 DQN 使得它变得无比强大. 这两大因素就是 Experience replay 和 Fixed Q-targets.

DQN 两大利器

简单来说, DQN 有一个记忆库用于学习之前的经历. 在之前的简介影片中提到过, Q learning 是一种 off-policy 离线学习法, 它能学习当前经历着的, 也能学习过去经历过的, 甚至是学习别人的经历. 所以每次 DQN 更新的时候, 我们都可以随机抽取一些之前的经历进行学习. 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率. Fixed Q-targets 也是一种打乱相关性的机理, 如果使用 fixed Q-targets, 我们就会在 DQN 中使用到两个结构相同但参数不同的神经网络, 预测 Q 估计 的神经网络具备最新的参数, 而预测 Q 现实 的神经网络使用的参数则是很久以前的. 有了这两种提升手段, DQN 才能在一些游戏中超越人类.


http://www.niftyadmin.cn/n/941676.html

相关文章

对抗网络 GAN (Generative Adversarial Nets)

对抗网络 GAN (Generative Adversarial Nets) 常见神经网络形式 神经网络分很多种, 有普通的前向传播神经网络 , 有分析图片的 CNN 卷积神经网络 , 有分析序列化数据, 比如语音的 RNN 循环神经网络 , 这些神经网络都是用来输入数据, 得到想要的结果, 我们看中的是这些神经网络…

教学平台前端配置总结(基于Quasar)

教学平台前端总结(基于Quasar) Utils工具 //auth import { Cookies } from quasarconst TokenKey jxpt_token //获得Token export function getToken () {return Cookies.get(TokenKey) || } //设置Token export function setToken (token) {Cookies…

Servlet会话跟踪技术

Servlet会话跟踪技术 会话: 从用户进入一个网站浏览到退出该网站或者关闭浏览器称为一次会话。 **会话跟踪:**在上述会话过程中浏览器与服务器的多次请求保持数据共享的状态的技术。 Cookie 认识 Cookie是服务器发给客户端的一小段文本,保…

Ubuntu常见问题解决

Ubuntu常见问题解决 安装pip3 sudo apt install python3-pip 报错 Package python-dev is not available, but is referred to by another package 解决 sudo apt-get -y update配置pip镜像源 1. 创建pip.conf文件 运行以下命令:cd ~/.pip如果提示目录不存在的话,我们要自行…

Vue项目中引入Echarts可视化图(保证学会)

Vue项目中引入Echarts可视化图 1 安装Vue-Echarts "vue-echarts": "^5.0.0-beta.0" //不同版本可能兼容性不同&#xff0c;我用的这个版本npm install --save vue-echarts^5.0.0-beta.02 在指定Vue文件中引入Echarts <script> import Vue from &q…

知识图谱教学平台总结(前端)

知识图谱教学平台总结 服务器部署 apt show nginx //查询是否有nginx 没有使用 apt update apt install nginx apt install -y nodejs //安装node node -v看版本 apt install -y npm //安装npm npm -v看版本 npm config set registry https://registry.npm.taobao.org //配…

numpy属性

import numpy as np# 列表转换为矩阵 array np.array([[1, 2, 3], [2, 3, 4]]) print(array)# 维度 print(number of dim: , array.ndim) # 维度 print(shape: , array.shape) # 行数和列数 print(size: , array.size) # 元素个数

numpy创建array

import numpy as np# 关键字: # array&#xff1a;创建数组 # dtype&#xff1a;指定数据类型 # zeros&#xff1a;创建数据全为0 # ones&#xff1a;创建数据全为1 # empty&#xff1a;创建数据接近0 # arrange&#xff1a;按指定范围创建数据 # linspace&#xff1a;创建线段…