Estou tentando entender como o rnn pode ser usado para prever sequências, trabalhando com um exemplo simples. Aqui está minha rede simples, consistindo em uma entrada, um neurônio oculto e uma saída:
O neurônio oculto é a função sigmóide e a saída é considerada uma saída linear simples. Então, eu acho que as obras de rede da seguinte forma: se o começa unidade escondida no estado s
, e estamos processando um ponto de dados que é uma sequência de comprimento , , então:( x 1 , x 2 , x 3 )
No momento 1
, o valor previsto, , é
No momento 2
, temos
No momento 3
, temos
Por enquanto, tudo bem?
O rnn "desenrolado" é assim:
Se usarmos a soma do termo do erro quadrado para a função objetivo, como ela será definida? Em toda a sequência? Nesse caso, teríamos algo como ?
Os pesos são atualizados somente depois que toda a sequência foi analisada (neste caso, a sequência de 3 pontos)?
Quanto ao gradiente em relação aos pesos, precisamos calcular , tentarei fazer isso simplesmente examinando as 3 equações para acima, se tudo estiver correto. Além de fazer dessa maneira, isso não me parece propagação traseira de baunilha, porque os mesmos parâmetros aparecem em diferentes camadas da rede. Como nos ajustamos para isso?
Se alguém puder me ajudar nesse exemplo de brinquedo, eu ficaria muito agradecido.
Respostas:
Eu acho que você precisa de valores-alvo. Portanto, para a sequência , você precisa de destinos correspondentes . Como você deseja prever o próximo termo da sequência de entrada original, você precisará:(x1,x2,x3) (t1,t2,t3)
Você precisaria definir , portanto, se você tivesse uma sequência de entrada de comprimento para treinar o RNN, seria capaz de usar apenas os primeiros termos como valores de entrada e os últimos termos como destino valores.x4 N N−1 N−1
Tanto quanto sei, você está certo - o erro é a soma de toda a sequência. Isso ocorre porque os pesos , e são os mesmos na RNN desdobrada.u v w
Então,
Sim, se usando a propagação de volta ao longo do tempo, acredito que sim.
Quanto aos diferenciais, você não desejará expandir toda a expressão para e diferenciá-la quando se trata de RNNs maiores. Portanto, algumas notações podem torná-lo mais limpo:E
Então, os derivados são:
Onde para uma sequência de comprimento e:t∈[1, T] T
Esta relação recorrente vem percebendo que o escondido atividade não só os efeitos do erro no saída, , mas também efeitos no resto do erro mais abaixo na RNN, :tth tth Et E−Et
Esse método é chamado de propagação de retorno ao longo do tempo (BPTT) e é semelhante à propagação de retorno no sentido em que utiliza a aplicação repetida da regra da cadeia.
Um exemplo trabalhado mais detalhado, porém complicado, para uma RNN pode ser encontrado no capítulo 3.2 do 'Rotulagem de sequência supervisionada com redes neurais recorrentes' de Alex Graves - leitura realmente interessante!
fonte
Erro que você descreveu acima (após a modificação que escrevi no comentário abaixo da pergunta), você pode usar apenas como um erro de previsão total, mas não pode usá-lo no processo de aprendizagem. Em cada iteração, você coloca um valor de entrada na rede e obtém uma saída. Ao obter a saída, você deve verificar o resultado da sua rede e propagar o erro para todos os pesos. Após a atualização, você colocará o próximo valor em sequência e fará uma previsão para esse valor, além de propagar o erro e assim por diante.
fonte