中山网站优化排名,不动产网站建设,遵义建设厅网站,微信公众号和小程序的区别目录 0 专栏介绍1 基于价值的强化学习2 深度Q网络与Q-learning3 DQN原理分析4 DQN训练实例 0 专栏介绍
本专栏重点介绍强化学习技术的数学原理#xff0c;并且采用Pytorch框架对常见的强化学习算法、案例进行实现#xff0c;帮助读者理解并快速上手开发。同时#xff0c;辅… 目录 0 专栏介绍1 基于价值的强化学习2 深度Q网络与Q-learning3 DQN原理分析4 DQN训练实例 0 专栏介绍
本专栏重点介绍强化学习技术的数学原理并且采用Pytorch框架对常见的强化学习算法、案例进行实现帮助读者理解并快速上手开发。同时辅以各种机器学习、数据处理技术扩充人工智能的底层知识。
详情《Pytorch深度强化学习》 1 基于价值的强化学习
根据不动点定理最优策略和最优价值函数是唯一的(对该经典理论不熟悉的请看Pytorch深度强化学习1-4策略改进定理与贝尔曼最优方程详细推导)通过优化价值函数间接计算最优策略的方法称为基于价值的强化学习(value-based)框架。设状态空间为 n n n维欧式空间 S R n S\mathbb{R} ^n SRn每个维度代表状态的一个特征。此时状态-动作值函数记为 Q ( s , a ; θ ) Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) Q(s,a;θ)
其中 s \boldsymbol{s} s是状态向量 a \boldsymbol{a} a是动作空间中的动作向量 θ \boldsymbol{\theta } θ是神经网络的参数向量。深度学习完成了从输入状态到输出状态-动作价值的映射 s → Q ( s , a ; θ ) [ Q ( s , a 1 ) Q ( s , a 2 ) ⋯ Q ( s , a m ) ] T ( a 1 , a 2 , ⋯ , a m ∈ A ) \boldsymbol{s}\xrightarrow{Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right)}\left[ \begin{matrix} Q\left( \boldsymbol{s},a_1 \right) Q\left( \boldsymbol{s},a_2 \right) \cdots Q\left( \boldsymbol{s},a_m \right)\\\end{matrix} \right] ^T\,\, \left( a_1,a_2,\cdots ,a_m\in A \right) sQ(s,a;θ) [Q(s,a1)Q(s,a2)⋯Q(s,am)]T(a1,a2,⋯,am∈A)
相当于对无穷维Q-Table的一次隐式查表对经典Q-learing算法不熟悉的请看Pytorch深度强化学习1-6详解时序差分强化学习(SARSA、Q-Learning算法)、Pytorch深度强化学习案例基于Q-Learning的机器人走迷宫。设目标价值函数为 Q ∗ Q^* Q∗若采用最小二乘误差可得损失函数为 J ( θ ) E [ 1 2 ( Q ∗ ( s , a ) − Q ( s , a ; θ ) ) 2 ] J\left( \boldsymbol{\theta } \right) \mathbb{E} \left[ \frac{1}{2}\left( Q^*\left( \boldsymbol{s},\boldsymbol{a} \right) -Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) \right) ^2 \right] J(θ)E[21(Q∗(s,a)−Q(s,a;θ))2]
采用梯度下降得到参数更新公式为 θ ← θ α ( Q ∗ ( s , a ) − Q ( s , a ; θ ) ) ∂ Q ( s , a ; θ ) ∂ θ \boldsymbol{\theta }\gets \boldsymbol{\theta }\alpha \left( Q^*\left( \boldsymbol{s},\boldsymbol{a} \right) -Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) \right) \frac{\partial Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right)}{\partial \boldsymbol{\theta }} θ←θα(Q∗(s,a)−Q(s,a;θ))∂θ∂Q(s,a;θ)
随着迭代进行 Q ( s , a ; θ ) Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) Q(s,a;θ)将不断逼近 Q ∗ Q^* Q∗由 Q ( s , a ; θ ) Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) Q(s,a;θ)进行的策略评估和策略改进也将迭代至最优。
2 深度Q网络与Q-learning
Q-learning和深度Q学习(Deep Q-learning, DQN)是强化学习领域中两种重要的算法它们在解决智能体与环境之间的决策问题方面具有相似之处但也存在一些显著的异同。这里进行简要阐述以加深对二者的理解。
Q-learning是一种基于值函数的强化学习算法。它通过使用Q-Table来表示每个状态和动作对的预期回报。Q值函数用于指导智能体在每个时间步选择最优动作。通过不断更新Q值函数来使其逼近最优的Q值函数DQN是对Q-learning的深度网络版本它将神经网络引入Q-learning中以处理具有高维状态空间的问题。通过使用深度神经网络作为函数逼近器DQN可以学习从原始输入数据(如像素值)直接预测每个动作的Q值 3 DQN原理分析
深度Q网络(Deep Q-Network, DQN)的核心原理是通过
经验回放池(Experience Replay)考虑到强化学习采样的是连续非静态样本样本间的相关性导致网络参数并非独立同分布使训练过程难以收敛因此设置经验池存储样本再通过随机采样去除相关性目标网络(Target Network)考虑到若目标价值 与当前价值 是同一个网络时会导致优化目标不断变化产生模型振荡与发散因此构建与 结构相同但慢于 更新的独立目标网络来评估目标价值使模型更稳定。
拟合了高维状态空间是Q-Learning算法的深度学习版本算法流程如表所示 4 DQN训练实例
最简单的例子是使用全连接网络来构造DQN
class DQN(nn.Module):def __init__(self, input_dim, output_dim):super(DQN, self).__init__()self.input_dim input_dimself.output_dim output_dimself.fc nn.Sequential(nn.Linear(self.input_dim[0], 128),nn.ReLU(),nn.Linear(128, 256),nn.ReLU(),nn.Linear(256, self.output_dim))def __str__(self) - str:return Fully Connected Deep Q-Value Network, DQNdef forward(self, state):qvals self.fc(state)return qvals基于贝尔曼最优原理的损失计算如下
def computeLoss(self, batch):states, actions, rewards, next_states, dones batchstates torch.FloatTensor(states).to(self.device)actions torch.LongTensor(actions).to(self.device)rewards torch.FloatTensor(rewards).to(self.device)next_states torch.FloatTensor(next_states).to(self.device)dones (1 - torch.FloatTensor(dones)).to(self.device)# 根据实际动作提取Q(s,a)值curr_Q self.model(states).gather(1, actions.unsqueeze(1)).squeeze(1)next_Q self.target_model(next_states)max_next_Q torch.max(next_Q, 1)[0]expected_Q rewards.squeeze(1) self.gamma * max_next_Q * donesloss self.criterion(curr_Q, expected_Q.detach())return loss基于经验回放池和目标网络的参数更新如下
def update(self, batch_size):batch self.replay_buffer.sample(batch_size)loss self.computeLoss(batch)self.optimizer.zero_grad()loss.backward()self.optimizer.step()# 更新target网络for target_param, param in zip(self.target_model.parameters(), self.model.parameters()):target_param.data.copy_(self.tau * param (1 - self.tau) * target_param)# 退火self.epsilon self.epsilon self.epsilon_delta \if self.epsilon self.epsilon_max else self.epsilon_max基于DQN可以实现最基本的智能体下面给出一些具体案例
Pytorch深度强化学习案例基于DQN实现Flappy Bird游戏与分析 完整代码联系下方博主名片获取 更多精彩专栏
《ROS从入门到精通》《Pytorch深度学习实战》《机器学习强基计划》《运动规划实战精讲》… 源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系