23 de agosto de 2018 | ILLIA POLOSUKHIN

Hace poco más de un año, Alexander Skidanov y yo pusimos en marcha NEAR.ai. Creíamos firmemente que la síntesis de programas (program synthesis), campo que estudia la programación automatizada partiendo de una especificación humana, iba a transformar el desarrollo de software y el mundo en general.

La síntesis de programas se propone generar programas informáticos a partir de especificaciones de usuario, para así poner a disposición de todo el mundo capacidades que a día de hoy resultan muy escasas.

El año pasado, en ICLR 2017, nos encontramos con diversos artículos de varios laboratorios de investigación y nos entusiasmamos ante la oportunidad de trasladar dicha tecnología al mercado. Tanto Alex como yo habíamos tratado de explorar la síntesis de programas en nuestra época universitaria, pero el aprendizaje automatizado (machine learning) se hallaba en una fase tan inicial por entonces, que no resultaba muy factible realizar cualquier tipo de progreso.

Tras la conferencia, nos imaginamos cómo sería la compañía y nos dimos cuenta que la primera prioridad sería establecer un benchmark para la comunidad. Así como el benchmark ImageNet promovió el campo de la visión por ordenador a pasos agigantados al proporcionar a los practicantes una clara métrica de comparación, nosotros creíamos que un dataset complejo supondría un desafío para la comunidad, así como una guía para la investigación.

Pusimos en marcha NEAR.ai bajo la hipótesis que podríamos expandir los límites de la investigación en el campo de la síntesis de programas y, al mismo tiempo, proporcionar un producto transformador impulsado por esta tecnología.

Tanto Alex como yo hemos participado en competiciones de programación (Alex ganó la medalla de oro en ACM ICPC 2008), y ambos pensábamos que los problemas diseñados para los humanos que participan en este tipo de desafíos serían un buen punto de partida para los ordenadores embarcados en la síntesis de programas.

Las competiciones de programación generan muy buenos datos para aprendizaje automatizado (machine learning). Cada competición de programación generalmente conlleva la resolución de 5–10 problemas de creciente dificultad, planteados en lenguaje natural. Los problemas son resueltos por los participantes en varios lenguajes de programación, produciendo así el corpus paralelo de descripción -los pares de código.

Durante un año, reunimos más de 30 mil problemas y 10 millones de soluciones. Muchos de los problemas eran difíciles de solucionar incluso para un ingeniero de software medio, por lo que nos centramos en aquellos que eran simples (por ejemplo, A y B en CodeForces o 250 en TopCoder). Incluso en dicho caso, las descripciones de tareas resultaban complejas: la variedad de conceptos y el lenguaje empleado en las descripciones excedían la capacidad de captura del modelo. Asimismo, algunos problemas requerían pasos de razonamiento lógico y conocimientos matemáticos externos. Con la idea de simplificar la primera tarea nos apoyamos en una colaboración abierta distribuida (crowdsourcing) con la comunidad CodeForces, para así transformar las descripciones de los problemas en una “descripción de solución”.

Resultados publicados en ICML 2018 en el dataset NAPS

Parte del dataset que reunimos lo publicamos en nuestro artículo para ICML 2018 titulado “NAPS: Natural Program Synthesis dataset”. Sin embargo, a pesar de todo este trabajo, y después de ejecutar con este conjunto de datos modelos de última generación (los cuales combinaban “deep learning” y técnicas de búsqueda regulares), descubrimos que los resultados distaban mucho de poder ser utilizados en la práctica (en torno a un 12% en nuestro mejor modelo).

Junto con el trabajo técnico, reunimos feedback de potenciales usuarios para asegurarnos de que existiera una demanda real en el mercado para nuestra solución. Construimos prototipos (sin ningún ML) y los pusimos a prueba utilizando el modelo Wizard-of-OZ (o human-in-the-loop).

Después de diversas iteraciones, nos dimos cuentas de que el ML, específicamente la comprensión del lenguaje natural, todavía no estaba a punto.

Entretanto, unas pocas ideas nos condujeron a nuestra transición:

El blockchain conecta diversos dispositivos en una nube única que proporciona a los desarrolladores una base de datos de rápido acceso, computación y facilidad para la transacción de dinero.

Así que nos sentamos con nuestros amigos David “Pieguy” Stolp y Evgeny Kuzyakov, que habían estado experimentando con el blockchain durante el año anterior, para así aprender más sobre el sector. A medida que nos adentramos en la “madriguera”, nos dimos cuenta tanto de las oportunidades como de las limitaciones que presentaban los actuales sistemas blockchain.

En el caso de los desarrolladores, el blockchain proporciona una infraestructura que, en la actualidad, requiere meses de configuración: redes resilientes frente a particiones, una base de datos y computación siempre disponibles, facilidad de cumplimiento regulatorio en materia de GDPR, y una menor necesidad de compliance regulatorio local. Además, los emprendedores pueden idear modelos de negocio completamente nuevos para empresas erigidas sobre la blockchain.

En el caso de los usuarios, el blockchain garantiza la privacidad y seguridad de los datos. Los smart contracts proporcionan garantías y pueden ser estudiados (probablemente no por parte del usuario, pero cualquier noticia sobre un contrato malicioso correrá como la pólvora, mientras que las filtraciones de datos que se producen en cotos privados pueden ser encubiertas).

Por otro lado, existen motivos por los que, a día de hoy, nuevas aplicaciones no están siendo desarrolladas en la blockchain. Ethereum, la plataforma para apps descentralizadas más popular en la actualidad, procesa 14 transacciones por segundo a nivel mundial. Repito, 14 llamadas de API por segundo a nivel mundial, la mayor parte de las cuales son de exchanges y trading especulativo, lo que hace que resulte más difícil utilizarla. En consecuencia, cada transacción tarda entre minutos y horas en llegar al ledger (libro mayor contable).

Existen nuevos protocolos que presumen de solventar el problema de rendimiento del blockchain:

Existen otros protocolos, muchos de los cuales todavía están desarrollando su tecnología, pero todos y cada uno de ellos carece de un elemento conceptual. Todas las plataformas que han tenido éxito comenzaron acercando a los desarrolladores a los usuarios, en lugar de simplemente construir mejores herramientas para desarrolladores.

Y esto es lo que daría pie a NEAR protocol:

En otras palabras: NEAR es una blockchain proof-of-stake completamente “shardeada” (fully sharded), que ha sido específicamente diseñada para que los teléfonos móviles puedan participar de forma plena desde el primer día.

Para lograrlo, estamos diseñando cada componente del protocolo, desde la interconexión, consenso y sharding de estado y ejecución, al funcionamiento del cliente de usuario. Puedes leer nuestro primer artículo expositivo y mantenerte conectado para más información: a continuación, publicaremos los artículos técnicos de sharding y consenso.

Hemos reunido a un dream team de desarrolladores: 3 medallistas de oro del ICPC (Mikhail fue campeón mundial 2 veces), 3 de los primeros MemSQL (que crearon sharding para la base de datos distribuida) y 4 Xooglers (construyeron sistemas distribuidos a escala).

Durante las próximas semanas, compartiremos detalles técnicos y nuestras ideas sobre el espacio blockchain y las aplicaciones que creemos que nuestro protocolo hará eclosionar.

Para seguir nuestros progresos puedes utilizar:

Por último,

Darle las gracias a Alexander Skidanov, Maksym Zavershynskyi, Erik Trautman, Aliaksandr Hudzilin y Bowen Wang por ayudarme a elaborar este post.

Copywriter and spanish translator. Crypto | DeFi | Web3

Copywriter and spanish translator. Crypto | DeFi | Web3