Regularização e dimensionamento de recursos no aprendizado on-line?

15

Digamos que eu tenha um classificador de regressão logística. No aprendizado em lote normal, eu teria um termo regularizador para evitar o excesso de ajustes e manter meus pesos pequenos. Eu também normalizava e dimensionava meus recursos.

Em um ambiente de aprendizado on-line, estou recebendo um fluxo contínuo de dados. Eu faço uma atualização de descida de gradiente com cada exemplo e depois a descarto. Devo usar o termo de escala e regularização de recursos no aprendizado on-line? Se sim, como posso fazer isso? Por exemplo, não tenho um conjunto de dados de treinamento para escalar. Também não tenho a validação definida para ajustar meu parâmetro de regularização. Se não, por que não?

No meu aprendizado on-line, recebo um fluxo de exemplos continuamente. Para cada novo exemplo, faço uma previsão. Então, na próxima etapa, obtenho o destino real e faço a atualização da descida do gradiente.

siamii
fonte

Respostas:

9

O projeto de código aberto vowpal wabbit inclui uma implementação do SGD on-line, aprimorada pelo cálculo on-line (on-line) de 3 fatores adicionais que afetam as atualizações de peso. Esses fatores podem ser ativados / desativados pelas respectivas opções de linha de comando (por padrão, todos os três estão ativados, a --sgdopção desativa todos eles, ou seja: recorre ao SGD "clássico").

As três opções de aprimoramento do SGD são:

  • --normalized atualizações ajustadas para a escala de cada recurso
  • --adaptive usa gradiente adaptativo (AdaGrad) (Duchi, Hazan, Singer)
  • --invariant atualizações conscientes da importância (Karampatziakis, Langford)

Juntos, eles garantem que o processo de aprendizado on-line faça uma compensação / ajuste automático de três maneiras para:

  • escala por recurso (valores grandes versus pequenos)
  • redução da taxa de aprendizado por recurso com base na importância do recurso
  • ajuste de taxa de aprendizado adaptável por recurso para prevalência / raridade de recurso em exemplos

O resultado é que não há necessidade de pré-normalizar ou dimensionar recursos diferentes para tornar o aluno menos tendencioso e mais eficaz.

Além disso, o vowpal wabbit também implementa a regularização on-line via descida gradiente truncada com as opções de regularização:

  • --l1 (Norma L1)
  • --l2 (Norma L2)

Minha experiência com esses aprimoramentos em vários conjuntos de dados foi que eles melhoraram significativamente a precisão do modelo e a convergência mais suave quando cada um deles foi introduzido no código.

Aqui estão alguns trabalhos acadêmicos para obter mais detalhes relacionados a essas melhorias:

arielf
fonte
Arielf - Se você desativar as três melhorias (via --sgd), o sgd será mostrado no slide 11 do github.com/JohnLangford/vowpal_wabbit/wiki/v6.1_tutorial.pdf, para que power_t e initial_t se tornem relevantes ?
B_Miner 16/02
1
B_miner: tanto quanto eu entendo --power_te --initial_tsão opções independentes globais (não por recurso). --sgdsomente reverte para o SGD "clássico". IOW: --sgdapenas cancela --invariant, --normalizede --adaptive(o que implica, por característica-aprendizagem-taxas separadas)
arielf
Você sabe se existe uma maneira de fazer essas atualizações de maneira assíncrona paralela (como é feito no SGD assíncrono)? Parece que a VW com vários trabalhadores calcula a média do modelo de cada trabalhador no final de cada passe. Alguns documentos / dicas de software sobre como fazer isso?
JC1
1

sim, você certamente precisa de regularização ... isso também ajuda na descida do gradiente (e inicializa a taxa de aprendizado para 1 / C)

veja, por exemplo, artigo SGD-QN http://leon.bottou.org/papers papers de bottou

você realmente não explicou o que quer dizer com aprendizado on-line: por exemplo, para cada ponto você obtém o valor-alvo? Não sei como você incorporaria ... pesquisando C ... acho que você teria vários classificadores com diferentes termos de regularização e acompanharia o erro de previsão (antes de atualizar os pesos)

seanv507
fonte
Pelo aprendizado on-line, recebo um exemplo e faço uma previsão. Na próxima etapa, recebo o destino real do meu exemplo e faço uma atualização de descida de gradiente.
siamii
bem, então deve ser como sugeri - você executa vários classificadores com diferentes parâmetros de regularização e acompanha os erros de previsão de cada classificador.
seanv507
Não sei ao certo o que você quer dizer com inicializar a taxa de aprendizado para 1 / C. O que é C? Você está falando sobre máquinas de vetores de suporte? Estou falando de regressão logística em que o regularizador tem coeficiente lambda. Não sei o que isso tem a ver com a taxa de aprendizado.
S27i
sim, o parâmetro de regularização l2, C, lambda ou qualquer outra coisa. é algo que é mencionado em um aparte no jornal sgdqn de bottou, e presumo que tenha explicado melhor em outro lugar. basicamente, a sua taxa de aprendizagem deve ser o 1 / curvatura (inverso do Hessian) de sua superfície de erro .. agora se sua superfície de erro é
seanv507
1
Também preciso fazer o dimensionamento de recursos? Como fazer isso em um ambiente online?
S27i