Hoje de manhã, a caminho do campus de Berkeley, passei os dedos pelas folhas de um arbusto perfumado e depois inalei o cheiro familiar. Faço isso todos os dias, e todos os dias a primeira palavra que aparece na minha cabeça e acena com a mão em saudação é
sábia . Mas eu sei que esta planta não é sálvia, mas alecrim, então peço que a
sálvia se acalme. Mas tarde demais. Depois de
alecrim e
sálvia, não consigo parar o aparecimento de
salsa e
tomilho no palco, após o qual as primeiras notas da melodia e do rosto aparecem na capa do álbum, e agora eu estava de volta em meados da década de 1960, vestindo uma camisa com pepinos. Enquanto isso, o
alecrim traz uma lacuna de 13 minutos na memória de Rose Mary Woods (embora
agora , depois de consultar a memória coletiva, eu saiba que deveria ser Rose Mary Woods e
um espaço de 18 minutos e meio ). De Watergate, pulo para as histórias na página principal. Então noto em um jardim bem cuidado outra planta com folhas fofas verde-acinzentadas. Isso também não é sábio, mas um limpador (orelha de cordeiro). No entanto, o
sábio finalmente obtém seu momento de glória. Das gramíneas, passo para o software matemático
Sage e depois para o sistema de defesa aérea dos anos 50 chamado
SAGE , o Ambiente Semi-Automático do Solo, que era gerenciado pelo maior computador já construído.
Na psicologia e na literatura, essas andanças mentais são chamadas de
fluxo da consciência (o autor dessa metáfora é William James). Mas eu escolheria uma metáfora diferente. Minha consciência, tanto quanto eu sinto, não flui suavemente de um tópico para outro, mas vibra através da paisagem de pensamentos, mais como uma borboleta do que um rio, às vezes pregada em uma flor e depois em outra, às vezes levada por rajadas de vento, às vezes visitando no mesmo lugar de novo e de novo.
Para explorar a arquitetura da minha própria memória, tentei realizar um experimento mais tranquilo com associações livres. Comecei com a mesma receita floral - salsa, sálvia, alecrim e tomilho -, mas para esse exercício não passei pelos jardins das colinas de Berkeley; Sentei-me à mesa e tomei notas. O diagrama abaixo é a melhor tentativa de reconstruir todo o curso de meus pensamentos.
salsa, sálvia, alecrim, tomilho - quatro ervas, além de uma frase da música Simon e Garfunkel.
Simon e Garfunkel - Paul Simon e Art Garfunkel, um dueto de cantores do gênero folk rock dos anos 1960 e 1970.
Senhora Robinson é uma música de Simon e Garfunkel, bem como um personagem do filme de Mike Nichols, "The Graduate".
"Onde você foi, Joe DiMaggio?" - a pergunta feita em "Sra. Robinson ".
Simon and Schuster é uma editora fundada em 1924 por Richard Simon e Max Schuster (originalmente para publicar palavras cruzadas).
Jackie Robinson é o lendário jogador do Brooklyn Dodgers.
Robinson Crusoe - romance de Daniel Defoe sobre o naufrágio (1719).
Família Swiss Robinsons - romance de Johan David Weiss sobre naufrágios (1812).
ervas - plantas aromáticas
Mr. Wizard é um programa científico de sábado de 1950 para crianças hospedadas por Don Herbert.
Alpert - trompetista Brasão de Alpert.
Plásticos é o conselho de carreira sugerido pela The Graduate.
coo-coo-ca-choo - linha de “Sra. Robinson ".
Frank Robinson é um outfielder em Baltimore Orioles na década de 1970.
Greig Nettles é o terceiro jogador de beisebol do New York Yankees na década de 1970.
Dustin Hoffman é um ator que atuou em The Graduate.
Abby Hoffman - "Yipee!"
Leominster é uma cidade em Massachusetts que se tornou o berço da fabricação de plásticos nos Estados Unidos.
Brooks Robinson é o terceiro jogador de beisebol do Baltimore Orioles na década de 1970.
Papillon ("The Moth") - um filme de 1973 em que Dustin Hoffman desempenhou um papel secundário; "Papillon" em francês, "borboleta".
Nabokov - Vladimir Nabokov, escritor nascido na Rússia e entomologista que estuda borboletas.
borboleta, Schmetterling, mariposa, farfalla - “borboleta” em inglês, alemão, espanhol e italiano; parece que todos eles (e a palavra francesa também) são de origem independente.
Como se chama a borboleta em russo - não sei. Ou não sabia quando essa pergunta surgiu.
"I am the Walrus" é uma música dos Beatles de 1967 que também tem a frase "coo-coo-ca-choo".
Carly Simon é uma cantora. Sem conexão com Paul Simon, mas é filha de Richard Simon.
"Você é tão vaidoso" é uma música de Carly Simon.
O gráfico de cima para baixo representa os tópicos na ordem em que aparecem no cérebro, mas as conexões entre os nós não criam uma única sequência linear. A estrutura se assemelha a uma árvore com cadeias curtas de associações sucessivas, terminando com um forte retorno a um nó anterior, como se eu fosse puxada por um elástico esticado. Tais interrupções são marcadas no gráfico com setas verdes; o X vermelho abaixo é o local onde eu decidi concluir o experimento.
Peço desculpas aos nascidos depois de 1990, muitos dos tópicos mencionados podem parecer desatualizados ou misteriosos para você. As explicações são apresentadas abaixo do gráfico, mas não acho que elas tornarão as associações mais claras. No final, as memórias são pessoais, elas vivem dentro da cabeça. Se você deseja coletar uma coleção de idéias relevantes para sua própria experiência, basta criar seu próprio cronograma de associações gratuitas. Eu recomendo fazer isso: você pode descobrir que não sabia de nada.
O objetivo de minha caminhada diária descendo a colina em Berkeley é o Instituto Simons e o Curso de Teoria Computacional, no qual participo de um programa de um semestre de cérebro e computação. Tal ambiente gera pensamentos de pensamentos. Comecei a refletir: como podemos construir um modelo computacional do processo de livre associação? Entre as várias tarefas propostas para resolver pela inteligência artificial, essa parece bastante simples. Não há necessidade de profunda racionalização; tudo o que precisamos simular é apenas sonhar acordado e vagar nas nuvens - é isso que o cérebro faz quando não está carregado. Parece que essa tarefa é fácil de resolver, não é?
A primeira idéia que me vem à cabeça (pelo menos à
minha cabeça) em relação à arquitetura de um modelo computacional é o movimento aleatório ao longo de um gráfico ou rede matemática. Os nós da rede são elementos armazenados na memória - idéias, fatos, eventos - e as comunicações são vários tipos de associações entre eles. Por exemplo, um nó
borboleta pode ser conectado a uma
mariposa, uma lagarta, um monarca e uma
madrepérola, além de transições mencionadas na minha agenda, e possivelmente ter conexões menos óbvias, por exemplo
, rastreamento australiano ”,“ Camarão ”,“ Mohammed Ali ”,“ pelagra ”,“ estrangulamento ” e
“ medo de palco ” . A estrutura de dados do host conterá uma lista de ponteiros para todos esses hosts relacionados. Os ponteiros podem ser numerados de 1 a n; o programa irá gerar um número pseudo-aleatório nesse intervalo e irá para o nó correspondente, no qual todo o procedimento será iniciado novamente.
Esse algoritmo reflete algumas características básicas das associações livres, mas muitas delas não são levadas em consideração. O modelo assume que todos os nós de destino são igualmente prováveis, o que parece implausível. Para levar em conta a diferença de probabilidades, podemos perguntar a cada borda
eu peso
w i e, em seguida, torne as probabilidades proporcionais aos pesos.
Ainda mais complicado é o fato de os pesos dependerem do contexto - da história recente da atividade mental humana. Se eu não tivesse uma combinação da Sra. Robinson e Jackie Robinson, eu pensaria em Joe Di Maggio? E agora, quando escrevo isso, Joltin 'Joe (apelido Di Maggio) lembra Marilyn Monroe, e depois Arthur Miller, e novamente não consigo parar a linha de pensamento. Para reproduzir esse efeito em um modelo de computador, será necessário algum mecanismo de regulação dinâmica das probabilidades de categorias inteiras de nós, dependendo de quais outros nós foram visitados recentemente.
Você também deve considerar os efeitos da novidade de um tipo diferente. Um elástico deve ser encontrado no modelo, constantemente me puxando de volta para Simon, Garfunkel e Sra. Robinson Provavelmente, cada site visitado recentemente deve ser adicionado à lista de opções de destino, mesmo que não esteja conectado de forma alguma ao site atual. Por outro lado, o vício também é uma possibilidade: pensamentos frequentemente lembrados se tornam chatos, portanto, devem ser suprimidos no modelo.
Outro teste final: algumas lembranças não são fatos ou idéias isoladas, mas partes da história. Eles têm uma estrutura narrativa com eventos se desenrolando em ordem cronológica. Para nós de tais lembranças episódicas, é necessária a borda
seguinte e possivelmente
anterior . Essa cadeia de costelas une toda a nossa vida, incluindo tudo o que você se lembra.
Um modelo computacional semelhante pode reproduzir minhas andanças mentais? A coleta de dados para esse modelo será um processo bastante demorado, e isso não é surpreendente, porque levei uma vida inteira para encher meu crânio com a mistura de ervas, brasões, Simons, Robinsons e Hoffmanns. Muito mais do que a quantidade de dados, eu me preocupo com a meticulosidade do algoritmo transversal de gráfico. É muito fácil dizer: “escolha um nó de acordo com o conjunto de probabilidades ponderadas”, mas quando observo os detalhes sujos da implementação dessa ação, mal consigo imaginar que algo assim ocorra no cérebro.
Aqui está o algoritmo mais simples que eu conheço para seleção ponderada aleatória. (Este não é o mais eficiente desses algoritmos, mas os métodos são ainda mais caóticos. Keith Schwartz escreveu um excelente
tutorial e uma revisão sobre este tópico.) Suponha que uma estrutura de dados que simule um nó da rede inclua uma lista de links para outros nós e uma lista correspondente de pesos. . Conforme mostrado na figura abaixo, o programa gera uma quantidade acumulada de pesos:
0 , w 1 , w 1 + w 2 , w 1 + w 2 + w 3 , p o n t o s . O próximo passo é normalizar essa série dividindo cada número pela soma total dos pesos. Agora temos uma série de números
eu p monotonicamente aumentando de zero para a unidade. Em seguida, o programa seleciona um número real aleatório
x do intervalo
[ 0 , 1 ) ;
x deve estar em um dos intervalos normalizados
eu p e esse valor
eu define o próximo nó selecionável.
No código da
linguagem de programação Julia, o procedimento de seleção de nó se parece com o seguinte:
function select_next(links, weights) total = sum(weights) cum_weights = cumsum(weights) probabilities = cum_weights / total x = rand() for i in 1:length(probabilities) if probabilities[i] >= x return i end end end
Eu descrevo esses detalhes chatos de somas acumuladas e números pseudo-aleatórios tão lentamente para enfatizar dessa maneira que esse algoritmo transversal de gráfico não é tão simples quanto parece à primeira vista. E ainda não consideramos o tópico da mudança de probabilidades dinamicamente, embora nossa atenção flutue de um tópico para outro.
É ainda mais difícil entender o processo de aprendizado - adicionando novos nós e arestas à rede. Encerrei minha sessão de associações livres quando cheguei a uma pergunta que não conseguia responder: qual é o nome de uma borboleta em russo? Mas
agora eu posso responder. Na próxima vez que jogar este jogo, adicionarei a palavra
babochka à lista. Em um modelo computacional, inserir um nó para a palavra
babochka é uma tarefa bastante simples, mas nosso novo nó também deve estar conectado a todos os nós borboleta existentes. Além disso, a própria
babochka acrescenta novas costelas. Ela está foneticamente perto de
babushka (avó) - uma das várias palavras em russo no meu dicionário. O sufixo
-ochka é diminuto, portanto deve ser associado ao francês
-ette e ao italiano
-ini . O significado literal da palavra
babochka é "pequena alma", o que implica um número ainda maior de associações. Afinal, aprender uma única palavra nova pode exigir uma reindexação completa de toda a árvore do conhecimento.
Vamos tentar outro método. Esqueça a travessia aleatória de uma rede com seu espaguete, de ponteiros para nós. Em vez disso, vamos armazenar todas as coisas semelhantes na vizinhança. Do ponto de vista dos bancos de memória de computadores digitais, isso significa que coisas semelhantes serão armazenadas em endereços vizinhos. Aqui está um segmento de memória hipotético centrado no conceito de
cachorro . Os lugares vizinhos estão ocupados em outras palavras, conceitos e categorias que provavelmente são causadas pelo pensamento de um cachorro (
cachorro ):
gato óbvio (gato) e
filhote (filhote), diferentes raças de cães e vários cães específicos (Skippy é o cão da nossa família, que era na minha infância), bem como, possivelmente, associações mais complexas. Cada item tem um endereço digital. O endereço não tem nenhum significado profundo, mas é importante que todas as células da memória sejam numeradas em ordem.
o endereço | o conteúdo |
---|
19216805 | deus |
19216806 | o cachorro que não latia à noite |
19216807 | Skippy |
19216808 | Lassie |
19216809 | canino |
19216810 | gato |
19216811 | cão |
19216812 | filhote de cachorro |
19216813 | lobo |
19216814 | caverna da caverna |
19216815 | Basset hound |
19216816 | Weimaraner |
19216817 | dogmático |
A tarefa de vagar vagarosamente por essa matriz na memória pode ser bastante simples. Pode percorrer aleatoriamente endereços de memória, mas a vantagem será dada a pequenos passos. Por exemplo, o próximo endereço visitado pode ser determinado por amostragem de uma distribuição normal centralizada no local atual. Aqui está o código para Julia. (A função
randn()
retorna um número real aleatório obtido de uma distribuição normal com um valor médio
m u = 0 e desvio padrão
s i g m a = 1 .)
function gaussian_ramble(addr, sigma) r = randn() * sigma return addr + round(Int, r) end
Esse esquema tem características atraentes. Não há necessidade de tabular todos os nós de destino possíveis antes de escolher um deles. As probabilidades não são armazenadas como números, mas codificadas pela posição na matriz e também moduladas pelo parâmetro
s i g m um , que determina até onde o procedimento deseja se mover na matriz. Embora o programa ainda execute aritmética para amostrar a partir da distribuição normal, é provável que essa função seja uma solução mais simples.
Mas, ainda assim, esse procedimento tem uma falha aterrorizante. Tendo cercado o
cão com todas as suas associações diretas, não deixamos espaço para
suas associações. Os termos de cão são bons em seu próprio contexto, mas e o
gato da lista? Onde colocamos
gatinho ,
tigre ,
nove vidas e
Felix ? Em uma matriz unidimensional, não há como incorporar cada elemento de memória em um ambiente adequado.
Então, vamos passar para duas dimensões! Dividindo os endereços em dois componentes, definimos dois eixos ortogonais. A primeira metade de cada endereço se torna a coordenada
y e a segunda coordenada
x . Agora,
cachorro e
gato ainda são vizinhos próximos, mas também têm espaços pessoais em que podem brincar com seus próprios “amigos”.
No entanto, duas medições também não são suficientes. Se tentarmos preencher todos os elementos relacionados ao
Gato do chapéu , eles inevitavelmente começarão a colidir e entrar em conflito com elementos relacionados do
cão que não latiram à noite . Obviamente, precisamos de mais dimensões - muito mais.
Agora é o momento certo para admitir - não sou o primeiro a pensar em como as memórias podem ser organizadas na memória. A lista dos meus antecessores pode ser iniciada com Platão, que comparou a memória com um pássaro; reconhecemos as memórias por sua plumagem, mas às vezes é difícil obtê-las se elas começarem a vibrar na célula do nosso crânio. O jesuíta do século XVI, Matteo Ricci, escreveu sobre o “palácio da memória” em que passeamos por várias salas e corredores em busca de tesouros do passado. As teorias modernas da memória são geralmente menos imaginativas, mas mais detalhadas e direcionadas à transição da metáfora para o mecanismo. Pessoalmente, o que mais gosto é o modelo matemático obtido na década de 1980 por
Pentti Canerva , que agora trabalha no Redwood Center for Theoretical Neuroscience, aqui em Berkeley. Ele teve a ideia de
memória distribuída esparsa , que chamarei de SDM. Aplica com sucesso a incrível geometria dos espaços de alta dimensão.
Imagine um cubo em três dimensões. Se assumirmos que o comprimento do lado é igual à unidade de medida, oito vetores podem ser denotados por vetores de três dígitos binários, começando com
000 e terminando
111 . Em qualquer vértice, alterar um único bit do vetor nos leva ao vértice que é o vizinho mais próximo. A alteração de dois bits nos leva ao próximo vizinho mais próximo e a substituição dos três bits leva ao canto oposto do cubo - ao vértice mais distante.
Um cubo quadridimensional funciona de maneira semelhante -
16 vértices são indicados por vetores contendo todas as combinações de dígitos binários, começando
0000 e terminando
1111 . Essa descrição é realmente generalizada para
N dimensões em que cada vértice possui
N vetor de coordenadas de bit. Se medirmos a distância de acordo com a métrica de Manhattan - sempre se movendo ao longo das bordas do cubo e nunca cortando ao longo da diagonal -, a distância entre dois vetores será o número de posições nas quais dois vetores de coordenadas diferem (também é conhecida como distância de Hamming). (Para OR exclusivo, o símbolo , às vezes chamado de
bun , geralmente é usado. Ele exibe a operação XOR como módulo de adição binária 2. Kanerva prefere ∗ ou ⊗ com base em que o papel do XOR na computação de alta dimensão é mais como multiplicação do que adição Decidi me livrar dessa contradição usando o símbolo & veebar; - uma maneira alternativa de escrever XOR, familiar entre os lógicos. Esta é uma modificação do símbolo including - incluindo OR. É conveniente que também seja um símbolo XOR nos programas Julia.) Assim, a unidade a medição de distância é um bit e o cálculo da distância é uma tarefa para o operador OR exclusivo binário (XOR, & veebar;), que nos fornece um valor para diferentes bits
1 e para pares idênticos - o valor
0 0 :
0 ⊻ 0 = 0 0 ⊻ 1 = 1 1 ⊻ 0 = 1 1 ⊻ 1 = 0
A função em Julia para medir a distância entre vértices aplica a função XOR a dois vetores de coordenadas e retorna a quantidade como resultado
1 .
function distance(u, v) w = u ⊻ v return count_ones(w) end
Quando
N ficando grande o suficiente, algumas propriedades curiosas aparecem
N -cube. Considere
1000 tridimensional tendo
2 1000 picos. Se selecionarmos aleatoriamente seus dois vértices, qual será a distância esperada entre eles? Embora esta seja uma pergunta sobre distância, mas podemos respondê-la sem nos aprofundarmos na geometria - esta é apenas a tarefa de calcular as posições nas quais dois vetores binários são distinguidos. Para vetores aleatórios, cada bit pode ter a mesma probabilidade de ser igual
0 0 ou
1 , portanto, espera-se que os vetores sejam diferentes na metade das posições dos bits. Em caso de
1000 a distância padrão do vetor de bits é
500 bits. Este resultado não nos surpreende. No entanto,
vale ressaltar que todas as distâncias entre os vetores são acumuladas de perto em torno do valor médio de 500.
Em caso de
1000 vetores de bits quase todos os pares selecionados aleatoriamente estão a uma distância de
450 antes
550 pouco. Em uma amostra de cem milhões de pares aleatórios
(veja o gráfico acima), nenhum deles está mais perto do que
400 um pouco ou mais
600 pouco. Nada em nossa vida no espaço de baixa resolução nos preparou para esse acúmulo de probabilidades na distância média. Aqui na Terra, podemos encontrar um lugar onde ficaremos completamente sozinhos, quando quase todos estiverem a poucos milhares de quilômetros de nós; no entanto, não há como redistribuir a população do planeta para que
todos estejam ao mesmo tempo nesse estado. Mas em
1000 espaço tridimensional, a situação é exatamente isso.
Escusado será dizer que é difícil imaginar
1000 tridimensional, mas podemos obter um pouco de entendimento intuitivo da geometria, pelo menos no exemplo de cinco dimensões. Abaixo está uma tabela de todas as coordenadas dos vértices em um cubo tridimensional de dimensão unitária, dispostas de acordo com a distância de Hamming do ponto inicial
00.000 . A maioria dos picos (20 em 32) ocorre a distâncias médias - dois ou três bits. A tabela teria a mesma forma em qualquer outro vértice utilizado como ponto de partida.
Uma séria objeção a todas essas discussões.
1000 Cubos dimensionais é que nunca podemos construir algo assim; no universo não há átomos suficientes para a estrutura de
2 1000 peças. Mas Kanerva ressalta que precisamos de espaços para armazenar apenas os elementos que queremos armazenar. Podemos projetar equipamentos para amostragem aleatória, por exemplo
10 8 vértices (cada um dos quais tem
1000 endereço de bits) e deixe o restante do cubo com uma infraestrutura fantasmagórica e inacabada. O Kanerva chama esse subconjunto de vértices que existem nas
células rígidas do "hardware"
(locais rígidos) . Muitos
10 8 células sólidas aleatórias ainda exibem a mesma distribuição de distância comprimida que um cubo cheio; isso é exatamente o que é mostrado no gráfico acima.
O isolamento relativo de cada vértice em um cubo de tamanho grande nos dá uma dica de uma possível vantagem da memória distribuída esparsa: o elemento armazenado possui espaço suficiente e pode ser distribuído por uma vasta área sem perturbar seus vizinhos. Esse é realmente um excelente recurso do SDM, mas há outra coisa.
Na memória tradicional do computador, endereços e elementos de dados armazenados são mapeados um a um. Endereços são números inteiros ordinais de um intervalo fixo, digamos
[ 0 , 2 64 ) . Cada número inteiro nesse intervalo define um único local separado na memória e cada local é associado a exatamente um endereço. Além disso, em cada local, apenas um valor é armazenado por vez; ao escrever um novo valor, o antigo é substituído.
O SDM viola todas essas regras. Tem um espaço de endereço enorme - não menos
2 1000 - mas apenas uma pequena fração aleatória desses lugares existe como entidades físicas; é por isso que a memória é chamada
esparsa . Uma única informação não é armazenada em apenas um lugar na memória; muitas cópias são distribuídas pela área - portanto, são
distribuídas . Além disso, em cada endereço separado, vários elementos de dados podem ser armazenados ao mesmo tempo. Ou seja, as informações são espalhadas por uma ampla área e espremidas em um ponto. Essa arquitetura também desfoca a distinção entre endereços de memória e conteúdo de memória; em muitos casos, o padrão de bits armazenado é usado como seu próprio endereço. Finalmente, a memória pode responder a um endereço parcial ou aproximado e é muito provável que encontre o item correto. Enquanto a memória tradicional é o “mecanismo de correspondência exata”, o SDM é o “mecanismo de melhor correspondência” que retorna o elemento mais semelhante ao solicitado.
Em seu livro de 1988, Kanerva fornece uma análise quantitativa detalhada da memória distribuída esparsa com
1000 medições e
1.000.000 células sólidas. As células sólidas são selecionadas aleatoriamente em todo o espaço.
2 1000 possíveis vetores de endereço. Cada célula sólida possui espaço de armazenamento para vários
1000 vetores de bits. A memória como um todo foi projetada para armazenamento de pelo menos
10.000 padrões únicos. Abaixo, considerarei essa memória como um modelo SDM canônico, apesar do fato de que, pelos padrões dos mamíferos, não é suficiente, e em um trabalho mais recente, Kanerva enfatizou vetores com pelo menos
10.000 medições.
É assim que a memória funciona em uma implementação simples de computador. O comando
store(X)
grava um vetor na memória
X , considerando o endereço e o conteúdo. Valor
X armazenado em todas as células sólidas a uma certa distância
X . No modelo canônico, essa distância é de 451 bits. Ele define um “círculo de acesso” destinado a unir-se aproximadamente
1000 células sólidas; em outras palavras, cada vetor é armazenado aproximadamente em
1 / 1000 uma de um milhão de células sólidas.
Também é importante observar que o item armazenado
X não necessariamente escolher
1.000.000 vetores binários que são endereços de células sólidas. Pelo contrário.
X pode ser qualquer um
2 1000 possíveis padrões binários.
Suponha que mil cópias já foram gravadas no SDM
X , após o qual um novo elemento chega
Y , que também precisa ser armazenado em seu próprio conjunto de milhares de células sólidas. Entre esses dois conjuntos, pode haver uma interseção - os lugares em que
X e
Y . O novo valor não substitui nem substitui o anterior; os dois valores são salvos. Quando a memória estiver cheia em sua capacidade
10.000 cada um deles é salvo
1000 vezes, e em uma célula típica, cópias serão armazenadas
10 padrões únicos.
Agora, a pergunta é: como usamos essa memória mista? Em particular, como obtemos o valor certo
X sem afetar
Y e todos os outros itens que se acumularam em um local de armazenamento?
O algoritmo de leitura utilizará a propriedade de uma curiosa distribuição de distâncias em um espaço de alta dimensão. Mesmo se
X e
Y são os vizinhos mais próximos de
10.000 padrões armazenados, eles provavelmente diferem em 420 ou 430 bits; portanto, o número de células sólidas nas quais os dois valores são armazenados é bastante pequeno - geralmente quatro, cinco ou seis. O mesmo se aplica a todos os outros padrões que se cruzam com
X . Existem milhares deles, mas nenhum dos padrões influentes está presente em mais de algumas cópias dentro do círculo de acesso
X .
O comando
fetch(X)
deve retornar o valor gravado anteriormente pelo comando
store(X)
. A primeira etapa na reconstrução do valor é coletar todas as informações armazenadas dentro do círculo de acesso de 451 bits centralizado no
X . Desde
X foi gravado anteriormente em todos esses lugares, podemos ter certeza de que receberemos
1000 suas cópias. Também vamos falar sobre
10.000 cópias de
outros vetores armazenados em locais onde os círculos de acesso se cruzam com os círculos
X . Mas como as interseções são pequenas, cada um desses vetores está presente em apenas algumas cópias. Então geralmente cada um deles
1000 pouco igualmente provável que seja
0 0 ou
1 . Se aplicarmos a função de princípio majoritário a todos os dados coletados em cada posição de bit, o resultado será dominado por
1000 cópias
X . Probabilidade de ficar diferente de
X o resultado é aproximadamente igual
10 - 19 .
O procedimento do princípio da maioria é mostrado em mais detalhes abaixo em um pequeno exemplo de cinco vetores de dados de 20 bits cada. A saída será um vetor diferente, cada um dos quais reflete a maioria dos bits correspondentes nos vetores de dados. (Se o número de vetores de dados for par, então "draws" serão permitidos por seleção aleatória
0 0 ou
1 .) O esquema alternativo de escrita e leitura mostrado abaixo se recusa a armazenar todos os padrões individualmente. Em vez disso, ele armazena o número total de bits.
0 0 e
1 em todas as posições. A célula sólida possui
1000 contador de bits inicializado por todos os zeros. Quando um padrão é escrito no lugar, cada contador de bits é incrementado para
1 ou diminui para
0 0 . O algoritmo de leitura simplesmente olha o sinal de cada contador de bits, retornando
1 por um valor positivo,
0 0 para valor negativo e aleatório quando o bit do contador é igual
0 0 .
Esses dois esquemas de armazenamento fornecem resultados idênticos.
Em termos de computação, esta versão da memória distribuída esparsa parece uma piada cuidadosamente pensada. Para lembrar
10.000 Para elementos necessários, precisamos de um milhão de células sólidas, nas quais armazenaremos mil cópias redundantes de cada padrão. Para recuperar apenas um item da memória, coletamos dados por
11.000 padrões salvos e aplicar o mecanismo do princípio da maioria para desvendá-los. E tudo isso é feito com a ajuda de várias manobras acrobáticas, apenas para obter o vetor que já temos. A memória tradicional funciona muito menos aleatoriamente: tanto a gravação quanto a leitura acessam um local.
Mas o SDM pode fazer o que a memória tradicional é incapaz. Em particular, ele pode extrair informações com base em dados parciais ou aproximados. Digamos que um vetor
Z é uma versão danificada
X em que mudaram
100 de
1000 vetores. Como os dois vetores são semelhantes, o comando
fetch(Z)
visitará muitos dos mesmos locais onde está armazenado
X .
Com uma distância de Hamming de 100, podemos esperar que X e
Z será compartilhado por aproximadamente 300 células sólidas. Graças a essa grande interseção, o vetor retornoufetch(Z)
(vamos chamá-loZ ′ ) estará mais perto deX o que éZ .
Agora podemos repetir esse processo com uma equipe fetch(Z′)
que retornará o resultadoZ ′ ′ , ainda mais pertoX .
Em apenas algumas iterações, o procedimento alcançará X .
Kanerva mostrou que uma sequência convergente de operações de leitura recursiva seria bem-sucedida com quase total segurança se o padrão inicial não estiver muito longe do alvo. Em outras palavras, existe um raio crítico: qualquer verificação de memória, começando de um local dentro do círculo crítico, convergirá quase exatamente para o centro e o fará rapidamente. Uma tentativa de restaurar um elemento armazenado fora do círculo crítico falhará, porque o processo de recuperação recursiva se afastará para uma distância média. A análise de Kanerv mostra que, para o SDM canônico, o raio crítico é de 209 bits. Em outras palavras, se conhecermos cerca de 80% dos bits, podemos recriar todo o padrão.A ilustração abaixo rastreia a evolução de seqüências de memórias recursivas com sinais de origem diferentes do alvo. X ligado0 , 5 , 10 , 15 ... 1000 .
Neste experimento, todas as seqüências que começam com distância 205 ou menos convergem paraX para
10 ou menos iterações(traços azuis). Todas as seqüências que começam a uma distância inicial maior vagam sem rumo por vastos espaços vaziosCubo 1000- dimensional, permanecendo aproximadamente 500 bits de qualquer lugar.A transição de caminhos convergentes para caminhos divergentes não é perfeitamente clara, e isso é perceptível no gráfico esfarrapado mostrado abaixo. Aqui, ampliamos o zoom para examinar o destino das trajetórias começando com as compensações em175 , 176 , 177 , ... 225 bits. Todos os pontos de partida dentro de 209 bits do alvo são indicados em azul; começando a uma distância maior são alaranjados. A maioria dos caminhos azuis converge, movendo-se rapidamente para a distância zero, enquanto a maioria dos caminhos laranja não. No entanto, perto da distância crítica, existem muitas exceções.O gráfico abaixo mostra outra visão de como a distância inicial do alvo afeta a probabilidade de convergência para o endereço de memória correto. A uma distância de170 bits são bem-sucedidos em quase todas as tentativas; às240 quase todos são malsucedidos. Parece que o ponto de interseção (no qual o sucesso e o fracasso são igualmente prováveis) fica aproximadamente a203 bits, ligeiramente abaixo do resultado de Kanerva, igual a209 .
(Não há nada de misterioso nessa discrepância. Nos cálculos de Kanerv, o círculo de acesso deve limitar exatamente 1000 células sólidas. Todas as células sólidas à distância estão incluídas nas minhas experiências.r ≤ 451 ;
em média lá 1070 lugares.)
A capacidade de recriar memórias a partir de informações parciais é um elemento familiar da vida humana. Você percebe um ator em um programa de televisão e entende que já o viu antes, mas não se lembra onde. Alguns minutos depois, você percebe: este é o Sr. Bates, de Downton Abbey , mas sem uma fantasia de mordomo. Reunião de graduação no ensino médio: olhando para um cavalheiro careca e apertado do outro lado da sala, você pode reconhecê-lo como um amigo que você conhecia apenas quando adolescente em shorts esportivos? Às vezes, é preciso muito esforço para preencher as lacunas. Já escrevi sobre meu inexplicável “ponto cego” em memória das glicínias em crescimento, que só consegui nomear após folhear pacientemente um catálogo de odores falsos: hortênsia, verbena e forsítia.Nossa capacidade de recuperar memórias de entradas incompletas ou ruidosas pode funcionar como um processo recursivo de lembrar vetores de alta dimensão? Essa seria uma hipótese atraente, mas há razões para desconfiar dela. Por exemplo, o cérebro parece capaz de extrair significado de sinais muito mais escassos. Não preciso ouvir quatro quintos da "Quinta Sinfonia" para identificá-la. As quatro primeiras notas são suficientes. A cor tremeluzente nas árvores faz com que você se lembre das espécies correspondentes de pássaros - cardeal, gaio-azul, carduelis. O menor suspiro com o cheiro de pó de giz me leva de volta a uma sala de aula abafada e sonolenta, na qual pintei por meio dia na minha mesa. Essas memórias são desencadeadas por pequenas frações da informação que as representa, muito menos de 80%.Kanerva menciona ainda outro recurso da memória humana que pode ser modelado usando o SDM: o fenômeno “girar na ponta da língua”, cuja essência é que você sabe que sabe algo, embora não possa chamá-lo imediatamente. Esse sentimento é bastante misterioso: se você não consegue encontrar o que estava procurando, como pode saber que tudo está armazenado no cérebro? O processo de recall recursivo do SDM oferece uma resposta possível. Quando padrões consecutivos recuperados da memória ficam constantemente mais próximos um do outro, podemos razoavelmente ter certeza de que eles convergirão para a meta mesmo antes de alcançá-la.Na tentativa de extrair um fato teimoso da memória, muitas pessoas acham que bater constantemente na mesma porta não é uma estratégia sábia. Em vez de exigir respostas imediatas - para comandar seu cérebro -, muitas vezes é melhor deixar a tarefa de lado, dar um passeio, talvez tirar uma soneca; a resposta pode vir como se não fosse convidada. Esta observação pode ser explicada pelo modelo SDM? Talvez pelo menos parcialmente. Se a sequência dos padrões recuperados não convergir, seu estudo adicional poderá ser infrutífero. Se você começar novamente a partir de um ponto vizinho no espaço da memória, poderá obter um resultado melhor. Mas há um mistério aqui: como encontrar um novo ponto de partida com melhores perspectivas? Você pode pensar que é bastante simples substituir aleatoriamente alguns bits no padrão de entrada e esperarcomo resultado, ele estará mais próximo da meta, mas a probabilidade disso é pequena. Se o vetor estiver em250 bits do alvo então750 bits já são verdadeiros (mas não sabemosqualdos750 bits); com qualquer alteração aleatória, temos uma probabilidade de3 / 4 chegar perto e ir ainda mais longe. Para progredir, você precisa saber em que direção se mover e emO espaço 1000- dimensional é uma pergunta difícil.Um aspecto da arquitetura SDM é que parece corresponder ao efeito de repetir ou escutar a memória. Se você repetir o poema várias vezes ou praticar a reprodução de uma música, pode esperar que, no futuro, se lembre mais facilmente. O modelo computacional deve exibir um efeito de treinamento semelhante. Mas isso não é possível na memória tradicional do computador: não há vantagens em reescrever o mesmo valor várias vezes no mesmo endereço. No SDM, por outro lado, cada repetição de um padrão adiciona outra cópia a todas as células sólidas dentro do círculo de acesso do padrão. Como resultado, ocorre menos influência dos padrões que se cruzam e o raio crítico de recuperação aumenta. O efeito tem um efeito significativo:ao gravar na memória uma única cópia do padrão, o raio crítico aumenta de aproximadamente200 bits a mais de300 .
Da mesma forma, a reprodução de um padrão pode dificultar a restauração do restante. Isso lembra o esquecimento quando um padrão impresso ativamente preenche seus vizinhos e captura parte de seu território. Esse efeito também afeta significativamente o SDM, tanto que até parece irreal. Parece que um vetor armazenado oito ou dez vezes monopoliza a maior parte da memória; ele se torna uma obsessão, a resposta para todas as perguntas.Uma vantagem importante da memória distribuída esparsa é sua resistência a falhas ou erros de hardware. Eu ficaria chateado se a perda de um único neurônio no meu cérebro deixasse um buraco na minha memória e não pudesse reconhecer a letra gou lembre-se de amarrar cadarços. O SDM não sofre com essa fragilidade. Quando cada padrão armazenado possui mil cópias, nenhum local é importante. E, de fato, você pode apagar todas as informações armazenadas em 60% das células sólidas e ainda ter o recall perfeito10000 , se assumirmos que estamos transmitindo um endereço absolutamente preciso como sinal. Com sinais parciais, o raio crítico diminui à medida que os pontos perdidos aumentam. Depois de destruir 60% dos locais, o raio crítico é compactado com200 + bits para aproximadamente150 bit. Após a destruição de 80% dos locais, a memória é seriamente danificada, mas não destruída.Que tal flutuar nas nuvens? Podemos vagar vagarosamente pelos prados de uma memória distribuída esparsa, saltando pela sorte de um padrão armazenado para outro? Voltarei a esta pergunta.
A maioria dos itens acima foi escrita há algumas semanas. Naquela época, li várias teorias concorrentes da memória e discuti seus méritos com colegas do Instituto Simons. Escrevi meus pensamentos sobre esse assunto, mas adiei a publicação por causa de dúvidas persistentes: eu entendi a matemática da memória distribuída esparsa corretamente? Agora estou feliz por não ter pressa.O programa de Cérebro e Computação terminou em maio. Seus participantes foram embora: voltei para a Nova Inglaterra, onde sálvia e alecrim são pequenos vasos de plantas e não arbustos exuberantes pairando sobre os caminhos. Minha manhã caminha para o campus de Berkeley, as oportunidades diárias para refletir sobre a natureza da memória e do aprendizado, tornaram-se "engramas" armazenadas em algum lugar da minha cabeça (no entanto, ainda não sei onde procurá-las).No entanto, não desisti da minha pesquisa. Depois de deixar Berkeley, continuei a ler sobre teorias da memória. Também escrevi programas para estudar a memória distribuída esparsa do Pentti Canerva e suas idéias mais abrangentes de "computação no hiperespaço". Mesmo que esse projeto não me revele os segredos da memória humana, ele definitivamente me ensinará algo sobre a arte matemática e computacional da navegação em espaços de alta dimensão.O diagrama abaixo mostra a maneira "correta" de implementar o SDM, como eu o entendo. O elemento principal é uma matriz cruzada, na qual as linhas correspondem a células de memória sólida e as colunas carregam sinais que simulam bits individuais do vetor de entrada. Há um milhão de linhas na memória canônica, cada uma delas atribuída aleatoriamenteEndereço de 1000 bits e1000 colunas Esta versão demo consiste em 20 linhas e 8 colunas.O processo ilustrado no diagrama consiste em armazenar um vetor de entrada na memória vazia. Oito bits de entrada são comparados simultaneamente com todos os 20 endereços de células sólidas. Quando o bit de entrada e o bit de endereço coincidem - zero com zero ou um com um -, colocamos um ponto na interseção da coluna e da linha. Depois, contamos o número de pontos em cada linha e, se o número for igual ou superior ao valor limite, escrevemos o vetor de entrada no registro associado a esta linha (campos azuis) . No nosso exemplo, o valor limite é 5 e em 8 dos 20 endereços há pelo menos 5 correspondências. Em
O valor limite da memória de 1000 bits será igual451 , e apenas cerca de um milésimo de todos os registros serão selecionados.A mágica dessa arquitetura é que todas as comparações de bits - e há um bilhão delas no modelo canônico - acontecem simultaneamente. Portanto, o tempo de acesso para leitura e gravação não depende do número de células sólidas e pode ser muito pequeno. Esse tipo geral de arranjo, conhecido como memória associativa ou de endereçamento de conteúdo, é usado em algumas áreas de computação, como ativar detectores de partículas no Large Hadron Collider e transmitir pacotes através de roteadores na Internet. E o diagrama do circuito pode ser associado a certas estruturas cerebrais. Kanerva indica que o cerebelo é muito semelhante a essa matriz. Linhas são células Purkinje planas, em forma de leque, coletadas como as páginas de um livro; colunas são fibras paralelas que se estendem por todas as células de Purkinje. (No entanto, o cerebelo não é uma região do cérebro de mamíferos,onde se pensa que a memória cognitiva esteja localizada.)Seria ótimo criar uma simulação SDM com base nessa arquitetura cruzada; Infelizmente, não sei como implementá-lo no equipamento de computador à minha disposição. Em um processador tradicional, não há maneiras de comparar simultaneamente todos os bits de entrada com os de células duras. Em vez disso, tenho que passar por um milhão de células sólidas em sequência e comparar milhares de bits em cada lugar. Isso equivale a comparações de um milhão de bits para cada elemento que é armazenado ou recuperado da memória. Acrescente a isso o tempo para escrever ou ler um milhão de bits (milhares de cópiasVetor de 1000 bits) e você obtém um processo bastante lento. Aqui está o código para salvar o vetor: function store(v::BitVector) for loc in SDM if hamming_distance(v, loc.address) <= r write_to_register!(loc.register, v) end end end
Essa implementação leva cerca de uma hora para inventariar a memória com 10.000 padrões memorizados. (O programa completo na forma de um notebook Jupyter está disponívelno GitHub.)Existe um algoritmo melhor para simular o SDM em um hardware comum? Uma das estratégias possíveis permite evitar a busca repetida de um conjunto de células sólidas dentro do círculo de acesso de um determinado vetor; em vez disso, quando um vetor é gravado pela primeira vez na memória, o programa armazena um ponteiro para cada um dos milhares de lugares em que está armazenado. No futuro, com qualquer referência ao mesmo vetor, o programa poderá seguir1000 ponteiros salvos e não varrem toda a matriz de um milhão de células sólidas. O preço desse esquema de armazenamento em cache é a necessidade de armazenar todos esses ponteiros - em seu SDM canônico10 milhões. Isso é bastante real e pode valer a pena se você deseja armazenar e recuperar apenas os valores exatos e conhecidos. Mas pense no que acontece em resposta a uma solicitação aproximada de memória com recuperação recursivaZ ′ e
Z ′ ′ e
Z ′ ′ ′ e assim por diante.
Nenhum desses valores intermediários será encontrado no cache; portanto, uma verificação completa de todas as células sólidas ainda será necessária.Talvez haja uma maneira mais complicada de abrir o caminho. Em um artigo de revisão recente, " Pesquisa aproximada de vizinhos mais próximos em grandes dimensões ", de Alexander Andoni, Peter Indyk e Ilya Razenstein, uma técnica intrigante é mencionada chamada hash sensível à localidade (hash baseado na localidade), mas até agora não entendo como adaptá-lo à tarefa SDM.
A capacidade de recuperar memórias de sinais parciais é dolorosamente uma característica humana do modelo computacional. Talvez ele possa ser expandido para fornecer um mecanismo plausível de vaguear pelos corredores da mente, nos quais um pensamento leva ao seguinte.No começo, pensei que sabia como isso poderia funcionar. Padrão armazenado do SDMX cria uma área de atração em torno de si, na qual qualquer estudo recursivo da memória, começando de um raio crítico, converge paraX . At
10.000 desses atratores, posso imaginar como eles dividem o espaço da memória em uma matriz de módulos individuais, como espuma de bolhas de sabão de tamanho grande. A área para cada elemento armazenado ocupa um volume separado, cercado por todos os lados por outras áreas e fica encostado a eles, com limites claros entre domínios adjacentes. Em apoio a essa proposição, posso ver que o raio médio da região de atração, quando novos conteúdos são adicionados à memória, é compactado, como se as bolhas fossem compactadas devido ao aglomerado.Essa visão de processos dentro do SDM sugere uma maneira simples de se mover de um domínio para outro: você precisa alternar aleatoriamente um número suficiente de bits do vetor para movê-lo da atração atual para a vizinha e, em seguida, aplicar o algoritmo de recursividade. Repetir este procedimento irá gerar uma passagem aleatória de muitos tópicos armazenados na memória.O único problema é que essa abordagem não funciona. Se você verificá-lo, ele realmente vagará sem rumo1000 grade dimensional, mas nunca encontraremos nada armazenado lá. Todo o plano é baseado em um entendimento intuitivo errôneo da geometria SDM. Os vetores armazenados com suas regiões de atraçãonãosãocompactados como bolhas de sabão; pelo contrário, são galáxias isoladas penduradas em um universo vasto e livre, separadas por enormes extensões de espaço vazio entre elas. Breves cálculos nos mostram a verdadeira natureza da situação. No modelo canônico, o raio crítico que determina a região de atração é aproximadamente igual a200 .
O volume de uma única região, medido como o número de vetores internos, ésum200k=1(1000k)
que é aproximadamente igual 10216 .
Portanto, todos 10000 áreas ocupam o volume 10220 .
Este é um número grande, mas ainda é uma pequena fração 1000tridimensional. Entre todos os vértices do cubo, apenas1 de
1080fica a 200 bits do padrão salvo. Você pode passear para sempre sem tropeçar em nenhuma dessas áreas.(Para sempre? Ah, sim, sim, pode não durar para sempre. Como um hipercubo é uma estrutura finita, de qualquer forma, mais cedo ou mais tarde, ela deve se tornar periódica ou cair em um ponto fixo do qual nunca sai, ou se perder em um ciclo repetitivo Os vetores armazenados são pontos fixos; além disso, existem muitos outros pontos fixos que não correspondem a nenhum padrão significativo, seja como for, em todos os meus experimentos com programas SDM, nunca consegui "acidentalmente" entrar em um caminho salvo. vire.)Tentando salvar essa má idéia, realizei várias outras experiências. Em um caso, salvei arbitrariamente vários conceitos relacionados em endereços vizinhos ("vizinhos", isto é, dentro de 200 ou 300 bits). Talvez nesse cluster eu possa pular com segurança de um ponto a outro. Mas, de fato, todo o aglomerado é condensado em uma grande região de atração para o padrão central, que se torna um buraco negro que suga todos os seus companheiros. Eu também tentei brincar com o valorr(raio do círculo de acesso para todas as operações de leitura e gravação). No modelo canônicor=451 .
Eu pensei que escrever para um círculo um pouco menor ou ler um círculo um pouco maior deixaria espaço suficiente para a aleatoriedade nos resultados, mas essa esperança também não se concretizou.Todas essas tentativas foram baseadas em um equívoco de espaços vetoriais de alta dimensão. Uma tentativa de encontrar grupos de valores vizinhos em um hipercubo é inútil; padrões armazenados são muito espaçados em volume. A criação arbitrária de agrupamentos densos também não faz sentido, porque destrói a propriedade que torna o sistema interessante - a capacidade de convergir para um elemento armazenado de qualquer lugar da área de atração. Se queremos criar um algoritmo de vagueamento na nuvem para SDM, precisamos criar outra maneira.
Em busca de um mecanismo alternativo do fluxo da consciência, você pode tentar adicionar um pouco de teoria dos grafos ao mundo da memória distribuída esparsa. Depois, podemos dar um passo atrás, voltando à idéia original de vagar mental sob a forma de uma caminhada aleatória em torno de um gráfico ou rede. O elemento chave para incorporar esses gráficos no SDM acaba sendo uma ferramenta familiar para nós: um operador OR exclusivo.Como mencionado acima, a distância de Hamming entre dois vetores é calculada tomando seu XOR bit a bit e contando as unidades resultantes. Mas a operação XOR fornece não apenas a distância entre dois vetores, mas também outras informações; também determina a orientação ou direção da linha que os conecta. Em particular, a operaçãou⊻v fornece um vetor listando os bits que precisam ser alterados para converter u em
ve vice-versa. Também pode ser percebido1 e
0 no vetor XOR como uma sequência de instruções que você precisa seguir para rastrear o caminho u antes
v .
O XOR sempre foi o meu favorito de todas as funções booleanas. Este é um operador de diferença, mas, diferentemente da subtração, o XOR é simétrico:u⊻v=v⊻u .
Além disso, o XOR é sua própria função inversa. Este conceito é fácil de entender com funções com um único argumento:f(x) é sua própria função inversa se f(f(x))=x, ou seja, depois de aplicar a função duas vezes, podemos voltar para onde começamos. Para uma função com dois argumentos, como o XOR, a situação é mais complicada, mas ainda é verdade que executar a mesma ação duas vezes restaura o estado original. Em particular, seu⊻v=w então u⊻w=v e
v⊻w=u .
Três vetores - u ,
v e
w- crie um pequeno universo fechado. Você pode aplicar o operador XOR a qualquer par deles e obter o terceiro elemento do conjunto. A seguir, é apresentada uma tentativa de ilustrar essa ideia. Cada quadrado imita10000vetor de bits alinhado como uma tabela de 100 x 100 de pixels claros e escuros. Os três padrões parecem aleatórios e independentes, mas, na verdade, cada painel é XOR dos outros dois. Por exemplo, no quadrado mais à esquerda, cada pixel vermelho corresponde a verde ou azul, mas nunca a ambos.A propriedade autoinvertibilidade nos informa uma nova maneira de organizar as informações no SDM. Suponha que a palavra borboleta e seu equivalente francês papillon sejam armazenados em vetores aleatórios e arbitrários. Eles não estarão próximos um do outro; a distância entre eles provavelmente será de aproximadamente 500 bits. Agora calculamos o XOR desses vetores de borboleta ⊻ papillon ; o resultado é outro vetor que também pode ser salvo no SDM. Esse novo vetor codifica uma conexão inglês-francês . Agora temos uma ferramenta de tradução. Tendo um vetor para borboleta , executamos um XOR para ele com o vetor Inglês-Francês e obtemos papillon . O mesmo truque funciona na direção oposta.Esse par de palavras e a conexão entre elas formam o núcleo da rede semântica. Vamos aumentar um pouco. Podemos salvar a palavra lagarta em um endereço arbitrário e depois calcular a borboleta ⊻ lagarta e chame esse novo relacionamento adulto-jovem . Como é chamada a lagarta em francês ? A lagarta em francês é chenille . Adicionamos esse fato à rede armazenando chenille na caterpillar ⊻ Inglês-Francês . Agora é a hora da mágica: se tomarmos papillon ⊻ Em chenille , aprendemos que essas palavras são relacionadas por um relacionamento adulto-jovem , mesmo que não tenham indicado isso explicitamente. Essa limitação é imposta pela geometria da própria estrutura.O gráfico pode ser expandido ainda mais adicionando mais palavras relacionadas ao inglês-francês ( dog-chien, horse-cheval ) ou mais pares adulto-juventude: ( cachorro-cachorro, broto de árvore ). Você também pode explorar muitos outros relacionamentos: sinônimos, antônimos, irmãos, causa-efeito, predador-presa etc. Também há uma ótima maneira de associar vários eventos a uma sequência cronológica, simplesmente executando XOR nos endereços do predecessor e sucessor do nó.A maneira do XOR de conectar conceitos é um híbrido de geometria e teoria de grafos. Na teoria matemática dos gráficos comuns, distâncias e direções não são significativas; a única coisa que importa é a presença ou ausência de arestas de conexão entre os nós. No SDM, por outro lado, uma aresta que representa uma conexão entre nós é um vetor de comprimento finito e diretividade em1000espaço tridimensional. Para um determinado nó e link, a operação XOR "vincula" esse nó a uma posição específica em outro lugar do hipercubo. A estrutura resultante é absolutamente rígida - não podemos mover o nó sem alterar todas as conexões nas quais ele participa. No caso de borboletas e lagartas, uma configuração de quatro nós inevitavelmente é um paralelogramo, onde pares em lados opostos têm o mesmo comprimento e direção.Outra característica exclusiva de um gráfico associado a uma operação XOR é que nós e arestas têm exatamente a mesma representação. Na maioria das implementações computacionais de idéias da teoria dos grafos, as duas entidades são muito diferentes; um nó pode ser uma lista de atributos e uma borda pode ser um par de ponteiros para os nós conectados por ele. No SDM, os nós e as bordas são simplesmente vetores de alta dimensão que podem ser armazenados no mesmo formato.Quando usada como modelo de memória humana, a ligação XOR nos dá a capacidade de conectar quaisquer dois conceitos através de qualquer conexão em que possamos pensar. Muitas conexões no mundo real são assimétricas; eles não têm a propriedade de auto-inversibilidade que o XOR possui. O vetor XOR pode declarar que Edward e Victoria são os pais e os filhos, mas não informa qual deles é quem. Pior, o vetor XOR conecta exatamente dois nós e nunca mais, de modo que o pai de vários filhos nos coloca em uma posição desagradável. Outra dificuldade é manter a integridade de todos os ramos de um gráfico grande entre si. Não podemos simplesmente adicionar nós e arestas arbitrariamente; eles devem ser anexados ao gráfico na ordem correta. Inserir um estágio pupal entre uma borboleta e uma lagarta exigirá reescrever a maior parte do padrão;você precisará mover vários nós para novos locais dentro do hipercubo e recalcular os vetores de conexão que os conectam, garantindo que cada alteração no lado inglês reflita corretamente no francês.Alguns desses problemas são resolvidos em outra técnica baseada em XOR que Kanerva chama de empacotamento. A idéia é criar algum tipo de banco de dados para armazenar pares atributo-valor. Uma entrada de livro pode ter atributos como autor , título e editor, cada um dos quais está emparelhado com um valor correspondente. O primeiro estágio do empacotamento de dados é um XOR separado de cada par de atributo e valor. Em seguida, os vetores obtidos dessas operações são combinados para criar um único vetor de resumo usando o mesmo algoritmo descrito acima para armazenar vários vetores em uma célula SDM sólida. Executando o XOR do nome do atributo com esse vetor combinado, obtemos uma aproximação do valor correspondente próximo o suficiente para determiná-lo pelo método de recuperação recursiva. Em experimentos com o modelo canônico, descobri que1000 Um vetor de bits pode armazenar seis ou sete pares de valor-atributo sem muito risco de confusão.Encadernação e agrupamento não são mencionados no livro de Kanerva de 1988, mas ele fala sobre eles em detalhes em artigos mais recentes. (Consulte a seção “Leitura adicional” abaixo.) Indica que, com esses dois operadores, muitos vetores de alta dimensão assumem a estrutura de um campo algébrico, ou pelo menos a aproximação de um campo. Um exemplo canônico de um campo é um conjunto de números reais, e não com as operações de adição e multiplicação, bem como seus operadores inversos. Números reais criam um conjunto fechado sob essas operações: adição, subtração, multiplicação ou divisão de dois números reais fornece outro número real (com exceção da divisão por zero, que sempre é um curinga no baralho). Da mesma forma, o conjunto de vetores binários é fechado para vinculação e empacotamento, excetoque às vezes, para restaurar um membro de um conjunto, o resultado extraído do vetor de faixas precisa ser "limpo" pelo processo de recuperação recursiva.
A vinculação e o agrupamento podem nos ajudar a obter um algoritmo de desvio da nuvem? Eles nos fornecem ferramentas básicas para navegar em um gráfico semântico, incluindo a capacidade de realizar travessias aleatórias. A partir de qualquer nó no gráfico XOR conectado, o algoritmo de deslocamento aleatório seleciona entre todos os links disponíveis nesta picada. Uma escolha aleatória do vetor de comunicação e a execução XOR desse vetor com o endereço do nó nos levam a outro nó no qual o procedimento pode ser repetido. Da mesma forma, nos pares "atributo-valor" do pacote, um atributo selecionado aleatoriamente chama o valor correspondente, que se torna o próximo nó sob investigação.Mas como um algoritmo sabe quais relacionamentos ou quais algoritmos estão disponíveis para seleção? Relacionamentos e atributos são representados na forma de vetores e são armazenados na memória como qualquer outro objeto; portanto, não há maneiras óbvias de obter esses vetores, a menos que você saiba o que eles realmente são. Não podemos contar a memória de "mostre-me todas as conexões". Só podemos mostrar o padrão e perguntar “existe um vetor assim? Você viu algo assim?Na memória tradicional do computador, podemos obter um despejo de memória: acesse todos os endereços e exiba o valor encontrado em cada local. Mas para a memória distribuída não existe esse procedimento. Esse fato deprimente me foi dado com dificuldade. Ao construir o modelo computacional do SDM, consegui ficar bom o suficiente para armazenar milhares de padrões gerados aleatoriamente em minha memória. Mas não consegui extraí-los porque não sabia o que solicitar. A solução foi criar uma lista separada fora do próprio SDM, na qual tudo que eu salvar seria gravado. Mas a suposição de que o cérebro teria mantido a memória e o índice dessa memória parece exagerada. Por que não usar apenas um índice, porque é muito mais fácil?Devido a essa limitação, parece que a memória distribuída esparsa está equipada para servir os sentidos, mas não a imaginação. Ele pode reconhecer padrões familiares e salvar novos que serão reconhecidos em reuniões futuras, mesmo a partir de sinais parciais ou danificados. Graças à vinculação ou empacotamento, a memória também pode rastrear links entre pares de itens armazenados. Mas tudo o que está escrito na memória só pode ser recuperado através da transmissão de um sinal adequado.Quando olho para o pôster de pós-graduação , vejo Dustin Hoffman olhando a perna de Anne Bancroft em uma meia. Esse estímulo visual excita subconjuntos de neurônios no córtex cerebral, correspondendo às minhas lembranças de atores, personagens, enredo, trilha sonora e 1967. Toda essa atividade cerebral pode ser explicada pela arquitetura da memória SDM, se assumirmos que subconjuntos de neurônios podem ser representados de alguma forma abstrata como vetores binários aleatórios longos. Mas não se pode explicar com tanta facilidade o fato de que posso causar todas as mesmas sensações no cérebro sem ver essa imagem. Como extraio especificamente essas longas seqüências aleatórias de um imenso entrelaçamento de vetores, sem saber exatamente onde elas estão?
Isso conclui minha longa jornada - uma nota de dúvida e decepção. Não lhe surpreende que eu não tenha conseguido chegar à essência. Este é um tópico muito complexo.No primeiro dia do programa de Cérebro e Computação do Instituto Simons, Jeff Lichtman, que trabalhou no rastreamento do circuito de comutação no cérebro de ratos, fez a pergunta: as neurociências já chegaram ao momento de Watson-Crick? Na genética molecular, chegamos ao ponto em que conseguimos remover uma fita de DNA de uma célula viva e ler muitas das mensagens nela. Podemos até gravar nossas próprias mensagens e inseri-las novamente no corpo. Uma habilidade semelhante na neurociência seria estudar o tecido cerebral e ler as informações nele armazenadas - conhecimento, memórias, visões de mundo. Talvez pudéssemos até escrever informações diretamente no cérebro.A ciência nem chegou perto de alcançar esse objetivo, para a alegria de muitos. Inclusive eu: não quero que meus pensamentos sejam sugados da minha cabeça por eletrodos ou pipetas e substituídos por #fakenews. No entanto, eu realmente quero saber como o cérebro funciona.O programa do Instituto Simons me cegou com o recente sucesso da neurociência, mas também me fez perceber que uma das questões mais sérias permanece sem resposta. Os projetos de conectividade de Lichtmann e outros criam um mapa detalhado de milhões de neurônios e suas conexões. Novas técnicas de gravação nos permitem ouvir os sinais emitidos por neurócitos individuais e acompanhar as ondas de excitação em grandes áreas do cérebro. Temos um catálogo bastante abrangente de tipos de neurônios e sabemos muito sobre sua fisiologia e bioquímica. Tudo isso é impressionante, mas ainda existem quebra-cabeças. Podemos gravar sinais neurais, mas na maioria das vezes não sabemos o que eles significam. Não sabemos como as informações são codificadas e armazenadas no cérebro. Isso é semelhante a tentar entender o diagrama de circuitos de um computador digital sem o conhecimento da aritmética binária e da lógica booleana.O modelo de memória distribuída esparsa do Pentti Canerva é uma tentativa de preencher algumas dessas lacunas. Esta não é a única tentativa desse tipo. Uma alternativa mais conhecida é a abordagem de John Hopfield - o conceito de rede neural como sistema dinâmico, assumindo a forma de um atrator que minimiza a energia. Essas duas idéias têm princípios básicos comuns: a informação é espalhada por um grande número de neurônios e codificada de uma forma que não é óbvia para um observador externo; mesmo assim, ele terá acesso a todos os neurônios e aos sinais que passam por eles. Esquemas semelhantes, que são essencialmente matemáticos e computacionais, estão conceitualmente localizados no meio entre a psicologia de alto nível e a engenharia neural de baixo nível. Esta camada contém o valorLeitura adicionalHopfield, JJ (1982). Neural networks and physical systems with emergent collective computational abilities.
Proceedings of the National Academy of Sciences 79(8):2554–2558.
Kanerva, Pentti. 1988.
Sparse Distributed Memory . Cambridge, Mass.: MIT Press.
Kanerva, Pentti. 1996. Binary spatter-coding of ordered
K -tuples. In C. von der Malsburg, W. von Seelen, JC Vorbruggen and B. Sendhoff, eds.
Artificial Neural Networks—ICANN 96 Proceedings , pp. 869–873. Berlin: Springer.
Kanerva, Pentti. 2000. Large patterns make great symbols: An example of learning from example. In S. Wermter and R. Sun, eds.
Hybrid Neural Systems , pp. 194–203. Heidelberg: Springer.
PDFKanerva, Pentti. 2009. Hyperdimensional computing: An introduction to computing in distributed representation with high-dimensional random vectors.
Cognitive Computation 1(2):139–159.
PDFKanerva, Pentti. 2010. What we mean when we say “What's the Dollar of Mexico?”: Prototypes and mapping in concept space. Report FS-10-08-006, AAAI Fall Symposium on Quantum Informatics for Cognitive, Social, and Semantic Processes.
PDFKanerva, Pentti. 2014. Computing with 10,000-bit words. Fifty-second Annual Allerton Conference, University of Illinois at Urbana-Champagne, October 2014.
PDF Plate, Tony. 1995. Holographic reduced representations. IEEE Transactions on Neural Networks 6(3):623–641. PDF
Plate, Tony A. 2003. Holographic Reduced Representation: Distributed Representation of Cognitive Structure . Stanford, CA: CSLI Publications.