Introduktion till djup Q-inlärning

Djup förstärkningsinlärning i Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Vad är djup Q-inlärning?

 

 

En bild som representerar Q(tillstånd, åtgärd), där tillståndet representeras av jordklotet och åtgärden av en joystick

Djup förstärkningsinlärning i Python

Repetition av Q-inlärning

 

Handlingsvärdesfunktionen Q_pi(s,a): summan av framtida belöningar om åtgärd a vidtas i tillstånd s, givet att policy pi följs därefter. Q_pi(s,a) = förväntat värde över framtida trajektorier givet att policy pi följs, givet s_t=s och a_t=a

 

 

  • Kännedom om $Q$ möjliggör optimal policy: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • Målet med Q-inlärning: lära sig $Q$ över tid

Djup förstärkningsinlärning i Python

Repetition av Q-inlärning

Bellmanekvationen (i Q-inlärning) i en deterministisk miljö: Q_pi(s_t, a_t) = belöning r_t+1 + diskonteringsgrad gamma * max över a_t+1 av Q_pi(s_t+1, a_t+1))

Temporal difference-målet, även kallat TD-mål, Q-mål eller målvärdet för Q: avser högerledet i Bellmanekvationen, används som målvärde i Q-inlärningens uppdateringsregel. r_t+1 + gamma * max över a_t+1 av Q_pi(s_t+1, a_t+1))

  • Bellmanekvationen: rekursiv formel för $Q$
  • Högerledet i Bellmanekvationen: "TD-mål"
  • Använd TD-målet från Bellmanekvationen för att uppdatera $\hat{Q}$ efter varje steg

Q-inlärningens uppdateringsregel: Q_ny = (1-alpha) Q_gammal + alpha * TD-mål

Djup förstärkningsinlärning i Python

Q-nätverket

En Q-tabell med 4 tillstånd och 4 åtgärder, totalt 16 celler att fylla i

Djup förstärkningsinlärning i Python

Q-nätverket

En Q-tabell med 9 tillstånd och 4 åtgärder, totalt 36 celler att fylla i

Djup förstärkningsinlärning i Python

Q-nätverket

En Q-tabell med dussintals tillstånd och 4 åtgärder, troligen ~100 celler att fylla i

Djup förstärkningsinlärning i Python

Q-nätverket

  • Kärnan i djup Q-inlärning: ett neuralt nätverk

Illustration av ett fullt anslutet neuralt nätverk med två dolda lager

Djup förstärkningsinlärning i Python

Q-nätverket

  • Kärnan i djup Q-inlärning: ett neuralt nätverk

Illustration av ett fullt anslutet neuralt nätverk med två dolda lager, där jordklotbilden från föregående bild matas in i indatalagret

Djup förstärkningsinlärning i Python

Q-nätverket

  • Kärnan i djup Q-inlärning: ett neuralt nätverk som mappar tillstånd till Q-värden

Illustrationen från föregående bild, där varje nod i utdatalagret är kopplad till en åtgärd representerad som en riktning på joysticken. Upp motsvarar åtgärd 0, 1 är höger, ned är 2 och vänster är 3.

  • Ett nätverk som approximerar handlingsvärdesfunktionen kallas "Q-nätverk"
  • Q-nätverk används ofta i djup Q-inlärningsalgoritmer, till exempel DQN.
Djup förstärkningsinlärning i Python

Implementera Q-nätverket

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)
  • Indatadimensionen bestäms av tillståndet
  • Utdatadimensionen bestäms av antalet möjliga åtgärder

  • I det här exemplet:

    • 2 dolda lager med 64 noder vardera
    • ReLU-aktiveringsfunktion
Djup förstärkningsinlärning i Python

Nu kör vi en övning!

Djup förstärkningsinlärning i Python

Preparing Video For Download...