Estou ciente da descida do gradiente e do algoritmo de propagação traseira. O que não entendo é: quando é importante usar um viés e como você o usa?
Por exemplo, ao mapear a AND
função, quando eu uso 2 entradas e 1 saída, ela não fornece os pesos corretos; no entanto, quando eu uso 3 entradas (uma das quais é uma tendência), ela fornece os pesos corretos.
Respostas:
Eu acho que preconceitos são quase sempre úteis. Com efeito, um valor de viés permite que você mude a função de ativação para a esquerda ou direita , o que pode ser crítico para um aprendizado bem-sucedido.
Pode ajudar olhar um exemplo simples. Considere esta rede de 1 entrada e 1 saída que não possui viés:
A saída da rede é calculada multiplicando a entrada (x) pelo peso (w 0 ) e passando o resultado por algum tipo de função de ativação (por exemplo, uma função sigmóide).
Aqui está a função que essa rede calcula, para vários valores de w 0 :
Alterar o peso w 0 altera essencialmente a "inclinação" do sigmóide. Isso é útil, mas e se você quiser que a rede produza 0 quando x for 2? Apenas mudar a inclinação do sigmóide não funcionará realmente - você deseja alterar toda a curva para a direita .
É exatamente isso que o viés permite que você faça. Se adicionarmos um viés a essa rede, assim:
... então a saída da rede se torna sig (w 0 * x + w 1 * 1.0). Aqui está a aparência da saída da rede para vários valores de w 1 :
Ter um peso de -5 para w 1 muda a curva para a direita, o que nos permite ter uma rede que gera 0 quando x é 2.
fonte
Só para adicionar meus dois centavos.
Uma maneira mais simples de entender qual é o viés: é de alguma forma semelhante à constante b de uma função linear
y = ax + b
Permite mover a linha para cima e para baixo para ajustar melhor a previsão aos dados. Sem b, a linha sempre passa pela origem (0, 0) e você pode ter um ajuste mais fraco.
fonte
Esse tópico realmente me ajudou a desenvolver meu próprio projeto. Aqui estão algumas ilustrações adicionais que mostram o resultado de uma rede neural simples de avanço de duas camadas com e sem unidades de polarização em um problema de regressão de duas variáveis. Os pesos são inicializados aleatoriamente e a ativação ReLU padrão é usada. Como as respostas antes de mim concluíram, sem o viés, a rede ReLU não pode desviar de zero em (0,0).
fonte
A razão pela qual isso é impraticável é porque você está ajustando simultaneamente o peso e o valor, para que qualquer alteração no peso possa neutralizar a alteração no valor que foi útil para uma instância de dados anterior ... adicionar um neurônio de polarização sem alterar o valor permite você para controlar o comportamento da camada.
Além disso, o viés permite que você use uma única rede neural para representar casos semelhantes. Considere a função booleana AND representada pela seguinte rede neural:
(fonte: aihorizon.com )
O limiar é o viés e w0 é o peso associado ao neurônio do viés / limiar.
fonte
O viés não é um
NN
termo, é um termo genérico de álgebra a ser considerado.Y = M*X + C
(equação de linha reta)Agora, se
C(Bias) = 0
sim, a linha sempre passará pela origem, ou seja(0,0)
, e depende de apenas um parâmetro, ou sejaM
, qual é a inclinação, portanto, temos menos coisas para brincar.C
, que é o viés, leva qualquer número e tem a atividade de mudar o gráfico e, portanto, capaz de representar situações mais complexas.Em uma regressão logística, o valor esperado do destino é transformado por uma função de link para restringir seu valor ao intervalo da unidade. Dessa forma, as previsões de modelo podem ser vistas como probabilidades de resultado primário, como mostrado: Função sigmóide na Wikipedia
Essa é a camada de ativação final no mapa NN que liga e desliga o neurônio. Aqui também o viés tem um papel a desempenhar e muda a curva de maneira flexível para nos ajudar a mapear o modelo.
fonte
Uma camada em uma rede neural sem viés nada mais é do que a multiplicação de um vetor de entrada com uma matriz. (O vetor de saída pode ser passado por uma função sigmóide para normalização e para uso em RNA de várias camadas posteriormente, mas isso não é importante.)
Isso significa que você está usando uma função linear e, portanto, uma entrada com todos os zeros sempre será mapeada para uma saída com todos os zeros. Essa pode ser uma solução razoável para alguns sistemas, mas, em geral, é muito restritiva.
Usando um viés, você efetivamente adiciona outra dimensão ao seu espaço de entrada, que sempre assume o valor um, para evitar um vetor de entrada com todos os zeros. Você não perde nenhuma generalidade com isso porque sua matriz de peso treinada não precisa ser adjetiva, portanto ainda pode ser mapeada para todos os valores possíveis anteriormente.
2d ANN:
Para uma RNA mapeando duas dimensões para uma dimensão, como na reprodução das funções AND ou OR (ou XOR), você pode pensar em uma rede neuronal da seguinte maneira:
No plano 2d, marque todas as posições dos vetores de entrada. Portanto, para valores booleanos, você deseja marcar (-1, -1), (1,1), (-1,1), (1, -1). O que sua RNA agora faz é desenhar uma linha reta no plano 2d, separando a saída positiva dos valores negativos.
Sem viés, essa linha reta precisa passar pelo zero, enquanto que com o viés, você é livre para colocá-lo em qualquer lugar. Então, você verá que, sem viés, está enfrentando um problema com a função AND, pois não pode colocar ambos (1, -1) e (-1,1) no lado negativo. (Eles não podem estar na linha.) O problema é igual para a função OU. Com um viés, no entanto, é fácil traçar a linha.
Observe que a função XOR nessa situação não pode ser resolvida mesmo com viés.
fonte
Quando você usa ANNs, raramente conhece os componentes internos dos sistemas que deseja aprender. Algumas coisas não podem ser aprendidas sem um viés. Por exemplo, dê uma olhada nos seguintes dados: (0, 1), (1, 1), (2, 1), basicamente uma função que mapeia qualquer x para 1.
Se você possui uma rede de uma camada (ou um mapeamento linear), não consegue encontrar uma solução. No entanto, se você tem um viés, é trivial!
Em um cenário ideal, um viés também pode mapear todos os pontos para a média dos pontos-alvo e permitir que os neurônios ocultos modelem as diferenças a partir desse ponto.
fonte
A modificação dos pesos dos neurônios por si só serve apenas para manipular a forma / curvatura da sua função de transferência, e não seu equilíbrio / zero ponto de cruzamento .
A introdução do viés neurônios permite que você altere a curva da função de transferência horizontalmente (esquerda / direita) ao longo do eixo de entrada, mantendo a forma / curvatura inalterada. Isso permitirá que a rede produza saídas arbitrárias diferentes dos padrões e, portanto, você pode personalizar / alterar o mapeamento de entrada para saída para atender às suas necessidades específicas.
Veja aqui a explicação gráfica: http://www.heatonresearch.com/wiki/Bias
fonte
Só para acrescentar a tudo isso algo que falta muito e que o resto, provavelmente, não sabia.
Se você estiver trabalhando com imagens, talvez prefira não usar um viés. Em teoria, dessa forma, sua rede será mais independente da magnitude dos dados, como se a imagem é escura ou brilhante e vívida. E a rede vai aprender a fazer seu trabalho estudando a relatividade dentro de seus dados. Muitas redes neurais modernas utilizam isso.
Para outros dados, ter vieses pode ser crítico. Depende de que tipo de dados você está lidando. Se sua informação é invariável em magnitude --- se a entrada [1,0,0.1] deve levar ao mesmo resultado que a entrada [100,0,10], você pode estar melhor sem um viés.
fonte
Em algumas experiências em minha tese de mestrado (por exemplo, página 59), descobri que o viés pode ser importante para a (s) primeira (s) camada (s), mas especialmente nas camadas totalmente conectadas no final, parece não desempenhar um grande papel.
Isso pode ser altamente dependente da arquitetura / conjunto de dados da rede.
fonte
A polarização decide quanto ângulo você deseja que seu peso gire.
No gráfico bidimensional, peso e viés nos ajudam a encontrar o limite de decisão dos resultados. Digamos que precisamos construir a função AND, o par de entrada (p) - saída (t) deve ser
Agora precisamos encontrar um limite de decisão, o limite da ideia deve ser:
Vejo? W é perpendicular ao nosso limite. Assim, dizemos que W decidiu a direção do limite.
No entanto, é difícil encontrar o W correto na primeira vez. Principalmente, escolhemos o valor W original aleatoriamente. Assim, o primeiro limite pode ser este:
Agora, o limite é o pareller do eixo y.
Queremos girar os limites, como?
Mudando o W.
Então, usamos a função de regra de aprendizado: W '= W + P:
Portanto, alterando o valor de b (viés), você pode decidir o ângulo entre W 'e W. Essa é "a regra de aprendizado da RNA".
Você também pode ler Design de Rede Neural de Martin T. Hagan / Howard B. Demuth / Mark H. Beale, capítulo 4 "Regra de Aprendizagem Perceptron"
fonte
Em particular, de Nate resposta , de ZAt resposta , e de Pradi resposta são grandes.
Em termos mais simples, os vieses permitem que mais e mais variações de pesos sejam aprendidas / armazenadas ... ( nota lateral : às vezes, dado algum limite). De qualquer forma, mais variações significam que os vieses adicionam uma representação mais rica do espaço de entrada aos pesos aprendidos / armazenados do modelo. (Onde pesos melhores podem aumentar o poder de adivinhação da rede neural)
Por exemplo, nos modelos de aprendizado, a hipótese / palpite é desejavelmente delimitada por y = 0 ou y = 1, dada alguma entrada, talvez em alguma tarefa de classificação ... ou seja, alguns y = 0 para alguns x = (1,1) e alguns y = 1 para alguns x = (0,1). (A condição na hipótese / resultado é o limite mencionado acima. Observe que meus exemplos configuram entradas X para cada x = um vetor com valor duplo ou 2, em vez das entradas x com valor único de Nate de alguma coleção X).
Se ignorarmos o viés, muitas entradas podem acabar sendo representadas por muitos dos mesmos pesos (ou seja, os pesos aprendidos ocorrem principalmente perto da origem (0,0). O modelo seria limitado a quantidades mais baixas de bons pesos, em vez de muitos outros pesos bons, ele poderia aprender melhor com viés (onde pesos mal aprendidos levam a suposições mais ruins ou a uma diminuição no poder de adivinhação da rede neural)
Portanto, é ideal que o modelo aprenda próximo à origem, mas também em tantos lugares quanto possível dentro dos limites do limiar / decisão. Com o viés, podemos permitir graus de liberdade próximos à origem, mas não limitados à região imediata da origem.
fonte
Expandindo a explicação @zfy ... A equação para uma entrada, um neurônio e uma saída deve ser:
onde x é o valor do nó de entrada e 1 é o valor do nó de polarização; y pode ser diretamente sua saída ou ser passado para uma função, geralmente uma função sigmóide. Observe também que o viés pode ser constante, mas para tornar tudo mais simples, sempre escolhemos 1 (e provavelmente isso é tão comum que o @zfy fez isso sem mostrar e explicar).
Sua rede está tentando aprender os coeficientes aeb para se adaptar aos seus dados. Assim, você pode ver por que adicionar o elemento
b * 1
permite que ele se ajuste melhor a mais dados: agora você pode alterar a inclinação e a interceptação.Se você tiver mais de uma entrada, sua equação será semelhante a:
Observe que a equação ainda descreve uma rede de um neurônio, uma saída; se você tiver mais neurônios, basta adicionar uma dimensão à matriz do coeficiente, para multiplexar as entradas em todos os nós e somar novamente a contribuição de cada nó.
Que você pode escrever em formato vetorizado como
ou seja, colocando coeficientes em uma matriz e (entradas + viés) em outra, você tem a solução desejada como o produto escalar dos dois vetores (você precisa transpor X para que a forma esteja correta, escrevi para XT um 'X transposto')
Portanto, no final, você também pode ver seu viés, pois é apenas mais uma entrada para representar a parte da saída que é realmente independente da sua entrada.
fonte
Além das respostas mencionadas .. Gostaria de acrescentar outros pontos.
Viés atua como nossa âncora. É uma maneira de termos algum tipo de linha de base onde não vamos abaixo disso. Em termos de gráfico, pense em como y = mx + b é como um intercepto em y dessa função.
output = input vezes o valor do peso e adicionou um valor de polarização e, em seguida, aplica uma função de ativação.
fonte
Para pensar de maneira simples, se você tem y = w1 * x onde y é sua saída e w1 é o peso, imagine uma condição em que x = 0 então y = w1 * x é igual a 0 , se você deseja atualizar seu peso, Para calcular a quantidade de alterações delw = target-y em que target é a saída de destino, nesse caso, 'delw' não será alterado, pois y é calculado como 0. Portanto, suponha que, se você puder adicionar algum valor extra, isso ajudará y = w1 * x + w0 * 1 , em que o viés = 1 e o peso podem ser ajustados para obter um viés correto. Considere o exemplo abaixo.
Em termos de linha, a interceptação de inclinação é uma forma específica de equações lineares.
y = mx + b
verifique a imagem
imagem
aqui b é (0,2)
se você quiser aumentá-lo para (0,3), como você o fará alterando o valor de b, que será seu viés
fonte
Para todos os livros de ML que estudei, o W é sempre definido como o índice de conectividade entre dois neurônios, o que significa que quanto maior a conectividade entre dois neurônios, mais fortes serão os sinais transmitidos do neurônio disparador para o neurônio alvo ou Y = w * X, como resultado, para manter o caráter biológico dos neurônios, precisamos manter o 1> = W> = -1, mas na regressão real, o W terminará com | W | > = 1, que contradiz o funcionamento dos neurônios, como resultado, proponho W = cos (teta), enquanto 1> = | cos (teta) | , e Y = a * X = W * X + b enquanto a = b + W = b + cos (teta), b é um número inteiro
fonte
Nas redes neurais:
Na ausência de viés, o neurônio não pode ser ativado considerando apenas a soma ponderada da camada de entrada. Se o neurônio não estiver ativado, as informações desse neurônio não serão transmitidas pelo restante da rede neural.
O valor do viés é passível de aprendizado.
Efetivamente, viés = - limiar. Você pode pensar no viés como é fácil fazer com que o neurônio produza um 1 - com um viés realmente grande, é muito fácil para o neurônio produzir um 1, mas se o viés é muito negativo, é difícil.
em resumo: o viés ajuda a controlar o valor no qual a função de ativação será acionada.
Siga este vídeo para mais detalhes
Alguns links mais úteis:
geeksforgeeks
Para a ciência
fonte
a
ser treinado quando o gradientea
é sempre uma constante?O termo viés é usado para ajustar a matriz de saída final como a interceptação em y. Por exemplo, na equação clássica, y = mx + c, se c = 0, a linha sempre passará por 0. Adicionar o termo de viés fornece mais flexibilidade e melhor generalização ao nosso modelo de Rede Neural.
fonte
Em geral, no aprendizado de máquina, temos essa fórmula base Tradeoff de desvios de variância, porque na NN temos o problema de Overfitting (problema de generalização do modelo em que pequenas alterações nos dados levam a grandes mudanças no resultado do modelo) e, por isso, temos grande variação, introduzindo um um pequeno viés poderia ajudar muito. Considerando a fórmula acima do tradeoff de desvio e desvio , onde o desvio é elevado ao quadrado, a introdução de um desvio pequeno pode levar a uma redução significativa da variação. Portanto, apresente viés, quando houver grande variação e perigo de sobreajuste.
fonte
O viés ajuda a obter uma equação melhor
Imagine a entrada e a saída como uma função
y = ax + b
e você precisará colocar a linha correta entre a entrada (x) e a saída (y) para minimizar o erro global entre cada ponto e a linha. Se você mantiver a equação assimy = ax
, terá um parâmetro apenas para adaptação, mesmo que você encontre o melhor paraa
minimizar o erro global, ele estará meio longe do valor desejadoVocê pode dizer que o viés torna a equação mais flexível para se adaptar aos melhores valores
fonte