Projeto de Programa Fenotrópico

15

Recentemente, deparei com uma idéia apresentada por Jaron Lanier chamada "programação fenotrópica".

A idéia é usar interfaces de "superfície" em vez de interfaces de ponto único em programas de computador que utilizam estatísticas para descobrir erros menores que normalmente causariam um programa "clássico" travar catastroficamente.

A descrição de duas linhas está aqui:

De acordo com Jaron, a "diferença real entre a idéia atual de software, que é a aderência ao protocolo, e a idéia [que ele está] discutindo sobre reconhecimento de padrões, tem a ver com os tipos de erros que estamos criando" e se "não" Se não encontrar uma maneira diferente de pensar e criar software, não escreveremos programas maiores que 10 milhões de linhas de código, independentemente da rapidez com que nossos processadores se tornem.

A explicação um pouco mais longa está aqui . E a explicação ainda mais longa está aqui .

Então, a pergunta, olhando para além das óbvias conotações de robô-senhorio que as pessoas tendem a entender, como alguém realmente projetaria e escreveria um "programa fenotrópico"?

adv
fonte
1
Sem ofensa, mas os artigos que você vinculou são muito vagos e ingênuos. Você poderia ser mais preciso sobre o que entende por phenotropic program.
Simon Bergot
Leia o mais longo. Ele descreve em detalhes sangrentos.
Adv
4
Eu acho que a única maneira de responder a isso é definir o que é "programa fenotrópico". Nesse caso, a resposta se torna baseada em opiniões. Portanto, antes de perguntar como escrever um "programa fenotrópico", pergunte o que é "programa fenotrópico".
Euphoric
1
@ Simon: A pergunta é basicamente a mesma coisa, então não sei se sua solicitação é possível sem o OP realmente responder à pergunta.
Robert Harvey
1
Tópico relacionado (considere o autor do texto): mail-archive.com/[email protected]/msg03808.html
Thiago Silva

Respostas:

23

Lanier inventou uma palavra de 50 centavos na tentativa de lançar uma rede em torno de um conjunto específico de idéias que descrevem um modelo computacional para criar programas de computador com certas características identificáveis.

A palavra significa:

Um mecanismo para interação de componentes que usa reconhecimento de padrões ou cognição artificial no lugar da chamada de função ou passagem de mensagens.

A ideia vem em grande parte da biologia. Seu olho faz interface com o mundo, não através de uma função como See(byte[] coneData), mas através de uma superfície chamada retina. Não é uma distinção trivial; um computador deve verificar todos os bytes coneDataum por um, enquanto o seu cérebro processa todas essas entradas simultaneamente.

insira a descrição da imagem aqui

Lanier afirma que a última interface é mais tolerante a falhas, o que é (uma única coneDatafalha pode quebrar todo o sistema). Ele afirma que ele permite a correspondência de padrões e uma série de outros recursos que normalmente são difíceis para computadores, o que faz.

O mecanismo "fenotrópico" por excelência em um sistema de computador seria a Rede Neural Artificial (RNA). É preciso uma "superfície" como entrada, em vez de uma interface definida. Existem outras técnicas para alcançar alguma medida de reconhecimento de padrões, mas a rede neural é a mais alinhada com a biologia. Fazer uma RNA é fácil; é difícil fazer com que ele execute a tarefa que você deseja que seja executada de maneira confiável, por vários motivos:

  1. Como são as "superfícies" de entrada e saída? Eles são estáveis ​​ou variam em tamanho ao longo do tempo?
  2. Como você acerta a estrutura da rede?
  3. Como você treina a rede?
  4. Como você obtém características de desempenho adequadas?

Se você estiver disposto a se separar da biologia, poderá dispensar o modelo biológico (que tenta simular a operação dos neurônios biológicos reais) e construir uma rede que seja mais intimamente aliada aos "neurônios" reais de um sistema de computador digital (lógica portões). Essas redes são chamadas de redes lógicas adaptativas (ALN). A maneira como eles funcionam é criando uma série de funções lineares que se aproximam de uma curva. O processo é mais ou menos assim:

insira a descrição da imagem aqui

... onde o eixo X representa alguma entrada no ALN e o eixo Y representa alguma saída. Agora imagine o número de funções lineares expandindo-se conforme necessário para melhorar a precisão e imagine que o processo ocorra em n dimensões arbitrárias, implementado inteiramente com portas lógicas AND e OR, e você tenha alguma noção da aparência de um ALN.

Os ALNs têm certas características muito interessantes:

  1. Eles são facilmente treináveis,
  2. Eles são muito previsíveis, ou seja, pequenas mudanças na entrada não produzem oscilações selvagens na saída,
  3. Eles são extremamente rápidos, porque são construídos no formato de uma árvore lógica e funcionam como uma pesquisa binária.
  4. Sua arquitetura interna evolui naturalmente como resultado do conjunto de treinamento

Portanto, um programa fenotrópico se pareceria com isso; teria uma "superfície" para entrada, uma arquitetura e comportamento previsíveis e seria tolerante a entradas barulhentas.

Leitura Adicional
Uma Introdução às Redes Lógicas Adaptativas com um Aplicativo para Auditar a Avaliação de Riscos
"Orientado a Objetos" vs "Orientado a Mensagens", de Alan Kay

Robert Harvey
fonte
1
Corrija-me se estiver errado, mas uma entrada "superficial" soa como uma coleção - de componentes independentes (ou principalmente independentes). No exemplo do olho, poderia ter sido assim See(List<Cone> cones)(onde cada um Coneé independente um do outro), sim?
FrustratedWithFormsDesigner
1
@Frustrated Você obviamente pode simular uma superfície com uma matriz de bytes, mas volte à definição de Lanier, que substitui a passagem de mensagens e a chamada de função pelo reconhecimento de cognição e padrão. Está ligado ao problema de escalabilidade descrito aqui . A tolerância a falhas também faz parte da equação. Pense em "interfaces mais inteligentes".
Robert Harvey
3
Re: "mais tolerante a falhas". Lanier já viu ilusões de ótica? Ele já olhou para a psicologia do cérebro. O cérebro SEMPRE tentará entender o que suas informações estão dizendo, não importa quão erradas sejam essas conclusões. O funcionamento do cérebro é extremamente defeituoso. Portanto, desde que não importe se o programa funcione com bastante frequência, como um humano típico, suponho que o modelo a que se refere esteja correto. No entanto, na maioria das vezes as pessoas esperam que os computadores estejam corretos. Será difícil vender um carro acionado por computador que evite acidentes na maioria das vezes.
Dunk
2
@ Dunker: ... mas ainda é legal construir e vender carros para motoristas humanos que conseguem evitar acidentes na maioria das vezes.
Doc Brown
2
@ Dunk o ponto não é a presença de falhas - caso contrário, seguiríamos o caminho da matemática clássica para provar tudo. O ponto é 1: o escopo do impacto da falha (o universo não falha se eu confundir um coelho com um gorila - na verdade, ainda funciono como um ser humano depois disso, meu cérebro e meu filho também), 2 : a sala que as entidades físicas / biológicas precisam recuperar, fornecer feedback e investigar alternativas que "mantêm as coisas funcionando - mesmo de maneira não ideal"; e 3: a idéia de que essas características são convincentes para nós queremos que eles nos nossos sistemas artificiais
Thiago Silva
1

Acho que estamos no começo de uma das etapas necessárias para chegar lá e que está reunindo muitos dados em formatos que podem ser analisados. Internet, pesquisas no Google, Fitbit (todos os passos que você der, todos os seus passos, estarei observando você.), FourSquare, uma localização geográfica de smartphones, postagens no Facebook e dados de perguntas do SO estão sendo reunidos. Não estamos nem perto da quantidade de dados sensoriais que o ser humano médio compila ao longo da vida, mas estamos chegando perto.

Comece a categorizar milhões de fotos de pássaros e obtenha feedback de pessoas dizendo que não é um pássaro e comece a criar um algoritmo. A partir daí, uma impressão mais confusa (eu chamaria de modelo, mas isso é muito exato para o que estamos tentando codificar).

class Birdish

Como um cão de estimação sabe tanto sobre o dono? Porque isso a assiste muito. O cão ouviu carros entrando na calçada e correlacionando isso com o proprietário abrindo a porta da frente que parece que o cachorro pode reconhecer um carro pelo som. Poderíamos fazer isso também, mas não vemos razão para atender a isso. E é isso que está errado com o software atual, ele não presta atenção ao que o usuário está fazendo. Apenas espera que o usuário faça o que a TI espera que ele faça.

Algo tão simples como definir um despertador poderia ser feito com uma pequena observação / análise dos meus hábitos atuais. Desistimos de definir os cronômetros do videocassete antes que a tecnologia fosse substituída pelo digital. E isso teria acontecido tão rápido se pudéssemos conectar o TV Guide com o videocassete? Eu assisti ao mesmo programa de TV 4 semanas seguidas ao mesmo tempo, mas no quinto, eu nem liguei a TV. Obviamente, eu quero gravá-lo. Você não pode dizer que estou ficando atrasado no trabalho escrevendo este post e com o meu trajeto típico não chegará em casa a tempo? Você tem os dados, faça as contas.

Reúna mais e mais dados e, em seguida, você poderá encontrar maneiras melhores de analisá-las, reconhecê-las e encobri-las. Estamos indo além do que pode ser inserido apenas a partir de um teclado com nossas câmeras de telefone e, em breve, câmeras de vidro ocular. É apenas o começo.

JeffO
fonte
1

Aqui está um conjunto de slides para definir uma linguagem de programação probabilística no Scala .

É o primeiro exemplo de implementação decente para alguns dos componentes principais do sistema que Jaron Lanier propõe.

New Alexandria
fonte
Isso parece muito bom. Talvez eu dê uma facada no design de uma biblioteca para Java que faça o mesmo.
adv
@adv como encontraríamos isso, se você encontrar?
Nova Alexandria
1
Vou postar um link em um repositório do github quando for criá-lo.
adv
-1

Um pensamento que tive recentemente:

Se você usou idéias de alto nível, como o Haskell, talvez o Monad, para agrupar chamadas de procedimento remoto para outros sistemas. Você envia uma solicitação ao servidor. Mas nada volta (o servidor está quebrado). Ou uma promessa volta (o servidor está ocupado) e seus programas continuam trabalhando com esses valores Nenhum ou Prometido. É como a tolerância a falhas que Lanier está procurando.

Talvez haja maneiras de encapsular outras eventualidades. Por exemplo, chamadas remotas que retornam com uma aproximação cada vez mais refinada ao longo do tempo por algum tipo de negociação em segundo plano. ie o que volta é algo como uma promessa, mas não apenas "continue segurando e trabalhando com isso e um valor adequado aparecerá em breve" mas "continue segurando e trabalhando com isso e uma melhor aproximação aparecerá em breve". (E de novo e de novo). Isso poderia ocultar muitas falhas do programador, assim como os protocolos de rede ocultam muitas falhas de rede de baixo nível do programador.

interstar
fonte
Como isso responde à pergunta?
mosquito
Se bem entendi, a Programação Fenotrópica é uma maneira de programar sistemas grandes (geralmente com vários computadores) e robustos. O problema é que todas as metáforas biológicas tornam vagas e difíceis de traduzir em termos práticos de programação. Aqui, estou sugerindo que certas construções de programação que não são vagas (mônadas, promessas etc.) podem ser uma maneira de criar algumas dessas idéias concretas e praticamente programáveis ​​de Lanier.)
interstar