Esqueça a camada em uma rede neural recorrente (RNN) -


13

Estou tentando descobrir as dimensões de cada variável em uma RNN na camada de esquecimento, no entanto, não tenho certeza se estou no caminho certo. A próxima figura e equação é da postagem de Colah no blog "Entendendo as redes LSTM" :

insira a descrição da imagem aqui

Onde:

  • xt é de entrada de tamanhom1 vetor
  • ht-1 está oculto estado de tamanhon1 vetor
  • é uma concatenação (por exemplo, se x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] e , em seguida, [ x t , h t - 1 ] = [ 1 , 2 , 3 , 4 , 5 , 6 ] )[xt,ht-1]xt=[1,2,3],ht-1=[4,5,6][xt,ht-1]=[1,2,3,4,5,6]
  • é o peso damatrizde tamanho k ( m + n ) , onde kWfk(m+n)k é o número de estados celulares (se , e n = 3 no exemplo acima, e se tivermos 3 estados celulares, então w f = Matriz 3 3 )m=3n=3Wf=33
  • é o viés do tamanho k bf vector, onde k é o número de estados de células (uma vez que k = 3 como no exemplo acima, então b f é um 3 * um vector).k1kk=3bf31

Se definirmos como: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]Wf

[1234565678910345678]

E ser: [ 1 , 2 , 3 ]bf[1,2,3]

Então Wf.[ht-1,xt]=

[1234565678910345678].[123456]=[91175133]

Então podemos adicionar o viés, Wf.[ht-1,xt]+bf=

[91175133]+[123]=[92177136]

Em seguida, os alimentamos em uma função sigmóide: , ondex=[ 92 177 136 ], portanto, executamos esse elemento de função de maneira sábia e obtemos[ 1 1 1 ].11+e-xx=[92177136]

[111]

O que significa que para cada estado da célula, , (existem k = 3 estados da célula), permitimos que ele passe para a próxima camada.Ct-1k=3

A suposição acima está correta?

Isso também significa que o número de estado da célula e estado oculto é o mesmo?

Respostas:


14

Ótima pergunta!

tl; dr: O estado da célula e o estado oculto são duas coisas diferentes, mas o estado oculto depende do estado da célula e eles realmente têm o mesmo tamanho.

Explicação mais longa

A diferença entre os dois pode ser vista no diagrama abaixo (parte do mesmo blog):

O estado da célula é a linha em negrito que viaja de oeste para leste através do topo.

O estado da célula é a linha em negrito que viaja de oeste para leste através do topo. Todo o bloco verde é chamado de 'célula'.

O estado oculto da etapa anterior é tratado como parte da entrada na etapa atual.

No entanto, é um pouco mais difícil ver a dependência entre os dois sem fazer uma explicação completa. Farei isso aqui, para fornecer outra perspectiva, mas fortemente influenciada pelo blog. Minha anotação será a mesma e usarei imagens do blog na minha explicação.

Eu gosto de pensar na ordem das operações um pouco diferente da maneira como elas foram apresentadas no blog. Pessoalmente, como começar pelo portão de entrada. Apresentarei esse ponto de vista abaixo, mas lembre-se de que o blog pode muito bem ser a melhor maneira de configurar um LSTM computacionalmente e essa explicação é puramente conceitual.

Aqui está o que está acontecendo:

O portão de entrada

insira a descrição da imagem aqui

txtht-1

xt=[1,2,3]ht=[4,5,6] , a porta de entrada fará o seguinte:

xtht-1[1,2,3,4,5,6]

WEuWEu[xt,ht-1]+bEuWEubEu

Vamos supor que estamos passando de uma entrada tridimensional (o comprimento do vetor de entrada concatenada) para uma decisão tridimensional sobre o que estados atualizar. Isso significa que precisamos de uma matriz de peso 3x6 e um vetor de viés 3x1. Vamos dar alguns desses valores:

WEu=[111111222222333333]

bEu=[111]

O cálculo seria:

[111111222222333333][123456]+[111]=[2242.62]

c) Alimente esse cálculo anterior com uma não linearidade: Eut=σ(WEu[xt,ht-1]+bEu)

σ(x)=11+exp(-x) (aplicamos este elemento aos valores no vetor x)

σ([2242.62])=[11+exp(-22),11+exp(-42.),11+exp(-62)]=[1,1,1]

Em inglês, isso significa que vamos atualizar todos os nossos estados.

O portão de entrada tem uma segunda parte:

d) Ct~=tumanh(WC[xt,ht-1]+bC)

O objetivo desta parte é calcular como atualizaríamos o estado, se o fizéssemos. É a contribuição da nova entrada neste momento para o estado da célula. O cálculo segue o mesmo procedimento ilustrado acima, mas com uma unidade tanh em vez de uma unidade sigmóide.

A saída Ct~ é multiplicado por esse vetor binário Eut, mas abordaremos isso quando chegarmos à atualização da célula.

Juntos, Eut nos diz quais estados queremos atualizar e Ct~nos diz como queremos atualizá-los. Ele nos diz que novas informações queremos adicionar à nossa representação até agora.

Então vem o portão de esquecer, que foi o cerne da sua pergunta.

O portão de esquecer

insira a descrição da imagem aqui

O objetivo do portal de esquecer é remover as informações aprendidas anteriormente que não são mais relevantes. O exemplo dado no blog é baseado em linguagem, mas também podemos pensar em uma janela deslizante. Se você estiver modelando uma série temporal que é naturalmente representada por números inteiros, como contagens de indivíduos infecciosos em uma área durante um surto de doença, talvez uma vez que a doença tenha desaparecido em uma área, não será mais necessário considerar a área quando pensando em como a doença viajará a seguir.

Assim como a camada de entrada, a camada de esquecer pega o estado oculto da etapa de tempo anterior e a nova entrada da etapa de tempo atual e as concatena. O objetivo é decidir estocisticamente o que esquecer e o que lembrar. No cálculo anterior, eu mostrei uma saída da camada sigmóide de todos os 1s, mas, na realidade, estava mais perto de 0,999 e eu arredondei.

A computação se parece muito com o que fizemos na camada de entrada:

ft=σ(Wf[xt,ht-1]+bf)

Isso nos dará um vetor de tamanho 3 com valores entre 0 e 1. Vamos fingir que ele nos deu:

[0,5,0,8,0,9]

Então, decidimos estocástica com base nesses valores qual dessas três partes da informação esquecer. Uma maneira de fazer isso é gerar um número a partir de uma distribuição uniforme (0, 1) e se esse número for menor que a probabilidade da unidade 'ligar' (0,5, 0,8 e 0,9 para as unidades 1, 2 e 3 respectivamente), então ligamos essa unidade. Nesse caso, isso significa que esquecemos essa informação.

Nota rápida: a camada de entrada e a camada de esquecimento são independentes. Se eu fosse uma pessoa de apostas, aposto que é um bom lugar para a paralelização.

Atualizando o estado da célula

insira a descrição da imagem aqui

Agora, temos tudo o que precisamos para atualizar o estado da célula. Tomamos uma combinação das informações da entrada e dos portões de esquecimento:

Ct=ftCt-1+EutCt~

Agora, isso vai ser um pouco estranho. Em vez de multiplicar como fizemos antes, aqui indica o produto Hadamard, que é um produto básico.

Aparte: produto Hadamard

Por exemplo, se tivéssemos dois vetores x1=[1,2,3] e x2=[3,2,1] e queríamos usar o produto Hadamard, faríamos o seguinte:

x1x2=[(13),(22),(31)]=[3,4,3]

Fim à parte.

Dessa maneira, combinamos o que queremos adicionar ao estado da célula (entrada) com o que queremos remover do estado da célula (esqueça). O resultado é o novo estado da célula.

O portão de saída

insira a descrição da imagem aqui

Isso nos dará o novo estado oculto. Essencialmente, o objetivo da porta de saída é decidir quais informações queremos que a próxima parte do modelo leve em consideração ao atualizar o estado subsequente da célula. O exemplo no blog é novamente, idioma: se o substantivo for plural, a conjugação de verbos na próxima etapa será alterada. Em um modelo de doença, se a suscetibilidade de indivíduos em uma área específica for diferente da de outra área, a probabilidade de adquirir uma infecção pode mudar.

A camada de saída recebe a mesma entrada novamente, mas considera o estado atualizado da célula:

ot=σ(Wo[xt,ht-1]+bo)

Novamente, isso nos dá um vetor de probabilidades. Então calculamos:

ht=ottumanh(Ct)

Portanto, o estado atual da célula e a porta de saída devem concordar com o que produzir.

Ou seja, se o resultado de tumanh(Ct) é [0 0,1,1] após a tomada da decisão estocástica sobre se cada unidade está ligada ou desligada, e o resultado de ot é [0 0,0 0,1], quando pegarmos o produto Hadamard, obteremos [0 0,0 0,1], e apenas as unidades ativadas pela porta de saída e no estado da célula farão parte da saída final.

[EDIT: Há um comentário no blog que diz o ht é transformado novamente em uma saída real por yt=σ(Wht), o que significa que a saída real da tela (supondo que você tenha alguma) é o resultado de outra transformação não linear.]

O diagrama mostra que htvai para dois lugares: a próxima célula e a 'saída' - para a tela. Eu acho que a segunda parte é opcional.

Existem muitas variantes nos LSTMs, mas isso abrange o essencial!


Obrigado pela sua resposta! Eu tenho uma pergunta extra: você não se importa. Uma rede neural profunda pode ser profunda porque a derivada de ReLU é 1 (se a saída for maior que 0). Este é o mesmo caso para esta célula também? Não sei como Tanh e Sigmoid podem ter uma derivada constante de 1?
User1157751

O prazer é meu! Uma rede neural é considerada 'profunda' quando possui mais de uma camada oculta. Os derivados das funções de ativação (tanh, sigmoid, ReLU) afetam como a rede é treinada. Como você diz, como ReLU tem uma inclinação constante se sua entrada for maior que 0, sua derivada é 1 se estivermos nessa região da função. As unidades tanh e sigmóide têm uma derivada próxima de 1 se estivermos no meio de sua região de ativação, mas sua derivada não será constante. Talvez eu deveria fazer um post separado sobre os derivados ....
StatsSorceress

Você pode mostrar um exemplo de sua derivada perto de 1 na região de ativação? Eu já vi muitos recursos que falam sobre a derivada, mas nenhuma matemática é feita?
User1157751

Boa ideia, mas levarei algum tempo para escrever um post adequado sobre isso. Enquanto isso, pense na forma da função tanh - é um 'S' alongado. No meio é onde a derivada é a mais alta. Onde o S é plano (as caudas do S), a derivada é 0. Vi uma fonte em que os sigmóides têm uma derivada máxima de 0,25, mas não tenho um limite equivalente para tanh.
StatsSorceress

A parte que eu não entendo é diferente da ReLU com derivada constante 1 em que x> 0, mas sigmóide e tanh tinham valor variável para ambas as derivadas. Como isso pode ser "constante"?
User1157751
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.