2 pontos por GN⁺ 2025-05-17 | 1 comentários | Compartilhar no WhatsApp
  • Uma breve introdução à estrutura e ao objetivo da máquina de Boltzmann
  • Define a função de energia e a distribuição de probabilidade com fórmulas
  • Deduz as regras de atualização de pesos e vieses por meio de derivação
  • Explica o método de aproximação da expectativa do modelo com fase positiva·negativa e amostragem de Gibbs
  • Por fim, organiza de forma geral o algoritmo de Divergência Contrastiva (Contrastive Divergence)

Máquina de Boltzmann e o conceito de Contrastive Divergence

  • Na máquina de Boltzmann, há uma camada de entrada (visible layer), uma camada oculta (hidden layer), além da matriz de pesos que as conecta e dos vetores de viés de cada uma das duas camadas

Função de energia e distribuição de probabilidade

  • A função de energia é definida em forma matricial da seguinte maneira

    E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
    • v: vetor da camada visível, h: vetor da camada oculta, w: pesos, b/c: vieses de cada camada
  • A distribuição conjunta da máquina de Boltzmann é

    P(v, h) = (1/Z) * exp(-E(v, h))
    • Z (função de partição) tem o papel de normalizar a distribuição de probabilidade

Log-verossimilhança (log-likelihood) e derivação

  • O treinamento avança maximizando a verossimilhança dos dados de treino

    log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
  • A derivada parcial da log-verossimilhança em relação ao peso wij é

    ∂(log P(v))/∂wij = <vi hj>dados - <vi hj>modelo
    • < · >dados: expectativa em relação aos dados reais
    • < · >modelo: expectativa em relação aos dados gerados pelo modelo

Regras de aprendizado de pesos e vieses

  • Os pesos e vieses são atualizados da seguinte forma
    • Δwij = η(<vi hj>dados - <vi hj>modelo)
    • Δbi = η(<vi>dados - <vi>modelo)
    • Δcj = η(<hj>dados - <hj>modelo)
    • η é a taxa de aprendizado

Algoritmo de Contrastive Divergence

  • Como a expectativa do modelo < · >modelo é difícil de calcular diretamente, usa-se amostragem de Gibbs
  • A Contrastive Divergence faz a aproximação com o seguinte procedimento
    1. Fase positiva: amostra-se a camada oculta h(0) a partir de P(h | v(0)=dados)
    2. Fase negativa: repetição de amostragem de Gibbs por k vezes
    • Alternadamente, amostra-se v(t+1) ~ P(v | h(t)) e h(t+1) ~ P(h | v(t))
  • No momento da atualização, usa-se a diferença entre a expectativa dos dados e a expectativa do modelo
    • Δwij = η(<vi hj>dados - <vi hj>modelo)
    • Δbi = η(<vi>dados - <vi>modelo)
    • Δcj = η(<hj>dados - <hj>modelo)

Resumo

  • A essência do aprendizado da máquina de Boltzmann, como modelo baseado em energia, é reduzir a diferença de expectativa entre os dados reais e a distribuição gerada pelo modelo
  • Contrastive Divergence é o método central de treinamento que torna possível aproximar essa diferença de forma rápida e eficiente
  • Por meio da amostragem de Gibbs, ela faz a ponte entre a distribuição do modelo e os dados reais e, ao repetir esse processo, atualiza pesos e vieses para que a máquina de Boltzmann possa representar bem os dados

1 comentários

 
GN⁺ 2025-05-17
Comentários no Hacker News
  • Isso me lembrou de 1990, quando eu criava “neurônios” com arrays de ponteiros void em C puro para construir máquinas de Boltzmann e perceptrons.
    Na época, o que fazíamos como “IA” era algo como prever a próxima nota de uma melodia MIDI ou reconhecer formas de semibreves, mínimas, semínimas e colcheias em uma grade de pontos 5×9, e 85% de acurácia era considerado “bom o bastante”.

    • Ler notas em uma partitura com linhas parece um projeto divertido. Especialmente se for feito do zero, como o exemplo de rede neural de dígitos da 3Blue1Brown[1].
      Misturado com algo como ChucK[2], daria para criar com tecnologia atual uma aplicação que roda totalmente do lado do cliente.

      [1] - https://www.3blue1brown.com/lessons/neural-networks

      [2] - https://chuck.stanford.edu/

    • Fico curioso se a saída soava como música.

  • Pelo que entendo, o Harmonium (Smolensky) foi a primeira máquina de Boltzmann restrita, mas, em vez de minimizar “energia”, maximizava “harmonia”.
    Quando Smolensky, Hinton e Rumelhart colaboraram, acho que chamavam isso de “adequação”. O artigo do Harmonium[1] é muito bom de ler; Hinton obviamente virou uma superestrela, e Smolensky escreveu livros longos sobre linguística. Fico curioso se alguém sabe mais sobre essa história.

    [1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...

  • Um texto interessante sobre David Ackley: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
    O T2 Tile Project também vale muito a pena ver.

    • O ponto principal é que muita gente está envolvida em criar avanços como esse.
      O valor de alunos de pós-graduação é frequentemente subestimado, mas na prática eles contribuem enormemente e depois levam a pesquisa adiante. A pesquisa empurrou tanta coisa para frente; não entendo por que os EUA veem pesquisa como desperdício.
  • Li o título errado como “A Tiny Boltzmann Brain”[0].
    Minha mente natural imediatamente resolveu o enigma. Pensei que fosse um caso de pegar um modelo muito pequeno, colocar pesos gerados aleatoriamente e testar se ele realmente fazia algo útil. Afinal, quanto menor o modelo, maior a chance de uma geração puramente aleatória produzir algo interessante em relação ao tamanho.
    Aceito a correção, mas não vou desanimar. Proponho uma nova classe de modelos chamada “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Algum dia, quando tivermos um computador quântico grande o bastante, poderemos definir todo o conjunto de dados como restrições clássicas de um modelo definido por N valores serializados que representam todos os parâmetros e configurações estruturais. Então, um sistema quântico com N qubits colocaria todos os parâmetros e estruturas possíveis em superposição quântica, executaria uma etapa de inferência sobre toda a amostra clássica e depois colapsaria o resultado, devolvendo em forma clássica os parâmetros e a estrutura do modelo melhor, ou quase melhor.
    Fico curioso se alguém tem alguns qubits sobrando para tentar isso. Há uma ironia em tudo ser quântico e, ainda assim, escorregadio demais para conseguirmos aproveitar quase nada.
    Como cenário de ficção científica, dá para imaginar uma espécie alienígena que evoluiu sensores quânticos descartáveis, o que levou a um sistema sensorial e nervoso inteiramente quântico e depois a uma inteligência quântica completa desde o início. Como seriam essa sociedade e sua trajetória tecnológica? Espero que eles estejam em órbita perto de um buraco negro, para que um progresso explosivo ainda não nos ameace. Até que um dia escapem do poço gravitacional...

    [0] https://en.wikipedia.org/wiki/Boltzmann_brain

    • Computadores quânticos não funcionam assim.
    • Pobres seres quânticos. Por não terem acesso a um modelo de computação mais rápido do que seus próprios pensamentos, estão condenados a esperar eternamente pelo fim do cálculo.
  • Boa explicação. Só que, por algum motivo, o scroll do mouse está sensível demais.
    Imagino que no mobile o gesto de deslizar esteja ok, mas não confirmei. Toda vez que eu tentava rolar, pulava da primeira “página” para a última “página” e vice-versa. Felizmente, a entrada pelo teclado funcionou, então consegui ler o texto todo.

  • Se entendi corretamente, em vez de usar propagação direta e retropropagação baseadas em gradiente, como nas redes neurais com as quais estamos acostumados hoje, parece que é preciso usar amostragem de Gibbs para calcular as atualizações dos pesos.
    Fico curioso se alguém entende por quê.

    • A amostragem de Gibbs parece ser usada como uma forma de aproximar valores esperados sob a distribuição do modelo.
      Esse valor é necessário para calcular o gradiente da log-verossimilhança, mas integrar a distribuição é intratável. É parecido com usar MCMC para obter amostras representativas em VAEs. Em redes neurais no estilo deep learning, estimamos o gradiente sobre batches do conjunto de dados, em vez de uma distribuição de probabilidade explicitamente modelada.
    • Não sou especialista, mas tive um pouco de formação formal em estatística bayesiana, que lida com problemas semelhantes.
      Em geral, Gibbs é usado quando um gradiente direto não é simples, ou quando se quer reproduzir a distribuição em si, e não uma estimativa pontual. Em compensação, ele é útil quando há verossimilhanças marginais/condicionais fáceis de amostrar. Como cada nó visível depende de cada nó oculto, e cada nó oculto afeta todos os nós visíveis, o gradiente fica muito bagunçado; por isso a amostragem de Gibbs, ajustando com base na verossimilhança marginal, fica muito mais simples.
    • Posso estar errado, mas acho que isso se deve em parte à estrutura não direcionada da RBM.
      Por isso, não dá para construir o grafo computacional do mesmo jeito que em uma rede neural feedforward.
  • Explicação limpa e boa. Trouxe muitas lembranças antigas.
    Fazendo uma divulgação sem vergonha, alguns anos atrás criei uma visualização do treinamento de RBM: https://www.youtube.com/watch?v=lKAy_NONg3g

  • A demo é legal. Há 15 anos, na universidade, assisti ao curso de redes neurais do Geoff Hinton, e ele explicou máquinas de Boltzmann ao longo de algumas aulas.
    A frase “uma máquina de Boltzmann restrita é um caso especial em que neurônios visíveis e neurônios ocultos não estão conectados entre si” está errada. Essa formulação soa como se os neurônios visíveis não estivessem conectados aos neurônios ocultos.
    A formulação correta é: “os neurônios visíveis não estão conectados entre si, e os neurônios ocultos também não estão conectados entre si”. Ou ainda: “neurônios visíveis e ocultos não têm conexões dentro de seus próprios tipos”.

    • Vendo assim, não entendo bem qual é a diferença para um perceptron multicamadas. O que há de diferente em uma máquina de Boltzmann?
      Edit: tudo bem. Eu não sabia que precisava rolar para cima para ver a introdução geral.
      Como disse o comentário [flagged][dead] de 0xTJ, está certo dizer que tentativas de sequestrar ou reinventar a rolagem não são uma boa ideia.