Htm e texto

Problemas de atraso


Suponha que existem quatro níveis da hierarquia de cadeias que são sucessivamente reconhecidas - letras em sílabas, sílabas em palavras, palavras em fraseologismo. No reconhecimento de cada nível, um ciclo de uma rede neural deve passar. Se a ANN ler uma letra por ciclo, o reconhecimento dos sinais de nível mais alto será muito tarde. Se a RNA deve fazer previsão e escolha de ações, isso não é de todo adequado.
No ENS, esse problema não é muito pronunciado, pois, muitas vezes (por exemplo, ao reconhecer a fala pelo ouvido), os neurônios trabalham muito mais rápido do que o próximo nível hierárquico aparece.
Para a RNA, o problema pode ser resolvido se a chegada do próximo sinal for adiada artificialmente até que todos os níveis da hierarquia sejam reconhecidos. Eu chamo esse método "com profundidade de reconhecimento adaptável". Temos um ciclo com uma pós-condição - embora pelo menos mais um neurônio tenha sido reconhecido, não leia o próximo sinal nos sensores, mas continue a reconhecer o que é. É para depurar esses casos que a complicação do tempo virtual do NeuroTime é útil, conforme descrito em um artigo anterior .
Outro problema surge: cada ciclo de reconhecimento leva tempo, e os neurônios que lembram que suas pré-condições acabaram de ser ativadas podem ser desativados durante esse período, e no próximo ciclo eles não funcionarão como deveriam. Esse problema pode ser resolvido se dois tipos de conexões forem feitos - relativamente falando, instantaneamente "ativo" e com atrasos "avançados". As conexões "up" enviam sinais em um ciclo com uma profundidade de reconhecimento adaptável e, durante esse período, nenhum neurônio é desativado (não tem tempo para desativá-lo, se por conceito). Somente no final do ciclo, quando chega a hora de processar os sinais "para frente", o tiquetaque do mundo e o relógio marcam, e os neurônios são desativados.
Tais conexões podem (embora não necessariamente) ser divididas em diferentes neurônios dentro do neurocluster. Anteriormente, quando eu trabalhava com neurônios individuais, era assim: o cluster estava ficando mais complicado, o modelo abstrato de quatro neurônios por cluster ...

... se transformou em um oito-neural:

Ao mesmo tempo, as conexões de controle dos neurônios dentro do cluster (escolha dos modos 1/2, etc.) ) não são exibidos, porque não estão lá - são virtuais: no cluster, ficou muito mais fácil transferir a ativação com código C ++ (como cluster.neuronTemporalOutput.activate ()) do que criar conexões, pensar em atrasos e limites de sinal.

De neurônios a aglomerados - desduplicação


Posteriormente, todos os neurônios foram unidos em um cluster ainda mais fortemente - por exemplo, alguns neurônios não precisam de conexões de entrada, pois são ativados programaticamente a partir de outros neurônios do cluster, e seu único objetivo é enviar sinais através de conexões de saída. Alguns outros neurônios não precisam de conexões de saída, pois transferem a ativação programaticamente para outro neurônio do cluster. Se temos um neurônio que produz uma memória - ativação de sinais - suas conexões são direcionadas para "baixo", então ele tem o mesmo conjunto de conexões que o neurônio do mesmo cluster que recebe sinais desses sinais - eles só têm uma direção diferente (para cima). ) Então, por que duplicar as comunicações, desperdiçando memória? Foi aí que surgiram novos modelos de neurocluster, onde os neurônios foram virtualizados - contêineres de conexão separadamente (axônios e dendritos), neurônios com potenciais de ação separadamente.Isso não apenas economizou memória, mas também acelerou os cálculos, pois aumentou sua localidade. A RNA tornou-se menor e visualmente:

E ficou mais fácil visualizar hierarquias com vários níveis:


Compactação e esquecimento de informações


Quando reconhecidos, os traços de nível superior podem inibir os traços de nível inferior. Os de baixo nível serão esquecidos mais rapidamente e limparão a cadeia de memória. Somente um cluster que se ativou pode diminuir a velocidade e apenas os sinais que reconhece - já que ele próprio já está listado na cadeia de memória e já levou em consideração essas informações filho e não será perdido durante essa frenagem. Como desacelerar? Não é aconselhável desativar completamente os sinais "inferiores" da criança, basta reduzir a força da conexão para que a conexão com a cadeia de memória seja removida mais rapidamente. De fato, nos próximos ticks, as informações ainda podem ser úteis, mesmo que o sintoma pareça ser levado em consideração; portanto, não se apresse em excluí-lo instantaneamente.
Além disso, a compactação de informações leva ao fato de que é quase irrelevante se a RNA lê textos ortográficos ou de palavras. Somente o significado de alto nível permanecerá no final, e os links para leitura de letra por letra serão removidos rapidamente.

Encadeamento hierárquico


Os algoritmos para distinguir cadeias generalizantes consideradas acima devem ser capazes de trabalhar com situações em que apenas recursos de alto nível permanecem na cadeia final. Mesmo que esses sinais sejam diferentes, e seu comum seja encontrado no fundo. Para fazer isso, a etapa de enviar a ativação para baixo também deve ser com profundidade adaptativa - para enviar a ativação para os sinais de nível mais baixo, para que um sinal que ocorra nas duas cadeias, mas foi excluído para compactação de dados, ainda seja encontrado.

A inibição de sinais reconhecidos é muito importante ao destacar generalizações - se a generalização seleciona uma cadeia que já é conhecida, inibirá tudo o que é supérfluo e uma tautologia não será criada - repetição ou tomada. Além disso, se houver muitos recursos na nova cadeia generalizada, somente os níveis mais altos entrarão nela. Isso não é difícil, considerando que o código de memorização / reconhecimento é comum para ambos os algoritmos - ou seja, memorização, essa generalização com duas cadeias principais.

Source: https://habr.com/ru/post/pt388707/


All Articles