A descida do gradiente tem um problema de ficar preso no mínimo local. Precisamos executar tempos exponenciais de descida de gradiente para encontrar mínimos globais.
Alguém pode me falar sobre quaisquer alternativas de descida de gradiente aplicadas no aprendizado de redes neurais, juntamente com seus prós e contras.
Isso é mais um problema relacionado à minimização da função do que o método usado, se encontrar o mínimo global verdadeiro é importante, use um método como um recozimento simulado . Isso poderá encontrar o mínimo global, mas pode levar muito tempo para isso.
No caso das redes neurais, os mínimos locais não são necessariamente um problema. Alguns dos mínimos locais devem-se ao fato de que você pode obter um modelo funcionalmente idêntico ao permutar as unidades da camada oculta ou negar as entradas e pesos de saída da rede etc. Além disso, se os mínimos locais não forem ideais, então a diferença de desempenho será mínima e, portanto, não importará. Por fim, e esse é um ponto importante, o problema principal de ajustar uma rede neural é excessivo; portanto, a busca agressiva dos mínimos globais da função de custo provavelmente resultará em excesso de ajuste e em um modelo com desempenho ruim.
Adicionar um termo de regularização, por exemplo, redução de peso, pode ajudar a suavizar a função de custo, o que pode reduzir um pouco o problema dos mínimos locais, e é algo que eu recomendaria de qualquer maneira, como forma de evitar o excesso de ajuste.
O melhor método, no entanto, para evitar mínimos locais em redes neurais é usar um modelo de Processo Gaussiano (ou uma rede neural de Função de Base Radial), que tem menos problemas com mínimos locais.
Muito verdadeiro. O problema de não encontrar o mínimo global é superestimado.
bayerj
2
O sobreajuste acontece quando você usa muitos parâmetros em um modelo (caso de uso NN típico), não relacionado a mínimos locais - pelo menos não de maneiras óbvias. Você pode ficar preso em um mínimo local ruim, mesmo com um NN pequeno, ou seja, com muito poucos parâmetros livres.
carlosayam
1
L ( ω ) = ( x( 1 )- ω )2+ ( x( 2 )- ω )2x( 1 ), x( 2 )ω. É fácil ver que há um mínimo local entre cada dois pontos consecutivos, ou seja, quanto mais dados, mais mínimos locais! O global é atingido entre os pontos mais próximos do conjunto de dados. Isso é extremo, eu sei, mas já vi comportamentos semelhantes resolvendo problemas de ponto de mudança.
carlosayam
1
@DikranMarsupial - eu não tinha caracteres suficientes para terminar minha frase :) Eu já vi comportamento semelhante resolvendo problemas de ponto de mudança ... usando redes neurais. Nesse tipo de problema, um mínimo local geralmente é ruim; então eu discordo que esse problema está superestimado.
carlosayam
1
@carlosayam "sobrestimado" não significa "sem importância", apenas que é um problema com as redes neurais que geralmente é exagerado. Sempre haverá problemas com todos os métodos de aprendizado, não há panacéia para tudo e você sempre precisa diagnosticar os problemas com qualquer modelo.
Dikran Marsupial
24
A descida de gradiente é um algoritmo de otimização .
Existem muitos algoritmos de otimização que operam em um número fixo de valores reais correlacionados ( não separáveis ). Podemos dividi-los aproximadamente em duas categorias: otimizadores baseados em gradiente e otimizadores sem derivativos. Normalmente, você deseja usar o gradiente para otimizar redes neurais em uma configuração supervisionada, porque isso é significativamente mais rápido que a otimização sem derivadas. Existem vários algoritmos de otimização baseados em gradiente que foram usados para otimizar redes neurais:
Descida estocástica de gradiente (SGD) , minibatch SGD, ...: Você não precisa avaliar o gradiente para todo o conjunto de treinamento, mas apenas para uma amostra ou minibatch de amostras, isso geralmente é muito mais rápido que a descida do gradiente em lote. Minibatches foram usados para suavizar o gradiente e paralelizar a propagação para frente e para trás. A vantagem sobre muitos outros algoritmos é que cada iteração está em O (n) (n é o número de pesos em seu NN). O SGD geralmente não fica preso nos mínimos locais (!) Porque é estocástico.
Gradiente de conjugado não linear : parece ter muito sucesso na regressão, O (n), requer o gradiente de lote (portanto, pode não ser a melhor escolha para conjuntos de dados grandes)
L-BFGS : parece ter muito sucesso na classificação, usa aproximação de Hessian, requer o gradiente de lote
Algoritmo de Levenberg-Marquardt (LMA) : Este é realmente o melhor algoritmo de otimização que eu conheço. Tem a desvantagem de que sua complexidade é aproximadamente O (n ^ 3). Não use para redes grandes!
E existem muitos outros algoritmos propostos para a otimização de redes neurais. Você pode pesquisar no Google por otimização sem Hessian ou v-SGD (existem muitos tipos de SGD com taxas de aprendizado adaptáveis, veja, por exemplo, aqui ).
A otimização para NNs não é um problema resolvido! Nas minhas experiências, o maior desafio não é encontrar um bom mínimo local. No entanto, os desafios são sair de regiões muito planas, lidar com funções de erro mal condicionadas etc. Essa é a razão pela qual o LMA e outros algoritmos que usam aproximações do Hessian geralmente funcionam tão bem na prática e as pessoas tentam desenvolver versões estocásticas que usam informações de segunda ordem com baixa complexidade. No entanto, geralmente um conjunto de parâmetros muito bem ajustado para o minibatch SGD é melhor que qualquer algoritmo de otimização complexo.
Normalmente você não deseja encontrar um ótimo global. Porque isso geralmente requer super ajuste dos dados de treinamento.
Uma alternativa interessante à descida em gradiente são os algoritmos de treinamento baseados na população, como os algoritmos evolutivos (EA) e a otimização de enxame de partículas (PSO). A idéia básica por trás das abordagens populacionais é que uma população de soluções candidatas (vetores de peso NN) é criada e as soluções candidatas exploram iterativamente o espaço de pesquisa, trocando informações e, eventualmente, convergindo em mínimos. Como muitos pontos de partida (soluções candidatas) são usados, as chances de convergência nos mínimos globais são significativamente aumentadas. Foi demonstrado que o PSO e o EA apresentam um desempenho muito competitivo, muitas vezes (embora nem sempre), superando a descida gradiente em problemas complexos de treinamento de NN.
+1 É importante lembrar que a otimização agressiva do critério de treinamento pode levar a um ajuste excessivo, a menos que sejam tomadas medidas para evitá-lo, então eu evitaria PSO e EA, a menos que o critério de treinamento inclua alguma forma de regularização ou outra complexidade baseada multa.
Dikran Marsupial
5
@ anna-earwen, você poderia fornecer algumas referências em que o PSO apresenta desempenho competitivo em comparação com o SGD?
emrea
8
Eu sei que esse tópico é bastante antigo e outros fizeram um ótimo trabalho para explicar conceitos como mínimos locais, superajuste etc. No entanto, como o OP estava procurando uma solução alternativa, tentarei contribuir com um e espero que ele inspire idéias mais interessantes.
A idéia é substituir todo peso w para w + t, onde t é um número aleatório após a distribuição gaussiana. A saída final da rede é então a saída média sobre todos os valores possíveis de t. Isso pode ser feito analiticamente. Você pode otimizar o problema com descida de gradiente ou LMA ou outros métodos de otimização. Depois que a otimização estiver concluída, você terá duas opções. Uma opção é reduzir o sigma na distribuição gaussiana e fazer a otimização repetidamente até que o sigma atinja 0, então você terá um mínimo local melhor (mas potencialmente isso pode causar super ajuste). Outra opção é continuar usando aquela com o número aleatório em seus pesos, pois geralmente possui melhor propriedade de generalização.
A primeira abordagem é um truque de otimização (eu chamo de tunelamento convolucional, pois utiliza convolução sobre os parâmetros para alterar a função de destino), suaviza a superfície do cenário da função de custo e se livra de alguns dos mínimos locais, assim facilite encontrar o mínimo global (ou melhor, o mínimo local).
A segunda abordagem está relacionada à injeção de ruído (em pesos). Observe que isso é feito analiticamente, o que significa que o resultado final é uma única rede, em vez de várias redes.
A seguir, são exemplos de saídas para o problema de duas espirais. A arquitetura de rede é a mesma para todos os três: existe apenas uma camada oculta de 30 nós e a camada de saída é linear. O algoritmo de otimização usado é LMA. A imagem da esquerda é para definição de baunilha; o meio está usando a primeira abordagem (ou seja, reduzir repetidamente o sigma para 0); o terceiro está usando sigma = 2.
Você pode ver que a solução de baunilha é a pior, o tunelamento convolucional faz um trabalho melhor e a injeção de ruído (com tunelamento convolucional) é a melhor (em termos de propriedade de generalização).
Tanto o tunelamento convolucional quanto a maneira analítica de injeção de ruído são minhas idéias originais. Talvez eles sejam a alternativa em que alguém possa estar interessado. Os detalhes podem ser encontrados no meu artigo Combinando o número infinito de redes neurais em uma . Aviso: Eu não sou um escritor acadêmico profissional e o artigo não é revisado por pares. Se você tiver dúvidas sobre as abordagens que mencionei, deixe um comentário.
Máquinas de aprendizado extremo Essencialmente, elas são uma rede neural em que os pesos que conectam as entradas aos nós ocultos são atribuídos aleatoriamente e nunca são atualizados. Os pesos entre os nós ocultos e as saídas são aprendidos em uma única etapa, resolvendo uma equação linear (matriz inversa).
Quando se trata de tarefas de Otimização Global (ou seja, tentando encontrar um mínimo global de uma função objetiva), você pode querer dar uma olhada em:
{vi}
Algoritmo genético que utiliza o conceito de mutação, cruzamento e seleção para definir a população de pontos a serem avaliados na próxima iteração da otimização.
Otimização de substituição que usa ummodelo de substituição para aproximar a função objetivo. Este método pode ser usado quando a função objetivo é cara de avaliar.
Otimização multiobjetivo (também conhecida como otimização de Pareto ), que pode ser usada para o problema que não pode ser expresso em uma forma que tenha uma única função objetivo (mas sim um vetor de objetivos).
Recozimento simulado , que usa o conceito de recozimento (ou temperatura) para compensar a exploração e a exploração. Ele propõe novos pontos para avaliação a cada iteração, mas à medida que o número de iterações aumenta, a "temperatura" cai e o algoritmo se torna cada vez menos provável de explorar o espaço, "convergindo" para o seu melhor candidato atual.
Como mencionado acima, o recozimento simulado, a otimização de enxame de partículas e os algoritmos genéticos são bons algoritmos de otimização global que navegam bem por grandes espaços de pesquisa e, diferentemente do Gradient Descent , não precisam de informações sobre o gradiente e podem ser usados com sucesso com funções e problemas objetivos de caixa preta que exigem simulações em execução.
A descida de gradiente é um algoritmo de otimização .
Existem muitos algoritmos de otimização que operam em um número fixo de valores reais correlacionados ( não separáveis ). Podemos dividi-los aproximadamente em duas categorias: otimizadores baseados em gradiente e otimizadores sem derivativos. Normalmente, você deseja usar o gradiente para otimizar redes neurais em uma configuração supervisionada, porque isso é significativamente mais rápido que a otimização sem derivadas. Existem vários algoritmos de otimização baseados em gradiente que foram usados para otimizar redes neurais:
E existem muitos outros algoritmos propostos para a otimização de redes neurais. Você pode pesquisar no Google por otimização sem Hessian ou v-SGD (existem muitos tipos de SGD com taxas de aprendizado adaptáveis, veja, por exemplo, aqui ).
A otimização para NNs não é um problema resolvido! Nas minhas experiências, o maior desafio não é encontrar um bom mínimo local. No entanto, os desafios são sair de regiões muito planas, lidar com funções de erro mal condicionadas etc. Essa é a razão pela qual o LMA e outros algoritmos que usam aproximações do Hessian geralmente funcionam tão bem na prática e as pessoas tentam desenvolver versões estocásticas que usam informações de segunda ordem com baixa complexidade. No entanto, geralmente um conjunto de parâmetros muito bem ajustado para o minibatch SGD é melhor que qualquer algoritmo de otimização complexo.
Normalmente você não deseja encontrar um ótimo global. Porque isso geralmente requer super ajuste dos dados de treinamento.
fonte
Uma alternativa interessante à descida em gradiente são os algoritmos de treinamento baseados na população, como os algoritmos evolutivos (EA) e a otimização de enxame de partículas (PSO). A idéia básica por trás das abordagens populacionais é que uma população de soluções candidatas (vetores de peso NN) é criada e as soluções candidatas exploram iterativamente o espaço de pesquisa, trocando informações e, eventualmente, convergindo em mínimos. Como muitos pontos de partida (soluções candidatas) são usados, as chances de convergência nos mínimos globais são significativamente aumentadas. Foi demonstrado que o PSO e o EA apresentam um desempenho muito competitivo, muitas vezes (embora nem sempre), superando a descida gradiente em problemas complexos de treinamento de NN.
fonte
Eu sei que esse tópico é bastante antigo e outros fizeram um ótimo trabalho para explicar conceitos como mínimos locais, superajuste etc. No entanto, como o OP estava procurando uma solução alternativa, tentarei contribuir com um e espero que ele inspire idéias mais interessantes.
A idéia é substituir todo peso w para w + t, onde t é um número aleatório após a distribuição gaussiana. A saída final da rede é então a saída média sobre todos os valores possíveis de t. Isso pode ser feito analiticamente. Você pode otimizar o problema com descida de gradiente ou LMA ou outros métodos de otimização. Depois que a otimização estiver concluída, você terá duas opções. Uma opção é reduzir o sigma na distribuição gaussiana e fazer a otimização repetidamente até que o sigma atinja 0, então você terá um mínimo local melhor (mas potencialmente isso pode causar super ajuste). Outra opção é continuar usando aquela com o número aleatório em seus pesos, pois geralmente possui melhor propriedade de generalização.
A primeira abordagem é um truque de otimização (eu chamo de tunelamento convolucional, pois utiliza convolução sobre os parâmetros para alterar a função de destino), suaviza a superfície do cenário da função de custo e se livra de alguns dos mínimos locais, assim facilite encontrar o mínimo global (ou melhor, o mínimo local).
A segunda abordagem está relacionada à injeção de ruído (em pesos). Observe que isso é feito analiticamente, o que significa que o resultado final é uma única rede, em vez de várias redes.
A seguir, são exemplos de saídas para o problema de duas espirais. A arquitetura de rede é a mesma para todos os três: existe apenas uma camada oculta de 30 nós e a camada de saída é linear. O algoritmo de otimização usado é LMA. A imagem da esquerda é para definição de baunilha; o meio está usando a primeira abordagem (ou seja, reduzir repetidamente o sigma para 0); o terceiro está usando sigma = 2.
Você pode ver que a solução de baunilha é a pior, o tunelamento convolucional faz um trabalho melhor e a injeção de ruído (com tunelamento convolucional) é a melhor (em termos de propriedade de generalização).
Tanto o tunelamento convolucional quanto a maneira analítica de injeção de ruído são minhas idéias originais. Talvez eles sejam a alternativa em que alguém possa estar interessado. Os detalhes podem ser encontrados no meu artigo Combinando o número infinito de redes neurais em uma . Aviso: Eu não sou um escritor acadêmico profissional e o artigo não é revisado por pares. Se você tiver dúvidas sobre as abordagens que mencionei, deixe um comentário.
fonte
Máquinas de aprendizado extremo Essencialmente, elas são uma rede neural em que os pesos que conectam as entradas aos nós ocultos são atribuídos aleatoriamente e nunca são atualizados. Os pesos entre os nós ocultos e as saídas são aprendidos em uma única etapa, resolvendo uma equação linear (matriz inversa).
fonte
Quando se trata de tarefas de Otimização Global (ou seja, tentando encontrar um mínimo global de uma função objetiva), você pode querer dar uma olhada em:
Como mencionado acima, o recozimento simulado, a otimização de enxame de partículas e os algoritmos genéticos são bons algoritmos de otimização global que navegam bem por grandes espaços de pesquisa e, diferentemente do Gradient Descent , não precisam de informações sobre o gradiente e podem ser usados com sucesso com funções e problemas objetivos de caixa preta que exigem simulações em execução.
fonte