Diseño de programa fenotrópico

15

Recientemente me encontré con una idea presentada por Jaron Lanier llamada "programación fenotrópica".

La idea es utilizar interfaces 'de superficie' en lugar de interfaces de un solo punto en programas de computadora que utilizan estadísticas para eliminar errores menores que típicamente causarían que un programa "clásico" se bloquee catastróficamente.

La descripción de dos líneas está aquí:

Según Jaron, la "diferencia real entre la idea actual del software, que es el cumplimiento del protocolo, y la idea [que está discutiendo], el reconocimiento de patrones, tiene que ver con los tipos de errores que estamos creando" y si "no lo hacemos Si no encuentra una manera diferente de pensar y crear software, no escribiremos programas de más de 10 millones de líneas de código, sin importar cuán rápido se vuelvan nuestros procesadores.

La explicación un poco más larga está aquí . Y la explicación aún más larga está aquí .

Entonces, la pregunta, mirando más allá de las connotaciones obvias de robot-señor supremo que la gente tiende a elegir, ¿cómo diseñaría y escribiría realmente un "programa fenotrópico"?

adv
fuente
1
Sin ofender, pero los artículos que ha vinculado son muy vagos e ingenuos. ¿Podría ser más preciso sobre lo que entiende phenotropic program?
Simon Bergot
Lee el más largo. Lo describe con detalles sangrientos.
adv
44
Creo que la única forma de responder a esto es definir qué es un "programa fenotrópico". En cuyo caso la respuesta se vuelve basada en la opinión. Entonces, antes de preguntar cómo escribir un "programa fenotrópico", pregunte qué es "programa fenotrópico".
Eufórico el
1
@Simon: La pregunta es básicamente hacer lo mismo, así que no sé si tu solicitud es posible sin que el OP realmente responda la pregunta.
Robert Harvey
1
Tema relacionado (considere el autor del texto): mail-archive.com/[email protected]/msg03808.html
Thiago Silva

Respuestas:

23

Lanier ha inventado una palabra de 50 centavos en un intento de lanzar una red alrededor de un conjunto específico de ideas que describen un modelo computacional para crear programas de computadora que tienen ciertas características identificables.

La palabra significa:

Un mecanismo para la interacción de componentes que utiliza reconocimiento de patrones o cognición artificial en lugar de invocación de funciones o paso de mensajes.

La idea proviene en gran medida de la biología. Su ojo interactúa con el mundo, no a través de una función como See(byte[] coneData), sino a través de una superficie llamada retina. No es una distinción trivial; una computadora debe escanear todos los bytes coneDatauno por uno, mientras que su cerebro procesa todas esas entradas simultáneamente.

ingrese la descripción de la imagen aquí

Lanier afirma que la última interfaz es más tolerante a fallas, lo cual es (un solo bit deslizado coneDatapuede romper todo el sistema). Afirma que permite la coincidencia de patrones y una serie de otras capacidades que normalmente son difíciles para las computadoras, lo que hace.

El mecanismo "fenotrópico" por excelencia en un sistema informático sería la Red Neural Artificial (ANN). Se necesita una "superficie" como entrada, en lugar de una interfaz definida. Existen otras técnicas para lograr alguna medida de reconocimiento de patrones, pero la red neuronal es la que está más estrechamente alineada con la biología. Hacer un ANN es fácil; lograr que realice la tarea que desea que realice de manera confiable es difícil, por varias razones:

  1. ¿Cómo son las "superficies" de entrada y salida? ¿Son estables o varían de tamaño con el tiempo?
  2. ¿Cómo se obtiene la estructura de red correcta?
  3. ¿Cómo entrenas a la red?
  4. ¿Cómo se obtienen características de rendimiento adecuadas?

Si está dispuesto a separarse de la biología, puede prescindir del modelo biológico (que intenta simular el funcionamiento de las neuronas biológicas reales) y construir una red que esté más estrechamente aliada con las "neuronas" reales de un sistema informático digital (lógica puertas). Estas redes se llaman Adaptive Logic Networks (ALN). La forma en que funcionan es creando una serie de funciones lineales que se aproximan a una curva. El proceso se parece a esto:

ingrese la descripción de la imagen aquí

... donde el eje X representa alguna entrada al ALN, y el eje Y representa alguna salida. Ahora imagine la cantidad de funciones lineales que se expanden según sea necesario para mejorar la precisión, e imagine que el proceso ocurre en n dimensiones arbitrarias, implementado completamente con compuertas lógicas AND y OR, y tiene una idea de cómo se ve un ALN.

Los ALN tienen ciertas características muy interesantes:

  1. Son bastante fáciles de entrenar,
  2. Son muy predecibles, es decir, ligeros cambios en la entrada no producen cambios bruscos en la salida,
  3. Son rápidos como el rayo, porque están construidos en forma de árbol lógico y funcionan de manera muy similar a una búsqueda binaria.
  4. Su arquitectura interna evoluciona naturalmente como resultado del conjunto de entrenamiento.

Entonces, un programa fenotrópico se vería así; tendría una "superficie" para la entrada, una arquitectura y un comportamiento predecibles, y sería tolerante a las entradas ruidosas.

Lecturas adicionales
Una introducción a las redes lógicas adaptativas con una aplicación para auditar la evaluación de riesgos
"Orientado a objetos" versus "Orientado a mensajes", de Alan Kay

Robert Harvey
fuente
1
Corríjame si me equivoco, pero una entrada de "superficie" suena como una colección de componentes independientes (o en su mayoría independientes). En el ejemplo del ojo, podría haberse visto así See(List<Cone> cones)(donde cada uno Conees independiente el uno del otro), ¿sí?
FrustratedWithFormsDesigner
1
@ Frustrado Obviamente, puede simular una superficie con una matriz de bytes, pero vuelva a la definición de Lanier, que reemplaza el paso de mensajes y la invocación de funciones con cognición y reconocimiento de patrones. Se relaciona con el problema de escalabilidad descrito aquí . La tolerancia a fallas también es parte de la ecuación. Piense en "interfaces más inteligentes".
Robert Harvey
3
Re: "más tolerante a fallas". ¿Lanier ha visto alguna vez ilusiones ópticas? ¿Ha investigado alguna vez la psicología del cerebro? El cerebro SIEMPRE intentará dar sentido a lo que sus entradas le están diciendo, NO IMPORTA LO INCORRECTAS QUE SON LAS CONCLUSIONES. La forma en que funciona el cerebro es extremadamente defectuosa. Por lo tanto, siempre que no importe si el programa funciona mal con bastante frecuencia, al igual que un humano típico, entonces supongo que el modelo al que se hace referencia está bien. Sin embargo, la mayoría de las veces la gente espera que las computadoras sean correctas. Será difícil vender un automóvil impulsado por computadora que evite accidentes la mayor parte del tiempo.
Dunk
2
@Dunk: ... pero todavía es legal construir y vender autos para conductores humanos que logran evitar accidentes la mayor parte del tiempo.
Doc Brown
2
@Dunk, el punto no es la presencia de fallas; de lo contrario, seguiríamos la ruta matemática clásica para probar todo. El punto es 1: el alcance del impacto de la falla (el universo no se bloquea si confundo un conejo con un gorila; de hecho, sigo funcionando como un ser humano después de eso, también lo hace mi cerebro y mi hijo), 2 : las entidades físicas / biológicas de la sala tienen que recuperarse, proporcionar retroalimentación y probar alternativas que "mantienen las cosas en marcha, incluso de una manera no óptima"; y 3: la idea de que esas características son convincentes para que las queramos en nuestros sistemas artificiales
Thiago Silva
1

Creo que estamos en el comienzo de uno de los pasos necesarios para llegar allí y que consiste en reunir muchos datos en formatos que pueden analizarse. Internet, búsquedas de Google, Fitbit (cada paso que das, cada movimiento que haces, te estaré vigilando), FourSquare, una ubicación geográfica de un teléfono inteligente, publicaciones de Facebook y datos de preguntas SO se están recopilando. No estamos cerca de la cantidad de datos sensoriales que el humano promedio está compilando a lo largo de la vida, pero nos estamos acercando.

Comience a clasificar millones de imágenes de pájaros y obtenga comentarios de personas que le dicen que no es un pájaro y que puede comenzar a crear un algoritmo. A partir de ahí, se puede crear una impresión más difusa (lo llamaría modelo, pero eso es demasiado exacto para lo que estamos tratando de codificar).

class Birdish

¿Cómo sabe un perro mascota tanto sobre el dueño? Porque la mira mucho. El perro ha escuchado los autos que ingresan al camino de entrada y correlacionan eso con el propietario abriendo la puerta de entrada para que parezca que el perro puede reconocer un automóvil por su sonido. También podríamos hacer esto, pero no vemos ninguna razón para atenderlo. Y eso es lo que está mal con el software actual, no presta atención a lo que está haciendo el usuario. Solo espera que el usuario haga lo que TI espera que haga.

Algo tan simple como configurar una alarma podría hacerse mediante una pequeña observación / análisis de mis hábitos actuales. Dejamos de configurar los temporizadores de videograbadora antes de que la tecnología fuera reemplazada por digital. ¿Y eso habría sucedido tan rápido si hubiéramos podido conectar la Guía de TV con la videograbadora? He visto el mismo programa de TV 4 semanas seguidas al mismo tiempo, pero el 5to ni siquiera encendí el televisor. Obviamente lo quiero grabado. ¿No puedes decir que me estoy quedando tarde en el trabajo escribiendo esta publicación y con mi viaje típico no llegaré a casa a tiempo? Tienes los datos, haz los cálculos.

Reúna más y más datos y luego podrá encontrar mejores formas de analizarlos, reconocerlos y encubrirlos. Vamos más allá de lo que se puede ingresar solo desde un teclado con las cámaras de nuestros teléfonos y pronto cámaras con lentes. Es sólo el comienzo.

JeffO
fuente
1

Aquí hay un conjunto de diapositivas para definir un lenguaje de programación probabilístico en Scala .

Es el primer ejemplo de implementación decente para algunos de los componentes centrales del sistema que propone Jaron Lanier.

Nueva Alejandría
fuente
Esto se ve muy bien. Quizás intente diseñar una biblioteca para Java que funcione de manera similar.
adv
@adv, ¿cómo lo encontraríamos si lo hicieras?
Nueva Alejandría
1
Publicaré un enlace a un repositorio de Github cuando llegue a crearlo.
adv
-1

Un pensamiento que tuve recientemente:

Si usó ideas de alto nivel, como Quizás Monad de Haskell, para envolver llamadas de procedimiento remoto a otros sistemas. Envía una solicitud al servidor. Pero no vuelve nada (el servidor está roto). O aparece una Promesa (el servidor está ocupado) y sus programas continúan funcionando con esos valores Ninguno o Prometido. Eso es algo así como la tolerancia a fallas que Lanier está buscando.

Tal vez hay formas de encapsular otras eventualidades. Por ejemplo, llamadas remotas que regresan con una aproximación que se refina cada vez más con el tiempo mediante algún tipo de negociación en segundo plano. es decir. lo que regresa es algo así como una Promesa, pero no solo "sigue aguantando y trabajando con esto y un valor adecuado aparecerá en breve" sino "sigue aguantando y trabajando con esto y una mejor aproximación aparecerá en breve". (Y una y otra vez). Esto podría ocultar muchas fallas del programador, así como los protocolos de red ocultan muchas fallas de red de bajo nivel del programador.

interestar
fuente
¿Cómo responde esto a la pregunta que se hace?
mosquito
Si entiendo correctamente, la Programación Fenotrópica es una forma de programar sistemas grandes (a menudo de varias computadoras) y robustos. El problema es que todas las metáforas biológicas hacen que sea vago y difícil traducirlo en términos prácticos de programación. Aquí estoy sugiriendo que ciertas construcciones de programación que no son vagos podría ser una manera de hacer algunas de esas ideas de hormigón de Lanier y prácticamente programable) (es decir, mónadas, etc. promesas.).
Interstar