Muitos livros e tutoriais de redes neurais gastam muito tempo com o algoritmo de retropropagação, que é essencialmente uma ferramenta para calcular o gradiente.
Vamos supor que estamos construindo um modelo com ~ 10K parâmetros / pesos. É possível executar a otimização usando alguns algoritmos de otimização sem gradiente?
Eu acho que calcular o gradiente numérico seria muito lento, mas e quanto a outros métodos, como Nelder-Mead, Recozimento Simulado ou Algoritmo Genético?
Todos os algoritmos sofreriam com mínimos locais, por que obcecados com gradiente?
Respostas:
Os dois primeiros algoritmos mencionados (Nelder-Mead e Simulated Annealing) são geralmente considerados bastante obsoletos nos círculos de otimização, pois existem alternativas muito melhores que são mais confiáveis e menos dispendiosas. Os algoritmos genéticos cobrem uma ampla variedade e alguns deles podem ser razoáveis.
No entanto, na classe mais ampla de algoritmos de otimização sem derivativos (DFO), há muitos que são significativamente melhores do que esses "clássicos", pois essa tem sido uma área ativa de pesquisa nas últimas décadas. Então, algumas dessas abordagens mais recentes podem ser razoáveis para aprendizado profundo?
Um artigo relativamente recente comparando o estado da arte é o seguinte:
Este é um artigo interessante, com muitas idéias interessantes sobre técnicas recentes. Por exemplo, os resultados mostram claramente que os melhores otimizadores locais são todos "baseados em modelo", usando diferentes formas de programação quadrática seqüencial (SQP).
No entanto, como observado em seu resumo "Concluímos que a capacidade de todos esses solucionadores em obter boas soluções diminui com o aumento do tamanho do problema". Para se ter uma idéia dos números, para todos os problemas, os solucionadores receberam um orçamento de 2500 avaliações de funções, e os tamanhos dos problemas foram no máximo ~ 300 parâmetros a serem otimizados. Além dos parâmetros O [10], muito poucos desses otimizadores tiveram um desempenho muito bom, e mesmo os melhores apresentaram uma deterioração notável no desempenho à medida que o tamanho do problema foi aumentado.
Portanto, para problemas dimensionais muito altos, os algoritmos DFO simplesmente não são competitivos com os baseados em derivativos. Para dar uma perspectiva, a otimização baseada em PDE (equação diferencial parcial) é outra área com problemas dimensionais muito altos (por exemplo, vários parâmetros para cada célula de uma grande grade de elementos finitos 3D). Nesta região, o " método adjunta " é um dos métodos mais usados. Este também é um otimizador de descida de gradiente baseado na diferenciação automática de um código de modelo de encaminhamento.
O mais próximo de um otimizador de DFO de alta dimensão talvez seja o Ensemble Kalman Filter , usado para assimilar dados em simulações complexas de PDE, por exemplo, modelos climáticos. Curiosamente, essa é essencialmente uma abordagem SQP, mas com uma interpretação bayesiana-gaussiana (portanto, o modelo quadrático é definido positivamente, ou seja, sem pontos de sela). Mas não acho que o número de parâmetros ou observações nessas aplicações seja comparável ao que é visto no aprendizado profundo.
Nota lateral (mínimos locais): Pelo pouco que li sobre aprendizado profundo, acho que o consenso é que são pontos de sela e não mínimos locais, que são mais problemáticos para espaços com parâmetros NN de alta dimensão.
Por exemplo, a recente revisão da Nature diz que "Resultados teóricos e empíricos recentes sugerem fortemente que os mínimos locais não são um problema sério em geral. Em vez disso, a paisagem é repleta de um número combinatorialmente grande de pontos de sela em que o gradiente é zero e o superfície se curva na maioria das dimensões e curvas no restante. "
Uma preocupação relacionada é a otimização local versus a otimização global (por exemplo, essa questão apontada nos comentários). Embora eu não tenha aprendido profundamente, na minha experiência o sobreajuste é definitivamente uma preocupação válida. Na minha opinião, os métodos de otimização global são mais adequados para problemas de projeto de engenharia que não dependem fortemente de dados "naturais". Em problemas de assimilação de dados, qualquer mínimo global atual pode mudar facilmente com a adição de novos dados (ressalva: minha experiência está concentrada em problemas de geociência, onde os dados geralmente são "esparsos" em relação à capacidade do modelo).
Uma perspectiva interessante é talvez
que fornece argumentos semi-teóricos sobre por que e quando a otimização aproximada pode ser preferível na prática.
Nota final (meta-otimização): Embora as técnicas baseadas em gradiente pareçam ser dominantes nas redes de treinamento, pode haver uma função do DFO nas tarefas associadas de meta-otimização.
Um exemplo seria o ajuste de hiperparâmetros. (Interessante, os otimizadores de DFO baseados em modelo da Rios & Sahinidis podem ser vistos como essencialmente resolvendo uma sequência de problemas de projeto de experimentos / superfície de resposta .)
Outro exemplo pode ser o projeto de arquiteturas, em termos de configuração de camadas (por exemplo, número, tipo, sequência, nós / camada). Nesse contexto de otimização discreta, algoritmos de estilo genético podem ser mais apropriados. Observe que aqui estou pensando no caso em que a conectividade é determinada implicitamente por esses fatores (por exemplo, camadas totalmente conectadas, camadas convolucionais, etc.). Em outras palavras, a conectividade é meta-otimizada explicitamente. (A força da conexão cairia em treinamento, onde, por exemplo, a esparsidade poderia ser promovida pela regularização e / ou ativações ReLU ... essas opções poderiam ser meta-otimizadas no entanto.)O[N2] not L1
fonte
Você pode usar todos os tipos de algoritmos de busca local; a retropropagação acabou de ser a mais eficiente para tarefas mais complexas em geral ; há circunstâncias em que outras pesquisas locais são melhores.
Você pode usar subidas aleatórias em uma rede neural para encontrar rapidamente uma solução aceitável, mas não seria viável encontrar uma solução quase ideal.
Wikipedia (eu sei, não é a melhor fonte, mas ainda) diz
fonte
Quanto aos algoritmos genéticos, eu veria retropropagação versus algoritmo genético para o treinamento em redes neurais
O caso principal que eu consideraria para o backprop é que ele é amplamente utilizado e teve muitas melhorias . Essas imagens realmente mostram alguns dos incríveis avanços na propagação da baunilha.
Eu não pensaria no backprop como um algoritmo, mas como uma classe de algoritmos.
Eu também gostaria de acrescentar que, para redes neurais, os parâmetros de 10k são feijões pequenos. Outra pesquisa funcionaria muito bem, mas em uma rede profunda com milhões de parâmetros, isso não é prático.
fonte
Bem, as redes neurais originais, antes da revolução da retropropagação nos anos 70, eram "treinadas" à mão. :)
Dito isto:
Existe uma "escola" de aprendizado de máquina chamada máquina de aprendizado extremo que não usa retropropagação.
O que eles fazem é criar uma rede neural com muitos, muitos, muitos nós - com pesos aleatórios - e treinar a última camada usando quadrados mínimos (como uma regressão linear). Eles então apuram a rede neural posteriormente ou aplicam a regularização na última etapa (como o laço) para evitar o ajuste excessivo. Eu já vi isso aplicado a redes neurais com apenas uma camada oculta. Não há treinamento, por isso é super rápido. Fiz alguns testes e, surpreendentemente, essas redes neurais "treinadas" dessa maneira são bastante precisas.
A maioria das pessoas, pelo menos com quem trabalho, trata essa "escola" de aprendizado de máquina com escárnio e é um grupo de excluídos com suas próprias conferências e assim por diante, mas na verdade acho que é meio ingênuo.
Outro ponto: na retropropagação, existem alternativas raramente mencionadas, como a retropropagação resiliente , que são implementadas em R no
neuralnet
pacote, que usam apenas a magnitude do derivado. O algoritmo é composto de condições if-else em vez de álgebra linear. Eles têm algumas vantagens sobre a retropropagação tradicional, ou seja, você não precisa normalizar seus dados porque eles não sofrem com o problema de gradiente de fuga .fonte
Você pode usar praticamente qualquer algoritmo de otimização numérica para otimizar pesos de uma rede neural. Você também pode usar algoritmos mistos de otimização contínua e discreta para otimizar não apenas pesos, mas o próprio layout (número de camadas, número de neurônios em cada camada, até mesmo o tipo de neurônio). No entanto, não há algoritmo de otimização que não sofra "maldição de dimensionalidade" e optimas locais de alguma maneira
fonte
Você também pode usar outra rede para aconselhar como os parâmetros devem ser atualizados.
Há as interfaces neurais dissociadas (DNI) do Google Deepmind. Em vez de usar a retropropagação, ele usa outro conjunto de redes neurais para prever como atualizar os parâmetros, o que permite a atualização paralela e assíncrona dos parâmetros.
O artigo mostra que o DNI aumenta a velocidade de treinamento e a capacidade do modelo de RNNs e fornece resultados comparáveis para RNNs e FFNNs em várias tarefas.
O artigo também listou e comparou muitos outros métodos de não retropropagação
fonte
Contanto que essa seja uma pergunta da comunidade, pensei em adicionar outra resposta. "Propagação traseira" é simplesmente o algoritmo de descida de gradiente. Envolve usar apenas a primeira derivada da função para a qual se está tentando encontrar os mínimos ou máximos locais. Existe outro método chamado método de Newton ou Newton-Raphson que envolve o cálculo do Hessiano e, portanto, utiliza segundas derivadas. Pode ter êxito em casos em que a descida do gradiente falha. Outros dizem que tenho mais conhecimento do que eu, e sim, este é um apelo de segunda mão à autoridade, que não é usado em redes neurais porque o cálculo de todas as segundas derivadas é muito caro em termos de computação.
fonte