Algoritmo Epsilon-Greedy
El algoritmo epsilon-greedy (ε-greedy) es una estrategia sencilla pero altamente efectiva para abordar el problema del multi-armed bandit. Aunque puede no ser tan robusto como otros métodos para esta tarea específica, su simplicidad y versatilidad lo hacen ampliamente aplicable en el campo del aprendizaje por refuerzo.
Cómo funciona
El algoritmo sigue estos pasos:
- Inicializar las estimaciones de valor de acción Q(a) para cada acción a;
- Elegir una acción utilizando la siguiente regla:
- Con probabilidad ε: seleccionar una acción aleatoria (exploración);
- Con probabilidad 1−ε: seleccionar la acción con el valor estimado más alto (explotación).
- Ejecutar la acción y observar la recompensa;
- Actualizar la estimación del valor de acción Q(a) en función de la recompensa observada;
- Repetir los pasos 2-4 durante un número fijo de pasos de tiempo.
El hiperparámetro ε (epsilon) controla el equilibrio entre exploración y explotación:
- Un ε alto (por ejemplo, 0.5) fomenta una mayor exploración;
- Un ε bajo (por ejemplo, 0.01) favorece la explotación de la mejor acción conocida.
Código de ejemplo
class EpsilonGreedyAgent:
def __init__(self, n_actions, epsilon):
"""Initialize an agent"""
self.n_actions = n_actions # Number of available actions
self.epsilon = epsilon # epsilon
self.Q = np.zeros(self.n_actions) # Estimated action values
self.N = np.zeros(self.n_actions) # Action selection counters
def select_action(self):
"""Select an action according to the epsilon-greedy strategy"""
# With probability epsilon - random action
if np.random.rand() < self.epsilon:
return np.random.randint(self.n_actions)
# Otherwise - action with highest estimated action value
else:
return np.argmax(self.Q)
def update(self, action, reward):
"""Update the values using sample average estimate"""
# Increasing the action selection counter
self.N[action] += 1
# Updating the estimated action value
self.Q[action] += (reward - self.Q[action]) / self.N[action]
Información adicional
La eficiencia del algoritmo ε-greedy depende en gran medida del valor de ε. Dos estrategias son comúnmente utilizadas para seleccionar este valor:
- ε fijo: esta es la opción más genérica, donde el valor de ε se elige como una constante (por ejemplo, 0.1);
- ε decreciente: el valor de ε disminuye con el tiempo según algún calendario (por ejemplo, comienza en 1 y disminuye gradualmente hasta 0) para fomentar la exploración en las etapas iniciales.
Resumen
El algoritmo ε-greedy es un enfoque de referencia para equilibrar la exploración y la explotación. Aunque es sencillo, sirve como base para comprender estrategias más avanzadas como upper confidence bound (UCB) y gradient bandits.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 2.7
Algoritmo Epsilon-Greedy
Desliza para mostrar el menú
El algoritmo epsilon-greedy (ε-greedy) es una estrategia sencilla pero altamente efectiva para abordar el problema del multi-armed bandit. Aunque puede no ser tan robusto como otros métodos para esta tarea específica, su simplicidad y versatilidad lo hacen ampliamente aplicable en el campo del aprendizaje por refuerzo.
Cómo funciona
El algoritmo sigue estos pasos:
- Inicializar las estimaciones de valor de acción Q(a) para cada acción a;
- Elegir una acción utilizando la siguiente regla:
- Con probabilidad ε: seleccionar una acción aleatoria (exploración);
- Con probabilidad 1−ε: seleccionar la acción con el valor estimado más alto (explotación).
- Ejecutar la acción y observar la recompensa;
- Actualizar la estimación del valor de acción Q(a) en función de la recompensa observada;
- Repetir los pasos 2-4 durante un número fijo de pasos de tiempo.
El hiperparámetro ε (epsilon) controla el equilibrio entre exploración y explotación:
- Un ε alto (por ejemplo, 0.5) fomenta una mayor exploración;
- Un ε bajo (por ejemplo, 0.01) favorece la explotación de la mejor acción conocida.
Código de ejemplo
class EpsilonGreedyAgent:
def __init__(self, n_actions, epsilon):
"""Initialize an agent"""
self.n_actions = n_actions # Number of available actions
self.epsilon = epsilon # epsilon
self.Q = np.zeros(self.n_actions) # Estimated action values
self.N = np.zeros(self.n_actions) # Action selection counters
def select_action(self):
"""Select an action according to the epsilon-greedy strategy"""
# With probability epsilon - random action
if np.random.rand() < self.epsilon:
return np.random.randint(self.n_actions)
# Otherwise - action with highest estimated action value
else:
return np.argmax(self.Q)
def update(self, action, reward):
"""Update the values using sample average estimate"""
# Increasing the action selection counter
self.N[action] += 1
# Updating the estimated action value
self.Q[action] += (reward - self.Q[action]) / self.N[action]
Información adicional
La eficiencia del algoritmo ε-greedy depende en gran medida del valor de ε. Dos estrategias son comúnmente utilizadas para seleccionar este valor:
- ε fijo: esta es la opción más genérica, donde el valor de ε se elige como una constante (por ejemplo, 0.1);
- ε decreciente: el valor de ε disminuye con el tiempo según algún calendario (por ejemplo, comienza en 1 y disminuye gradualmente hasta 0) para fomentar la exploración en las etapas iniciales.
Resumen
El algoritmo ε-greedy es un enfoque de referencia para equilibrar la exploración y la explotación. Aunque es sencillo, sirve como base para comprender estrategias más avanzadas como upper confidence bound (UCB) y gradient bandits.
¡Gracias por tus comentarios!