Usuário(a):Claudecir Garcia Martins/Retropropagacao

Origem: Wikipédia, a enciclopédia livre.

Backpropagation é um método utilizado em redes neurais artificiais para calcular um gradiente, necessário para o cálculo dos pesos, a serem usados em uma rede neural. É comumente usado para treinar redes neurais profunda (DeepLearning) , um termo que se refere a redes neurais com mais de uma camada oculta.

Backpropagation é um caso especial da mais antiga técnica chamada de diferenciação automática . No contexto de aprendizagem backpropagation é comumente usada pelo algoritmo de otimização de gradiente descendente para ajustar o peso dos neurônios calculando o gradiente de função de perda . Essa técnica também é chamada de retro-propagação de erros, porque o erro é calculado na saída e distribuído de volta pelas camadas de rede.

O algoritmo de retropropagação foi repetidamente redescoberto e é equivalente à diferenciação automática no modo de acumulação reversa. Backpropagation exige que a derivada da função de custo em relação à saída de rede seja conhecida, o que geralmente (mas não necessariamente) significa que um alvo desejado, o valor é conhecido. Por esta razão é considerado um método de aprendizado supervisionado, embora seja utilizado em algumas redes não supervisionadas, tais como autoencodificadores. Backpropagation é também uma generalização da regra delta para redes multicamadas feedforward, que se tornou possível com o uso da regra da cadeia para calcular iterativamente gradientes para cada camada. Está intimamente relacionado com o algoritmo de Gauss–Newton , e faz parte de uma pesquisa contínua em retropropagação neural. Backpropagation pode ser usado com qualquer otimizador à base de gradiente, tais como L-BFGS ou método de Newton truncado.

Motivação[editar | editar código-fonte]

O objetivo de qualquer algoritmo do aprendizado supervisionado é encontrar uma função que melhor mapeia um conjunto de entradas para a sua saída correta. Um exemplo seria uma tarefa de classificação, em que a entrada é uma imagem de um animal, e a saída correta é o nome do animal.

A motivação para o backpropagation é treinar um multi-camadas, de modo ela possa aprender as representações internas apropriadas para permitir que ela aprenda qualquer mapeamento arbitrário de entrada para saída.

Função de perda[editar | editar código-fonte]

Às vezes chamada de função de custo ou função de erro (não confundir com a função erro de Gauss), a função de perda é uma função que mapeia valores de uma ou mais variáveis em um número real , que representam, intuitivamente, algum "custo" associado a esses valores. Para backpropagation, a função 'loss' calcula a diferença entre a sua saída esperada, depois que um caso se propaga através da rede.

Suposições[editar | editar código-fonte]

Duas suposições devem ser feitas sobre a função de erro. Primeiro é que pode ser escrito como uma média sobre as funções de de erro , para  de treinamento individual . A razão para esta suposição é que o algoritmo backpropagation calcula o gradiente da função de erro para um único exemplo de treinamento, que precisa ser generalizada para a função de erro geral. A segunda suposição é que ele pode ser escrita como uma função das saídas da rede neural.

Exemplo de perda de função[editar | editar código-fonte]

Façamos  serem vetores de .

Selecione uma função de erro meça a diferença entre duas saídas. A escolha padrão é o quadrado da distância Euclidiana entre os vetores e :

Observe que o fator  convenientemente cancela o expoente quando a função de erro é posteriormente diferenciada.

A função de erro sobre exemplos de treinamento pode ser escrita simplesmente como uma média das perdas sobre exemplos individuais :e, portanto, a derivada parcial em relação às saídas:

Otimização[editar | editar código-fonte]

O algoritmo de otimização repete um ciclo de duas fase, propagação e a atualização de peso. Quando um vetor de entrada é apresentado à rede, ele é propagado para frente através da rede, camada por camada, até atingir a camada de saída. A saída da rede é então comparada com a saída desejada, usando uma perda de função. O erro resultante valor é calculado para cada um dos neurônios da camada de saída. Os valores de erro são então propagados a partir da saída de volta através da rede, até que cada neurônio tem associado um valor de erro que reflete a sua contribuição para a saída original.

Backpropagation usa esses valores de erro para calcular o gradiente da perda de função. Na segunda fase, este gradiente é alimentado para o método de otimização, que por sua vez usa-lo para atualizar os pesos, em uma tentativa de minimizar a perda de função.

Algoritmo[editar | editar código-fonte]

Façamos  ser uma rede neural com conexões,  entradas e saídas.

Abaixo, irá indicar vetores em , vetores no e vetores no . Eles são chamados de entradas, saídas e pesos , respectivamente.

A rede neural corresponde a uma função que, dado um peso , mapeia uma entrada para uma saída .

A otimização toma como entrada uma sequência de exemplos de treinamento e produz uma seqüência de pesos a partir de alguns peso inicial geralmente escolhido de forma aleatória.

Estes pesos são calculados da seguinte forma: primeiro calcula-se  usando apenas para . A saída do algoritmo é então , dando-nos uma nova função . O cálculo é o mesmo em cada passo, porém, apenas o caso é descrito.

Cálculando  a partir de é feito considerando uma variável de peso e a aplicando o gradiente descendente na função para encontrar um mínimo local, a partir de .

Isso faz o peso minimizado encontrado pelo gradiente descendente.

Algoritmo no código[editar | editar código-fonte]

Para implementar o algoritmo acima, fórmulas explícitas são necessárias para o gradiente da função onde a função é .

O algoritmo de aprendizagem pode ser dividido em duas fases: a propagação e atualização do peso.

Fase 1: propagação[editar | editar código-fonte]

Cada propagação envolve as seguintes etapas:

  1. A propagação para a frente através da rede para gerar o(s) valor(es) de saída(s)
  2. Cálculo do custo (termo de erro)
  3. Propagação das ativações de saída de volta através da rede usando o padrão de treino de destino, a fim de gerar os deltas (a diferença entre o alvo e os valores reais de saída) de todos os neurônios de saídas e os  ocultos.

Fase 2: atualização dos pesos[editar | editar código-fonte]

Para cada peso, os seguintes passos devem ser seguidos:

  1. O peso da saída da delta e de entrada de ativação são multiplicados para encontrar o gradiente do peso.
  2. Uma proporção (porcentagem) do gradiente do peso do  é subtraído do peso.

Essa relação (porcentagem) influencia a velocidade e a qualidade da aprendizagem; é chamado de taxa de aprendizagem. Quanto maior a taxa, mais rapidamente o neurônio treina, porém quanto menor a taxa, mais preciso é o treinamento. O sinal do gradiente de um peso indica se o erro varia diretamente ou inversamente ao peso. Portanto, o peso deve ser atualizado na direção oposta, "descendo" o gradiente.

A aprendizagem é repetida (em novos lotes) até que a rede tenha um desempenho adequado.

Pseudocódigo[editar | editar código-fonte]

A seguir um pseudocódigo para um algoritmo estocástico de gradiente descendente aplicado no treinamento de uma rede de três camadas (apenas uma camada oculta):

 inicializar a rede de pesos (muitas vezes pequenos valores aleatórios)
 fazer
 Paracada exemplo de treinamento, chamado ex
 predição = neural-net-saída(rede, ex) // segue em frente
 real = professor-saída(ex)

calcular o erro (predição - atual) nas unidades de saídas

calcular {\ displaystyle \ Delta w_ {h}} \ Delta w_hpara todos os pesos da camada oculta para a saída da camada // backward pass
 compute  for all weights from hidden layer to output layer // passar para trás
 compute  for all weights from input layer to hidden layer // backward pass continuação
 atualização de rede pesos // camada de entrada não modificada por erro de estimativa
 até que todos os exemplos classificados corretamente ou outro critério de parada satisfeito
retorno a rede

As linhas rotuladas "backward pass" podem ser implementadas utilizando o algoritmo backpropagation, que calcula o gradiente do erro da rede em relação aos pesos modificáveis da rede.

Intuição[editar | editar código-fonte]

A aprendizagem como um problema de otimização[editar | editar código-fonte]

Para compreender a matemática, a derivação do algoritmo backpropagation, que ajuda a desenvolver algumas intuições sobre a relação entre a saída real de um neurônio e a saída correta para um determinado caso de treinamento. Considere uma simples rede neural com duas unidades de entrada, uma unidade de produção e não ocultos unidades. Cada neurônio usa uma saída linearErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido que é a soma ponderada de suas entradas.

Uma simples rede neural com duas unidades de entrada e uma unidade de saída

Inicialmente, antes do treinamento, os pesos serão definidos aleatoriamente. Em seguida, o neurônio aprende a partir de exemplos de treinamento, que, neste caso, consiste de um conjunto de tuplas onde e são os insumos para a rede e t é a saída correta (a saída da rede deve, eventualmente, produzir as entradas). A rede inicial, dado e , irá calcular uma saída y , que provavelmente difere t (dado aleatório pesos). Um método comum para medir a discrepância entre o resultado esperado t e a saída real y é o quadrado da medida de erro:

onde E é a discrepância ou erro.

Como um exemplo, considere a rede em um único caso de treinamento: e , assim, a entrada de e são 1 e 1, respectivamente, e a saída correta, t é 0. Agora, se a saída real y é representada no eixo horizontal contra o erro E no eixo vertical, o resultado é uma parábola. O mínimo da parábola corresponde à saída y , que minimiza o erro E. Para um único caso de treinamento, o mínimo também toca o eixo horizontal, o que significa que o erro será igual a zero e a rede pode produzir uma saída y que corresponde exatamente ao resultado esperado t. Portanto, o problema de mapeamento de entradas para saídas pode ser reduzido a um problema de otimização de encontrar uma função que irá produzir o mínimo de erro.

Erro superfície de um neurônio linear para um único caso de treinamento.

No entanto, a saída de um neurônio depende da soma ponderada de todas as entradas:

onde e são os pesos sobre a conexão de unidades de entrada para a saída da unidade. Portanto, o erro também depende da entrada de pesos para o neurônio, que é, em última análise, o que precisa ser mudado na rede a fim de permitir a aprendizagem. Se cada peso é plotado em um eixo horizontal e o erro no eixo vertical, o resultado é uma parabólica tigela. Para um neurônio com k pesos, o mesmo enredo, seria necessário um parabolóide elíptico de dimensões.

Erro superfície de um neurônio linear com a entrada de dois pesos

Comummente utilizado algoritmo para encontrar o conjunto de pesos que minimiza o erro é de gradiente descendente. Backpropagation é então usado para calcular a íngreme descida direção.

Derivação por uma única camada de rede[editar | editar código-fonte]

O método de gradiente descendente envolve calcular a derivada da função de erro quadrático com relação aos pesos da rede. Isso normalmente é feito utilizando o backpropagation. Assumindo a saída de um neurônio,Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido o quadrado da função de erro é:

onde

é o erro quadrático,
é o destino de saída para uma formação de exemplo, e
é a saída real da saída do neurônio.

O fator de é incluída para cancelar o expoente ao diferenciar. Mais tarde, a expressão será multiplicado com um arbitrário de aprendizagem, de modo que não importa se uma constante coeficiente é introduzida agora.

Para cada neurônio , sua saída é definido como

Entrada para um neurônio é a soma ponderada das saídas do anterior neurônios. Se o neurônio é a primeira camada após camada de entrada, o da camada de entrada são simplesmente as entradas para a rede. O número de unidades de entrada para o neurônio é . A variável denota o peso entre os neurônios e .

A função de ativação é não-linear e diferenciável. Normalmente usado para função de ativação é a função logística:

que tem uma conveniente derivados de:

Encontrar a derivada do erro[editar | editar código-fonte]

O cálculo da derivada parcial do erro em relação ao peso é feito usando a regra da cadeia duas vezes:

No último fator, o do lado direito acima, apenas um termo na soma depende , assim que

Se o neurônio é a primeira camada após camada de entrada, é apenas .

A derivada da saída do neurônio com relação à sua entrada é simplesmente a derivada parcial da função de ativação (assumindo aqui que a função logística é utilizada):

Esta é a razão por backpropagation requer a ativação da função diferenciável. (No entanto, o não-diferenciáveis ReLU função de ativação tornou-se bastante popular recentemente, por exemplo, em AlexNet)

O primeiro fator é simples para avaliar se o neurônio está na camada de saída, porque, então, e

No entanto, se é de uma forma arbitrária camada interna da rede, encontrar a derivada de com relação ao é menos óbvio.

Considerando como uma função das entradas de todos os neurônios receber a entrada do neurônio ,

e tendo o total de derivativos, com relação a um recursiva expressão para a derivada é obtida:

Portanto, a derivada com respeito ao pode ser calculado, se todas as derivadas com respeito às saídas da próxima camada – o mais próximo da saída do neurônio – são conhecidos.

Juntando tudo:

com


To update the weight using gradient descent, one must choose a learning rate, . The change in weight needs to reflect the impact on of an increase or decrease in . If , an increase in increases ; conversely, if , an increase in decreases . The new is added to the old weight, and the product of the learning rate and the gradient, multiplied by guarantees that changes in a way that always decreases . In other words, in the equation immediately below, always changes in such a way that is decreased:

Por uma única camada de rede, esta expressão torna-se a Regra Delta.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Extensão[editar | editar código-fonte]

A escolha da taxa de aprendizagem é importante, desde um valor alto pode causar muito forte, uma mudança, fazendo com que o mínimo para ser desperdiçada, enquanto um muito baixo índice de aprendizagem diminui a formação desnecessariamente.

Otimizações, como Quickprop são principalmente destinadas a acelerar erro de minimização; outras melhorias, principalmente, tentar aumentar a confiabilidade.

Aprendizado adaptativo da taxa de[editar | editar código-fonte]

A fim de evitar a oscilação dentro da rede, tais como a alternância de turnos de pesos de conexão, e para melhorar a taxa de convergência, refinamentos de este algoritmo usa um aprendizado adaptativo taxa.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Inércia[editar | editar código-fonte]

Usando uma variável de inércia prazo (Momentum) a gradiente e a última alteração pode ser ponderada tal que o peso de ajustamento além disso depende a alteração anterior. Se o Impulso é igual a 0, a mudança depende exclusivamente do gradiente, enquanto que um valor de 1 só vai depender da última alteração.

Semelhante a uma bola rolando para baixo de uma montanha, cuja velocidade é determinada não apenas pela atual encosta da montanha, mas também por sua própria inércia, inércia pode ser adicionado:onde:

is the change in weight in the connection of neuron to neuron at time
a learning rate (
the error signal of neuron and
the output of neuron , which is also an input of the current neuron (neuron ),
the influence of the inertial term (in ). This corresponds to the weight change at the previous point in time.

Inércia depende da atual mudança de peso tanto o atual gradiente da função erro (encosta da montanha, de 1ª summand), bem como da alteração de peso a partir do ponto anterior no tempo (inércia, 2º summand).

Com a inércia, os problemas de ficar preso (em barrancos íngremes e chapadas) são evitados. Uma vez que, por exemplo, o gradiente da função de erro torna-se muito pequeno em chapadas, a inércia seria imediatamente levar a uma "desaceleração" da gradiente descendente. Esta desaceleração é adiada pela adição de inércia do termo, de modo que um platô pode ser escapou mais rapidamente.

Modos de aprendizagem[editar | editar código-fonte]

Dois modos de aprendizagem estão disponíveis: estocástico e lote. Em estocástico de aprendizagem, cada entrada cria um ajuste do peso. No lote de aprendizagem, os pesos são ajustados com base em um lote de entradas, acumulando erros sobre o lote. Estocástico de aprendizagem apresenta o "ruído" para o gradiente descendente processo, usando o local de gradiente calculado a partir de um ponto de dados, o que reduz a chance de a rede de ficar preso em mínimos locais. No entanto, em lotes de aprendizagem, normalmente, produz uma mais rápida, mais estável descida para um mínimo local, uma vez que cada atualização é realizada na direção do erro médio do lote. Um compromisso comum é utilizar o "mini-lotes", ou seja, pequenos lotes e com amostras de cada lote selecionado estocasticamente a partir de todo o conjunto de dados.

Limitações[editar | editar código-fonte]

Gradiente descendente pode encontrar o mínimo local em vez do mínimo global
  • Gradiente descendente com backpropagation não é garantido para encontrar o mínimo global da função de erro, mas apenas um mínimo local; além disso, ele tem dificuldade de atravessar os planaltos, em função de erro de paisagem. Esse problema, causado pela não-convexidade de funções de erro em redes neurais, foi pensado para ser uma grande desvantagem, mas Yann LeCun et al. argumentam que, em muitos problemas práticos, não.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido
  • Backpropagation aprendizagem não exige a normalização dos vetores de entrada; no entanto, a normalização pode melhorar o desempenho.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

História[editar | editar código-fonte]

De acordo com várias fontes,Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido as noções básicas de contínua backpropagation, foram derivadas no contexto da teoria de controle por Henry J. PintoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido , em 1960, e por Arthur E. Bryson , em 1961.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido Que os princípios de programação dinâmica. Em 1962, Stuart Dreyfus publicou uma simples derivação somente com base na regra da cadeia.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido Bryson e Ho , o descreveu como um multi-fase do sistema dinâmico, o método de otimização, em 1969.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Em 1970 Linnainmaa publicado o método geral para a diferenciação automática (AD) de distintas redes de conexão de aninhados diferenciáveis funções.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido Isto corresponde a backpropagation, que é eficiente mesmo para redes esparsas.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Em 1973 Dreyfus usado backpropagation para adaptar os parâmetros de controladores na proporção de erro gradientes.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido Em 1974, Werbos , mencionou a possibilidade de aplicar este princípio para redes neurais artificiais,Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido e, em 1982, ele aplicou Linnainmaa ANÚNCIOS do método de redes neurais na forma como é utilizada hoje.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Em 1986, Rumelhart, Hinton e Williams mostrou experimentalmente que esse método pode gerar útil representações internas de dados de entrada em camadas ocultas de redes neurais.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválidoErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido Em 1993, Wan foi o primeiroErro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido para ganhar um padrão internacional de reconhecimento de concurso através de backpropagation.Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Durante a década de 2000, ele caiu fora do favor, mas voltou em 2010, beneficiando-se de barato, poderoso GPUbaseada em sistemas de computação. Isto tem sido especialmente na estrutura da linguagem de investigação sobre a aprendizagem, onde o connectionist modelos usando este algoritmo tem sido capaz de explicar uma variedade de fenómenos relacionados com a primeira Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido e aprendizagem de uma segunda língua. Erro de citação: Elemento de abertura <ref> está mal formado ou tem um nome inválido

Veja também[editar | editar código-fonte]

Notas[editar | editar código-fonte]

Referências[editar | editar código-fonte]

«Time series prediction by using a connectionist network with internal delay lines» (PDF) 

«Time series prediction by using a connectionist network with internal delay lines» (PDF) 

Links externos[editar | editar código-fonte]