Pular para o conteúdo principal

Detalhes da Value Network

Se a Policy Network diz ao AlphaGo "onde deve jogar a seguir", a Value Network responde a uma questão mais fundamental:

"Este jogo, eu vou vencer?"


O que é a Value Network?​

Função Principal​

A Value Network é uma rede neural convolucional profunda, cuja tarefa é:

Dado o estado atual do tabuleiro, prever a taxa de vitória final

Em termos matemáticos:

v = f_θ(s)

Onde:

  • s: Estado atual do tabuleiro
  • f_θ: Value Network (θ são os parâmetros da rede)
  • v: Um valor entre -1 e +1

Significado da Saída​

Valor de SaídaSignificado
+1O jogador atual vence com certeza
+0,5O jogador atual tem ~75% de taxa de vitória
0Taxas de vitória iguais para ambos
-0,5O jogador atual tem ~25% de taxa de vitória
-1O jogador atual perde com certeza

Por que precisamos de um único valor?​

Comparar diferentes escolhas​

Ao jogar, frequentemente precisamos escolher entre múltiplas opções. A Value Network torna essa comparação simples:

Valor da posição da Opção A: 0,3
Valor da posição da Opção B: 0,5
Valor da posição da Opção C: 0,2

→ Escolher B (o maior valor)

Se não houvesse um único valor, como compararíamos "capturar um grupo do oponente" com "cercar um grande território"?

Substituir muitas simulações​

Na busca em árvore de Monte Carlo tradicional, avaliar uma posição requer simulação aleatória (rollout):

  1. Começar da posição atual
  2. Ambos os lados jogam aleatoriamente até o fim do jogo
  3. Registrar vitória/derrota
  4. Repetir milhares de vezes, calcular taxa de vitória

Isso é muito lento. A Value Network pode dar uma avaliação em uma única propagação direta, ordens de magnitude mais rápido.

MétodoTempo de AvaliaçãoPrecisão
1000 simulações aleatórias~2000 msBaixa
15000 simulações aleatórias~30000 msMédia
Value Network~3 msAlta (equivalente a 15000 simulações)

Arquitetura da Rede​

Similaridade com a Policy Network​

A arquitetura da Value Network é muito similar à Policy Network, ambas são redes neurais convolucionais profundas:

Camada de Entrada → Camadas Conv ×12 → Camada Totalmente Conectada → Saída
↓ ↓ ↓ ↓
19×19×48 19×19×192 256-dim Valor único

Camada de Entrada​

Similar à Policy Network, a entrada é um tensor de características 19×19×49:

  • 19×19: Tamanho do tabuleiro
  • 49: 48 planos de características + 1 plano indicando de quem é a vez

O plano extra é importante: a Value Network precisa saber de quem é a vez, porque o valor da mesma posição é oposto para preto e branco.

Camadas Convolucionais​

Igual à Policy Network:

  • 12 camadas convolucionais
  • 192 filtros
  • Kernels 3×3 (5×5 na primeira camada)
  • Função de ativação ReLU

Diferença na Camada de Saída​

Esta é a diferença chave entre Value Network e Policy Network:

Saída da Policy Network​

19×19×192 → Conv 1×1 → 19×19×1 → Achatar → 361-dim → Softmax → Distribuição de probabilidade

Saída da Value Network​

19×19×192 → Conv 1×1 → 19×19×1 → Achatar → 361-dim → FC 256 → ReLU → FC 1 → Tanh → Valor único

Função de Ativação Tanh​

A última camada da Value Network usa a função Tanh (tangente hiperbólica):

Tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

O intervalo de saída do Tanh é (-1, +1), correspondendo exatamente a vitória/derrota.

Por que usar Tanh em vez de Sigmoid?​

O intervalo de saída do Sigmoid é (0, 1), que também pode representar taxa de vitória. Mas Tanh tem várias vantagens:

  1. Simetria: Centrado em 0, saída pode ser positiva ou negativa
  2. Melhor gradiente: Gradiente próximo de 1 em torno de 0
  3. Semântica clara: Valores positivos = vitória, valores negativos = derrota, zero = empate

Diagrama Completo da Arquitetura​

Entrada: 19×19×49
↓
Conv 5×5, 192 filtros
↓
ReLU
↓
Conv 3×3, 192 filtros (×11)
↓
ReLU
↓
Conv 1×1, 1 filtro
↓
Achatar (361-dim)
↓
Totalmente Conectada (256-dim)
↓
ReLU
↓
Totalmente Conectada (1-dim)
↓
Tanh
↓
Saída: [-1, +1]

Contagem de Parâmetros​

CamadaCálculoNúmero de Parâmetros
Camadas convIgual à Policy Network~3,9M
Camada FC 1361×256 + 25692.672
Camada FC 2256×1 + 1257
Total~4,0M

Aproximadamente 4 milhões de parâmetros, ligeiramente mais que a Policy Network.


Desafios do Treinamento​

Problema de Overfitting​

O treinamento da Value Network é muito mais difícil que o da Policy Network. O principal problema é overfitting.

O que é overfitting?​

Overfitting é quando o modelo "memoriza" os dados de treinamento em vez de aprender a generalizar. Manifesta-se como:

  • Desempenho muito bom no conjunto de treinamento
  • Desempenho ruim no conjunto de teste

Por que a Value Network é propensa a overfitting?​

Considere os dados de um jogo:

Posição 1 → Posição 2 → Posição 3 → ... → Posição 200 → Resultado: Preto vence

Se treinarmos diretamente com esses dados:

  • Essas 200 posições têm forte correlação
  • Elas vêm do mesmo jogo, têm o mesmo resultado
  • O modelo pode aprender a "reconhecer" este jogo, em vez de entender posições

O DeepMind descobriu: se usar os mesmos registros de jogos humanos para treinar Policy e Value Network, a Value Network terá sério overfitting.

Solução: Dados de Auto-jogo​

A solução do DeepMind é usar auto-jogo para gerar novos dados de treinamento:

1. Usar a RL Policy Network treinada para auto-jogo
2. Pegar apenas uma posição de cada jogo (evitar correlação)
3. O rótulo dessa posição é o resultado final do jogo
4. Gerar 30 milhões de tais amostras

Por que isso resolve o overfitting?​

  1. Grande volume de dados: 30 milhões de posições independentes
  2. Sem correlação: Apenas uma posição de cada jogo
  3. Distribuição diferente: A distribuição de posições do auto-jogo é diferente dos registros humanos

Geração de Dados de Treinamento​

# Pseudocódigo
training_data = []

for game_id in range(30_000_000):
# Auto-jogar um jogo
states, result = self_play(rl_policy_network)

# Selecionar aleatoriamente uma posição
random_index = random.randint(0, len(states) - 1)
state = states[random_index]

# Registrar posição e resultado
training_data.append((state, result))

Objetivo e Métodos de Treinamento​

Perda de Erro Quadrático Médio​

A Value Network usa Erro Quadrático Médio (MSE) como função de perda:

L(θ) = (1/n) × Σ (v_θ(s) - z)²

Onde:

  • v_θ(s): Valor previsto pelo modelo
  • z: Resultado real (+1 ou -1)

Por que usar MSE em vez de entropia cruzada?​

  • Entropia cruzada é adequada para problemas de classificação (rótulos discretos)
  • MSE é adequada para problemas de regressão (valores contínuos)

Embora o resultado seja apenas +1 ou -1, o modelo prevê valores contínuos (qualquer número entre -1 e +1). MSE faz o modelo aprender a prever valores próximos de +1 ou -1.

Processo de Treinamento​

# Pseudocódigo
for epoch in range(num_epochs):
for batch in dataloader:
states, outcomes = batch

# Propagação direta
values = network(states) # (batch, 1)

# Calcular perda (MSE)
loss = mse_loss(values, outcomes)

# Retropropagação
loss.backward()
optimizer.step()

Detalhes do treinamento:

  • Otimizador: SGD com momentum
  • Taxa de aprendizado: 0,003
  • Tamanho do lote: 32
  • Tempo de treinamento: Aproximadamente 1 semana (50 GPUs)

Análise de Precisão​

Comparação com Simulação Aleatória​

O DeepMind realizou comparações detalhadas no artigo:

Método de AvaliaçãoErro de Previsão
1000 simulações aleatóriasAlto
15000 simulações aleatóriasMédio
Value NetworkComparável a 15000 simulações

Isso significa que uma avaliação da Value Network ≈ 15000 simulações aleatórias, mas ~1000× mais rápida.

Precisão em Diferentes Fases​

A precisão da Value Network depende do progresso do jogo:

FaseJogadas RestantesDificuldade de PrevisãoPrecisão
Abertura~300Muito difícilBaixa
Meio de jogo~150DifícilMédia
Yose~50Mais fácilAlta
Final~10SimplesMuito alta

Isso é intuitivamente razoável: quanto mais perto do fim do jogo, mais determinado é o resultado.

Distribuição de Saída​

A distribuição de saída de uma Value Network bem treinada:

        Frequência
|
| *
| * *
| * *
| * *
|* *
+----+----+---- Valor de saída
-1 0 +1

A maioria das saídas está concentrada perto de -1 e +1
(porque a maioria das posições tem uma tendência clara de vitória/derrota)

Posições Incertas​

Quando a saída da Value Network está próxima de 0, indica que a posição é muito complexa, com resultado incerto. Essas posições geralmente são:

  • No meio de grandes batalhas
  • Forças equilibradas entre ambos os lados
  • Existem múltiplas variações possíveis

No MCTS, esses nós recebem mais recursos de busca (por causa da alta incerteza).


Papel no MCTS​

Avaliação de Nós Folha​

A Value Network desempenha um papel crítico na fase de Avaliação do MCTS:

Árvore de busca MCTS:

Nó raiz (posição atual)
/ \
A B
/ \ / \
A1 A2 B1 B2 ← Nós folha
↓ ↓ ↓ ↓
Aval Aval Aval Aval

Quando o MCTS alcança um nó folha, precisa avaliar o valor dessa posição. Existem dois métodos:

  1. Simulação aleatória (Rollout): Jogar aleatoriamente do nó folha até o fim do jogo
  2. Avaliação pela Value Network: Prever diretamente com a rede neural

O AlphaGo combina ambos:

V(folha) = (1-λ) × V_network(folha) + λ × V_rollout(folha)

Onde λ = 0,5, ou seja, cada um com metade do peso.

Por que combinar?​

  • Value Network é mais precisa, mas pode ter viés sistemático
  • Simulação aleatória é menos precisa, mas fornece estimativa independente
  • Combinar ambos pode complementar um ao outro

Simplificação no AlphaGo Zero​

O posterior AlphaGo Zero abandonou completamente a simulação aleatória:

V(folha) = V_network(folha)

Isso simplificou muito o sistema, enquanto a força de jogo aumentou. Isso prova que a Value Network é confiável o suficiente, não precisando do "seguro" da simulação aleatória.

Atualização por Backpropagation​

Após avaliar o nó folha, esse valor é propagado de volta pelo caminho:

v3 = V(folha) = 0,6
↑
Valor Q de A2 atualizado
↑
Valor Q de A atualizado
↑
Estatísticas do nó raiz atualizadas

O valor Q mantido por cada nó é a média das avaliações dos nós folha que passaram por ele:

Q(s, a) = (1/N(s,a)) × Σ V(folha)

Análise Visual​

Superfície de Valor​

Imagine um tabuleiro 3×3 simplificado. A Value Network aprende uma "superfície de valor":

Posição pedra preta \ branca123
1+0,3-0,1+0,2
2-0,2+0,5-0,3
3+0,1-0,2+0,4

Esta superfície nos diz o valor de cada combinação de posições. Valores positivos favorecem preto, valores negativos favorecem branco.

Evolução Durante o Treinamento​

À medida que o treinamento progride, as previsões da Value Network gradualmente se tornam mais precisas:

       Erro de previsão
|
1,0 |*
| *
0,5 | *
| *
0,1 | * * * * *
+─────────────── Passos de treinamento
0 100K 500K 1M

O erro cai rapidamente, depois estabiliza.

Identificação de Posições Difíceis​

A Value Network pode ajudar a identificar posições difíceis:

SaídaSignificadoEstratégia de Resposta
Próximo de +1Grande vantagemJogar solidamente
Próximo de -1Grande desvantagemBuscar oportunidades de virar
Próximo de 0Posição complexaRequer cálculo profundo

O AlphaGo investe mais tempo de pensamento em posições próximas de 0.


Pontos de Implementação​

Implementação em PyTorch​

import torch
import torch.nn as nn
import torch.nn.functional as F

class ValueNetwork(nn.Module):
def __init__(self, input_channels=49, num_filters=192, num_layers=12):
super().__init__()

# Primeira camada convolucional (5×5)
self.conv1 = nn.Conv2d(input_channels, num_filters,
kernel_size=5, padding=2)

# Camadas convolucionais intermediárias (3×3)×11
self.conv_layers = nn.ModuleList([
nn.Conv2d(num_filters, num_filters,
kernel_size=3, padding=1)
for _ in range(num_layers - 1)
])

# Camada convolucional de saída
self.conv_out = nn.Conv2d(num_filters, 1, kernel_size=1)

# Camadas totalmente conectadas
self.fc1 = nn.Linear(361, 256)
self.fc2 = nn.Linear(256, 1)

def forward(self, x):
# x: (batch, 49, 19, 19)

# Camadas convolucionais
x = F.relu(self.conv1(x))
for conv in self.conv_layers:
x = F.relu(conv(x))
x = self.conv_out(x)

# Achatar
x = x.view(x.size(0), -1) # (batch, 361)

# Camadas totalmente conectadas
x = F.relu(self.fc1(x))
x = torch.tanh(self.fc2(x))

return x.squeeze(-1) # (batch,)

Loop de Treinamento​

def train_value_network(model, optimizer, states, outcomes):
"""
states: (batch, 49, 19, 19) - Características do tabuleiro
outcomes: (batch,) - Resultado do jogo (+1 ou -1)
"""
# Propagação direta
values = model(states) # (batch,)

# Perda MSE
loss = F.mse_loss(values, outcomes)

# Retropropagação
optimizer.zero_grad()
loss.backward()
optimizer.step()

# Calcular precisão (previsão correta de vitória/derrota)
predictions = (values > 0).float() * 2 - 1 # Converter para +1/-1
accuracy = (predictions == outcomes).float().mean()

return loss.item(), accuracy.item()

Técnicas para Evitar Overfitting​

# 1. Aumento de dados (simetria de 8 dobras)
def augment(state, outcome):
augmented = []
for rotation in [0, 90, 180, 270]:
s = rotate(state, rotation)
augmented.append((s, outcome))
augmented.append((flip(s), outcome))
return augmented

# 2. Dropout
class ValueNetworkWithDropout(ValueNetwork):
def __init__(self, *args, dropout_rate=0.5, **kwargs):
super().__init__(*args, **kwargs)
self.dropout = nn.Dropout(dropout_rate)

def forward(self, x):
# ... camadas conv ...
x = self.dropout(x) # Dropout antes das camadas FC
# ... camadas FC ...

# 3. Parada antecipada (Early Stopping)
best_val_loss = float('inf')
patience = 10
counter = 0

for epoch in range(max_epochs):
train_loss = train_one_epoch()
val_loss = evaluate()

if val_loss < best_val_loss:
best_val_loss = val_loss
save_model()
counter = 0
else:
counter += 1
if counter >= patience:
print("Early stopping!")
break

Colaboração com a Policy Network​

Relação Complementar​

Policy Network e Value Network são complementares no AlphaGo:

RedeQuestão RespondidaSaídaPapel no MCTS
PolicyOnde jogar a seguir?Distribuição de probabilidadeGuiar direção da busca
ValueVou vencer este jogo?Valor únicoAvaliar nós folha

Rede de Cabeça Dupla Unificada​

No AlphaGo Zero, essas duas redes foram fundidas em uma rede de cabeça dupla:

Vantagens deste design:

  • Compartilhamento de parâmetros: Reduz computação
  • Compartilhamento de características: Policy e Value usam as mesmas características
  • Treinamento mais estável: Os dois objetivos se regularizam mutuamente

Veja Rede de Cabeça Dupla e Rede Residual para detalhes.


Correspondência com Animações​

Os conceitos principais abordados neste artigo e seus números de animação:

NúmeroConceitoCorrespondência Física/Matemática
E2Value NetworkSuperfície de potencial
D4Função de valorRetorno esperado
C6Avaliação de nós folhaAproximação de função
H3Diferença temporalAprendizado por bootstrap

Leitura Adicional​


Pontos-Chave​

  1. Value Network prevê taxa de vitória: Saída de um único valor entre -1 e +1
  2. Saída Tanh: Garante que a saída esteja no intervalo correto
  3. Perda MSE: Aproxima o valor previsto do resultado real
  4. Desafio de overfitting: Precisa usar dados de auto-jogo para evitar
  5. Substitui simulação aleatória: Uma avaliação ≈ 15000 simulações

A Value Network é o "julgamento" do AlphaGo — ela permite que a IA avalie a qualidade de qualquer posição sem precisar esgotar todas as possibilidades.


Referências​

  1. Silver, D., et al. (2016). "Mastering the game of Go with deep neural networks and tree search." Nature, 529, 484-489.
  2. Silver, D., et al. (2017). "Mastering the game of Go without human knowledge." Nature, 551, 354-359.
  3. Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction. MIT Press.
  4. Tesauro, G. (1995). "Temporal difference learning and TD-Gammon." Communications of the ACM, 38(3), 58-68.