Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Algoritmo de Bandido por Gradiente | Problema do Bandido de Múltiplos Braços
Introdução ao Aprendizado por Reforço
course content

Conteúdo do Curso

Introdução ao Aprendizado por Reforço

Introdução ao Aprendizado por Reforço

1. Teoria Central de RL
2. Problema do Bandido de Múltiplos Braços
3. Programação Dinâmica
4. Métodos de Monte Carlo
5. Aprendizado por Diferença Temporal

book
Algoritmo de Bandido por Gradiente

Ao lidar com multi-armed bandits, métodos tradicionais como epsilon-greedy e UCB estimam valores de ação para decidir qual ação tomar. No entanto, gradient bandits adotam uma abordagem diferente — eles aprendem preferências para as ações em vez de estimar seus valores. Essas preferências são ajustadas ao longo do tempo utilizando ascensão estocástica do gradiente.

Preferências

Em vez de manter estimativas de valor de ação Q(a)Q(a), gradient bandits mantêm valores de preferência H(a)H(a) para cada ação aa. Essas preferências são atualizadas utilizando uma abordagem de ascensão estocástica do gradiente para maximizar as recompensas esperadas. A probabilidade de cada ação é calculada usando uma função softmax:

P(At=a)=eHt(a)b=1neHt(b)=πt(a)P(A_t = a) = \frac{e^{H_t(a)}}{\sum_{b=1}^n e^{H_t(b)}} = \pi_t(a)

onde:

  • Ht(a)H_t(a) é a preferência pela ação aa em um passo de tempo tt;
  • P(At=a)P(A_t = a) é a probabilidade de selecionar a ação aa em um passo de tempo tt;
  • O denominador garante que as probabilidades somem 1.

Softmax é uma função fundamental em ML, comumente utilizada para converter listas de números reais em listas de probabilidades. Essa função serve como uma aproximação suave para a função arg max\argmax, permitindo exploração natural ao dar às ações de menor preferência uma chance diferente de zero de serem selecionadas.

Regra de Atualização

Após selecionar uma ação AtA_t no tempo tt, os valores de preferência são atualizados utilizando a seguinte regra:

Ht+1(At)Ht(At)+α(RtRˉt)(1π(At))Ht+1(a)Ht(a)α(RtRˉt)π(a)aAt\begin{aligned} &H_{t+1}(A_t) \gets H_t(A_t) + \alpha (R_t - \bar R_t)(1 - \pi(A_t))\\ &H_{t+1}(a) \gets H_t(a) - \alpha (R_t - \bar R_t)\pi(a) \qquad \forall a \ne A_t \end{aligned}

onde:

  • α\alpha é o tamanho do passo;
  • RtR_t é a recompensa recebida;
  • Rˉt\bar R_t é a recompensa média observada até o momento.

Intuição

A cada passo de tempo, todas as preferências são ajustadas levemente. O ajuste depende principalmente da recompensa recebida e da recompensa média, podendo ser explicado da seguinte forma:

  • Se a recompensa recebida for maior que a média, a ação selecionada se torna mais preferida e as demais ações se tornam menos preferidas;
  • Se a recompensa recebida for menor que a média, a preferência pela ação selecionada diminui, enquanto as preferências pelas outras ações aumentam, incentivando a exploração.

Código de Exemplo

def softmax(x):
  """Simple softmax implementation"""
  return np.exp(x) / np.sum(np.exp(x))

class GradientBanditsAgent:
  def __init__(self, n_actions, alpha):
    """Initialize an agent"""
    self.n_actions = n_actions # Number of available actions
    self.alpha = alpha # alpha
    self.H = np.zeros(n_actions) # Preferences
    self.reward_avg = 0 # Average reward
    self.t = 0 # Time step counter

  def select_action(self):
    """Select an action according to the gradient bandits strategy"""
    # Compute probabilities from preferences with softmax
    probs = softmax(self.H)
    # Choose an action according to the probabilities
    return np.random.choice(self.n_actions, p=probs)

  def update(self, action, reward):
    """Update preferences"""
    # Increase the time step counter
    self.t += 1
    # Update the average reward
    self.reward_avg += reward / self.t

    # Compute probabilities from preferences with softmax
    probs = softmax(self.H) # Getting action probabilities from preferences

    # Update preference values using stochastic gradient ascent
    self.H -= self.alpha * (reward - self.reward_avg) * probs
    self.H[action] += self.alpha * (reward - self.reward_avg)

Informações Adicionais

Os bandits de gradiente possuem diversas propriedades interessantes:

  • Relatividade das preferências: os valores absolutos das preferências das ações não afetam o processo de seleção — apenas suas diferenças relativas importam. Alterar todas as preferências pelo mesmo valor constante (por exemplo, somar 100) resulta na mesma distribuição de probabilidades;
  • Efeito do baseline na regra de atualização: embora a fórmula de atualização normalmente inclua a recompensa média como baseline, esse valor pode ser substituído por qualquer constante independente da ação escolhida. O baseline influencia a velocidade de convergência, mas não altera a solução ótima;
  • Impacto do tamanho do passo: o tamanho do passo deve ser ajustado conforme a tarefa. Um valor menor garante aprendizado mais estável, enquanto um valor maior acelera o processo de aprendizado.

Resumo

Os bandits por gradiente oferecem uma alternativa poderosa aos algoritmos tradicionais de bandit ao utilizar o aprendizado baseado em preferências. Sua característica mais interessante é a capacidade de equilibrar naturalmente exploração e exploração.

question mark

Qual é a principal vantagem de utilizar bandits por gradiente em relação aos algoritmos tradicionais de bandit?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

Introdução ao Aprendizado por Reforço

Introdução ao Aprendizado por Reforço

1. Teoria Central de RL
2. Problema do Bandido de Múltiplos Braços
3. Programação Dinâmica
4. Métodos de Monte Carlo
5. Aprendizado por Diferença Temporal

book
Algoritmo de Bandido por Gradiente

Ao lidar com multi-armed bandits, métodos tradicionais como epsilon-greedy e UCB estimam valores de ação para decidir qual ação tomar. No entanto, gradient bandits adotam uma abordagem diferente — eles aprendem preferências para as ações em vez de estimar seus valores. Essas preferências são ajustadas ao longo do tempo utilizando ascensão estocástica do gradiente.

Preferências

Em vez de manter estimativas de valor de ação Q(a)Q(a), gradient bandits mantêm valores de preferência H(a)H(a) para cada ação aa. Essas preferências são atualizadas utilizando uma abordagem de ascensão estocástica do gradiente para maximizar as recompensas esperadas. A probabilidade de cada ação é calculada usando uma função softmax:

P(At=a)=eHt(a)b=1neHt(b)=πt(a)P(A_t = a) = \frac{e^{H_t(a)}}{\sum_{b=1}^n e^{H_t(b)}} = \pi_t(a)

onde:

  • Ht(a)H_t(a) é a preferência pela ação aa em um passo de tempo tt;
  • P(At=a)P(A_t = a) é a probabilidade de selecionar a ação aa em um passo de tempo tt;
  • O denominador garante que as probabilidades somem 1.

Softmax é uma função fundamental em ML, comumente utilizada para converter listas de números reais em listas de probabilidades. Essa função serve como uma aproximação suave para a função arg max\argmax, permitindo exploração natural ao dar às ações de menor preferência uma chance diferente de zero de serem selecionadas.

Regra de Atualização

Após selecionar uma ação AtA_t no tempo tt, os valores de preferência são atualizados utilizando a seguinte regra:

Ht+1(At)Ht(At)+α(RtRˉt)(1π(At))Ht+1(a)Ht(a)α(RtRˉt)π(a)aAt\begin{aligned} &H_{t+1}(A_t) \gets H_t(A_t) + \alpha (R_t - \bar R_t)(1 - \pi(A_t))\\ &H_{t+1}(a) \gets H_t(a) - \alpha (R_t - \bar R_t)\pi(a) \qquad \forall a \ne A_t \end{aligned}

onde:

  • α\alpha é o tamanho do passo;
  • RtR_t é a recompensa recebida;
  • Rˉt\bar R_t é a recompensa média observada até o momento.

Intuição

A cada passo de tempo, todas as preferências são ajustadas levemente. O ajuste depende principalmente da recompensa recebida e da recompensa média, podendo ser explicado da seguinte forma:

  • Se a recompensa recebida for maior que a média, a ação selecionada se torna mais preferida e as demais ações se tornam menos preferidas;
  • Se a recompensa recebida for menor que a média, a preferência pela ação selecionada diminui, enquanto as preferências pelas outras ações aumentam, incentivando a exploração.

Código de Exemplo

def softmax(x):
  """Simple softmax implementation"""
  return np.exp(x) / np.sum(np.exp(x))

class GradientBanditsAgent:
  def __init__(self, n_actions, alpha):
    """Initialize an agent"""
    self.n_actions = n_actions # Number of available actions
    self.alpha = alpha # alpha
    self.H = np.zeros(n_actions) # Preferences
    self.reward_avg = 0 # Average reward
    self.t = 0 # Time step counter

  def select_action(self):
    """Select an action according to the gradient bandits strategy"""
    # Compute probabilities from preferences with softmax
    probs = softmax(self.H)
    # Choose an action according to the probabilities
    return np.random.choice(self.n_actions, p=probs)

  def update(self, action, reward):
    """Update preferences"""
    # Increase the time step counter
    self.t += 1
    # Update the average reward
    self.reward_avg += reward / self.t

    # Compute probabilities from preferences with softmax
    probs = softmax(self.H) # Getting action probabilities from preferences

    # Update preference values using stochastic gradient ascent
    self.H -= self.alpha * (reward - self.reward_avg) * probs
    self.H[action] += self.alpha * (reward - self.reward_avg)

Informações Adicionais

Os bandits de gradiente possuem diversas propriedades interessantes:

  • Relatividade das preferências: os valores absolutos das preferências das ações não afetam o processo de seleção — apenas suas diferenças relativas importam. Alterar todas as preferências pelo mesmo valor constante (por exemplo, somar 100) resulta na mesma distribuição de probabilidades;
  • Efeito do baseline na regra de atualização: embora a fórmula de atualização normalmente inclua a recompensa média como baseline, esse valor pode ser substituído por qualquer constante independente da ação escolhida. O baseline influencia a velocidade de convergência, mas não altera a solução ótima;
  • Impacto do tamanho do passo: o tamanho do passo deve ser ajustado conforme a tarefa. Um valor menor garante aprendizado mais estável, enquanto um valor maior acelera o processo de aprendizado.

Resumo

Os bandits por gradiente oferecem uma alternativa poderosa aos algoritmos tradicionais de bandit ao utilizar o aprendizado baseado em preferências. Sua característica mais interessante é a capacidade de equilibrar naturalmente exploração e exploração.

question mark

Qual é a principal vantagem de utilizar bandits por gradiente em relação aos algoritmos tradicionais de bandit?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5
some-alt