O problema do gradiente de fuga pode ser resolvido multiplicando a entrada de tanh por um coeficiente?


7

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 tanh(nx) então o gradiente máximo possível é n. Assim, sen>1nã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?


Bem, se você usar mini-lotes - como é comum agora - no treinamento do DNN, a probabilidade / estatística / aleatoriedade entrará definitivamente. Uma fonte fácil de entender é o livro de Nielsen, Neural Networks and Deep Learning. Que tal você executar várias experiências para verificar isso sozinho e relatar o que encontrou aqui depois?
Tuyen

meta questão aqui - acredito que já resolvi esta questão (veja minha resposta abaixo), mas ainda há uma recompensa - se fosse uma opção, ficarei feliz em entregá-la às pessoas que responderam anteriormente, mas Eu me pergunto se há uma convenção aqui - se alguém quiser arrumar e aprimorar minha resposta, eles também são bem-vindos!
Zephyr

11
Existem alguns recursos que sugerem o uso de 1.7159tanh(23x). . . Sempre presumi que fosse uma ideia semelhante à normalização em lote - sobre criar uma distribuição mais próxima da ideal de recursos em camadas ocultas, incluindo o efeito nos gradientes.
Neil Slater

@ NeilSlater - alguma referência que você sugeriria olhar?
21819 Zephyr

Não realmente, mas procurar "1,7159 tanh" e você vai ver que é uma variante comumente usado
Neil Slater

Respostas:


9

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 tenhamos K derivados (de profundidade K) multiplicado da seguinte forma

g=f(x)x|x=x1f(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, .hx=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, Kg

f(x)=tanh(x)
x=0
f(x)x=tanh(x)x=1tanh2(x)<1 for x0
f(x)=tanh(nx)n>1
f(x)x=tanh(nx)x=n(1tanh2(nx))<n for x0.

Quando as forças são equilibradas?

Agora, aqui está o núcleo da minha análise:

Até que ponto precisa se afastar de para ter uma derivada menor que para cancelar que é a derivada máxima possível?x01nn

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.x01n x xx

g=n×n×1n×n×1n×1n=1.
xig

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=1gK

g=0.99×0.9×0.1×0.9950.

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<1nn(1tanh2(nx))<1n11n2<tanh2(nx)11n2<|tanh(nx)|x>t1(n):=1ntanh1(11n2)or x<t2(n):=t1(n)=1ntanh1(11n2)
|x|>t1(n)1nx1R|x2|>t1(n)n>1é equivalente a uma derivada arbitrária para , ou seja, Em outras palavras,n=1
(tanh(nx)x|x=x1R×tanh(nx)x|x=x2,|x2|>t1(n))tanh(x)x|x=z,zR{0}.

K mencionados pares de derivadas para é tão problemático quanto derivadas para .n>1Kn=1

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/nn=2[0.658,0.658]|x|>0.6581/2n

Com base nessa análise, agora podemos chegar a uma conclusão:

Para evitar que desapareça, cerca de metade ou mais dos precisam estar dentro de um intervalo comogxi[0.658,0.658]

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=x1R×f(x)x|x=x2[0.658,0.658])>1
x[0.658,0.658]xgx

Para , muitos 's próximos de zero podem levar a um grande gradiente (potencialmente até ) que move (explode) os pesos para valores maiores ( ), que move os para valores maiores ( ) convertendo os bons em (muito) ruins.n>1xg1nKwt+1=wt+λgxxt+1=wt+1tht+1x

Quão grande é muito grande?

Aqui, eu faço uma análise semelhante para ver

Até que ponto precisa se afastar de para ter uma derivada menor que para cancelar os outros assumindo que eles estão muito próximos de zero e adquiriram o gradiente máximo possível?x01nK1K1 x

Para responder a essa pergunta, derivamos a desigualdade abaixo

tanh(nx)x<1nK1|x|>1ntanh1(11nK)

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=50n=2[9.0,9.0]<1/249xx

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[g0][g0]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).[g0][g0]

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

  1. Um modelo probabilístico que informa com que frequência o desaparecimento ocorre com base em uma distribuição de gradiente ou em uma distribuição conjunta ( , ) ou ( , ) ougxgwg
  2. Um modelo determinístico (mapa) que informa quais pontos iniciais (valores iniciais de pesos) levam ao desaparecimento do gradiente; possivelmente acompanhada de trajetórias dos valores iniciais aos finais.

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)xnK

tanh(nx)x>1|x|<1ntanh1(11n)
n=2xi[0.441,0.441]gO(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.RKK tanh(nx)tanh(x)


esta é uma resposta adorável - gostei de ler! - Disse que fiquei com uma pergunta remanescente: como uma rede neural é treinada e os pesos e os vieses variam, é justo ainda ver isso como uma amostra aleatória de gradientes? - se limitarmos o estado inicial a um onde o produto dos gradientes esteja próximo da unidade, é claro que a rede se afastará naturalmente de uma configuração tão harmoniosa?
Zephyr

11
@Zephyr Thanks! Eu acho que você está apontando para uma análise probabilística ou dinâmica do gradiente. Não tenho uma resposta bem articulada para essas perguntas, mas acrescentei algumas orientações a esse respeito.
Esmailian 11/05/19

isso é certo - Eu acho que este é um belo mapeamento de uma etapa para a resposta - ele paga para a frente :)
Zephyr

3

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

insira a descrição da imagem aqui

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.

insira a descrição da imagem aqui

Como mencionei, nos dois casos em que você emprega coeficiente, a derivada seria menor que um e não é valiosa para redes profundas.


11
os links não funcionam
oW_

Eu entendo seu argumento - e acho que faz sentido - mas não está claro para mim que é o mesmo problema. Com a função tanh (x), o produto de muitos gradientes sempre diminui, enquanto com (por exemplo) tanh (2x) o produto dos gradientes certamente pode desaparecer, mas eles também podem assumir qualquer valor (até 2 ^ n onde n é o número de camadas ocultas)
Zephyr

O ponto é que, para ele desaparece em mas para , desaparece em . Você está limitando a função. Após alguns passos, seus neurônios seriam influenciados por cada uma das diretivas. tanh(n)1tanh(2n)1/2
Media

isso parece um argumento incompleto - com um gradiente <1 sempre com um valor próximo de zero no produto garante que o total seja próximo de zero - quando o gradiente pode ser maior que 1, um valor próximo de zero pode ser compensado com vários valores> 1 - e o argumento sobre o caso tanh (x) é baseado em um limite superior rígido, mas para um caso tanh (2x) recuamos nas médias, uma afirmação lógica muito menos forte - não estou dizendo que a conclusão acima esteja incorreta, apenas que requer uma justificativa mais profunda - você conhece alguma pesquisa ou exemplos relevantes?
Zephyr

Não entendi o que você quer transmitir.
Meios

1

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.


0

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.


Se o DNN realmente calcular o mínimo global da função de custo, então Sim, provavelmente você está correto. No entanto, na prática, você usa a descida em gradiente e, se usa a maneira padrão, fixa uma taxa de aprendizado. Então sua reivindicação precisa de explicação. (Exceto se você também taxa rescale aprendizagem e o ponto inicial do processo de gradiente descendente.)
Tuyen

Mais detalhes sobre o que eu quis dizer: Se f (\ alpha) é a função de custo fornecida pelo DNN quando sua função de ativação é tanh (x), então f (n \ alpha) é a função de custo correspondente para a função de ativação tanh (nx ) Aqui \ alpha é o conjunto de parâmetros do DNN. Agora, se você executar o método de descida de gradiente (padrão), com taxa de aprendizado \ delta e ponto inicial \ alpha _0, as duas primeiras etapas serão as seguintes: \ alpha _1 = \ alpha _0 - \ delta n \ nabla f (n \ alpha _0) e \ alpha _2 = \ alpha _1- \ delta n \ nabla f (n \ alpha _1). Assim, é claro que o comportamento da nova função de custo ...
Tuyen

... não é o mesmo da função de custo antiga. Exceto se você observar apenas os mínimos globais, é verdade que sua reivindicação está correta. Caso contrário, não vejo como sua reivindicação é justificada e são necessárias mais explicações. Mesmo se você redimensionar a taxa de aprendizado por n, as coisas ainda serão muito diferentes.
Tuyen

esse é um argumento interessante e estou analisando - desmarcará isso como resposta no momento - pergunta rápida - como isso não é o mesmo que apenas redimensionar a taxa de aprendizado \ delta?
Zephyr

11
Eu estava realmente enganando meus derivados - graças a Tuyen por sua paciência!
Zephyr
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.