Porque é que um neurónio saturado seria um problema?
A questão da saturação neural tem a ver principalmente com o aprendizado dos parâmetros da rede neural durante o treinamento. Desde que a propagação de retorno foi desenvolvida, o tipo mais comum de neurônio artificial no aprendizado de máquinas aplica uma função de ativação não linear e diferenciável a uma combinação linear de inputs, para que um neurônio [matemática]y_j[/math] com neurônios de entrada [matemática]x_i[/math] assuma um valor
[matemática]y_j = g\ esquerda(b_j + \sum_i w_{i,j} x_j\ direita)[/math]
onde [matemática]g[/math] é a função de ativação diferenciável.
até bastante recentemente, as funções de ativação mais comuns eram a função logística e a tangente hiperbólica. Estas funções têm um alcance compacto, o que significa que elas comprimem a resposta neural em um subconjunto limitado dos números reais. A logística tem saídas entre 0 e 1, a tangente hiperbólica entre -1 e 1. Essas funções têm que comprimir um intervalo infinito em um intervalo finito, e por isso elas exibem comportamento limitador nos limites. Para alcançar estes limites, as entradas ou os pesos têm de ter uma magnitude extremamente grande, positiva ou negativa. Dizemos que um neurônio é saturado para estas funções de ativação quando assume valores próximos aos limites desta faixa.
Como o OP aponta, o gradiente da saída em relação à entrada [matemática]\frac{\frac{\parcial y_j}{\parcial x_j}[/math] é pequeno neste caso. Matematicamente, isto é uma consequência da compressão do intervalo, porque à medida que a função de ativação se aproxima um limite deve ter uma inclinação cada vez menor (a inclinação vai a zero no limite).
Se a rede estiver absolutamente correta em todos os inputs e não precisar mudar, então a saturação não seria uma grande coisa; este é o ponto do OP. Mas isso ignora dois pontos-chave. Primeiro, geralmente estamos interessados em mudar o output de uma rede neural por uma razão ou outra (por exemplo, acabamos de inicializar a rede ou recebemos novos dados) e, nesse caso, os neurônios saturados mudam seus valores lentamente. Embora fosse bom que eles mantivessem seus valores quando os neurônios estavam certos, isso se torna um grande problema quando os neurônios estão errados. Isto é especialmente relevante no momento da inicialização. Então queremos que as redes tenham ativações aleatórias próximas de zero, porque esses valores são mais facilmente transformados pelo gradiente em valores que resolvem o problema (que serão necessariamente mais saturados).
Segundamente e, além da inicialização, mais importante, a saturação tende a prejudicar o desempenho da generalização. normalmente distinguimos entre um conjunto de exemplos de treinamento usados em treinamento e um conjunto de exemplos de teste usados em testes. Quando uma rede neural é implantada no mundo real, então o conjunto de testes é toda a informação que nossos futuros usuários acabarão enviando para nós. Quanto mais treinamos em nosso conjunto de treinamento, mais saturados ficarão os neurônios. Isto representa a rede desenvolvendo alta confiança de que está correta. Mas agora isso vai funcionar contra você no conjunto de teste, porque invariavelmente o conjunto de teste conterá exemplos diferentes de qualquer outro encontrado no conjunto de treinamento. Se a rede não estiver tão saturada, então ela se comporta corretamente nestes casos-limite. Mas se a rede estiver saturada, então ela cometerá um erro muito confiante.
Um poderia entrar em mais detalhes aqui; o que acontece é que a rede aprende a confiar muito fortemente em neurônios individuais que estão conectados com grandes pesos. Se algum neurônio interior sempre foi igual a 1 para todos os exemplos de uma certa classe c no conjunto de treinamento, então os neurônios a jusante podem ligar ou desligar baseados inteiramente neste 1, ao qual estariam conectados por um grande peso. Se no conjunto de teste este neurônio muda perto de zero em um exemplo que deveria ter classe c, então todos os neurônios a jusante farão previsões confiantes, mas incorretas, e a rede não irá prever c.
Tipicamente, usa-se a regularização para evitar este tipo de dependência de um neurônio, mas estas técnicas de regularização (dropout, l2, sparsity, etc.)) também tendem a suprimir a saturação.
Finalmente, eu destacaria que embora a aprendizagem profunda moderna tende a usar funções de ativação alternativas como a ReLU que não possuem domínios compactos e tendem a não ter problemas de saturação no mesmo grau. Mas mesmo com estes, grandes pesos e grandes ativações ainda são difíceis de desaprender via treinamento, e assim toda a discussão acima ainda se aplica.
Então, em suma, a saturação é um problema porque corrói a plasticidade das redes neurais e geralmente resulta em pior desempenho nos testes.
Artigos semelhantes
- Com todos os serviços de streaming de vídeo atuais e futuros, em que ponto o mercado ficará saturado e o que acontecerá então?
- Ainda é possível desenvolver um novo aplicativo de sucesso, ou o mercado está saturado demais?
- Hoje recebi o meu Sony Xperia E1 e descobri que há um problema com o ecrã. Ele mostra linhas horizontais. Qual pode ser o problema?
- O que Huawei pode fazer para superar o problema atual e como eles podem resolver o problema com o Departamento de Estado?