强化学习(二)—— 价值学习(Value-Based)及DQN
生活随笔
收集整理的這篇文章主要介紹了
强化学习(二)—— 价值学习(Value-Based)及DQN
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
強化學習(二)—— 價值學習(Value-Based)及DQN
- 1. DQN介紹
- 2. TD算法介紹
- 3. 案例
1. DQN介紹
Deep Q Network
- 目標:最大化累計獎勵(回報U)
- 通過神經網絡近似最優動作價值函數:Q(s,a;W)≈Q?(s,a)Q(s,a;W)≈Q^*(s,a) Q(s,a;W)≈Q?(s,a)
- Q函數可以幫助獲得最優動作:
at=arg?max?aQ(st,a;W)a_t = \displaystyle\argmax_aQ(s_t,a;W) at?=aargmax?Q(st?,a;W) - 狀態轉移函數p可以獲得下一時刻的狀態:
st+1=p(?∣st,at)s_{t+1} = p(·|s_t,a_t) st+1?=p(?∣st?,at?)
2. TD算法介紹
時序差分算法(Temporal Difference)
- 得到t時刻的狀態和動作
St=st;At=atS_t = s_t; A_t=a_t St?=st?;At?=at? - 計算t時刻的Q函數值
qt=Q(st,at;Wt)q_t = Q(s_t,a_t;W_t) qt?=Q(st?,at?;Wt?) - 計算t時刻的梯度
dt=?Q(st,at;W)?W∣W=Wtd_t = \frac{\partial Q(s_t,a_t;W)}{\partial W}|_{W=W_t} dt?=?W?Q(st?,at?;W)?∣W=Wt?? - 獲得t時刻的獎勵和t+1時刻的狀態
st+1;rts_{t+1}; r_t st+1?;rt? - 計算TD的目標值:
yt=rt+γmax?aQ(st+1,a;Wt)y_t = r_t+\gamma \displaystyle\max_aQ(s_{t+1},a;W_t) yt?=rt?+γamax?Q(st+1?,a;Wt?) - 進行梯度更新
wt+1=wt?α?(qt?yt)?dtw_{t+1} = w_t-\alpha ·(q_t-y_t)·d_t wt+1?=wt??α?(qt??yt?)?dt?
3. 案例
成功控制錘子保持平衡
# -*- coding: utf-8 -*- # @Time : 2022/3/28 16:39 # @Author : CyrusMay WJ # @FileName: run.py # @Software: PyCharm # @Blog :https://blog.csdn.net/Cyrus_Mayimport gym import time import tensorflow as tf import numpy as npenv = gym.make("CartPole-v0") gamma = 0.9 adam = tf.optimizers.Adam() state = env.reset() act = [1,0] x_before = np.array([list(state)+act])model = tf.keras.Sequential([tf.keras.layers.Dense(128,activation="sigmoid"),tf.keras.layers.Dense(64,activation="sigmoid"),tf.keras.layers.Dense(1), ])model.build(input_shape=[None,6])for epoch in range(2000):with tf.GradientTape() as tape:q = model(x_before)dt = tape.gradient(q,model.trainable_variables)env.render()state,reward,done,info = env.step(act[-1])state = list(state)flag = int(tf.argmax(model(np.array([state+[1,0],state+[0,1]]))[:,0]))act = [0,0]act[flag] = 1x_before = np.array([state + act])y = reward + gamma*model(x_before)dt = [(q[0][0]-y[0][0])*dt[i] for i in range(len(dt))]adam.apply_gradients([(i,j) for i,j in zip(dt,model.trainable_variables)])print(epoch,":",q[0][0]-y[0][0])if done:# time.sleep(1)state = env.reset()act = [1, 0]x_before = np.array([list(state) + act])continueprint("end!")for epoch in range(100):state = env.reset()act = [1, 0]env.render()state,reward,done,info = env.step(act[-1])state = list(state)flag = int(tf.argmax(model(np.array([state+[1,0],state+[0,1]]))[:,0]))act = [0,0]act[flag] = 1if done:print(epoch)break env.close()本文部分為參考B站學習視頻書寫的筆記!
by CyrusMay 2022 03 28
如果命運是風
什么又是我的弦
——————五月天(一半人生)——————
總結
以上是生活随笔為你收集整理的强化学习(二)—— 价值学习(Value-Based)及DQN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强化学习(一)——专业术语及OpenAI
- 下一篇: 强化学习(三)—— 策略学习(Polic