Topologia de rede neural recorrente (RNN): por que sempre totalmente conectada?

8

Comecei a ler sobre Redes Neurais Recorrentes (RNNs) e Memória de Longo Prazo (LSTM) ... (... oh, não há pontos de representantes suficientes aqui para listar referências ...)

Uma coisa que eu não entendo: sempre parece que os neurônios em cada instância de uma camada oculta ficam "totalmente conectados" com todos os neurônios na instância anterior da camada oculta, em vez de apenas estarem conectados à instância de seu antigo eu / eus (e talvez alguns outros).

A conexão total é realmente necessária? Parece que você poderia economizar muito tempo de armazenamento e execução e 'olhar para trás' mais tempo, se não for necessário.

Aqui está um diagrama da minha pergunta ...

imagem rnn: totalmente conectada vs parcialmente conectada

Eu acho que isso equivale a perguntar se não há problema em manter apenas os elementos diagonais (ou quase diagonais) na matriz "W ^ hh" de 'sinapses' entre a camada oculta recorrente. Tentei executar isso usando um código RNN funcional (baseado na demonstração de adição binária de Andrew Trask ) - ou seja, defina todos os termos não-diagonais para zero - e ele teve um desempenho terrível, mas mantendo os termos próximos à diagonal, ou seja, um linear linear em faixas sistema 3 elementos de largura - parecia funcionar tão bem quanto a versão totalmente conectada. Mesmo quando eu aumentava o tamanho das entradas e da camada oculta ... Então ... eu tive sorte?

Encontrei um artigo de Lai Wan Chan onde ele demonstra que, para funções de ativação linear , é sempre possível reduzir uma rede para a "forma canônica da Jordânia" (ou seja, os elementos diagonais e próximos). Mas nenhuma dessas provas parece disponível para sigmóides e outras ativações não lineares.

Também notei que as referências a RNNs "parcialmente conectadas" parecem desaparecer depois de 2003, e os tratamentos que li nos últimos anos parecem assumir total conexão. Então ... por que isso?

sh37211
fonte
1
Passe-me as referências e eu as postarei para você, se quiser.
Antoni Parellada
Você pode comentar em seu próprio post, e acho que colocar (pelo menos) um link por comentário.
Mark L. Stone
@AntoniParellada Thanks! Não pode descobrir como diretamente a mensagem, mas como por @ Mark L. Stone eu vou começar a comentar ...
sh37211
Publicação de Karpathy em RNNs: karpathy.github.io/2015/05/21/rnn-effectiveness
sh37211
Post / tutorial de Andrew Trask: iamtrask.github.io/2015/11/15/anyone-can-code-lstm
sh37211

Respostas:

2

Um motivo pode ser devido à conveniência matemática. A rede neural recorrente de baunilha ( tipo Elman ) pode ser formulada como:

ht=f(xt,ht-1)f()σ(Wxt+vocêht-1)

você

Wvocê

fishiwhj
fonte
0

Você pode usar 2 neurônios de entrada se os organizar de maneira semelhante à transformação rápida de Walsh Hadamard. Portanto, um algoritmo fora do lugar seria percorrer o vetor de entrada sequencialmente 2 elementos por vez. Faça com que 2 neurônios de 2 entradas atuem em cada par de elementos. Coloque a saída do primeiro neurônio sequencialmente na metade inferior de uma nova matriz de vetores, a saída do segundo neurônio sequencialmente na metade superior da nova matriz de vetores. Repita usando a nova matriz de vetores como entrada. Após o log_base_2 (n) repetir, uma alteração em um único elemento de entrada pode potencialmente alterar todas as saídas. Qual é o melhor que você pode fazer? n deve ser uma potência inteira positiva de 2.

Sean O'Connor
fonte