บทนำสู่ Deep Q Learning

Deep Reinforcement Learning ด้วย Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Deep Q Learning คืออะไร?

 

 

ภาพแสดง Q(state, action) โดยมี state แทนด้วยโลก และ action แทนด้วยจอยสติ๊ก

Deep Reinforcement Learning ด้วย Python

ทบทวน Q-Learning

 

ฟังก์ชันค่า Action Q_pi(s,a): ผลรวมของ reward ในอนาคต หากเลือก action a ใน state s โดยสมมติว่าปฏิบัติตาม policy pi หลังจากนั้น Q_pi(s,a) = ค่าคาดหวังของ R_tau ตาม policy pi เมื่อ s_t=s และ a_t=a

 

 

  • หากทราบค่า $Q$ จะสามารถกำหนด policy ที่ดีที่สุดได้: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • เป้าหมายของ Q-learning: เรียนรู้ค่า $Q$ ตามเวลา

Deep Reinforcement Learning ด้วย Python

ทบทวน Q-Learning

สมการ Bellman (ใน Q-learning) ในสภาพแวดล้อมแบบ deterministic: Q_pi(s_t, a_t) = reward r_t+1 + อัตราส่วนลด gamma * ค่า max เหนือ a_t+1 ของ Q_pi(s_t+1, a_t+1)

Temporal difference target หรือ TD-target, Q-target หรือ target Q-value: หมายถึงด้านขวาของสมการ Bellman ใช้เป็นค่าเป้าหมายสำหรับกฎการอัปเดต Q-learning r_t+1 + gamma * ค่า max เหนือ a_t+1 ของ Q_pi(s_t+1, a_t+1)

  • สมการ Bellman: สูตรเวียนเกิดสำหรับ $Q$
  • ด้านขวาของสมการ Bellman: "TD-target"
  • ใช้ TD-target จากสมการ Bellman เพื่ออัปเดต $\hat{Q}$ หลังแต่ละขั้นตอน

กฎการอัปเดต Q-learning: Q_new = (1-alpha) Q_old + alpha * TD-target

Deep Reinforcement Learning ด้วย Python

Q-Network

ตาราง Q ที่มี 4 states และ 4 actions รวม 16 ช่องที่ต้องกรอก

Deep Reinforcement Learning ด้วย Python

Q-Network

ตาราง Q ที่มี 9 states และ 4 actions รวม 36 ช่องที่ต้องกรอก

Deep Reinforcement Learning ด้วย Python

Q-Network

ตาราง Q ที่มีหลายสิบ states และ 4 actions รวมประมาณ 100 ช่องที่ต้องกรอก

Deep Reinforcement Learning ด้วย Python

Q-Network

  • หัวใจของ Deep Q Learning คือโครงข่ายประสาทเทียม

ภาพแสดงโครงข่ายประสาทเทียมแบบ fully connected ที่มี hidden layer สองชั้น

Deep Reinforcement Learning ด้วย Python

Q-Network

  • หัวใจของ Deep Q Learning คือโครงข่ายประสาทเทียม

ภาพแสดงโครงข่ายประสาทเทียมแบบ fully connected ที่มี hidden layer สองชั้น โดยมีภาพโลกจากสไลด์ก่อนหน้าป้อนเข้า input layer

Deep Reinforcement Learning ด้วย Python

Q-Network

  • หัวใจของ Deep Q Learning คือโครงข่ายประสาทเทียมที่แมป state ไปยังค่า Q

ภาพจากสไลด์ก่อนหน้า โดยแต่ละ node ใน output layer สัมพันธ์กับ action ที่แสดงเป็นทิศทางบนจอยสติ๊ก ขึ้นคือ action 0, ขวาคือ 1, ลงคือ 2, ซ้ายคือ 3

  • โครงข่ายที่ประมาณ action-value function เรียกว่า "Q-network"
  • Q-network ใช้กันอย่างแพร่หลายในอัลกอริทึม Deep Q Learning เช่น DQN
Deep Reinforcement Learning ด้วย Python

การ implement Q-network

class QNetwork(nn.Module):

def __init__(self, state_size, action_size): super(QNetwork, self).__init__()
self.fc1 = nn.Linear(state_size, 64) self.fc2 = nn.Linear(64, 64) self.fc3 = nn.Linear(64, action_size)
def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) x = torch.relu(self.fc2(x)) return self.fc3(x)
q_network = QNetwork(8, 4)
optimizer = optim.Adam(q_network.parameters(), lr=0.0001)
  • มิติ input กำหนดโดย state
  • มิติ output กำหนดโดยจำนวน action ที่เป็นไปได้

  • ในตัวอย่างนี้:

    • hidden layer 2 ชั้น แต่ละชั้นมี 64 nodes
    • ฟังก์ชัน activation แบบ ReLU
Deep Reinforcement Learning ด้วย Python

มาฝึกกันเถอะ!

Deep Reinforcement Learning ด้วย Python

Preparing Video For Download...