【Pytorch教程】:DQN 强化学习

本文是Pytorch教程的一部分,重点介绍DQN(Deep Q Network)强化学习。DQN结合了神经网络和Q学习,解决了传统强化学习中状态过多的问题。文章详细讲解了神经网络在DQN中的作用、如何更新神经网络,以及DQN的两大关键特性:经验回放和固定Q目标,这些特性使得DQN在某些游戏中的表现超过人类。
摘要由CSDN通过智能技术生成

Pytorch教程目录

Torch and Numpy
变量 (Variable)
激励函数
关系拟合(回归)
区分类型 (分类)
快速搭建法
批训练
加速神经网络训练
Optimizer优化器
卷积神经网络 CNN
卷积神经网络(RNN、LSTM)
RNN 循环神经网络 (分类)
RNN 循环神经网络 (回归)
自编码 (Autoencoder)
DQN 强化学习
生成对抗网络 (GAN)
为什么 Torch 是动态的
GPU 加速运算
过拟合 (Overfitting)
批标准化 (Batch Normalization)


什么是 DQN

强化学习中的一种强大武器, Deep Q Network 简称为 DQN. Google Deep mind 团队就是靠着这 DQN 使计算机玩电动玩得比我们还厉害.

强化学习与神经网络

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

神经网络的作用

在这里插入图片描述
我们使用表格来存储每一个状态 state, 和在这个 state 每个行为 action 所拥有的 Q 值. 而当今问题是在太复杂, 状态可以多到比天上的星星还多(比如下围棋). 如果全用表格来存储它们, 恐怕我们的计算机有再大的内存都不够, 而且每次在这么大的表格中搜索对应的状态也是一件很耗时的事.

不过, 在机器学习中, 有一种方法对这种事情很在行, 那就是神经网络. 我们可以将状态和动作当成神经网络的输入, 然后经过神经网络分析后得到动作的 Q 值, 这样我们就没必要在表格中记录 Q 值, 而是直接使用神经网络生成 Q 值.

还有一种形式是这样, 我们只输入状态值, 输出所有的动作值, 然后按照 Q learning 的原则, 直接选择拥有最大值的动作当做下一步要做的动作. 我们可以想象, 神经网络接受外部的信息, 相当于眼睛鼻子耳朵收集信息, 然后通过大脑加工输出每种动作的值, 最后通过强化学习的方式选择动作.

更新神经网络

在这里插入图片描述
接下来我们基于第二种神经网络来分析

我们知道, 神经网络是要被训练才能预测出准确的值. 那在强化学习中, 神经网络是如何被训练的呢?

  • 首先, 我们需要 a1, a2 正确的Q值, 这个 Q 值我们就用之前在 Q learning 中的 Q 现实来代替.
  • 同样我们还需要一个 Q 估计 来实现神经网络的更新. 所以神经网络的参数就是 新 N N = 老 N N + α ( Q 现 实 − Q 估 计 ) 新NN=老NN+\alpha(Q现实-Q估计) NN=NN+α(QQ)

DQN4.png

  1. 我们通过 NN 预测出Q(s2, a1)Q(s2,a2) 的值, 这就是 Q 估计. 然后我们选取 Q 估计中最大值的动作来换取环境中的奖励 reward.

  2. Q 现实中也包含从神经网络分析出来的两个 Q 估计值, 不过这个 Q 估计针对于下一步在 s’ 的估计.

  3. 最后再通过刚刚所说的算法更新神经网络中的参数.

但是这并不是 DQN 会玩电动的根本原因. 还有两大因素支撑着 DQN 使得它变得无比强大. 这两大因素就是 Experience replayFixed Q-targets.

DQN 两大利器

DQN5.png
简单来说, DQN 有一个记忆库用于学习之前的经历. Q learning 是一种 off-policy 离线学习法, 它能学习当前经历着的, 也能学习过去经历过的, 甚至是学习别人的经历.

所以每次 DQN 更新的时候, 我们都可以随机抽取一些之前的经历进行学习. 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率.

Fixed Q-targets 也是一种打乱相关性的机理, 如果使用 fixed Q-targets, 我们就会在 DQN 中使用到两个结构相同但参数不同的神经网络, 预测 Q 估计 的神经网络具备最新的参数, 而预测 Q 现实 的神经网络使用的参数则是很久以前的. 有了这两种提升手段, DQN 才能在一些游戏中超越人类.

DQN 强化学习

模块导入和参数设置

这次除了 Torch 自家模块, 我们还要导入 Gym 环境库模块

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import gym

# 超参数
BATCH_SIZE = 32
LR = 0.01                   # learning rate
EPSILON = 0.9               # 最优选择动作百分比
GAMMA = 0.9                 # 奖励递减参数
TARGET_REPLACE_ITER = 100   # Q 现实网络的更新频率
MEMORY_CAPACITY = 2000      # 记忆库大小
env = gym.make('CartPole-v0')   # 立杆子游戏
env = env.unwrapped
N_ACTIONS = env.action_space.n  # 杆子能做的动作
N_STATES = env.observation_space.shape[0]   # 杆子能获取的环境信息数

神经网络

DQN 当中的神经网络模式, 我们将依据这个模式建立两个神经网络, 一个是现实网络 (Target Net), 一个是估计网络 (Eval Net).

class Net(nn.Module):
    def __init__(self, ):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(N_STATES, 10)
        self.fc1.weight.data.normal_(0, 0.1)   # initialization
        self.out = nn.Linear(10,</
The provided options appear to be related to a command-line utility or tool that likely has flags for various functionalities. Here's a brief explanation of each option: 1. `--targets FILENAME`: This flag specifies a file containing a list of targets for the tool to operate on. It allows you to input multiple targets from a single external file. 2. `--non-recursive (-N)`: If included, the tool will not perform actions recursively; it will only act on the specified targets directly, not any subdirectories. 3. `--quiet (-q)`: This flag requests a quieter output, which might mean suppressing some messages or reducing the verbosity of the tool's output. 4. `--config-dir DIR`: Specifies the directory where configuration files are stored, allowing the tool to read and use settings from that location. 5. `--no-ignore`: By default, the tool might ignore certain patterns or files. This flag disables that behavior, making it process everything without ignoring specific items. 6. `--auto-props`: Enables automatic property detection or generation, likely for files that support metadata or custom properties. 7. `--no-auto-props`: If present, overrides the automatic property detection, forcing the tool to not use any detected properties. 8. `--force`: This flag usually implies that the tool should proceed with its action even if there are potential conflicts or existing changes that could be overwritten. To use these options in a command, they would typically be appended to the command name, like this: ``` tool --targets mytargets.txt --non-recursive -q --config-dir /path/to/config --no-ignore --auto-props --force ``` However, without knowing the specific tool, it's difficult to provide a demonstration. The actual syntax and behavior may vary depending on the tool in question.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>