Para meu entendimento, o problema do gradiente de fuga ocorre ao treinar redes neurais quando o gradiente de cada função de ativação é menor que 1, de modo que, quando as correções são propagadas de novo por várias camadas, o produto desses gradientes se torna muito pequeno.
Sei que existem outras soluções, como uma função de ativação de retificador , mas minha pergunta é por que não poderíamos simplesmente usar uma variação da função tanh frequentemente usada .
Se a função de ativação tiver a forma então o gradiente máximo possível é . Assim, senão temos mais um caso em que o produto dos gradientes necessariamente vá para 0.
Existe alguma razão para que uma função de ativação desse tipo falhe?
Respostas:
Você está certo. Paran>1 , a multiplicação de derivadas não necessariamente chega a zero, porque cada derivada pode ser potencialmente maior que uma (atén )
No entanto, para fins práticos, devemos nos perguntar como é fácil manter essa situação (mantendo a multiplicação de derivadas longe de zero)? O que acaba sendo bastante difícil comparado ao ReLU, que fornece derivada = 1, especialmente agora, quando também há uma chance de explosão do gradiente .
Introdução
Suponha que tenhamosK derivados (de profundidade K ) multiplicado da seguinte forma
g=∂f(x)∂x∣∣∣x=x1⋯∂f(x)∂x∣∣∣x=xK
cada um avaliado em valores diferentes x1 para xK . Em uma rede neural, cadaxi é uma soma ponderada das saídas da camada anterior, por exemplo, .h x=wth
À medida que aumenta, queremos saber o que é necessário para evitar o desaparecimento de . Por exemplo, para o caso de , não podemos impedir isso porque cada derivada é menor que uma, exceto , ou seja, No entanto, há uma nova esperança com base em sua proposta. Para , a derivada pode ir até , ou seja,K g f(x)=tanh(x) x=0 ∂f(x)∂x=∂tanh(x)∂x=1−tanh2(x)<1 for x≠0 f(x)=tanh(nx) n>1 ∂f(x)∂x=∂tanh(nx)∂x=n(1−tanh2(nx))<n for x≠0.
Quando as forças são equilibradas?
Agora, aqui está o núcleo da minha análise:
Quanto mais precisa se afastar de , mais difícil é produzir uma derivada abaixo de ; portanto, mais fácil é impedir que a multiplicação desapareça. Essa pergunta tenta analisar a tensão entre os bons próximos de zero e os ruins distantes de zero. Por exemplo, quando bons e maus são equilibrados, eles criariam uma situação como Por enquanto, tento ser otimista ao não considerar arbitrariamente grandes , pois mesmo um deles pode aproximar arbitrariamente de zero.x 0 1n x x x g=n×n×1n×n×1n×1n=1. xi g
Para o caso especial de , qualquer resulta em uma derivada ; portanto, é quase impossível manter o equilíbrio (impedir que desapareça) à medida que a profundidade aumenta, por exemplo,n=1 |x|>0 <1/1=1 g K g=0.99×0.9×0.1×0.995⋯→0.
Para o caso geral de , procedemos da seguinte forma Então, para , a derivada será menor que . Portanto, em termos de ser menor que um, multiplicação de duas derivadas em en>1 ∂tanh(nx)∂x<1n⇒n(1−tanh2(nx))<1n⇒1−1n2<tanh2(nx)⇒1−1n2−−−−−−√<|tanh(nx)|⇒x>t1(n):=1ntanh−1(1−1n2−−−−−−√)or x<t2(n):=−t1(n)=1ntanh−1(−1−1n2−−−−−−√) |x|>t1(n) 1n x1∈R |x2|>t1(n) n>1 é equivalente a uma derivada arbitrária para , ou seja,
Em outras palavras,n=1 (∂tanh(nx)∂x∣∣∣x=x1∈R×∂tanh(nx)∂x∣∣∣x=x2,|x2|>t1(n))≡∂tanh(x)∂x∣∣∣x=z,z∈R∖{0}.
Agora, para ver como é fácil (ou difícil) ter , vamos plotar e (os limites são plotados para um contínuo ).|x|>t1(n) t1(n) t2(n) n
Como você pode ver, para ter uma derivada , o maior intervalo é alcançado em , que ainda é estreito! Esse intervalo é , ou seja, , o derivado será menor que . Nota: um intervalo um pouco maior é possível se puder ser contínuo.≥1/n n=2 [−0.658,0.658] |x|>0.658 1/2 n
Com base nessa análise, agora podemos chegar a uma conclusão:
portanto, quando suas derivadas são emparelhadas com a outra metade, a multiplicação de cada par ficaria acima de um na melhor das hipóteses (exigido que nenhum esteja muito alto em valores grandes), ou seja, no entanto, na prática, é provável ter mais da metade dos 'fora s de ou um par de ' s com valores grandes, causando para desaparecer para zero. Além disso, há um problema com muitos próximos a zero, o que éx (∂f(x)∂x∣∣∣x=x1∈R×∂f(x)∂x∣∣∣x=x2∈[−0.658,0.658])>1 x [−0.658,0.658] x g x
Quão grande é muito grande?
Aqui, eu faço uma análise semelhante para ver
Para responder a essa pergunta, derivamos a desigualdade abaixo
que mostra, por exemplo, para a profundidade de e , um valor fora produz um derivado de . Esse resultado fornece uma intuição sobre como é fácil para um par de em torno de 5 a 10 cancelar a maioria dos bons .K=50 n=2 [−9.0,9.0] <1/249 x x
Analogia de rua de sentido único
Com base nas análises anteriores, eu poderia fornecer uma analogia qualitativa usando uma Cadeia de Markov de dois estados e que modelam grosseiramente o comportamento dinâmico do gradiente seguinte maneira[g≫0] [g∼0] g
Quando o sistema passa para o estado , não há muito gradiente para trazer (alterar) os valores de volta ao estado . Isso é semelhante a uma via de mão única que será aprovada eventualmente se dermos tempo suficiente (épocas grandes o suficiente), pois a convergência do treinamento não ocorre (caso contrário, encontramos uma solução antes de experimentar um gradiente de fuga).[g∼0] [g≫0]
Uma análise mais avançada do comportamento dinâmico do gradiente seria possível realizando uma simulação em redes neurais reais (que potencialmente depende de muitos parâmetros, como função de perda, largura e profundidade da rede e distribuição de dados), além de apresentar
Problema de gradiente explosivo
aspecto "gradiente de fuga" do . Pelo contrário, no aspecto " gradiente explosivo ", deveríamos nos preocupar em ter muitos próximos a zero, o que poderia produzir um gradiente em torno de , causando instabilidade numérica. Para este caso, uma análise semelhante baseada na desigualdade mostra que para , cerca de metade ou mais dos deve estar fora detanh(nx) x nK ∂tanh(nx)∂x>1⇒|x|<1ntanh−1(1−1n−−−−−√) n=2 xi [−0.441,0.441] g O(1) O(nK) . Isso deixa uma região ainda menor em na qual as funções funcionariam bem juntas (nem desapareciam nem explodiam); lembrando que não tem o problema de gradiente explosivo.RK K tanh(nx) tanh(x)
fonte
Traçei o que você está se referindo na figura a seguir. Como você pode ver, empregando um coeficiente como entrada da função tanh , você está limitando o intervalo de alterações da função em relação ao eixo . Isso tem um efeito negativo. O motivo é que, embora você esteja tornando a inclinação mais nítida para uma região muito pequena no domínio, você está tornando a diferenciação dos outros pontos no domínio mais próxima de zero. O problema de fuga ocorre devido ao fato de que as saídas dos neurônios vão longe do zero e serão enviesadas para cada uma das duas direções. Depois disso, o valor da diferenciação é muito pequeno e, devido a começar menor que um e maior que zero, fica ainda menor depois de multiplicado pelas outras diferenciações que são iguais a ele.x
Outra boa pergunta pode ser essa: você tem um valor de coeficiente menor que um. Eu ilustrei isso na figura a seguir. Nesta figura, você está alterando a função de maneira a ter uma diferenciação maior do que antes em mais pontos do domínio, mas novamente é menor que um. Isso não é valioso para redes profundas.
Como mencionei, nos dois casos em que você emprega coeficiente, a derivada seria menor que um e não é valiosa para redes profundas.
fonte
A derivada de tanh (x) é sech (x) ^ 2, onde sech (x) = 2e ^ x / (1 + e ^ (2x)). Portanto, quando você vê o gradiente diminuir para 0, isso significa que x converge para +/- infinito. Se você considerar tanh (nx), a derivada é n sech (nx) ^ 2 e sech (nx) ^ 2 converge para 0 mais rápido que n convergindo para o infinito, quando x converge para +/- infinito. Portanto, heuristicamente, multiplicar o argumento por n maior tornará as coisas piores.
fonte
Obrigado a todos por suas ótimas respostas - eles realmente ajudaram a pensar sobre esse problema - e eu recomendo que todos os interessados no problema dêem uma olhada - mas há uma rota muito mais simples para uma resposta:
Quando substituímos por como uma função de ativação, nada mudou no desempenho da função de ativação.tanh(x) tanh(nx)
Tudo o que fizemos é redimensionar todos os pesos e preconceitos da rede - os quais somos livres para fazer arbitrariamente. Isso não afetará o desempenho da rede, mas certamente a inicialização. Anteriormente, eu havia declarado que isso também não afetaria o treinamento - mas agora não tenho certeza se posso afirmar isso com total confiança.
fonte