Papel do viés nas redes neurais

Estou ciente da descida de gradiente e o teorema de propagação de volta. O que eu não entendo é: quando você está usando um viés importante e como você o usa?

Por exemplo, ao mapear a function AND , quando eu uso 2 inputs e 1 saída, ela não fornece os pesos corretos, no entanto, quando eu uso 3 inputs (1 das quais é uma polarização), elas fornecem os pesos corretos.

    Eu acho que os preconceitos são quase sempre úteis. Com efeito, um valor de polarização permite deslocar a function de ativação para a esquerda ou para a direita , o que pode ser crítico para o aprendizado bem-sucedido.

    Pode ajudar a olhar para um exemplo simples. Considere esta rede de 1 input e 1 saída que não tem viés:

    rede simples

    A saída da rede é calculada multiplicando a input (x) pelo peso (w 0 ) e passando o resultado por algum tipo de function de ativação (por exemplo, uma function sigmoide).

    Aqui está a function que esta rede calcula, para vários valores de w 0 :

    saída de rede, considerando diferentes pesos w0

    Alterar o peso w0 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 vai funcionar – você quer ser capaz de mudar 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:

    rede simples com um viés

    … 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 :

    saída de rede, considerando diferentes pesos w1

    Ter um peso de -5 para w 1 muda a curva para a direita, o que nos permite ter uma rede que produz 0 quando x é 2.

    Apenas para adicionar meus dois centavos.

    Uma maneira mais simples de entender o que é o viés: é de alguma forma semelhante à constante b de uma function linear

    y = ax + b

    Ele permite que você mova a linha para cima e para baixo para ajustar melhor a previsão com os dados. Sem b, a linha sempre passa pela origem (0, 0) e você pode obter um ajuste mais fraco.

    Dois tipos diferentes de parâmetros podem ser ajustados durante o treinamento de uma RNA, os pesos e o valor nas funções de ativação. Isso é impraticável e seria mais fácil se apenas um dos parâmetros fosse ajustado. Para lidar com esse problema, um neurônio de viés é inventado. O neurônio de polarização está em uma camada, está conectado a todos os neurônios na camada seguinte, mas nenhum na camada anterior e sempre emite 1. Como o neurônio de polarização emite 1, os pesos, conectados ao neurônio de polarização, são adicionados diretamente a a sum combinada dos outros pesos (equação 2.1), assim como o valor t nas funções de ativação. 1

    A razão é impraticável porque você está ajustando simultaneamente o peso e o valor, então qualquer alteração no peso pode neutralizar a mudança para o valor que foi útil para uma instância de dados anterior … adicionando um neurônio de polarização sem um valor de mudança permite você para controlar o comportamento da camada.

    Além disso, o viés permite que você use uma única neural network para representar casos semelhantes. Considere a function booleana AND representada pela seguinte neural network:

    ANN http://www.aihorizon.com/images/essays/perceptron.gif

    • w0 corresponde a b .
    • w1 corresponde a x1 .
    • w2 corresponde a x2 .

    Um único perceptron pode ser usado para representar muitas funções booleanas.

    Por exemplo, se assumirmos valores booleanos de 1 (verdadeiro) e -1 (falso), uma forma de usar um perceptron de duas inputs para implementar a function AND é definir os pesos w0 = -3 e w1 = w2 = .5. Este perceptron pode representar a function OR ao alterar o limiar para w0 = -.3. De fato, AND e OR podem ser vistos como casos especiais de funções m-de-n: isto é, funções onde pelo menos m das n inputs para o perceptron devem ser verdadeiras. A function OR corresponde a m = 1 e a function AND a m = n. Qualquer function m-de-n é facilmente representada usando um perceptron, configurando todos os pesos de input para o mesmo valor (por exemplo, 0,5) e, em seguida, definindo o limiar w0 de acordo.

    Perceptrons podem representar todas as funções booleanas primitivas AND, OR, NAND (1 AND) e NOR (1 OR). Aprendizagem de Máquina – Tom Mitchell)

    O limiar é o viés e w0 é o peso associado ao neurônio de viés / limiar.

    Uma camada em uma neural network sem um viés nada mais é do que a multiplicação de um vetor de input por uma matriz. (O vetor de saída pode ser passado através de uma function sigmóide para normalização e para uso em RNA de múltiplas camadas depois, mas isso não é importante.)

    Isso significa que você está usando uma function linear e, portanto, uma input de todos os zeros sempre será mapeada para uma saída de todos os zeros. Esta pode ser uma solução razoável para alguns sistemas, mas em geral é muito restritiva.

    Usando um viés, você está efetivamente adicionando outra dimensão ao seu espaço de input, que sempre recebe o valor um, então você está evitando um vetor de input de todos os zeros. Você não perde qualquer generalidade com isso porque sua matriz de peso treinada não precisa ser superjetiva, então ela pode mapear todos os valores anteriormente possíveis.

    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 como fazendo o seguinte:

    No segundo plano, marque todas as posições dos vetores de input. 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 de saída negativos.

    Sem preconceitos, essa linha reta tem que passar por zero, enquanto que com o preconceito, você está livre para colocá-lo em qualquer lugar. Então, você verá que sem viés você está enfrentando um problema com a function AND, já que você não pode colocar os dois (1, -1) e (-1,1) no lado negativo. (Eles não podem estar na linha.) O problema é igual para a function OR. Com um viés, no entanto, é fácil desenhar a linha.

    Observe que a function XOR nessa situação não pode ser resolvida mesmo com o viés.

    Quando você usa as RNAs, raramente conhece as partes internas dos sistemas que deseja aprender. Algumas coisas não podem ser aprendidas sem um preconceito. Por exemplo, dê uma olhada nos seguintes dados: (0, 1), (1, 1), (2, 1), basicamente uma function que mapeia qualquer x para 1.

    Se você tiver uma rede de uma camada (ou um mapeamento linear), não será possível 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 de destino e permitir que os neurônios ocultos modelem as diferenças a partir desse ponto.

    O viés não é um termo NN , é um termo de álgebra genérico a considerar.

    Y = M*X + C (equação em linha reta)

    Agora, se C(Bias) = 0 , a linha sempre passará pela origem, ou seja, (0,0) , e dependerá de apenas um parâmetro, ou seja, M , que é a inclinação, portanto, temos menos coisas para jogar.

    C , que é o viés, assume qualquer número e tem a atividade de deslocar 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 function de link para restringir seu valor ao intervalo de unidade. Desta forma, as previsões do modelo podem ser vistas como probabilidades de resultados primários, como mostrado: Função sigmóide na Wikipedia

    Essa é a camada de ativação final no mapa do NN que liga e desliga o neurônio. Aqui também o viés tem um papel a desempenhar e desloca a curva de forma flexível para nos ajudar a mapear o modelo.

    Apenas para adicionar a tudo isso algo que está muito ausente e que o resto, muito provavelmente, não sabia.

    Se você estiver trabalhando com imagens, talvez prefira não usar um viés. Em teoria, dessa forma a sua rede será mais independente da magnitude dos dados, como se a imagem é escura, ou shiny e vívida. E a rede vai aprender a fazer seu trabalho através do estudo da relatividade dentro de seus dados. Muitas redes neurais modernas utilizam isso.

    Para outros dados, ter preconceitos pode ser crítico. Depende de que tipo de dados você está lidando. Se a sua informação é invariante em magnitude — se introduzir [1,0,0,1] deve levar ao mesmo resultado como se introduzir [100,0,10], você poderia estar melhor sem um viés.

    Em algumas experiências na minha tese de mestrado (por exemplo, página 59), descobri que o viés pode ser importante para a primeira camada (s), mas especialmente nas camadas totalmente conectadas no final, parece não desempenhar um grande papel.

    Isso pode ser altamente dependente da arquitetura / dataset da rede.

    A modificação do PESO dos neurônios sozinho serve apenas para manipular a forma / curvatura de sua function de transferência, e não seu ponto de equilíbrio de equilíbrio / zero .

    A introdução dos neurônios BIAS permite que você desloque a curva da function de transferência horizontalmente (esquerda / direita) ao longo do eixo de input enquanto deixa a forma / curvatura inalterada. Isso permitirá que a rede produza saídas arbitrárias diferentes dos padrões e, portanto, você pode personalizar / deslocar o mapeamento de input para saída para atender às suas necessidades específicas.

    Veja aqui a explicação gráfica: http://www.heatonresearch.com/wiki/Bias

    Expandindo a explicação @zfy … A equação para uma input, um neurônio, uma saída deve ser:

     y = a * x + b * 1 and out = f(y) 

    onde x é o valor do nó de input e 1 é o valor do nó de polarização; y pode ser diretamente sua saída ou ser passada para uma function, geralmente uma function sigmóide. Note também que o viés pode ser qualquer constante, mas para tornar tudo mais simples, sempre escolhemos 1 (e provavelmente é tão comum que o @zfy o fez sem mostrar e explicar).

    Sua rede está tentando aprender coeficientes aeb para se adaptar aos seus dados. Assim, você pode ver porque 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 input, sua equação será semelhante a:

     y = a0 * x0 + a1 * x1 + ... + aN * 1 

    Note que a equação ainda descreve um neurônio, uma rede de saída; se você tiver mais neurônios, basta adicionar uma dimensão à matriz de coeficiente, multiplexar as inputs para todos os nós e sumr novamente cada contribuição do nó.

    Que você pode escrever em formato vetorizado como

     A = [a0, a1, .., aN] , X = [x0, x1, ..., 1] Y = A . XT 

    ou seja, colocando coeficientes em um array e (inputs + bias) em outro você tem a solução desejada como o produto de ponto dos dois vetores (você precisa transpor X para que a forma seja correta, eu escrevi XT um ‘X transposto’)

    Então, no final, você também pode ver seu viés, já que é apenas mais uma input para representar a parte da saída que é, na verdade, independente de sua input.

    Em particular, a resposta de Nate, a resposta de zfy e a resposta de Pradi são ótimas.

    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 input aos pesos aprendidos / armazenados do modelo. (Onde melhores pesos podem aumentar o poder de adivinhação da neural network)

    Por exemplo, em modelos de aprendizagem, a hipótese / palpite é desejavelmente limitada por y = 0 ou y = 1 dado algum input, talvez em alguma tarefa de sorting … ie 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 acima mencionado. Observe que meus exemplos configuram as inputs X para cada x = um vetor duplo ou 2 valorado, em vez das inputs x com valor único de Nate de alguma coleção X).

    Se ignorarmos o viés, muitos insumos podem acabar sendo representados por muitos dos mesmos pesos (ou seja, os pesos aprendidos ocorrem principalmente perto da origem (0,0). O modelo seria então limitado a quantidades menores de bons pesos, em vez de muitos outros bons pesos, ele poderia aprender melhor com o viés (onde pesos mal aprendidos levam a suposições mais baixas ou a uma diminuição no poder de adivinhação da neural network).

    Portanto, é ideal que o modelo aprenda tanto perto da origem quanto no maior número possível de lugares dentro do limite / limite de decisão. Com o viés, podemos habilitar graus de liberdade próximos à origem, mas não se limitando à região imediata da origem.

    Para pensar de maneira simples, se você tem y = w1 * x onde y é sua saída e w1 é o peso imagine uma condição onde x = 0 então y = w1 * x é igual a 0 , Se você quer atualizar seu peso você tem para computar quanta mudança por delw = target-y onde target é sua saída alvo, neste caso ‘delw’ não irá mudar desde que y seja computado como 0.Então, suponha que se você puder adicionar algum valor extra ele ajudará y = w1 * x + w0 * 1 , onde bias = 1 e peso podem ser ajustados para obter um viés correto.Considere o exemplo abaixo.

    Em termos de linha Slope-interceptar é 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ê vai fazer isso mudando o valor de b que será seu viés

    Para todos os livros de ML que estudei, o W é sempre definido como o índice de conectividade entre dois neurônios, o que significa maior conectividade entre dois neurônios, quanto mais fortes os sinais serão transmitidos do neurônio de disparo 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 com a forma como os neurônios estão trabalhando, como resultado, proponho W = cos (theta), enquanto 1> = | cos (theta) | e Y = a * X = W * X + b enquanto a = b + W = b + cos (teta), b é um inteiro

    Outras que não as respostas mencionadas … Gostaria de acrescentar alguns outros pontos.

    O viés age como nossa âncora. É uma maneira de termos algum tipo de linha de base onde não vamos abaixo disso. Em termos de um grafo, pense em como y = mx + b é como uma interceptação y dessa function.

    saída = input vezes o valor de peso e adicionado um valor de polarização e, em seguida, aplicar uma function de ativação.

    O viés decide quanto ângulo você deseja que seu peso gire.

    No gráfico bidimensional, o peso e o viés nos ajudam a encontrar o limite de decisão das saídas. Digamos que precisamos construir a function AND, o par input (p) -output (t) deve ser

    {p = [0,0], t = 0}, {p = [1,0], t = 0}, {p = [0,1], t = 0}, {p = [1,1] t = 1}

    insira a descrição da imagem aqui

    Agora precisamos encontrar o limite de decisão, o limite da ideia deve ser:

    insira a descrição da imagem aqui

    Vejo? W é perpendicular ao nosso limite. Assim, dizemos que W decidiu a direção do limite.

    No entanto, é difícil encontrar W correto na primeira vez. Principalmente, escolhemos o valor W original aleatoriamente. Assim, o primeiro limite pode ser este: insira a descrição da imagem aqui

    Agora o limite é pareller para o eixo y.

    Queremos girar o limite, como?

    Mudando o W.

    Então, usamos a function de regra de aprendizado: W ‘= W + P: insira a descrição da imagem aqui

    W ‘= W + P é equivalente a W’ = W + bP, enquanto b = 1.

    Portanto, alterando o valor de b (polarização), você pode decidir o ângulo entre W ‘e W. Essa é a “regra de aprendizado da RNA”.

    Você também pode ler o Projeto de Rede Neural por Martin T. Hagan / Howard B. Demuth / Mark H. Beale, capítulo 4 “Regra de Aprendizagem Perceptron”

    Em geral, no aprendizado de máquina temos essa fórmula base Bias-Variance Tradeoff Porque na NN temos problema de Overfitting (problema de generalização de modelo onde pequenas mudanças nos dados levam grandes mudanças no resultado do modelo) e por isso temos grande variância, introduzindo um pequeno viés poderia ajudar muito. Considerando a fórmula acima do Bias-Variance Tradeoff , em que o viés é elevado ao quadrado, a introdução de um pequeno viés pode levar a reduzir muito a variação. Então, introduza o viés, quando você tem grande variância e perigo excessivo.