A lógica do pensamento - spin-off

Apresento a sua atenção uma série de artigos sobre redes neurais, conceitualmente próximos a uma série de artigos de Alexei Redozubov . Para entender o material, é recomendável que você se familiarize com todo o ciclo de seus artigos. O link contém apenas um artigo do ciclo, útil para este texto.

KDPV
Os modelos descritos de redes neurais (doravante denominados NS) terão um nível um pouco mais alto que o de Aleksei. Isso nos permite simplificar a apresentação e o entendimento dos processos que ocorrem no NS, o que nos permitirá avançar para um ajuste mais preciso do NS de nível inferior. Além disso, o trabalho nesses NSs possibilita usá-los mais rapidamente. Em particular, eu os usei para analisar textos, simular o caminhar do mouse por um labirinto e interpretar uma linguagem parecida com o cisco, pois pode haver muitas outras aplicações. Abordaremos esse comportamento complexo sem problemas no final do ciclo.
Vamos começar ilustrando uma abordagem de nível superior. O artigo de Alexey sobre o hipocampo tem uma frase: "o hipocampo forma identificadores únicos para as memórias". Vamos começar com um código simples que executará essas ações - crie um identificador exclusivo e conecte-o aos eventos descritos. Código C ++. Ainda não carreguei o código-fonte - sem explicações preparatórias, eles ainda têm pouco uso.

NC & hippocampNewId = newNC ();

Em vez de neurônios individuais, a principal unidade do programa é um cluster / coluna neural. O nome da classe é NC (abreviação de NeuroCluster). Como um grande número de neuroclusters é criado no NS (em meus experimentos, centenas de milhares), é indesejável usar um operador novo para isolar novos neuroclusters - ele roda lentamente e tem uma grande sobrecarga de memória. Portanto, é usada a função newNC, que utiliza o pool de neuroclusters e os aloca a partir daí. Em vez de um ponteiro, essa função retorna uma referência ao NC, o que torna o código mais conveniente e seguro.
Conceitualmente, esse código corresponde aproximadamente a essa abordagem: na Assembléia Nacional existem muitas colunas neurais, é necessário alocar a próxima coluna pouco usada e será responsável pelo novo identificador. Detalhar a maneira pela qual esse isolamento ocorrerá é uma tarefa de nível inferior para os especialistas do hipocampo. Também é interessante, eu tenho pensamentos sobre como resolvê-lo, mas essa tarefa é de nível muito baixo, então vamos seguir em frente.
Vamos escrever um ciclo de passagem por todos os neuroclusters:

para (NC e NC: _listNC) {
	if (nc.isActive ())
		// aqui precisamos conectar de algum modo esse neurocluster ao hippocampNewId
}


Um neurocluster ativo é, por exemplo, qualquer sensação atual, um sinal do córtex sensorial, ação atual e assim por diante.
No modelo de Alexey, essa conexão será criada através do ajuste - o cluster aprenderá a reconhecer uma nova onda de identificação. Para criar uma conexão indireta, você precisa de muitos recursos de computação - você precisa de muitos neurônios e conexões (cem ou dois neurônios por neurocluster), muitos cálculos, você precisa simular a passagem de uma onda de identificação por todo o córtex, essa passagem levará muito tempo. Vamos facilitar isso - crie uma conexão de software diretamente:

para (NC e NC: _listNC) {
	if (nc.isActive ())
		hippocampNewId.createLinkTo (nc);
}


Depois disso, o novo rótulo de hipocampo precisa ser vinculado a tempo com as memórias passadas:
	hippocampNewId.createTimeLinkTo (_prevHippocampId);

E finalmente, para o próximo ciclo, substituiremos:
	_prevHippocampId = hippocampNewId;

Claro, isso ainda é pseudo-código. Entende-se que este é um código na classe ANN. Portanto, a função newNC é uma função membro da classe HC. Se uma variável começa com um sublinhado, essa variável é um membro da classe (algo como o prefixo m_, não é necessário pronunciar a letra m, o que torna a programação mais conveniente).
O mérito de Alexei é que sua descoberta permite que você escreva códigos como createLinkTo. Antes de seus artigos, era possível adivinhar como vincular rapidamente as duas memórias. Afinal, o cérebro não pode germinar instantaneamente uma conexão do axônio de um neurônio ao outro hemisfério, e assim cem vezes a cada segundo. A tecnologia de Alexey transforma o cérebro inteiro com o hipocampo em um interruptor que pode criar rapidamente associações arbitrárias. Há cerca de 15 anos, aceitei a existência de um mecanismo como esse e trabalhei, esperando que algum dia fosse aberto. Resta apenas escrever o código com algumas dúvidas - mas quanto é biologicamente plausível? Vários fatos apontaram para a existência de tal mecanismo e, finalmente, detalhes foram revelados.
Bem, de alguma forma conectamos as memórias atuais mais ativas e o novo rótulo de hipocampo. O que isso nos dá? Vamos fazer com que, após o recebimento de uma série de eventos semelhantes ao lembrado anteriormente, os carimbos de data e hora memorizados possam reconhecer essas novas séries como algo já encontrado. Depois, será possível fazer coisas diferentes - por exemplo, iniciar a previsão com base na experiência.
Para fazer isso, passe temporariamente para outra tarefa. Deixe o córtex sensor da RNA (NS artificial) perceber as letras. Por exemplo, lê-os de um arquivo. A tarefa é criar cadeias neurais que reconhecerão a palavra - por exemplo, a palavra "reconhecido". Além disso, esse reconhecimento deve ser de vários componentes - de três cadeias separadas de “raças”, “poses”, “dinheiro”.
O princípio geral da solução é geralmente óbvio e é descrito, por exemplo, na Memória Temporária Hierárquica de Hawkins. Mas, para a figura abaixo, é necessário dar explicações (a figura pode ser retirada por ratos na barra de abas para abrir em uma nova aba):


1) em modelos ANN mais antigos, foram usados ​​clusters de neurônios, mas neurônios (como aqui ), mas agora levantam essas fontes antigas do Laboratório Neural 3 e torná-los muito cansativos, então ilustrarei com as imagens geradas na versão mais recente do Neuro Lab 4. Portanto, embora as abstrações dos neuroclusters sejam exibidas, eu as chamarei de neurônios - isso deve ficar claro a partir do contexto do que estamos falando?
2) Essa janela - a guia "2d chain" - cria uma visualização conveniente de parte da rede neural. É desconfortável olhar para a rede neural como ela fica na primeira foto do artigo. E essa janela permite que você especifique um neurocluster separado, analise suas conexões e mostre apenas os clusters que podem ser acessados ​​pelas conexões do selecionado. Organiza os grupos em uma fileira, mostra os sinais da filha abaixo, tem conexões temporais horizontalmente. Agora é mais fácil ver que essa cadeia analisa a palavra "reconhecido".
3) Pode-se ver que grupos diferentes têm tipos diferentes, tipos diferentes são pintados em cores diferentes. A imagem mostra os neuroclusters usuais (se) e sensoriais (sensoriais) - eles correspondem ao córtex sensorial. As comunicações do cluster de sensores com o sensor real não são modeladas por falta de necessidade. Nesse caso, um tipo separado de cluster é necessário apenas para facilitar a depuração - por exemplo, para não pensar: "por que esse cluster não reconhece nenhum sinal, é inútil?" Não, não é inútil, ele reconhece a carta indicada no comentário.
4) Na dica de ferramenta verde pop-up (ao passar o mouse), diferentes campos são mostrados. Na parte inferior da dica de ferramenta, um esquema de visualização de cluster é mostrado. Diferentes modelos de RNA podem visualizar clusters de diferentes maneiras., como eles podem ter conteúdos muito diferentes (todos os tipos de variáveis ​​numéricas, o número de neurônios internos etc.) e, para que fique claro quais são esses números, decidi dar uma ideia ao quadro.
5) Vamos analisar o reconhecimento da primeira sílaba "raças". Inclui os neurônios sensoriais 6, 7 e 9, eles são reconhecidos na sequência desejada devido aos neurônios 8 e 10. Se eles funcionam em uma ordem diferente, ou pelo menos com um atraso de um ciclo de clock, o sinal não alcançará o neurônio 10.
6) De acordo com o esquema acima, pode-se pensar que após um número de neurônio 10 com a letra "c" enviar um sinal para o número 20 de outra sílaba, o sinal chegará muito cedo e terá tempo para sair antes que a segunda sílaba seja reconhecida. Anteriormente, para resolver esse problema, usei "neurônios de atraso" que enviavam um sinal para que chegasse exatamente ao mesmo tempo que outro neurônio precisaria. Agora eu aprendi a usar as configurações de conexão corretas, que serão descritas em um artigo separado, para que os neurônios de atraso não sejam necessários. Portanto, eles não estão na imagem.
7) Este circuito com neurônios, para reconhecer corretamente uma palavra, envia sinais "para a direita" e "para cima". Isso corresponde à passagem do tempo e a um aumento no nível do atributo na hierarquia. Mas a dica de ferramenta mostra que o número de conexões de entrada e saída é tal que as conexões têm mais probabilidade de levar a "inatividade". Essas são as características da operação dos neuroclusters, não preste atenção, para um circuito com neurônios, as comunicações vão para a direita e para cima.
8) Por conveniência, essa janela desenha os números de linha e coluna ao longo das bordas da tela, bem como o deslocamento de tempo, relativo à operação do cluster principal selecionado - ou seja, aquele cujo identificador é inserido no campo de entrada e é destacado por uma moldura espessa no canto superior direito
9) Um formato de hora complexo (hora da criação de um neurônio do tipo 0: 0.0-0) será descrito posteriormente. Como esse NS é gerado para ilustração, o tempo de criação de todos os neurônios é o mesmo aqui. Em circuitos reais, esse tempo mostrará o relógio no qual uma determinada coluna neural sintonizou para reconhecer um atributo específico. Este é o momento em que a função newNC é chamada. Esta informação pode ser usada para depuração e muito mais.
10) Essas cadeias, é claro, podem memorizar mais de um atributo a qualquer momento (os neurônios podem ter qualquer número de conexões). Nesse caso, os neurônios têm uma conexão para cada etapa do tempo, uma vez que as letras são reconhecidas. Se houvesse cadeias visuais, a imagem seria completamente diferente, com um número muito grande de conexões. Para fins educacionais, é mais fácil trabalhar com letras. Mesmo ao reconhecer letras, em um registro de data e hora, as conexões com muitos agrupamentos podem ser memorizadas - por letra, no final de uma sílaba reconhecida, no final de uma palavra reconhecida, por pensamentos paralelos que acompanham a ponderação de um texto. Essa é uma diferença significativa entre neuroclusters e lisp, onde car / cdr contém apenas um ponteiro. Essa semântica de relacionamentos no lisp é menos conveniente para a IA - uma vez que uma única célula não pode ser considerada como uma associação completa,Para fazer isso, você precisa extrair uma lista separada de atributos da célula, que pode ser conectada de maneiras muito diferentes. Portanto, as tentativas de trabalhar com a AI no Lisp fornecem imediatamente uma solução óbvia - um caractere separado = uma célula separada, e esse nível é muito baixo para funcionar; é inconveniente criar a AI no lisp.
A próxima parte discute alguns algoritmos para destacar reflexos condicionados.

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


All Articles