Como e por que os MLPs para classificação diferem dos MLPs para regressão? Diferentes funções de retropropagação e transferência?

8

Estou usando dois perceptrons de múltiplas camadas de feedforward de múltiplas camadas (MLPs). Com os mesmos dados de entrada (14 neurônios de entrada), faço uma classificação (verdadeiro / falso) e uma regressão (se verdadeiro, "quanto") ¹. Até agora, usei preguiçosamente o Matlabs patternnet e fitnet , respectivamente. Preguiçosamente, porque não tomei tempo para realmente entender o que está acontecendo - e deveria. Além disso, preciso fazer a transição para uma biblioteca OSS (provavelmente da FANN), que provavelmente exigirá mais configurações manuais do que a Matlab NN Toolbox. Portanto, estou tentando entender com mais precisão o que está acontecendo.

As redes criadas patternnete fitnetsão quase idênticas: 14 neurônios de entrada, 11 neurônios ocultos, 1 neurônio alvo (2 para a fitnet, mas apenas 1 informação). Mas eles não são completamente idênticos. As diferenças por padrão são:

Essas diferenças deveriam ser?

Que tipo de funções de retropropagação são ideais para classificação e que tipo de regressão e por quê?

Que tipo de funções de transferência são ideais para classificação e que tipo de regressão e por quê?


¹ A classificação é para "nublado" ou "sem nuvens" (2 destinos complementares), a regressão é para quantificar "quanta nuvem" (1 destino).

gerrit
fonte

Respostas:

2

A principal diferença está no critério de treinamento. Um critério de treinamento de mínimos quadrados é freqüentemente usado para regressão, pois isso fornece (penalizado) a estimativa da máxima probabilidade dos parâmetros do modelo, assumindo que o ruído gaussiano corrompe a variável resposta (alvo). Para problemas de classificação, é comum o uso de um critério de treinamento de entropia cruzada, para fornecer uma estimativa de probabilidade máxima, assumindo uma perda de Bernoilli ou multinomial. De qualquer forma, as saídas do modelo podem ser interpretadas como estimativa da probabilidade de associação à classe, mas é comum usar funções de ativação logística ou de softmax na camada de saída para que as saídas sejam restritas a ficar entre 0 e 1 e somar 1. Se você usar a função tanh, poderá remapear essas probabilidades adicionando uma e dividindo por duas (mas, caso contrário, é a mesma).

A diferença entre gradientes conjugados em escala e Levenberg-Marquardt provavelmente será bastante pequena em termos de desempenho de generalização.

Eu recomendaria fortemente a caixa de ferramentas NETLAB para o MATLAB sobre a própria caixa de ferramentas de rede neural do MATLAB. Provavelmente, é uma boa ideia investigar a regularização bayesiana para evitar ajustes excessivos ( vale a pena ler o livro de Chris Bishop e a maior parte dele é abordada na caixa de ferramentas do NETLAB).

Dikran Marsupial
fonte
Interessante - por que você recomenda fortemente o NETLAB sobre a própria caixa de ferramentas NN do MATLAB? Fiquei bastante satisfeito com o último, mas pretendo me afastar para me libertar das licenças comerciais. O Netlab claramente ainda é o Matlab, então resolve apenas metade do problema no que diz respeito à independência; Eu preferencialmente usaria algo que eu possa usar com Python.
gerrit
Suspeito que o NETLAB também trabalhe com oitava, o que resolve o problema de licença comercial. Prefiro o NETLAB, pois ele tem as ferramentas básicas para classificação e regressão configuradas de maneira bastante direta e incentiva o uso de redes regularizadas, o que é muito importante para evitar ajustes excessivos. Também complementa muito bem o livro de Chris Bishop, e esse é o livro que eu recomendaria para quem quisesse usar as redes neurais com raiva. Os processos gaussianos são uma opção mais moderna, porém, a caixa de ferramentas e o livro GPML também são altamente recomendados ( gaussianprocess.org/gpml ).
Dikran Marsupial
OK eu vejo. Sempre funcionou muito bem para mim, não tive problemas excessivos com paradas precoces. Eu vejo o ponto com o Octave, mas se eu precisar fazer uma transição, prefiro mudar para o Python imediatamente (aplaudo o Octave e gostaria de poder executar meu código Matlab nele, que depende muito das classes pós-R2008a ; mas eu não amo o Matlab como uma linguagem suficiente para escolher um clone do FOSS Matlab em vez do Octave. De qualquer forma, essa discussão está ficando fora de tópico).
gerrit
Como pretendia aprender python por um bom tempo, ele é bastante utilizado na comunidade de aprendizado de máquina, portanto, espero que haja algumas boas bibliotecas disponíveis.
Dikran Marsupial