Uma máquina de Boltzmann bem pequena
(eoinmurray.info)- 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
- Fase positiva: amostra-se a camada oculta h(0) a partir de P(h | v(0)=dados)
- 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
Comentários no Hacker News
Isso me lembrou de 1990, quando eu criava “neurônios” com arrays de ponteiros
voidem 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 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
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ê.
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.
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.
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”.
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.