"No hay que tomarse nada a pecho -se repite quien se enoja consigo mismo cada vez que sufre y no pierde ninguna ocasión de sufrir." El aciago Demiurgo (Emil Cioran)
"La única predicción de la futurología indudablemente cierta es que, en el futuro, los futurólogos de hoy en día parecerán necios. Si bien desconocemos cuáles serán los logros últimos a los que llegará la inteligencia artificial, lo cierto es que dependerán de un sinfín de vicisitudes prácticas, que se irán descubriendo sólo sobre la marcha. Con todo, es un hecho indiscutible que las máquinas dedicadas a la computación son inteligentes." (Steven Pinker)
Debido a la complejidad técnica, pocos son conscientes de que vivimos actualmente una revolución (exponencial) en cuanto a avances en el terreno de la inteligencia artificial. Como digo, esto se debe en parte a lo complicado de la teoría subyacente y en parte a que ya varias veces en la historia se pecó de optimismo y finalmente la IA no avanzó ni la mitad de lo prometido...esta vez es distinto.
El aumento (exponencial) en la potencia de cálculo disponible (gracias al continuo cumplimiento de la ley de Moore y al surgimiento de las tarjetas GPU), al aumento (también exponencial) de datos (datasets) disponibles para entrenar fácilmente y de manera barata las modernas redes neuronales (gracias en gran parte a Internet y al Bigdata), y fundamentalmente gracias a modernos y recientes (y sí, también exponenciales) avances teóricos en cuanto a cómo construir y ajustar ("entrenar") estas redes neuronales (como ha sido el caso por ejemplo, del reciente uso intensivo de redes neuronales profundas -deep networks-, el advenimiento de la convolución -algo similar a lo que nuestro cerebro hace en Cortex visual primario y secundario V1, V2,...-, el descubrimiento de redes neuronales recurrentes y eficientes RRN's -fundamentalmente la propuesta de modelo llamada LTSM: "Long short-term memory"-, el muy reciente uso del concepto de "atención", etc.), hacen que sin duda esta vez las cosas sean realmente muy distinta: y los resultados están comenzando a ser evidentes.
Demis Hassabis
No hay día ya que las noticias (especializadas y no especializadas) no muestren algo nuevo relacionado con el campo de la investigación y la innovación en IA, y el progreso en la búsqueda de una inteligencia artificial general parece literalmente haber explotado exponencialmente. Y a este ritmo (y sobre todo si la ley de Moore se sigue cumpliendo), no pasarán ni 30 años antes de que se logre simular computacionalmente una inteligencia artificial general e incluso una completa conciencia artificial muy similar a la nuestra. Vivimos de hecho en estos momentos el inicio de este cercano hito tecnológico; y es una lástima que no todos puedan seguir en vivo el transcurso de los acontecimientos. En este sentido, me siento un privilegiado. De hecho, si no fuese por cuestiones personales, es bastante probable que pudiese incluso participar aunque fuese muy modestamente en todo este proceso. Actualmente conozco el estado del arte completo de la disciplina (puedo seguir cualquier paper sin problemas), y dada la escasez de profesionales en este terreno y el aumento actual en la demanda de este tipo de trabajadores, sinceramente creo que habría tenido alguna oportunidad para terminar trabajando de manera más o menos directa en alguna compañía dedicada a la investigación en este campo. Pero bueno, no creo que esto llegue a pasar, y muy posiblemente me jubile, con suerte, como un "simple" analista-programador de páginas web. Tampoco pasa nada ;).
Llegar a alcanzar el estado del arte en esta disciplina tan multidisciplinar es algo duro y lleva años de duro trabajo y esfuerzo; pero de todas formas creo que es posible, incluso para el menos preparado, atisbar al menos por encima de qué va toda esta revolución que está aconteciendo hoy día y que ha llevado en poco tiempo a que un ordenador supere en cuanto a intuición (al menos, intuición focalizada en el juego) a cualquier jugador humano de Go, o a que el ordenador de un coche sea capaz de ir él sólo por la ciudad reconociendo todo el entorno, y siendo capaz de abstraer y generalizar tan bien como nosotros en muchas tareas indispensables para la conducción eficiente y segura (Artículo en el diario El País: "Arranca la revolución de los coches sin conductor").
En relación a todo esto, y ya especulando un poco, es muy interesante observar como el hombre está logrando en pocas décadas simular y emular habilidades tan complejas que le llevó al propio proceso evolutivo cientos de millones de años alcanzar. Ese es precisamente el poder del crecimiento exponencial. Bien parece incluso el caso de que la raza humana sea una especie de catalizador de la inteligencia. Y si fuera ese el caso, posiblemente el hombre no sería más que un eslabón intermedio natural necesario para, llegado el momento, lograr que el fenómeno de la inteligencia comience a mejorar de modo exponencial. Es decir, que el hombre estaría limitado biológicamente en cuanto a su capacidad personal, pero tendría el potencial necesario para lograr "fabricar" algo (no biológico) capaz de superar su propia limitación intrínseca. Posiblemente llegue el día que no quede ninguna inteligencia biológica sobre el plantea, y que lo que reste sea este nuevo prototipo catalizado por nosotros mismos como parte del proceso evolutivo natural en busca de maximizar el consumo de energía libre (maximizar la entropía). Pero ya eso es otra historia. Si queréis profundizar un poco más sobre este asunto podéis estudiar mi artículo: El acertado miedo de Stephen Hawking.
En fin. En un intento por ayudar a quien tenga al menos la curiosidad de saber de qué va todo lo tratado, os dejo un par de referencias muy claras y gráficas que quizás os pueda servir de trampolín:
Evidentemente estos dos artículos no son ni la punta del iceberg de lo que sería necesario conocer de esta disciplina, pero creo que es un buen comienzo (al menos como introducción a las redes neuronales recurrentes). Y para todo aquel que tenga ya cierto nivel, os dejo dos enlaces imprescindibles que mirar cada mañana en busca de novedades:
También os puede merecer la pena invertir unos minutos en escuchar esta interesante charla impartida por Demis Hassabis, co-fundador de DeepMind: una de las personas que más saben hoy día sobre inteligencia artificial y su potencial futuro al corto-medio plazo. En esta conferencia se centra especialmente en la posibilidad de una Inteligencia Artificial General que precisamente su empresa (filial de Google) tiene en el punto de mira.
Para finalizar, os dejo con un vídeo que muestra en directo lo que hasta hace muy poco era ciencia ficción: un coche totalmente autónomo. Estamos hablando, por supuesto, de la nueva actualización de software para los coches de la marca Tesla.
“¡Ah, cuán vana, cuán triste / es la lucha por la existencia. Aprende, ¡oh hombre! / como primer principio de la sabiduría / que por un bien […] tu alma está en vilo. […] ¡Aprende a amar con el espíritu, mortifica / el amor del corazón; y bendice, / bendice con alegría cada hora que más cerca de la tumba / te conduce!” (Philipp Mainländer)
Macbeth:
To-morrow, and to-morrow, and to-morrow,
Creeps in this petty pace from day to day,
To the last syllable of recorded time;
And all our yesterdays have lighted fools
The way to dusty death. Out, out, brief candle!
Life's but a walking shadow, a poor player,
That struts and frets his hour upon the stage,
And then is heard no more.
It is a tale told by an idiot, full of sound and fury,
Signifying nothing.
Macbeth Act 5, scene 5, 19–28 (Shakespeare) Traducción libre:
Mañana...esa engañosa palabra: mañana, y mañana, y mañana, una palabra que nos va llevando por días al sepulcro, y cuya falaz lumbre del ayer ilumina al necio hasta que cae en la fosa. ¡Extínguete!¡Apágate ya, luz de mi vida!
La vida no es más que una sombra pasajera, un escenario sobre el cual un pobre imbécil se pavonea y se agita durante un tiempo, y a quien poco después se olvida. Es un cuento narrado por un idiota, todo lleno de estrépito y de violencia, pero que no significa nada.
La vida.
He empezado el artículo comentando esta famosa escena de la obra de Shakespeare porque la siento como uno de esos hechos que todos conocen pero que nadie admite. A mí no me importa confesarlo a boca llena: sinceramente, no me gusta la vida.
Es un sentimiento personal y subjetivo, por supuesto, pero es lo que hay. Y no quiere decir esto que sea un depresivo aislado de esos que no salen de casa ni mucho menos. Al contrario; yo vivo una vida bastante normalita: tengo familia, amigos, amistades, estoy casado y con dos hijos, trabajo a jornada completa, tengo que pagar préstamos, voy al gimnasio, me gusta el cine, la música, la lectura, estudiar y aprender, en fin; el pack completo. Mi existencia es quizás en cierta medida, el prototipo "ideal" de vida deseada y deseable...y a pesar de eso, y de no tener que convivir con ningún problema importante de salud ni de otro tipo, honestamente; os insisto en que la vida me parece, como dijo nuestro amigo Shakespeare: una sombra pasajera (un cuento) narrado por un idiota (en este caso yo), todo lleno de estrépito y violencia (con esa lucha diaria que nuestro cerebro nos empuja a llevar a cabo), y que no significa nada (porque toda nuestra conducta tiene como última meta satisfacer unos espontáneos fines evolutivos que no persiguen ninguna finalidad racional ni relevante en lo relativo al hombre). Es decir; una verdadera mamarrachada sinsentido.
No, no me gusta la vida; o mejor dicho, no me gusta tener que vivir, y de hecho no me ha gustado desde que tengo uso de razón. Pero eso no importa, porque este cuento de la vida es un teatro en el que todos nos vemos obligados a participar, salvo pena de sufrir frustración, dolor y sufrimiento. Y aquel que ante un pesimista espeta aquello de: "Pues ve y salta por un puente", no entiende que le pide tanto como que se tape la nariz y deje de respirar: es imposible, porque al igual que no tenemos ese control ante la respiración, tampoco tiene nadie mentalmente sano la capacidad para quitarse la vida como si tal cosa: el fuerte instinto de conservación se encarga de ello.
De todas formas, esta actitud pesimista ante la existencia no es nada nuevo. Ya en el siglo X, el filósofo y poeta Persa Omar Jayam se lamentaba de esta manera:
"No siento ningún temor por la muerte: prefiero este trance doloroso
al sino ineluctable que me fue impuesto el día de mi nacimiento.
¿Qué es la vida? Un bien que me confiaron sin pedirlo, y que tendré
que devolver con indiferencia."
Es un hecho que con el nacimiento todos somos lanzados sin nuestro consentimiento directamente sobre el escenario de la vida, y que como pobres imbéciles es la química de nuestro cerebro luego la verdadera encargada de guiarnos por la senda de la lucha diaria; evidentemente sin escapatoria posible. En este sentido, cualquiera que intenta salir del redil aunque sea sólo un poco, es rápidamente reconducido mediante una inyección de neurotransmisores los cuales le impelen un fuerte malestar en forma de lo que se conoce como frustración, o mediante el hastío. De hecho, es la sensación de hastío la que nos impide estar mucho tiempo sin hacer nada: nos empuja continuamente a estar activos, mientras que es la frustración la encargada de dirigir toda esa actividad hacia fines evolutivamente estables.
La vida en el fondo es una trampa; un escenario del que no es posible salir, y en el que todos debemos ejercer nuestro papel para luego desaparecer (cosa que en biología hace tiempo que se conoce como teoría del soma desechable). El escenario permanece, y lo que cambian son los pobres cómicos que danzan (danzamos) sobre él, forzados como marionetas incapaces de determinar sus propios actos. Hay hoy día alrededor de 7000 millones de personas "vivas" luchando todas sin saber muy bien para qué, y se estima que otros tantos miles de millones ya pasaron por donde nosotros ahora estamos...todos desaparecieron en el abismo de la nada; y nada se sabe de ellos, a parte de que compartieron nuestro fatal destino.
En palabras del sabio Omar Jayam:
"Porque esta vida no es -como probaros espero-,
Mas que un difuso tablero de complicado ajedrez.
Los cuadros blancos: los días, los cuadros negros: las noches...
Y ante el tablero, el destino acciona allí con los hombres
como con piezas que mueven a su capricho sin orden...
Y uno tras otro al estuche van.
De la nada sin nombre."
El sesgo del optimismo.
Muchos de vosotros, lectores, seguro que no estáis de acuerdo con mis anteriores párrafos, y es algo normal: la evolución se ha encargado (ha necesitado) programar una tendencia optimista con respecto a la vida en nuestro cerebro. Uno puede tranquilamente reconocer que están muriendo en este mismo instante, retorciéndose de dolor, miles de niños de malaria, y al mismo tiempo relajarse tranquilamente con una plácida lectura disfrutando de una puesta de Sol y pensando en lo bonita que es la vida. Es absurdo pero es así, sólo cuando la realidad pésima del mundo nos embiste de cerca es cuando somos sacados como de improviso de esa ensoñación de esperanza. De hecho, el mejor momento sin duda para conocer a las personas sin este optimista vendaje es ante la enfermedad; momento en que descubre atormentada que su breve paso por la existencia se acaba, y que toda su vida fue un inútil aspaviento cuyo recuerdo está condenado a desaparecer pronto.
No obstante nos resistimos a pensar de este modo. Nos cuesta asimilar la realidad del sinsentido de nuestras vidas, y eso a pesar de que todos desde Darwin comprenden el sinsentido del mundo. Como el gran Emil Cioran dijo en su obra "El ocaso del pensamiento":
"Uno puede decir con toda tranquilidad que el universo no tiene ningún sentido. Nadie se enfadará. Pero si se afirma lo mismo de un sujeto cualquiera, éste protestará e incluso hará todo lo posible para que quien hizo esa afirmación no quede impune. Así somos todos: nos exoneramos de toda culpa cuando se trata de un principio general y no nos avergonzamos de quedarnos reducidos a una excepción. Si el universo no tiene ningún sentido, ¿habremos librado a alguien de la maldición de ese castigo? Todo el secreto de la vida se reduce a esto: no tiene sentido; pero todos y cada uno de nosotros le encontramos uno."
Todos encontramos un sentido para nuestras vidas, y el optimismo "irracional" e innato del que hemos hablado nos ayuda a ello; y sin embargo también al mismo tiempo todos sabemos y comprendemos racionalmente que la vida no tiene sentido objetivo: he ahí el verdadero poder evolutivo, haber sido capaz de construir seres conscientes del sinsentido de su ser; pero capaces a pesar de todo de soportar todo ese sinsentido, y eso a pesar de la lucha, el dolor y el sufrimiento generalizado. Realmente la evolución ha hecho un gran trabajo.
Vivir pese al absurdo.
Pero no todos son capaces de soportar esta cruda realidad. Son muchos a los que esta realidad pésima les supera, y que no son capaces ya de soportar la inútil carga de la vida. Para todos ellos, comentar que sigue habiendo un "consuelo": la curiosidad, y el abrazo al absurdo. La vida es un doloroso trance carente de sentido objetivo en el que todos nos vemos abocados a participar, pero también es, como dice Shakespeare, una sombra pasajera. La vida es breve, y eso es bueno; y también es leve, lo cual asegura su final. Por tanto, podemos abrazar este hecho de brevedad y levedad como consuelo ante el sinsentido, y aprovechar de este modo la existencia como un medio para experimentar con curiosidad la realidad en la que estamos envueltos. Esta postura fue defendida entre otros por el filósofo Albert Camus, el cual veía precisamente en el reconocimiento del absurdo una suerte de liberación personal. También habló al respecto Emil Cioran, esta vez en su obra "En la cima de la desesperación":
"Nada podría justificar el hecho de vivir. ¿Cómo, habiendo explorado
nuestros propios extremos, seguir hablando de argumentos, causas, efectos
o consideraciones morales? Es imposible, puesto que no quedan entonces
para vivir más que razones carentes de todo fundamento. En el apogeo de la
desesperación, sólo la pasión por lo absurdo orna aún el caos con un
resplandor demoníaco. Cuando todos los ideales corrientes, sean morales,
estéticos, religiosos, sociales o de cualquier otra clase, no logran imprimir a
la vida una dirección y una finalidad, ¿cómo preservarla del vacío? La
única manera de lograrlo consiste en aferrarse a lo absurdo y a la inutilidad
absoluta, a esa nada fundamentalmente inconsistente cuya ficción es
susceptible sin embargo de crear la ilusión de la vida.
Vivo porque las montañas no saben reír ni las lombrices cantar. La
pasión por lo absurdo nace únicamente en el individuo que lo ha expiado
todo pero que es capaz de soportar terribles transfiguraciones futuras. A
quien lo ha perdido todo sólo le queda esa pasión. ¿Qué podría en adelante
seducirle? Algunos responderán que el sacrificio en nombre de la
humanidad o del bien público, el culto de lo bello, etc. Yo sólo soporto a
aquellos seres humanos que han renunciado a experimentar, aunque no sea
más que provisionalmente, todos esos sueños. Ellos son los únicos que han
vivido de manera absoluta, los únicos habilitados para hablar de la vida. Si
pueden hallarse de nuevo el amor y la serenidad, ello es posible mediante el
heroísmo y no mediante la inconsciencia. Toda existencia que no contenga
una gran locura carece de valor. ¿En qué se diferencia una existencia
semejante de la de una piedra, un palo o una mala hierba? Lo afirmo con
total honestidad: hay que ser objeto de una gran locura para querer ser
piedra, palo o mala hierba."
Pasión por lo absurdo, ese es el concepto. Todo aquel que haya logrado racionalizar el mundo y que no vea para vivir ya más que razones carentes de fundamento, todavía tiene el consuelo de saborear esta pasión. Dice Cioran que hay que ser objeto de una gran locura para querer ser piedra o palo, y yo debo estar loco porque no veo la hora de volver a tal estado inanimado. Bendigo con alegría, como dice Mainländer, cada hora que más me acerca al final de mi paso por este consciente circo vital. En este punto quizás alguno se pregunte cómo puede ser la vida de ese hombre absurdo (término utilizado por Camus). Yo os doy mi versión puesto que me considero uno de tales hombres: mi vida es como la tuya, lucho como todos a diario con ganas en pos de los estúpidos fines evolutivos (no queda otro remedio si no se quiere sufrir más de lo necesario), pero lo hago siempre con el anhelo de mi redención final en mente. Bato los brazos con vehemencia cada mañana en el teatro de la vida, escenificando mi papel con curiosidad, sin prestar demasiada importancia a nada de lo que me ocurra (porque todo es pasajero) y con alegría, experimentando con todo aquello que surge en mi breve camino; pero lo hago siempre mirando de reojo el reloj, deseando que termine de una vez la función (out, brief candle!). Es sin duda en mi opinión el mejor modo de pasar este amargo trago existencial. Muy pronto todos nuestros átomos, que como se suele decir en su día fueron polvo de estrellas, volverán a formar parte de piedras o palos, malas hierbas o incluso gusanos; cualquier cosa será preferible antes que esta sufrida lucha racional y consciente en favor de fines irracionales y objetivamente inútiles. Os dejo para finalizar con la magnífica narración que hizo Orson Welles de la escena de Macbeth con la que he comenzado este artículo. Merece la pena de oír:
En el magnífico blog de divulgación científica "Cuentos Cuánticos", hoy han tocado el tema de la Realidad simulada.
Nick Bostrom
En la entrada que os comento de ese blog, se han basado fundamentalmente en el trabajo de Nick Bostrom, director del Instituto sobre el Futuro de la Humanidad y también del Centro Estratégico de Investigación sobre Inteligencia Artificial, ambos adscritos a la Universidad de Oxford. El trabajo en concreto fue publicado en el 2003 y podéis descargarlo desde aquí.
Pero como os digo, en esa entrada que os he comentado está la propuesta de Nick muy bien explicada y no voy a incidir más en lo mismo; aunque sí quiero aprovechar para hacer un pequeño resumen de la hipótesis alternativa (e independiente) sobre este asunto que ya os comenté en dos entradas anteriores de este blog:
Pues bien, de manera esquemática (y para el que no tenga la paciencia necesaria para leer grandes textos de este tipo :P), decir que la hipótesis que yo defiendo se puede resumir del siguiente modo:
Observando las leyes físicas de nuestro mundo descubrimos dos cosas interesantes:
1) La física de nuestro mundo siempre aparece matemáticamente bien comportada y de modo tal que teóricamente sería posible que formase parte de una computación externa (cuando no tendría por qué ser así necesariamente, ya que podemos imaginar físicas no computables).
2) Además de computable, nuestra física parece de algún modo especial en cuanto a su "eficiencia" de computación (fundamentalmente gracias a la mecánica cuántica): lo que viene a decir que el modo en que se comporta nuestro mundo es particularmente adecuado para requerir de los mínimos recursos para su hipotético procesamiento computacional externo.
Por lo tanto, estos dos puntos nos llevan a lo siguiente:
1) O se trata de que nuestro mundo es eficientemente computable por casualidad. Es decir; que habiendo una infinidad de modos distintos en que una vida inteligente como la nuestra podría aparecer, resulta que estamos en un Universo con una física no sólo capaz de albergar vida inteligente sino que por puro azar también presenta unas propiedades que la hacen fácilmente (eficientemente) computable y muy bien comportada matemáticamente.
2) O sencillamente todo aparece de este modo tan particular porque realmente nuestro mundo ha sido diseñado (¿programado?) a un nivel trascendente (externo): es decir; que formamos parte de una simulación computacional.
Analizando estas dos alternativas vemos que el primer caso es indudablemente posible pero muy improbable: si toda física imaginable es posible, habría una infinidad de maneras distintas en que podría haber aparecido nuestro "mundo" (sus leyes), y también habría una infinidad de maneras imaginables en que podrían organizarse mundos con vida inteligente similar a la nuestra (un subconjunto infinito de mundos con vida dentro del conjunto infinito de mundos posibles, similar al subconjunto infinito de números pares dentro del conjunto infinito de números enteros), por lo que el hecho de que estemos por casualidad en un mundo computable y especialmente eficiente (fuera de la media) capaz de ser simulado mediante un hipotético procesamiento trascendental (sin que luego sea el caso) es ínfima o casi nula. Sería un fino ajuste aún mayor que el de la constantes cosmológicas, pero uno que esta vez no puede ser sorteado sólo apelando a un multiverso sin más. Por lo tanto, lo más lógico posiblemente sea aceptar el segundo punto que hemos visto antes: que sencillamente nuestro mundo forma parte de una simulación.
Enfocado en el reciente trabajo teórico de Google DeepMind (WaveNet), he desarrollado e implementado una versión en TensorFlow de dicha arquitectura, pero realizando modificaciones para enfocar el diseño en la generación automática de textos (el paper original es: https://arxiv.org/pdf/1609.03499.pdf).
El modelo ideado originalmente por DeepMind fue divulgado con detalle en este artículo: https://deepmind.com/blog/wavenet-generative-model-raw-audio/, y mi implementación del mismo (con las modificaciones necesarias para enfocarlo todo en la generación de texto), se encuentra en el siguiente repositorio de mi cuenta personal en GitHub: https://github.com/Zeta36/tensorflow-tex-wavenet. Se trata como podéis ver, de un desarrollo Python usando el framework de Google, TensorFlow.
Os dejo a continuación toda la información técnica sobre mi trabajo, aunque siento no tener tiempo para traducirlo y simplemente copiaré a continuación la introducción que hice del mismo en inglés (prometo más adelante escribir una entrada dedicada a divulgar de manera más sencilla el potencial de esta red neuronal, y el indicio que puede contener sobre el modo en que nuestro propio cerebro biológico realiza ciertas tareas relacionadas con la memorización):
A TensorFlow implementation of DeepMind's WaveNet paper for text generation.
Originally, the WaveNet neural network architecture directly generates a raw audio waveform,
showing excellent results in text-to-speech and general audio generation (see the
DeepMind blog post and paper for details).
This network models the conditional probability to generate the next
sample in the audio waveform, given all previous samples and possibly
additional parameters.
After an audio preprocessing step, the input waveform is quantized to a fixed integer range.
The integer amplitudes are then one-hot encoded to produce a tensor of shape (num_samples, num_channels).
A convolutional layer that only accesses the current and previous inputs then reduces the channel dimension.
The core of the network is constructed as a stack of causal dilated layers, each of which is a
dilated convolution (convolution with holes), which only accesses the current and past audio samples.
The outputs of all layers are combined and extended back to the original number
of channels by a series of dense postprocessing layers, followed by a softmax
function to transform the outputs into a categorical distribution.
The loss function is the cross-entropy between the output for each timestep and the input at the next timestep.
In this repository, the network implementation can be found in wavenet.py.
New approach
This work is based in one implementation of the original WaveNet model (Wavenet), but applying some modifications.
In summary: we are going to use the WaveNet model as a text generator.
We'll use raw text data (characters), instead of raw audio files, and
once the network is trained, we'll use the conditional probability found
to generate samples (characters) into an self-generating process.
Only printable ASCII characters (Dec. 0 up to 255) is supported right now.
Results
Pretty interesting results are reached!! Feeding the network with
enough text and training, the model is able to memorize the probability
of the characters disposition (in a lenguage), and generate later even a
very similar text!!
For example, using the Penn Tree Bank
(PTB) dataset, and only after 15000 steps of training (with low set of
parameters setting) this was the self-generated output (the final loss
was around 1.1):
"Prediction is: 300-servenns on the divide mushin attore and
operations losers nis called him for investment it was with as
pursicularly federal and sotheby d. reported firsts truckhe of the
guarantees as paining at the available ransions i 'm new york for
basicane as a facerement of its a set to the u.s. spected on install
death about in the little there have a $ N million or N N bilot in
closing is of a trading a congress of society or N cents for policy
half feeling the does n't people of general and the crafted ended
yesterday still also arjas trading an effectors that a can singaes
about N bound who that mestituty was below for which unrecontimer 's
have day simple d. frisons already earnings on the annual says had
minority four-$ N sance for an advised in reclution by from $ N
million morris selpiculations the not year break government these up
why thief east down for his hobses weakness as equiped also plan amr.
him loss appealle they operation after and the monthly spendings soa $ N
million from cansident third-quarter loan was N pressure of new and the
intended up he header because in luly of tept. N million crowd up
lowers were to passed N while provision according to and canada said
the 1980s defense reporters who west scheduled is a volume at broke
also and national leader than N years on the sharing N million pro-m
was our american piconmentalist profited himses but the measures from N
in N N of social only announcistoner corp. say to average u.j. dey said
he crew is vice phick-bar creating the drives will shares of customer
with welm reporters involved in the continues after power good
operationed retain medhay as the end consumer whitecs of the national
inc. closed N million advanc"
This is really wonderful!! We can see that the original WaveNet model
has a great capacity to learn and save long codified text information
inside its nodes (and not only audio or image information). This "text
generator" WaveNet was able to learn how to write English words and phrases just by predicting characters one by one, and sometimes was able even to learn what word to use based on context.
This output is far to be perfect, but It was trained in a only CPU
machine (without GPU) using a low set of parameters configuration in
just two hours!! I hope somebody with a better computer can explore the
potential of this implementation.
If you want to check this results, you just have to type this in a
command line terminal (this will use the trained model checkout I
uploaded to the respository):
TensorFlow needs to be installed before running the training script.
TensorFlow 0.10 and the current master version are supported.
Training the network
You can use any text (.txt) file.
In order to train the network, execute
python train.py --data_dir=data
to train the network, where data is a directory containing .txt files.
The script will recursively collect all .txt files in the directory.
You can see documentation on each of the training settings by running
python train.py --help
You can find the configuration of the model parameters in wavenet_params.json.
These need to stay the same between training and generation.
Generating text
You can use the generate.py script to generate audio using a previously trained model.
where model.ckpt-1000 needs to be a previously saved model.
You can find these in the logdir.
The --samples parameter specifies how many characters samples you would like to generate.
The generated waveform can be stored as a
.txt file by using the --text_out_path parameter:
Fast generation is enabled by default.
It uses the implementation from the Fast Wavenet repository.
You can follow the link for an explanation of how it works.
This reduces the time needed to generate samples to a few minutes.
"¿Qué cantidad de propelente (combustible + comburente) cree usted que sería necesaria para hacer llegar una sonda de 1 kg a Próxima b en 1.000 años? La respuesta le va a sorprender. La realidad es que la masa de propelente necesaria para hacer llegar una nave de 1 kg a Próxima b en 1.000 años usando un típico motor de propulsión química es muchos órdenes de magnitud superior a la masa que aglutina toda la materia contenida en el universo observable, la de todas sus galaxias con todas sus estrellas, planetas, agujeros negros y cualesquiera cuerpos y elementos contenidos en él." (Eduardo García Llama)
El sistema solar es el sistema planetario en el que se encuentran la Tierra y otros objetos astronómicos que giran directa o indirectamente en una órbita alrededor de nuestra estrella conocida como el Sol.
Muchos son los que tienen la idílica imagen de un futuro próximo donde los humanos colonicemos Marte, o alguna luna de Júpiter; dejados llevar quizás por esas románticas películas de Hollywood, sin ser conscientes de lo distante tecnológicamente que aún estamos de lograr tal proeza (y no hablemos ya del hito de hacer estos lugares habitables y hospitalarios para la vida humana).
No. La realidad es bien distinta. No sólo NO llegaremos a Marte en el 2030 (o 2035) como muchos medios sensacionalistas venden (mientras que las agencias espaciales se dejan querer para que no pare el flujo de dinero público), sino que posiblemente jamás llegue tal momento: de hecho, si volvemos a pisar nuestra luna antes de finales de siglo ya sería una gran sorpresa.
Pero no voy a entrar en debatir estas cuestiones que disgustará a más de uno, sino a mencionar el contenido de un artículo publicado en el diario El Mundo, escrito por el físico Eduardo García Llama, que me ha dejado de piedra. El artículo es este, y en él se trata el asunto concreto de cuánto propelente necesitaría una nave para viajar a Próxima b (el recientemente planeta descubierto orbitando la estrella más cercana a nosotros fuera del sistema solar: Próxima Centauri).
Y es que son muchos los que no sólo sueñan con colonizar otros planetas y satélites del sistema solar, sino que incluso creen en lo asequible de que esta colonización humana se expanda fuera de estos límites; y que se adentre primero en otros sistemas colonizando sus planetas, y que posteriormente dicha colonización se expanda por toda la galaxia...y más allá :P. No es posible que tal cosa ocurra (al menos no con la física conocida). Y como muestra, este físico que trabaja de hecho en la NASA, nos habla con números (y no con palabras o buenas intenciones), de los problemas para poder realizar algún día semejante hazaña con los conocimientos técnicos de nuestra época. Copio directamente parte de las palabras del autor sobre el asunto:
"[...]la masa de propelente necesaria para hacer llegar una nave de 1 kg a Próxima b en 1.000 años usando un típico motor de propulsión química es muchos órdenes de magnitud superior a la masa que aglutina toda la materia contenida en el universo observable[...].
[por otra parte] Para una duración de 1.000 años, si el sistema de propulsión fuera uno de tipo iónico [...]la masa necesaria de propelente sería de alrededor de 5,5 trillones de kilos (un 55 seguido de 17 ceros); esto es, la masa de unas 13 billones (un 13 seguido de 12 ceros) de estaciones espaciales internacionales, equivalente a casi dos billones de cohetes Saturno V como los que llevaron seres humanos a la Luna.
Y recordemos que ninguno de estos casos tiene en cuenta el lanzamiento de todo ese propelente al espacio desde la Tierra y que solo nos serviría para hacer llegar en 1.000 años nuestra pequeña sonda de 1 kg a Próxima b, el planeta que orbita a nuestra estrella más cercana fuera del Sistema Solar, sin frenar en el planeta, solo para sobrevolarlo y pasarlo de largo."
Palabras demoledoras. Una constatación numérica del hecho de que muy (muy) probablemente el ser humano jamás llegará a pisar nada sólido que se encuentre fuera del sistema solar, a menos que se descubra una nueva física radicalmente distinta a la ya conocida (aunque de hecho, parece que poco más queda aún por descubrir). Es decir; que haría falta hallar algún método de esos inefables que muestran las películas de ciencia-ficción para salir de este atolladero, pero resulta evidente que eso hoy por hoy es pura ficción que posiblemente quede en puro cuento que no llegue a materializarse en la realidad.
Distancias al Sol en Unidades Astronómicas (UA). 1 UA = distancia de la Tierra al Sol.
Ojo, la escala es logarítmica, de forma que Voyager 1 no está 3 veces más lejos del Sol que la
Tierra sino más de 100 veces más lejos (136 veces). Fuente: NASA/JPL-Caltech.
Es más que probable que nunca hallemos el modo de acelerar un gran nave (de toneladas de peso) a una velocidad suficiente como para recorrer la distancia que nos separa de nuestra estrella más cercana en menos de cientos de miles de años; y eso sin contar con el resto de problemas técnicos (y económicos) que un viaje de este tipo conlleva (mantener la nave habitable tantos años, generar una gravedad artificial, evitar la exposición a la radiación, sacar ese tonelaje al espacio y frenarlo al llegar al destino, conseguir los recursos económicos y energéticos para hacer todo lo necesario, y muchos otros problemas espaciales todavía no resueltos que nos impiden incluso llegar a Marte).
En resumen:
Si hoy por hoy nos invitan a apostar por un resultado, la papeleta ganadora la tiene sin duda la que dice que el ser humano no llegará nunca a colonizar siquiera Marte, nuestro planeta cercano más "habitable". Y esto hace pensar que, al igual que la primera persona, también el último hombre que sienta y viva esta realidad que nos rodea lo hará confinado en este trozo de roca que llamamos Tierra. No hay escapatoria, y la física se encarga de ello. Nuestra especie, por tanto, continuará atada hasta su exterminio final que, en el mejor de los casos, llegará justo cuando nuestra propia estrella, el Sol, se convierta en una gigante roja.
Y sabido esto, ahora os comento yo en compañía del gran Miguel de Unamuno:
"Quitad la propia persistencia, y meditad lo que os dicen. ¡Sacrifícate por tus hijos! Y te sacrificarás por ellos, porque son tuyos, parte prolongación de ti, y ellos a su vez se sacrificarán por los suyos, y estos por los de ellos, y así irá, sin término, un sacrificio estéril del que nadie se aprovecha. Vine al mundo a hacer mi yo, y ¿qué será de nuestros yos todos? ¡Vive para la Verdad, el Bien, la Belleza! Ya veremos la suprema vanidad, y la suprema insinceridad de esta posición hipócrita." (fragmento de la obra: Del sentimiento trágico de la vida).
En estas palabras del filósofo español encontramos la pregunta clave que nos apuñala con un sentimiento trágico (como humanos que somos) ante la vida: ¿qué será llegado el momento de "nuestros yos todos"? ¿De qué habrá servido todo ese durísimo sacrificio estéril del que llegado el momento ya nadie se podrá aprovechar? Porque es que es absurdo. La vida humana es absurda; y ese afán vehemente con el que todos nos aferramos luchando a diario (aun conociendo nuestro ya evidente fatal destino) por esos quehaceres (evolutivamente impuestos) es sencillamente de risa (en realidad es motivo de llanto, pero reír es más sano y ayuda a sobrellevar mejor esta realidad pésima en la que estamos envueltos).
El Juego de la vida es un diseño de programación ideado por el matemático británico John Horton Conway en 1970, y basa su funcionamiento en un "mundo" en dos dimensiones (2D) el cual contiene cierto número finito de celdas que pueden estar o no ocupadas por una estructura. Posteriormente estas celdas varían su estado gracias a una "física" (conjunto de reglas) que dictan la dinámica y el estado del tablero. Aunque lo más importante y destacable de este proyecto, es el hecho de ver como un diseño tan simple es capaz de conseguir con su dinámica temporal que a veces emerjan interesantes y complejos patrones de movimiento.
Las reglas del juego original son las siguientes:
Una celda puede estar activa (on) o no activa (off). Si está activa se dice que es una célula viva.
Una célula muerta (celda off) con exactamente 3 células vecinas vivas "nace" (al turno siguiente esta celda muerta estará viva).
Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso
muere o permanece muerta (por "soledad" o "superpoblación").
Y esto es todo. Una reglas muy sencillas, que dan lugar a patrones a veces asombrosamente complicados. Esta es de hecho, la clave de todo: comprobar como es posible que surja complejidad a partir de un comportamiento de base muy simple.
A continuación os muestro brevemente lo fácil que es programar esta "física" en Javascript:
varGame=function(board) {
this.board= board;
this.width=board.width;
this.height=board.height;
};
Game.prototype.get=function(x, y) {
returnthis.board.get(x,y);
};
Game.prototype.set=function(x, y, value) {
this.board.set(x,y, value);
};
Game.prototype.step=function() {
var
current =this.board,
width =current.width,
height =current.height,
i, j, neighbours, cell
;
this.board=newBoard(width, height);
for (i =0; i < width; i++) {
for (j =0; j < height; j++) {
neighbours =current.neighbours(i,j);
cell =current.get(i,j);
if (neighbours ===3)
this.board.set(i,j, 1);
elseif (neighbours ===2)
this.board.set(i,j, cell);
else
this.board.set(i,j, 0);
}
}
};
Apenas 38 líneas de código que nos van a permitir disfrutar de increíbles patrones de movimiento como los siguientes (es importante hacer notar de nuevo que el estado inicial de las celdas va a determinar también el patrón de movimiento al principio):
Pues bien, a petición de la idea de un amigo (Sergio Hernandez), he desarrollado una variación sobre el Juego de la vida, donde simplemente vamos a tener en el "mundo" dos tipos de células vivas (en on): células verdes y células rojas (y también celdas muertas en off). Las reglas serán las mismas para cada tipo de célula viva, las cuales vivirán siguiendo sus propias normas (como si fuesen cepas independientes).
Dos pequeños cambios se añaden no obstante a las reglas orginales:
Si una celda resulta que es ocupada en un paso (step) a la vez por una célula roja y una verde se elige aleatoriamente el tipo de célula viva que permanecerá en esa casilla (dado que una celda sólo puede tener un estado determinado).
Si una célula viva detecta que en el siguiente paso (step) morirá por "soledad" o "superpoblación", cambiará su tipo. De modo que si una célula viva roja detecta que morirá en el siguiente paso, pero que si se vuelve verde no lo hará, cambiará su estado a célula verde.
El resultado de estos cambios es el siguiente (generando al azar el estado inicial del tablero):
Es interesante ver el modo en que estas dos cepas de células vivas compiten de alguna manera por el espacio disponible. A veces da la sensación de que se fagocitan unas a otras, o que incluso intenan "escapar" cuando notan la proximidad de "rivales". En muchas ocaciones incluso una cepa completa es eliminada por la contraria, terminando el tablero exclusivamente con células verdes o rojas.
Nota: como ya hemos dicho, el resultado dependerá del estado inicial de las celdas, y en este ejemplo dicho estado inicial es aleatorio, por lo tanto, si queréis ver una nueva configuración dinámica simplemente tenéis que refrescar esta página en el navegador (botón F5). También es posible hacer 'click' en cualquier lugar del tablero para generar nuevas celdas vivas aleatoriamente, con lo cual podremos "modificar" el estado dinámico del juego sin necesidad de actualizar la página completa.
También es importante ver como esta modificación parece de algún modo haber estabilizado el comportamiento del sistema, puesto que ahora, de media, la duración del movimiento dinámico antes de caer en estructuras fijas (que no avanzan sino que se quedan quitas con patrones estáticos) parece haber aumentado. Por ejemplo, en el siguiente caso os muestro el comportamiento del nuevo Juego de la vida desarrollado, pero en lugar de comenzar con una configuración al azar, voy a comenzar con una configuración muy parecida a la que usamos antes para el juego original (5 células vivas de cada color dispuesta en similar configuración):
Futuro trabajo.
Creo que es interesante seguir explotando este tipo de desarrollos en un intento de sacar algún tipo de conclusión teórica sobre la base del mismo. En este sentido es seguro que Sergio Hernandez me comentará algunas nuevas ideas de cambio, y yo, por mi parte, tengo intención de aplicar al desarrollo anterior un algoritmo de computación evolutiva buscando en principio aquellas configuraciones que más movimiento producen tras n pasos (es decir, aquellas que más "calor" generan, que más "energía" consumen y por lo tanto que maximizan la "entropía"), con lo cual espero conseguir (descubrir) aquellas configuraciones que den lugar a los patrones más complejos posibles, y detectar también si es cierto que complejidad y entropía (consumo de energía libre) correlacionan necesariamente, y si dicho resultado se puede generalizar para otras "físicas" (quizás incluso la de nuestro propio mundo).