Apresentação

As pessoas não começam a sua intuição sem se prepararem. Ao ler este artigo, verá que cada palavra depende da sua compreensão de palavras passadas. Você não descarta tudo e começa a pensar sem preparação mais uma vez. As suas considerações têm diligência.

As redes neurais convencionais não podem fazer isso, e parece ser uma deficiência significativa. Por exemplo, imagine que precisa de organizar que tipo de ocasião está a ocorrer em cada ponto do filme. É nebuloso como um sistema neural convencional poderia utilizar o seu pensamento sobre ocasiões passadas no filme para aconselhar ocasiões posteriores.

As redes neuronais repetitivas abordam esta questão. São sistemas com círculos, que permitem que os dados perdurem.

No esquema acima, um pedaço do sistema neural A, vê alguma informação xt e produz um valor ht. Um círculo permite a passagem de dados a partir de uma fase do sistema e depois para a fase seguinte. Um sistema neural intermitente pode ser considerado como numerosas duplicações de um sistema similar, cada uma passando uma mensagem a um sucessor. Pense no que ocorre no caso de desenrolarmos o círculo:

Esta natureza em cadeia descobre que os sistemas neurais repetitivos são identificados pessoalmente com agrupamentos e registos. Eles são a engenharia regular dos sistemas neurais a utilizar para essas informações. Além disso, eles são certamente utilizados! Ao longo dos últimos anos, houve conquistas impressionantes aplicando os RNNs a um conjunto de questões: reconhecimento do discurso, exibição da linguagem, interpretação, legendagem de imagens… A lista continua.

Apesar de ainda não ser obrigatória, seria útil para o utilizador compreender o que são os Vectores Word. Aqui está o meu blog anterior sobre Word2Vec, um procedimento para fazer Vectores de Word.
O que são Sistemas Neuronais Repetitivos

Uma limitação gritante dos sistemas neurais de baunilha (e, além disso, dos sistemas convolucionais) é que a sua interface de programação é excessivamente obrigatória: reconhecem um vector de dimensão fixa como informação (por exemplo, uma imagem) e produzem um vector de dimensão fixa como rendimento (por exemplo, probabilidades de várias classes). Não apenas isso: estes modelos fazem este mapeamento utilizando uma medida fixa de avanços computacionais (por exemplo, o número de camadas no modelo).

A explicação central de que as redes repetitivas são tanto mais energizantes é que nos permitem trabalhar sobre sucessões de vectores: Arranjos na informação, no rendimento ou, no caso mais amplo, em ambos.

Um par de modelos pode tornar isto cada vez mais concreto:

Cada forma quadrada é um vector e os parafusos falam com capacidades (por exemplo, duplicado de estrutura). Os vectores informativos estão em vermelho, os vectores de rendimento estão em azul e os vectores verdes mantêm o estado do RNN (mais sobre isto em breve). Da esquerda para a direita:

Método baunilha de manipulação sem RNN, de contribuição de tamanho fixo para rendimento de tamanho fixo (por exemplo, agrupamento de imagens).

Rendimento do agrupamento (por exemplo, a legendagem de imagens tira uma fotografia e produz uma frase de palavras).

Agrupamento de entradas (por exemplo, investigação de opinião quando uma determinada frase é delegada comunicando uma suposição positiva ou negativa)

A informação da sucessão e o rendimento do arranjo (por exemplo, Interpretação automática: um RNN percorre uma frase em inglês e, posteriormente, produz uma frase em francês).

Informação de agrupamento e rendimento combinados (por exemplo, disposição do vídeo em que se pretende marcar cada frame do vídeo).

Note que para cada situação não há imperativos pré-indicados sobre a duração das sucessões, tendo em conta que a mudança repetitiva (verde) é fixa e pode ser aplicada o mesmo número de vezes que desejarmos.
Cálculo do RNN

Então, como é que eles conseguem isso?

Eles reconhecem um vector informativo x e dão um vector de rendimento y. No entanto, a substância deste vector de rendimento é afectada urgentemente, não só pela informação que acabou de reforçar, mas também por todo o historial das fontes de dados em que se baseou anteriormente. Composta como uma classe, a interface de Programação do RNN é composta por um trabalho de passo solitário:

rnn = RNN()

y = rnn.step(x) # x é um vector informativo, y é o vector de rendimento do RNN

A classe RNN tem alguma expressão interior que lhe dá a oportunidade de refrescar cada passo que é chamado. No caso menos difícil, este estado compreende um vector solitário envolto h. Eis uma execução do trabalho de progressão num RNN de baunilha: O estado envolto self.h é introduzido com o vector zero. O trabalho np.tanh (digressão hiperbólica) actualiza uma não linearidade que esmaga as iniciações ao intervalo [-1, 1].
classe RNN:

def step(self, x):

actualiza o estado oculto

self.h = np.tanh(np.dot(self.W_hhh, self.h) + np.dot(self.W_xh, x))

calcular o vector de saída

y = np.dot(self.W_hy, self.h)

retorno y
O acima exposto especifica o passe para a frente de um RNN de baunilha. Os parâmetros deste RNN são as três matrizes –
W_hh : Matriz baseada no Estado Escondido Anterior
W_xh : Matriz baseada na Entrada Atual
W_hy : Matriz baseada entre o estado oculto e a produção
Assim, o seu funcionamento

Existem dois termos dentro do tanh: um depende do estado anterior envolto e o outro depende da informação presente. Em numpy np.dot está o aumento da rede. Os dois intermediários colaboram com a expansão, e depois são esmagados pelo tanh para o novo vector de estado.
A notação matemática para a actualização do estado oculto é –

em que o tanh é aplicado por elementos.
Introduzimos as redes do RNN com números irregulares e a maior parte do trabalho durante a preparação vai para encontrar as grelhas que oferecem ascensão à conduta aliciante, como estimado com algum trabalho infeliz que comunica a sua inclinação para o tipo de rendimentos que gostaria de encontrar à luz das suas sucessões de informação x
Vamos encontrar numa peça, os RNNs unem o vector de informação com o seu vector de estado com uma capacidade fixa (ainda aprendida) para fornecer outro vector de estado.
Agora indo fundo –
y1 = rnn1.step(x)
y = rnn2.step(y1)
No final do dia, temos dois RNNs separados: Um RNN está a aceitar os vectores informativos e o segundo RNN está a receber como informação o rendimento do primeiro RNN. Mas nenhum destes RNNs sabe ou se preocupa – é tudo, apenas vectores que entram e saem, e alguns ângulos que percorrem cada módulo durante a retropropagação.

Gostaria de fazer rapidamente referência a uma grande parte de nós que utiliza um plano marginalmente inesperado em comparação com o que eu exibi acima, chamado de organização de memória instantânea longa (LSTM). A LSTM é um tipo específico de sistema intermitente que funciona marginalmente melhor, inferível a partir das suas condições de actualização mais dominantes e de alguns elementos de retropropagação envolventes. Não vou entrar em subtilezas, no entanto tudo o que disse sobre os RNNs permanece precisamente o equivalente, com excepção da estrutura científica para processar a actualização (a linha self.h = … ) fica um pouco mais complicada. A partir daqui vou utilizar as expressões “RNN/LSTM” pelo contrário, no entanto todos os exames neste posto utilizam um LSTM.