Estou escrevendo meu próprio algoritmo de treinamento, mas não sei como definir o peso do viés.
Preciso definir viés em qualquer camada?
O peso do viés deve ser atualizado em todas as camadas?
fonte
Estou escrevendo meu próprio algoritmo de treinamento, mas não sei como definir o peso do viés.
Preciso definir viés em qualquer camada?
O peso do viés deve ser atualizado em todas as camadas?
Deve haver um peso de viés para cada neurônio virtual, pois ele controla o limiar no qual o neurônio responde à entrada combinada. Portanto, se sua camada oculta possui 100 neurônios, isso significa 100 pesos tendenciosos para essa camada. O mesmo se aplica a cada camada.
Geralmente, existem duas abordagens diferentes ao implementar o viés. Você pode fazer um ou outro:
Como um vetor separado de pesos de viés para cada camada, com lógica diferente (ligeiramente reduzida) para calcular gradientes.
Como uma coluna adicional na matriz de pesos, com uma coluna correspondente de 1s adicionada aos dados de entrada (ou saídas da camada anterior), para que o mesmo código exato calcule os gradientes de peso de polarização e atualize como pesos de conexão.
Nos dois casos, você só faz o cálculo da retropropagação, desde deltas de ativação de neurônios até deltas de peso de viés, não é necessário calcular o delta de "ativação" para viés, porque não é algo que possa mudar, é sempre 1,0. Além disso, o viés não contribui com deltas para mais nada.
Na verdade, você não precisa de um viés se tiver propagação de retorno com pelo menos uma camada oculta. Por exemplo, se sua entrada for zero, sua propagação direta resultará em 0,5 (para sigmóide), mas sua propagação traseira ajustará seu peso onde você finalmente obterá a resposta certa.