Eu estava implementando um artigo bastante popular " EXPLICANDO E APRENDENDO EXEMPLOS ADVERSÁRIOS " e, no artigo, ele treina uma função objetiva adversária
J '' (θ) = αJ (θ) + (1 - α) J '(θ).
Ele trata α como um hiperparâmetro. α pode ser 0,1, 0,2, 0,3, etc.
Independentemente deste artigo específico, pergunto-me, por que não incluímos α em nossos parâmetros e aprendemos o melhor α?
Qual é a desvantagem de fazer isso? É por causa do excesso de ajuste? Se sim, por que aprender apenas mais um parâmetro causa tanto ajuste excessivo?
Respostas:
É uma ótima pergunta! Vou tentar fornecer uma resposta mais geral. A resposta TL; DR é que você definitivamente pode aprender hiperparâmetros, mas não com os mesmos dados. Continue lendo para obter uma resposta um pouco mais detalhada.
Um hiperparâmetro geralmente corresponde a uma configuração do algoritmo de aprendizado, em vez de a um de seus parâmetros. No contexto da aprendizagem profunda, por exemplo, isso é exemplificado pela diferença entre algo como o número de neurônios em uma camada específica (um hiperparâmetro) e o peso de uma extremidade específica (um parâmetro regular e passível de aprendizado).
Por que há uma diferença em primeiro lugar? O caso típico para transformar um parâmetro em um hiperparâmetro é que simplesmente não é apropriado aprender esse parâmetro no conjunto de treinamento. Por exemplo, como é sempre mais fácil reduzir o erro de treinamento adicionando mais neurônios, tornar o número de neurônios em uma camada um parâmetro regular sempre incentivaria redes muito grandes, o que sabemos que nem sempre é desejável (por causa de sobreajuste).
Para sua pergunta, não é que não aprendamos os hiperparâmetros. Deixando de lado os desafios computacionais por um minuto, é muito possível aprender bons valores para os hiperparâmetros, e há casos em que isso é imperativo para um bom desempenho; toda a discussão no primeiro parágrafo sugere é que, por definição, você não pode usar os mesmos dados para esta tarefa .
Usando outra divisão dos dados (criando assim três partes distintas: o conjunto de treinamento, o conjunto de validação e o conjunto de testes, o que você poderia fazer em teoria é o seguinte procedimento de otimização aninhada : no loop externo, você tenta encontrar os valores para os hiperparâmetros que minimizam a perda de validação e, no loop interno, você tenta encontrar os valores para os parâmetros regulares que minimizam a perda de treinamento .
Isso é possível em teoria, mas é muito caro em termos computacionais: cada etapa do loop externo requer a resolução (até a conclusão, ou algo próximo disso) do loop interno, que geralmente é pesado em termos computacionais. O que complica ainda mais é que o problema externo não é fácil: por um lado, o espaço de pesquisa é muito grande.
Existem muitas abordagens para superar isso, simplificando a configuração acima (pesquisa em grade, pesquisa aleatória ou otimização de hiperparâmetro com base em modelo), mas explicar isso está muito além do escopo da sua pergunta. Como o artigo que você referenciou também demonstra, o fato de este ser um procedimento caro geralmente significa que os pesquisadores simplesmente o ignoram por completo ou tentam muito poucas configurações manualmente, eventualmente optando pelo melhor (novamente, de acordo com o conjunto de validação). Para sua pergunta original, porém, argumento que - embora muito simplista e artificial - essa ainda seja uma forma de "aprendizado".
fonte
Hiperparâmetros como o desse artigo são frequentemente usados para equilibrar vários termos na função de perda. Se você os tornasse aprendíveis, o processo de otimização simplesmente aprenderia a alocar todo o peso em termos que são mais fáceis de otimizar ao custo de termos mais difíceis de otimizar, o que anula o ponto de equilibrar os termos.
Outra maneira de ver isso é que a função de perda é um substituto para um objetivo real que é difícil de definir ou otimizar, como "gerar imagens de saída devem parecer realistas" ou "deve ser resistente a exemplos contraditórios". Nesse caso, o verdadeiro objetivo não é "encontrar os hiperparâmetros para minimizar a perda de substituto", é "encontrar os hiperparâmetros de modo que, quando executamos o SGD nos demais parâmetros para otimizar o substituto, obtivemos um bom desempenho no verdadeiro objetivo".
fonte
Como você perguntou "independentemente do artigo", gostaria de dar um exemplo mais simples: regressão linear penalizada (Ridge / Lasso).
Nesses casos, posso pensar em duas razões: Primeiro, observe que existem duas funções aqui: (F1) A função de perda, que é uma função analítica do hiperparâmetro e dos dados (no artigo que você vinculou, é ; e (F2) uma estimativa do erro de generalização, que depende da solução ideal para (F1) e do hiper-parâmetro escolhido em (F1).J~
Advertência: Uma rápida olhada no artigo revela que os autores treinam um classificador de rede neural para o conjunto de dados MNIST. Ele não diz explicitamente como escolher o hiperparâmetro , mas eu teria escolhido um que minimiza o erro de validação do melhor modelo.α α
A função objetivo para otimizar o hiperparâmetro é uma expressão que é um proxy para erro de generalização. É difícil escrever essa expressão como uma função analítica simples que pode ser diferenciada, mas pode ser facilmente avaliada em algum momento, simplesmente resolvendo o problema de otimização subjacente.
A avaliação da função (F2) exige que você resolva um problema de otimização, o que pode ser caro. Portanto, mesmo se você puder aproximar o gradiente para que F2 faça a descida do gradiente, seria caro e lento. Nesses casos, fazer uma pesquisa na grade geralmente é "bom o suficiente".
Dito isto, existem técnicas para otimizar funções objetivas de caixa preta (como F2) assumindo alguma estrutura de suavidade devido à dependência do hiperparâmetro. Como exemplo, você pode ver esta postagem que mostra como o desempenho de um modelo Lasso varia com seu hiperparâmetro :λ
(Imagem retirada desta postagem: https://stats.stackexchange.com/a/26607/54725 )
Algumas referências:
fonte
Quando esse hiperparâmetro é otimizado, ele fará com que J e J 'se tornem a mesma função, ou seja, pesos iguais. Você terminará com uma solução trivial.
Se você deseja um filosofar mais genérico, considere o seguinte: os hiperparâmetros geralmente não são emaranhados com dados. O que eu quero dizer? Em uma rede neural ou mesmo em uma regressão simples, os parâmetros do seu modelo estarão interagindo diretamente com os dados: e assim por diante nas camadas. Você vê como se emaranha em seus dados. Portanto, quando você utiliza uma derivada sobre qualquer da função objetivo, obtém pontos de dados inserindo o resultado de maneiras não óbvias em matrizes, Hessianos, produtos cruzados etc.yL=XLβL
aL=σ(yL)
XL+1=aL βL β
No entanto, se você tentar estimar as condições de primeira ordem sobre os hiperparâmetros, não obterá esse efeito. As derivadas dos hiperparâmetros geralmente operam todos os blocos do seu modelo, sem embaralhar suas partes como derivadas sobre os parâmetros. É por isso que a otimização de hiperparâmetros geralmente leva a soluções triviais como a que eu lhe dei para um artigo específico. A otimização de hiperparâmetros não aflige seu conjunto de dados e o torna desconfortável o suficiente para produzir algo interessante.
fonte