更改

跳到导航 跳到搜索
添加1,422字节 、 2025年5月18日 (日) 16:22
第243行: 第243行:  
===使用神经网络逼近 Q 值函数===
 
===使用神经网络逼近 Q 值函数===
 
DQN的⾏为值函数<math> Q(s,a;θ) </math> 利⽤神经⽹络逼近,属于⾮线性逼近。此处的值函数对应着⼀组参数,在神经⽹络⾥参数是每层⽹络的权重,用θ表示。
 
DQN的⾏为值函数<math> Q(s,a;θ) </math> 利⽤神经⽹络逼近,属于⾮线性逼近。此处的值函数对应着⼀组参数,在神经⽹络⾥参数是每层⽹络的权重,用θ表示。
−
用公式表示的话如下:
+
用公式表示的话,如下:
 
<math> Q^{*}(s,a)≈Q(s,a;θ) </math>
 
<math> Q^{*}(s,a)≈Q(s,a;θ) </math>
   第250行: 第250行:  
*'''输出'''​​​​:每个动作 a 对应的Q值(离散动作空间)
 
*'''输出'''​​​​:每个动作 a 对应的Q值(离散动作空间)
 
*'''参数'''​​​​:θ 为神经网络的权重,通过梯度下降优化
 
*'''参数'''​​​​:θ 为神经网络的权重,通过梯度下降优化
−
​​在论文中DQN所用的网络结构是三个卷积层加两个全连接层。
+
​​
 +
在论文中DQN所用的网络结构是三个卷积层加两个全连接层,网络的输入是经过预处理后的数据,预处理指的是将210*160的游戏图像转化为84*84的图像等操作,得到算法结构中的具体代码实现和网络结构见图和以下代码:
 +
[[文件:网络结构.png|缩略图]]
 +
 
 +
 
 
'''核心意义'''​​:
 
'''核心意义'''​​:
 
*'''​​端到端学习'''​​​​:直接从原始状态(如像素)映射到动作价值,无需手工设计特征。
 
*'''​​端到端学习'''​​​​:直接从原始状态(如像素)映射到动作价值,无需手工设计特征。
第262行: 第266行:     
===目标网络(Target Network)的引入与参数更新策略===
 
===目标网络(Target Network)的引入与参数更新策略===
 +
为了更长远的提高稳定性,使用一个独立的神经Q网络去得到target y,即建立另一个独立的神经网络target network。每经过c次更新后,复制 network Q得到target network Q’,然后使用Q’去生成target y应用与接下来的c次更新。好处就是比起online Q-learning算法更稳定。因为online Q-learning每次更新在增加Q(st,at)的同时也增加了针对每个a的Q(st+1,a),从而增加了 target y,这又可能会引起策略的震荡甚至发散。所以目标网络(Target Network)的引入可以解决这一问题。
 +
 +
于是损失函数表示为(忽略无关的方差项)
 +
<math> L_{i}(θ_{i})=E_{s,a,r,s'}[(r+γ /max_{a'}Q(s',a',θ_{i}^{−})−Q(s,a,θ_{i}))^2] </math>
 +
梯度为
 +
<math> ▽_{θ_i} L_i ( θ_i ) = E_{s , a , r , s ′ }[ ( r + γ max _{a ′ }Q ( s ′ , a ′ , θ_{i}^{−} ) − Q ( s , a , θ_{i }) ) ▽ θ_i Q ( s , a , θ_i ) ]  </math>
 +
 +
工程中,使用随机梯度下降 SGD 来完成优化,另外当令 <math> θ_{i}^{−} = θ_{i−1} </math>时,退化为原始的 Q-Learning 更新形式
 +
    
===DQN在pytorch中的简单实现===
 
===DQN在pytorch中的简单实现===
第384行: 第397行:     
</syntaxhighlight>
 
</syntaxhighlight>
−
该代码基于深度Q网络(DQN)算法,解决OpenAI Gym中的经典控制任务CartPole-v1。任务目标是控制小车左右移动,使竖直杆子尽可能长时间保持直立。智能体感知环境,输出离散动作(左移/右移),最终实现稳定平衡超过500步的满分表现。
+
该代码基于深度Q网络(DQN)算法,解决OpenAI Gym中的经典控制任务CartPole-v1。任务目标是控制小车左右移动,使竖直杆子尽可能长时间保持直立。智能体通过4维状态(小车位置、速度、杆子角度及角速度)感知环境,输出离散动作(左移/右移),最终实现稳定平衡超过500步的满分表现。
 
算法实现​​
 
算法实现​​
 
​​Q值网络​​:
 
​​Q值网络​​:
−
使用三层全连接神经网络(输入n维→128→128→输出2维)近似Q值函数,输出左右移动的动作价值。
+
使用三层全连接神经网络(输入4维→128→128→输出2维)近似Q值函数,输出左右移动的动作价值。
 
目标网络与主网络分离,定期同步参数以稳定训练。
 
目标网络与主网络分离,定期同步参数以稳定训练。
 
​​经验回放​​:
 
​​经验回放​​:
281

个编辑

导航菜单