A3C
forkortelse for Asynchronous Advantage Actor-Critic
En forstærkningslæringsalgoritme, der kombinerer actor-critic med asynkron parallel træning for at stabilisere og fremskynde indlæring.
Kort fortalt
En metode til at træne AI-agenter, hvor flere kopier af agenten lærer samtidigt i separate miljøer og deler viden.
- Kategori
- teknik
- Niveau
- øvet
- Udtale
- /eɪ θriː siː/
Betydninger
1- 1
En forstærkningslæringsalgoritme, der træner en policy og en værdifunktion parallelt ved hjælp af fler asynkrone arbejdere, hver med deres egen kopi af miljøet.
- A3C opnåede state-of-the-art resultater på Atari-spil i 2016 ved at udnytte asynkron træning. — Mnih et al., 2016
- A3C-algoritmen bruger flere tråde til at udforske miljøet samtidigt, hvilket gør læringen mere stabil.
Hvornår bruges det
A3C bruges typisk i deep reinforcement learning-opgaver, hvor agenten skal lære komplekse sekventielle beslutninger, f.eks. inden for spil (Atari) eller robotstyring. Algoritmen udnytter flere asynkrone arbejdere til at udforske miljøet parallelt, hvilket reducerer korrelationen mellem træningsdata.
Formel
∇θ J(θ) ≈ (1/N) Σ_t (A(s_t, a_t) · ∇θ log πθ(a_t|s_t) + β · H(πθ(·|s_t)))Kodeeksempel
import threading, numpy as np
class Worker(threading.Thread):
def __init__(self, global_network, optimizer):
super().__init__()
self.global_network = global_network
self.local_network = copy.deepcopy(global_network)
self.optimizer = optimizer
def run(self):
while True:
state = env.reset()
done = False
while not done:
action = self.local_network.act(state)
next_state, reward, done = env.step(action)
self.local_network.store(state, action, reward)
state = next_state
# Compute gradients and update global network
gradients = self.local_network.compute_gradients()
self.optimizer.apply_gradients(zip(gradients, self.global_network.weights))Forenklet kode for A3C-arbejder, der viser asynkron træning.
Oprindelse
Introduceret af Mnih m.fl. i 2016 som en forbedring af deep Q-netværk, der muliggør effektiv træning uden brug af erfaringsbuffer.