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"?
phenotropic program
?Respuestas:
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:
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 bytesconeData
uno por uno, mientras que su cerebro procesa todas esas entradas simultáneamente.Lanier afirma que la última interfaz es más tolerante a fallas, lo cual es (un solo bit deslizado
coneData
puede 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:
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:
... 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:
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
fuente
See(List<Cone> cones)
(donde cada unoCone
es independiente el uno del otro), ¿sí?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).
¿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.
fuente
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.
fuente
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.
fuente