Entropia como Motor de Aprendizado: Quando a IA Sabe que Não Sabe
Como uma IA sabe que não sabe algo? Parece filosófico, mas é um problema prático com solução matemática. Se o sistema tem uma crença com 50% de chance de ser A e 50% de ser B, ele está genuinamente incerto. Se tem 95% A e 5% B, está quase certo. A diferença entre esses dois estados é quantificável com uma única métrica: entropia de Shannon. E essa métrica pode ser usada como motor de aprendizado: alta entropia significa "preciso aprender mais sobre isso".
Uso entropia como combustível do sistema de curiosidade, como métrica de maturidade dos mundos, e como indicador de sucesso do aprendizado. Quando a entropia cai ao longo do tempo, o sistema aprendeu. Quando sobe, encontrou controvérsia. Quando fica estável e baixa, está confiante. É a métrica mais honesta que encontrei para medir conhecimento.
Guia de tópicos:
- Entropia de Shannon: A Matemática da Incerteza
- Entropia no Contexto de Crenças
- Como Trigger de Curiosidade
- Como Métrica de Maturidade
- Medindo Aprendizado: Redução de Entropia
- Exemplo Prático em Python
- Considerações Finais
Entropia de Shannon: A Matemática da Incerteza
A fórmula é simples: H = -Σ p(x) × log2(p(x)). Para uma distribuição com duas hipóteses de 50% cada, H = 1.0 (máxima incerteza para 2 opções). Para uma hipótese com 99% e outra com 1%, H ≈ 0.08 (quase certeza). Para 100%, H = 0 (certeza absoluta, que na prática nunca permito).
A intuição: entropia mede quantos "bits" de informação você precisaria para eliminar a incerteza. Se são 2 opções igualmente prováveis, precisa de 1 bit (uma pergunta sim/não resolve). Se são 8 opções iguais, precisa de 3 bits. Se já sabe a resposta, precisa de 0 bits.
Entropia no Contexto de Crenças
Cada crença no grafo tem sua própria entropia. (Brasil, capital, ?) com distribuição {Brasília: 0.9, Rio: 0.1} tem entropia ≈ 0.47. Baixa, o sistema está confiante. (Plutão, classificação, ?) com {planeta_anão: 0.5, planeta: 0.4, outro: 0.1} tem entropia ≈ 1.36. Alta, genuinamente incerto.
A entropia de um mundo inteiro é a média das entropias de todas as suas crenças. Mundo com média 0.2 é maduro. Mundo com média 0.8 tem muitas incertezas.
Como Trigger de Curiosidade
O sistema de curiosidade usa entropia > 0.7 como threshold. A cada 60 segundos, varre crenças e seleciona as mais incertas para investigação via web. O threshold foi calibrado na prática: abaixo de 0.5 não vale o custo de pesquisar. Acima de 0.9 qualquer informação ajuda. 0.7 é o sweet spot de custo-benefício.
Como Métrica de Maturidade
Maturidade de um mundo = média das confianças dominantes de todas as crenças (correlacionado inversamente com entropia). Mundos maduros exigem similaridade maior para aceitar mensagens novas (threshold dinâmico), mudam menos o centroide (alpha adaptativo), e são priorizados como contexto para respostas.
Medindo Aprendizado: Redução de Entropia
Se o sistema começa com entropia média 0.8 em um mundo e após 10 interações está em 0.3, ele aprendeu. A redução de entropia é a métrica mais honesta de aprendizado: não mede "quantas triplas adicionou" (quantidade), mas "quão mais confiante ficou" (qualidade).
Em benchmarks, o cenário "redução de entropia" testa exatamente isso: fornece informações que deveriam resolver incertezas e verifica se a entropia realmente caiu. É a prova de que o sistema aprende de verdade, não só acumula dados.
Exemplo Prático em Python
import numpy as np
def entropy(distribution: dict[str, float]) -> float:
"""Shannon entropy: measures uncertainty in a distribution."""
probs = np.array(list(distribution.values()))
probs = probs[probs > 0]
return float(-np.sum(probs * np.log2(probs + 1e-12)))
def bayesian_update(dist: dict, evidence: str, likelihood: float) -> dict:
"""Update distribution with new evidence."""
likelihood = np.clip(likelihood, 0.01, 0.99)
if evidence not in dist:
dist[evidence] = max(1.0 - sum(dist.values()), 0.05)
def p_ev(h):
return likelihood if h == evidence else (1-likelihood)/max(len(dist)-1, 1)
unnorm = {h: p_ev(h) * p for h, p in dist.items()}
total = sum(unnorm.values())
return {h: v/total for h, v in unnorm.items() if v/total >= 0.02}
def simulate_learning(initial_dist: dict, evidences: list[tuple[str, float]]):
"""Simulate learning process and track entropy reduction."""
dist = initial_dist.copy()
print(f"Initial: H={entropy(dist):.3f}")
print(f" {dist}\n")
for i, (obj, lk) in enumerate(evidences):
dist = bayesian_update(dist, obj, lk)
h = entropy(dist)
dominant = max(dist, key=dist.get)
print(f"Step {i+1}: evidence='{obj}' (lk={lk}) → H={h:.3f}, dominant='{dominant}'")
# Visual bar
for hyp, prob in sorted(dist.items(), key=lambda x: -x[1]):
bar = "█" * int(prob * 30)
print(f" {hyp:15s} {bar} {prob:.3f}")
print()
return dist
# Demo: entropy decreasing as evidence accumulates
print("=== Learning about Pluto's classification ===\n")
initial = {"planeta_anão": 0.35, "planeta": 0.40, "asteroide": 0.15, "outro": 0.10}
evidences = [
("planeta_anão", 0.7), # IAU says dwarf planet
("planeta_anão", 0.8), # Another source confirms
("planeta", 0.4), # Old textbook says planet (weak)
("planeta_anão", 0.85), # NASA confirms dwarf planet
]
final = simulate_learning(initial, evidences)
print(f"Final entropy: {entropy(final):.3f} (started at {entropy(initial):.3f})")
print(f"Reduction: {entropy(initial) - entropy(final):.3f} bits of uncertainty eliminated")
Considerações Finais
Entropia é a métrica que faltava em sistemas de IA conversacional. Em vez de medir "quantas mensagens processou" ou "quantos fatos armazenou", mede "quão confiante está no que sabe". É qualidade, não quantidade.
Usar entropia como motor de aprendizado cria um loop de feedback positivo: alta entropia → investiga → entropia cai → não investiga mais. O sistema naturalmente foca onde tem mais a ganhar e para quando está satisfeito. É eficiência emergente de uma regra simples.
Links indicativos:
- Information Entropy: https://en.wikipedia.org/wiki/Entropy_(information_theory)
- Active Learning: https://en.wikipedia.org/wiki/Active_learning_(machine_learning)
- Uncertainty Quantification: https://en.wikipedia.org/wiki/Uncertainty_quantification