- 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 do Hacker News
Pelo que entendo, o Harmonium (Smolensky) foi a primeira restricted Boltzmann machine, e o conceito era maximizar a “harmony” em vez de minimizar a “energy”. Quando Smolensky, Hinton e Rumelhart colaboraram, eles chamavam isso de “goodness of fit”. O artigo sobre o Harmonium é realmente uma leitura impressionante. Hinton virou um superstar da IA, e Smolensky escreveu um livro longo relacionado à linguística. Fico curioso se alguém conhece mais dessa história
Artigo interessante sobre David Ackley. Também vale a pena conferir o T2 Tile Project
Sou o autor. Obrigado pelos muitos comentários, não esperava que isso fosse ficar tão popular. Estou corrigindo typos, espaçamento, problemas de rolagem etc.; obrigado por avisarem
Confundi o título com "A Tiny Boltzmann Brain". Meu cérebro natural resolveu imediatamente essa confusão. Imaginei que fosse um experimento para testar se dar pesos aleatórios a um modelo minúsculo poderia fazer algo significativo. Quanto menor o modelo, maior seria proporcionalmente a chance de surgir algo interessante por geração aleatória. Meu palpite estava errado, mas sigo firme. Proponho uma nova família de modelos chamada “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Imagino que, quando existir um computador quântico grande o suficiente, será possível colocar todo o dataset, todos os parâmetros do modelo e a arquitetura em superposição de estados quânticos e fazer inferência de uma vez só. Alguém aí tem qubits sobrando para testar isso? (Aliás, é irônico que tudo seja quântico, mas ainda seja difícil aproveitar isso de forma realmente útil. E fico imaginando que tipo de sociedade e trajetória tecnológica uma civilização alienígena teria se evoluísse de um único sensor quântico para seres com um sistema nervoso inteiramente quântico)
A explicação está muito boa. Só como observação, a rolagem com o mouse está sensível demais (imagino que no celular esteja ok). Era incômodo porque a cada rolagem pulava para a primeira ou para a última página. Ainda bem que com o teclado dava para ler tudo normalmente
Se entendi certo, ao contrário das redes neurais usadas hoje, aqui é preciso usar gibbs sampling para atualizar os pesos, em vez de um forward/backward pass baseado em gradiente. Fico curioso se alguém sabe o motivo
Esse texto me trouxe lembranças. Em 1990, implementei em C uma Boltzmann machine e um perceptron, criando nós de rede neural em arrays com void pointers. Naquela época, os usos de “IA” eram coisas como prever a próxima nota em melodias MIDI ou reconhecer formatos de notas musicais como minim, crotchet e quaver em uma grade de pontos 5x9. Uma taxa de reconhecimento de 85% já era considerada suficientemente “boa”
O texto foi fácil e claro. Trouxe muita nostalgia. Fazendo um jabá sem vergonha, eu tinha feito um vídeo visualizando o processo de treinamento de um RBM
Demo realmente muito limpa. Lembro de ter assistido várias aulas sobre Boltzmann machine nas aulas de redes neurais do Geoff Hinton. Um ponto a observar é que uma explicação do tipo “restricted Boltzmann machine não tem conexão entre neurônios visible e hidden” está errada. Pode dar a entender que os nós visible e hidden não estão conectados entre si. O correto é que não há conexões dentro do mesmo tipo, ou seja, nem entre visible nem entre hidden. Outra forma de dizer isso é que os nós visible e hidden não têm conexões internas com nós do mesmo tipo