Sou muito novo para RBMs, tentando escrever um programa RBM agora. Desculpe se esta é uma pergunta boba e / ou já foi respondida aqui.
Li alguns artigos on-line e perguntas aqui, mas não consigo encontrar nada sobre como atualizar os preconceitos (ou pesos de preconceito). Li sobre como defini-los inicialmente. Referências passageiras a elas que devem ser atualizadas. Geoff Hinton menciona o viés, é claro, e está incluído em suas equações (eu li alguns de seus artigos, vi algumas apresentações em vídeo), mas não consigo encontrar nenhuma menção em seus artigos de viés que foram alterados uma vez definidos ou como / quando / por que fazer isso. Eu devo estar esquecendo alguma coisa!
O artigo de Edwin Chen é recomendado aqui: http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/ Ele não menciona como atualizar / 'aprender' os vieses; eles são alterados no programa dele, mas eu não entendo o código dele. (Ele tem uma tabela com os pesos atualizados que não parecem corretos - estranhamente, isso dá um peso de viés-viés, o que quer que isso possa significar.)
Hum, então eu não sei por que isso é tão difícil de encontrar material !! Obrigado por qualquer ajuda.
Respostas:
TLDR
Para divergência contrastante step, atualize o viés visível , com base no vetor de dados usando:b j dn bj d
Atualize o viés oculto usando:hi
Onde e são os vieses após o número de atualização t, é a taxa de aprendizado, é o ésimo componente do vetor de dados e onde e são as probabilidades de a unidade oculta unidade visível estarem ativas quando o RBM for exposto aos dados e executado por etapas. Isso pressupõe um tamanho de minibatch de 1; para tamanho prático de minibatch , calcule a média das atualizações obtidas nos vetores de dados.b(t)j c(t)i η dj j h^(n)j v^(n)j i j n k k
Explicação completa
Eu tive o mesmo problema. Uma boa maneira de pensar é que os próprios preconceitos são apenas pesos. Geralmente, nos modelos de redes neurais, o viés de uma unidade é modelado como o peso de um link que conecta a unidade em questão a uma unidade "sempre ativa", ou seja, uma unidade imaginária cuja ativação é sempre 1.
No caso do RBM, isso significa que você pensa em haver uma unidade visível extra cuja saída é sempre 1. Essa unidade visível é conectada a cada uma das unidades ocultas (como qualquer outra unidade visível) e o peso dessas conexões são os vieses das respectivas unidades ocultas. Da mesma forma, os desvios das unidades visíveis podem ser modelados imaginando uma unidade extra oculta, cujo valor é sempre um, e que se conecta a cada uma das unidades visíveis, sendo os pesos dessas conexões os desvios visíveis.
Você pode até implementar seu RBM dessa maneira, mas acho que as pessoas geralmente não fazem isso. O ponto é que, pensando dessa maneira, você pode usar (essencialmente) a mesma regra de atualização para os vieses que para os pesos, já que os vieses são apenas pesos que se conectam a unidades "sempre ativadas".
Sejamos concretos. Anotarei a regra de atualização usual da divergência contrastante step, ignorando a regularização por simplicidade. Também por simplicidade, esta regra de atualização é para um "minibatch" de 1 vetor de dados. A atualização para um minibatch com vetores é a atualização média de todos os vetores . A regra de atualização é:n k k
(Algumas pessoas usam para indexar as unidades visíveis para indexar as ocultas, mas ainda escrevem --- isso não importa, desde que você multiplique os valores corretos.)j W i , ji j Wi,j
Cuidado para distinguir o "estado" de uma unidade, indicado por ou , e a "ativação" de uma unidade, indicada como ou . O estado de uma unidade é 0 ou 1, enquanto a ativação é qualquer número real entre 0 e 1. Se a ativação for 0,8, é provável que o estado seja 1, mas 20% do tempo será 0. v ( n ) j h ( n ) i v ( n ) ih(n)i v(n)j h^(n)i v^(n)i
Ao tratar preconceitos como pesos para unidades "sempre ativadas " , você descobrirá que a equação acima simplifica os dados para atualizações de preconceitos no " TLDR ". Há uma pequena diferença, no entanto, na atualização para vieses visíveis: aqui a ativação visível é usada no lugar do estado . A ativação tem o mesmo valor esperado, mas possui uma variação menor que o estado, portanto, isso reduz o ruído no sinal de aprendizado. Consulte este guia para uma breve discussão sobre quando o uso de ativações em vez de estados é desejável.§3
fonte