TLDR
Para divergência contrastante step, atualize o viés visível , com base no vetor de dados usando:b j dnbjd
b(t)j←b(t−1)j+η(dj−v^(n)j)
Atualize o viés oculto usando:hi
c(t)i←c(t−1)i+η(h^(0)i−h^(n)i)
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)jc(t)iηdjjh^(n)jv^(n)jijnkk
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 é:nkk
W(t)i,j←W(t−1)i,j+η(h^(0)i⋅dj−h^(n)i⋅v(n)j)
onde:
- W(t)i,j é o peso que conecta a unidade visível à unidade oculta após o número de atualizaçãovjhit
- η é a taxa de aprendizado
- h^(n)i representa a probabilidade de unidade escondido sendo activo uma vez que a máquina tenha sido exposto a vetor de dados e evoluiu para passos.
idn
- o que significa que é apenas a ativação da unidade oculta em resposta imediata ao vetor de dados ih^(0)ii
- j ddj é o ésimo componente do vetor de dadosjd
- j nv(n)j é o estado da unidade visível quando a máquina é exposta ao vetor de dados e evoluída por etapas.jn
(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 , jijWi,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)iv(n)jh^(n)iv^(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