Por @Alvy — 27 de Julio de 2017

NEC Earth Simulador / 2002

Con las CPU/GPU más modernas se pueden obtener potencias de cálculo realmente asombrosas, hasta el punto de que tal y como ha calculado Carlos E. Perez usando componentes de AMD, concretamente una CPU Ryzen y una GPU Vega además de algo de memoria y almacenamiento SSD se puedenexprimir unos 50 teraFLOPS en una máquina de sobremesa.

Teniendo en cuenta que en el año 2002 el superordenador más potente del mundo, el Earth Simulator 2 de NEC tenía una potencia de unos 35,8 teraFLOPS la evolución no ha sido nada mala. (El cálculo se completa con otros equipos similares de los 12.000-15.000 dólares, en cualquier caso lo mismo que cuesta un automóvil pequeño.)

Para muchos el año 2002 es, como quien dice antes de ayer; es fácil recordar el hito que supuso aquel maquinón digno de cualquier película futurista, una bestia «capaz de simular y analizar la complejidad del clima terrestre». Que hoy en día no sólo te puedas permitir comprarlo sino además guardarlo debajo de la mesa es como para quedarse pasmado.

{Foto (CC) Earth Simulator 2 (ES2) @ Wikimedia}

Compartir en Flipboard  Compartir en Facebook  Tuitear
Por @Alvy — 22 de Julio de 2017

Decoding Enigma RNN

Sam Greydanus, un físico que investiga sobre aprendizaje profundo (deep learning) y neurociencia explica cómo se puede crear una red neuronal recursiva (RNN) para descifrar mensajes cifrados por la famosa máquina Enigma que utilizaron los alemanes durante la Segunda Guerra Mundial.

Durante la Segunda Guerra Mundial el criptoanálisis de la máquina Enigma fue una auténtica proeza casi sobrehumana que requirió el trabajo de las mejores mentes de la época, como la de Alan Turing. Miles de matemáticos, criptólogos e ingenieros que resolvieron el problema y de paso crearon los que fueron los precursores de los ordenadores actuales. Todo ello está contado en Codebreakers: The Inside Story of Bletchley Park y muchos otros libros y películas. Es interesante que en el Siglo XXI esa tarea sea prácticamente un proyecto de «hacking casero» que se puede completar en un fin de semana, lo cual nos da una idea de cómo han avanzado los tiempos.

Con la llegada del aprendizaje automático todo esto está cambiando nuevamente. El criptoanálisis clásico resulta anacrónico; de hecho toda la complejidad de la máquina Enigma con sus rotores y claves secretas pasa a un segundo plano. Tal y como explica Greydanus en Decoding the Enigma with Recurrent Neural Networks simplemente se aplica la regla criptográfica de la «caja negra», según la cual da igual saber cómo funciona el algoritmo original si una simulación creada por el criptólogo puede obtener los mismos datos de salida para los mismos datos de entrada. En la práctica, de hecho, ni siquiera es necesario que esto funcione el 100% de las veces.

Para afinar el modelo primero se generaron textos de prueba con un simulador de Enigma para alimentar a la red neuronal recursiva con equivalencias del tipo texto cifrado de salida = f(texto de entrada). La RNN funcionaba sobre una GPU k40 y mostró resultados llegando hasta un millón de pasos con 3.000 unidades de LSTM («gran memoria de corto plazo»). El resultado fue que este modelo puede descifrar correctamente mensajes con un 96% de precisión. El código está en Github: crypto-rnn.

Lo relevante del asunto es que el modelo lo hace solo a partir de datos de entrada y de salida: no necesita saber cómo funciona la máquina internamente y –lo cual es también muy interesante– no hace falta que esos textos sean reales o tengan sentido. (Normalmente los criptógrafos buscan patrones y frecuencias en los textos originales para utilizarlos en el descifrado.) Vuelve a repetirse aquí esa idea de que las inteligencias artificiales se comportan como tales pero ni ellas ni muchas veces sus creadores sabemos muy bien qué están haciendo.

Tal y como añade al final, el Santo Grial de esta idea sería descifrar contenidos cifrados con el algoritmo RSA. La máquina Enigma es un buen reto, pero ya no se usa ni sirve para nada práctico. RSA en cambio sigue siendo el método por el que nos comunicamos por Internet de forma segura y también el que usamos para las transacciones y el comercio electrónico.

Por desgracia (o por suerte) el problema criptográfico del RSA es que emplea operaciones matemáticas diseñadas específicamente para ser difíciles de resolver, algo que probablemente queda fuera del alcance incluso de estas redes neuronales. En otras palabras: estaríamos pidiendo a la máquina que descubriera cómo factorizar números pseudoprimos sumamente grandes, algo que sabemos que es difícil y ha escapado del análisis de los matemáticos durante décadas.

Compartir en Flipboard  Compartir en Facebook  Tuitear
Por @Alvy — 21 de Julio de 2017

Machine learning lang10

Python, R, Java, JavaScript y C.

Al igual que en los 10 lenguajes más populares de programación que selección IEEE Spectrum a partir de una decena de fuentes, esta lista de Jean-François Puget de IBM, que procede de las búsquedas en Indeed.com sobre machine learning y data science permite hacerse una idea de cómo ha evolucionado el interés por cada uno de ellos.

En los clásicos del Top #5 aparece el R, muy orientado al análisis estadístico y al final de la lista están Julia, Scala y Lua. Quien esté interesado en el aprendizaje automático hará bien en echarles un vistazo.

Hay más detalles sobre cada uno de los lenguajes y cómo se adecuan a la programación para aprendizaje automático o al trabajo de los científicos de datos en el artículo original: The Most Popular Language for Machine Learning is (traducido al español en el blog Technologies Running).

Relacionado:

Libros para aprender más:

Compartir en Flipboard  Compartir en Facebook  Tuitear
Por @Alvy — 18 de Julio de 2017

IEEE Spectrum / Top lenguajes

En The 2017 Top Programming Languages se muestra la lista que la revista IEEE Spectrum ha compilado a partir de diversas fuentes: concretamente 12 métricas de 10 publicaciones distintas, lo que abarcaba un total de 48 lenguajes.

Python es el rey del mambo, seguido de C y Java en el podio; después van C++, C#, R, JavaScript, PHP, Go y Swift.

De hecho para Python el #1 es todo un logro, porque venía del #3; el resto del grupo de cabeza permanece más o menos igual. C# ha vuelto a superar a R y Ruby no aparece en la lista porque ha cecido su puesto a Swift (lo cual no está mal porque solo tiene un par de años).

Pero aparte de esos cambios no hay más lenguajes nuevos destacados. En cierto modo es como si el mundo de la programación estuviera un poco congelado. De hecho dicen que por ahí siguen Lisp (#35) y Cobol (#40) que dignamente se mantienen en el candelero a pesar de ser auténticos ancianos de la informática.

Relacionado:

Compartir en Flipboard  Compartir en Facebook  Tuitear