Acceso abierto al libro Torres J.; (2021). Introducción al aprendizaje por refuerzo profundo. Teoría y práctica en Python. WATCH THIS SPACE Book Series. Kindle Direct Publishing. ISBN 9798599775416
Prólogo
¡Es un momento increíble para formar parte de la comunidad de Machine Learning! El crecimiento de nuestra comunidad es verdaderamente exponencial. Y una parte de esta comunidad —que es cada vez más y más prometedora— es la del aprendizaje por refuerzo. Si bien el aprendizaje por refuerzo se describe, a veces, como un «nicho» o una parte «especial» de Machine Learning, la realidad es que está impulsando algunas de las mejoras más disruptivas para la sociedad y la humanidad.
Hace varios años, los investigadores desarrollaron AlphaGo y demostraron que podía vencer a los mejores jugadores de Go del mundo. Al mismo tiempo, Google demostró que el aprendizaje por refuerzo permitía una reducción del 40 % en los costes de refrigeración de los centros de datos. Hasta hoy, no se había visto un avance y un crecimiento tan rápido como el que experimenta la comunidad de aprendizaje por refuerzo —ni siquiera en el contexto del crecimiento de la comunidad de Machine Learning—.
Es más, el aprendizaje por refuerzo ha jugado un papel fundamental en algunos logros asombrosos en este último año. Hemos sido testigos de cómo el aprendizaje por refuerzo ha demostrado una capacidad increíble para resolver el problema del diseño de proteínas en las inmunoterapias para enfermedades y en el desarrollo de vacunas, lo que ha contribuido a ayudar al mundo a deshacerse del Covid-19. También ha ayudado al Emirates Team New Zealand a defender con éxito su título mundial probando miles de diseños de hidroalas.
Cuando diseñamos y escribimos el sistema original de Ray distribuido, tuvimos el aprendizaje por refuerzo siempre presente. Desde una perspectiva de sistemas, los requisitos de computación del aprendizaje por refuerzo llevan a los sistemas existentes más allá de sus límites. En pocas palabras, la comunidad de Machine Learning necesitaba mejores herramientas para aprovechar mejor el gran número de máquinas, y ese desafío era particularmente más notorio en la comunidad del aprendizaje por refuerzo. Ray ha tenido una acogida increíble desde que lo abrimos a la comunidad de usuarios, y hemos visto a Ray convertirse en un estándar para la computación distribuida y a RLlib en un estándar para el aprendizaje por refuerzo.
Este libro es una excelente introducción a la teoría y a las aplicaciones del aprendizaje por refuerzo y debería servir como base sólida para sus avances en este tema. Esperamos que este libro no solo le sirva como una introducción a la comunidad y a los problemas ya establecidos, sino que también le sirva para ir más allá y profundizar en esta área, ya que hay muchísimas oportunidades en investigación y en aplicaciones en industria. El aprendizaje por refuerzo está, en realidad, en el comienzo de su viaje y son los investigadores y desarrolladores como usted quienes lo guiarán hacia aquellos problemas que la humanidad necesita verdaderamente solucionar. ¡Estamos deseando ver lo que consigue!
Eric Liang – Creator of RLlib, Software Engineer at Anyscale
Sven Mika – Lead developer of RLlib, Software Engineer at Anyscale
Berkeley (California), a 28 de abril de 2021
Prefacio
La educación es el arma más poderosa que
puedes usar para cambiar el mundo.Nelson Mandela
El aprendizaje por refuerzo, o Reinforcement Learning en inglés, es el campo de la inteligencia artificial con el mayor potencial para tener un impacto profundo en la historia de la humanidad. Porque no solo está permitiendo la automatización de tareas, sino que puede llevarnos a emular en muchos casos la inteligencia humana — aunque, a mi entender, no pueda llegar nunca a igualarla — y, por tanto, llevarnos a lugares en los que nunca antes habíamos estado como sociedad.
Sin duda, esto nos debería permitir construir una sociedad que mejorará la vida de las personas. Muchos artículos de investigación recientes sugieren la aplicación del aprendizaje por refuerzo en la atención médica, los sistemas educativos o las ciudades inteligentes, entre muchos otros ámbitos. Aunque también es cierto que el uso de estas tecnologías por doquier genera preocupación e incertidumbre.
Pero estoy convencido de que, a medida que nos vayamos encontrando con nuevos problemas debidos a estas nuevas tecnologías, como sociedad conseguiremos descubrir sus soluciones. Para ello, es clave que consigamos una mejor comprensión de los nuevos temas que están revolucionando la informática, para así darles un uso correcto.
Este libro nace con el propósito de divulgar este conocimiento. Su contenido se publica de forma abierta en Internet para contribuir a difundir este conocimiento científico, y para que más personas entiendan esta tecnología. Soy consciente de que la mayoría de los recursos que existen sobre el aprendizaje por refuerzo son difíciles de entender para los recién llegados; además, el hecho de que no haya bibliografía en español es un hándicap adicional para quienes no dominan el inglés.
Mi primera aproximación al estudio del aprendizaje por refuerzo profundo fue en Cádiz, durante la Machine Learning Summer School[1] en 2016. Oriol Vinyals, en aquel entonces investigador de Google, me aconsejó asistir para «ponerme al día» de lo que se estaba cociendo en Machine Learning.
Uno de los cursos a los que asistí fue el que impartió John Schulman[2] (de la universidad UC Berkeley, y cofundador de OpenAI) sobre Deep Reinforcement Learning. Fue fascinante para mí descubrir esta parte del Machine Learning, pero también tengo que confesar que me fue tremendamente difícil seguir las explicaciones de John en aquella escuela de verano. Y, sin duda, despertó en mí el interés por el tema — en particular, su conexión con la supercomputación — .
Pero no fue fácil iniciarme, y eso fue por varias razones. Entre ellas, porque en el aprendizaje por refuerzo hay una base matemática y de teoría básica detrás que es imprescindible dominar para poder empezar y avanzar. Además, el aprendizaje por refuerzo se sirve actualmente del aprendizaje profundo, Deep Learning en inglés, que es otra área compleja que se ha desarrollado de forma completamente diferente al aprendizaje por refuerzo, y comprenderla requiere también de gran esfuerzo.
Pero gracias a mi actividad de investigación en el BSC y en la UPC he podido acceder a recursos y estar en contacto con investigadores de primer nivel mundial en ambos campos. Además, he tenido el privilegio de poder dirigir varias tesis doctorales de estudiantes brillantes y de trabajar en proyectos del tema con grandes ingenieros e ingenieras.
Todo ello me ha permitido adentrarme en este mundo del aprendizaje por refuerzo profundo, o Deep Reinforcement Learning, que es un mundo apasionante. Y escuchando a mi vocecita interior, que siempre me recuerda el placer que me produce la divulgación científica, me animé a escribir una serie de publicaciones divulgativas sobre el tema en el portal Towards Data Science[3], en Medium, durante el primer confinamiento en Barcelona debido a la terrible pandemia mundial en la que nos encontramos.
Al percatarme del interés que suscitaba el tema (las publicaciones en el portal Towards Data Science tenían — y siguen teniendo — centenares de lecturas diarias, y recibí consultas que me preguntaban por documentación en español), caí en la tentación de querer escribir un libro en español que ayudara a comprender el aprendizaje por refuerzo profundo. Para mí es el campo más interesante de la inteligencia artificial en estos momentos, que une la capacidad del aprendizaje profundo de representar y comprender el mundo con la capacidad del aprendizaje por refuerzo de actuar sobre esa base.
Y aquí lo tienen; un libro para iniciarse en el tema, que consta de cuatro partes. En la primera parte del libro, nos sumergiremos en el conocimiento fundamental del aprendizaje por refuerzo. En la segunda parte, se mostrarán los métodos clásicos para resolver un problema de aprendizaje por refuerzo. En la tercera parte, se introducirán los conceptos básicos y necesarios de aprendizaje profundo. Finalmente, en la cuarta parte, se presentarán los métodos básicos del aprendizaje por refuerzo profundo.
El libro que sostienen en sus manos (o en su pantalla) es un libro que pretende cerrar la brecha entre la teoría y la práctica (esa brecha a la que yo mismo me enfrenté al principio). No quiere alejarse de las ecuaciones; son esenciales para asimilar las ideas fundamentales. Pero quiere acompañarlas de código, con ejemplos concretos, para que el libro proporcione el lado práctico del tema.
No esconderé mi preocupación por los riesgos que supone el uso de tecnologías como las que aquí se exponen. Por ello, concluyo el libro con un capítulo de clausura que apela a la responsabilidad de los ingenieros e ingenieras que las usamos. Porque el futuro que «inventaremos» es una elección que hacemos conjuntamente, no algo que sucede.
Los avances en ciencia y tecnología pueden solucionar grandes retos que se le presentan — y presentarán — a nuestra sociedad. Si ir más lejos, estos meses estamos viendo cómo, gracias a la ciencia y a la tecnología, se ha avanzado de una manera nunca vista hasta ahora en la creación de unas vacunas que esperemos que nos permitan controlar esta devastadora pandemia.
Pero la ciencia y la tecnología pueden ser peligrosas en las manos equivocadas. ¿Se puede utilizar nuestra solución de aprendizaje por refuerzo de forma no adecuada? ¿Podría agregar accidentalmente — o no accidentalmente — sesgo? ¿Cómo afecta esto a las personas? O, por ejemplo, ¿pueden acabar controlando nuestras decisiones — sea la compra de un objeto o la orientación de nuestro voto en unas elecciones — ?
Siendo realista, considero que el avance de la ciencia del aprendizaje por refuerzo ya es imparable, y que no hay marcha atrás. Por ello, la mejor manera de conseguir su mejor uso es mediante su «democratización», es decir, que esté al alcance de cuanta más gente mejor, y no solo de unos cuantos. De este modo se garantizaría que, incluso con la misma tecnología, podamos entre todos controlar su posible uso indebido. Por ello, creo que es de vital importancia que intentemos comprender más esta tecnología para que podamos controlarla y ponerla a disposición de nuestro beneficio como sociedad. Y este libro es mi granito de arena en esta causa; espero poder aportar valor.
Déjenme acabar diciéndoles: ¡gracias por estar leyendo este libro! El simple hecho me reconforta y justifica mi esfuerzo en escribirlo. Quienes me conocen saben que la formación de las personas es una de mis pasiones, y que me mantiene con vigor y energía. Porque, como decía Robert Heinlein, «When one teaches, two learn».
Jordi Torres i Viñals, a 23 de abril de 2021 (Sant Jordi)
Acerca de este libro
A quién va dirigido el libro
El aprendizaje por refuerzo profundo (Deep Reinforcement Learning) es la combinación del aprendizaje por refuerzo (Reinforcement Learning) y del aprendizaje profundo (Deep Learning). Esta área de conocimiento ha adquirido recientemente mucha popularidad debido a que puede resolver una amplia gama de tareas complejas de toma de decisiones, las cuales estaban hasta hace muy poco fuera del alcance de una máquina.
Este libro puede ser de interés tanto para quienes tienen una experiencia previa en el aprendizaje profundo y quieren aprender los fundamentos del aprendizaje por refuerzo, como para quienes se inician en ambas materias para posteriormente entrar en el mundo del aprendizaje por refuerzo profundo.
Dado que el objetivo de esta obra es ser una guía de iniciación para quienes quieran adquirir una base de conocimiento sólido, la teoría y los fundamentos aquí recogidos se han desarrollado mediante la presentación de conceptos matemáticos y algoritmos. Al mismo tiempo, a partir de la implementación en Python de todos los algoritmos presentados en el libro, se quiere facilitar un conocimiento práctico de la materia.
Para sacar el máximo provecho al contenido de este libro, es conveniente tener conocimientos previos básicos de Python, Machine Learning y estadística. De todas maneras, a lo largo del libro se introducen y se repasan los conceptos que se consideran necesarios de Machine Learning y estadística. Pero lo más importante, en cuanto a prerrequisitos para empezar este libro se refiere, ¡es tener interés por aprender!
Organización del libro
Ya hemos dicho que el propósito de este libro es introducir los conceptos básicos del aprendizaje por refuerzo profundo para facilitar la comprensión de los algoritmos clásicos en el área y permitir, así, a quienes se inician construir una base teórica y práctica en la materia para, después, poder continuar por su cuenta con algoritmos más avanzados.
Una parte de mi esfuerzo a la hora de escribir este libro ha sido su planteamiento; en concreto, el hecho de construir un «relato» que va introduciendo gradualmente el formalismo matemático y la teoría del área. Otra parte del esfuerzo ha sido mostrar con explicaciones detalladas cómo se pueden programar en Python los métodos propuestos, invitando al lector o lectora a experimentar a la vez que va avanzando la lectura, ejecutando los códigos (que están a su disposición en el GitHub del libro) en Colab. Quienes me conocen saben que soy un fervoroso defensor del learn by doing con la guía de una teoría sólida, porque es sin duda una muy buena aproximación al conocimiento de acuerdo con mi experiencia como profesor durante muchos años en la Universitat Politècnica de Catalunya, UPC Barcelona Tech.
La primera parte del libro se compone de tres capítulos, en los que presentaremos los conceptos fundamentales del aprendizaje por refuerzo.
En el capítulo uno contextualizaremos el aprendizaje por refuerzo y mostraremos las principales ideas que lo definen y, a la vez, lo distinguen de otros tipos de aprendizaje. Aprovecharemos para presentar un ejemplo, el entorno Frozen-Lake, que nos servirá para ver cómo podemos programar la mayoría de los algoritmos presentados en este libro.
En el capítulo dos formalizaremos los conceptos introducidos en el capítulo anterior para construir una base sólida de conocimiento. Aprenderemos más detalles sobre el proceso de decisión de Markov y varios conceptos fundamentales.
El capítulo tres será el único al que no le acompaña código para poder probar lo que vamos explicando. Es importante hacer un pequeño esfuerzo para familiarizarse con la ecuación de Bellman y las funciones de valor para poder avanzar con seguridad en el aprendizaje por refuerzo en los siguientes capítulos.
Los tres siguientes capítulos, correspondientes a la segunda parte del libro, se dedican a tres tipos de algoritmos clave en el aprendizaje por refuerzo clásico. Es muy importante comprender las características y diferencias entre estos tres tipos de algoritmos.
En el capítulo cuatro nos familiarizaremos con el método Value Iteration, que es el máximo exponente de la programación dinámica, y veremos cómo podemos usarlo para resolver el problema del entorno Frozen-Lake.
El capítulo cinco explica cómo podemos aplicar el método estadístico numérico Monte Carlo al aprendizaje por refuerzo. En este capítulo aprenderemos también qué son las tareas de predicción y control, y cómo se pueden realizar con el método Monte Carlo. Implementaremos las diferentes versiones de Monte Carlo para resolver el juego de blackjack.
El capítulo seis se dedica a presentar el dilema exploración-explotación, clave en el proceso de aprendizaje de los métodos. También se presenta el aprendizaje por diferencia temporal, que es uno de los métodos más populares y es la base de muchos de los métodos actuales. Se analizarán en detalle dos métodos concretos de este tipo de aprendizaje, SARSA y Q-Learning, y se usarán para resolver el problema del entorno Frozen-Lake.
En la tercera parte del libro, presentaremos los conceptos básicos de aprendizaje profundo que nos hacen falta para avanzar en el tema.
El capítulo siete presenta resumidamente aquellos conceptos básicos del aprendizaje profundo que se requieren para poder aplicarlo después al aprendizaje por refuerzo profundo.
El capítulo ocho muestra cómo se pueden programar las redes neuronales y presenta PyTorch, una de las librerías de aprendizaje profundo más populares en estos momentos.
En la cuarta parte del libro se presentan los métodos básicos del aprendizaje por refuerzo profundo.
El capítulo nueve introduce los métodos value-based, basados en redes neuronales. Como ejemplo, se presenta el más popular: Deep Q-Network. Se muestra en detalle cómo se programa este método.
El capítulo diez presenta los métodos policy-based como alternativa a los métodos value-based. Como ejemplo, se expone en detalle y se programa el método REINFORCE.
El capítulo once muestra el camino que se toma actualmente para programar los problemas de aprendizaje por refuerzo profundo, basado en librerías y frameworks. Como muestra, se presenta un ejemplo de programación que usa la librería RLlib en el framework Ray.
El libro finaliza con un capítulo en el que espero que el lector o lectora tome conciencia de la responsabilidad que asumimos al programar este tipo de algoritmos, cuyas aplicaciones en la vida real son ya un hecho.
Acerca de los anglicismos usados en este libro
Un comentario recurrente que he recibido sobre el contenido de mis libros previos trata sobre del uso de anglicismos en la terminología técnica en detrimento de una posible versión traducida. Me gustaría hacer notar que en este particular campo informático (el cual avanza tan rápidamente) a menudo no existe en español una traducción consensuada o una palabra equivalente con el mismo significado. Además, algunos de los términos en inglés no siempre se traducen de la misma manera en los diferentes países de habla hispana, por lo que el uso de un término u otro podría dar lugar a confusiones.
Intentaré, en la medida de lo posible, usar la versión traducida de todos los términos, siempre que no sean susceptibles de provocar dudas o confusiones. En todo caso, siempre presentaré también la versión en inglés (y la iré recordando a lo largo del texto) para facilitar la familiarización con esos términos, puesto que les será muy útil para poder avanzar por su cuenta en este tema tan dinámico cuya literatura se escribe mayoritariamente en lengua inglesa, especialmente sus constantes y rápidos progresos. En esta línea, también mantendré los códigos Python usados en este libro con nombres de variables en inglés. Así, facilitamos la familiarización con algunos nombres de variables que disfrutan de un cierto consenso en la comunidad de investigación. Conocer estos conceptos es imprescindible para poder seguir otros códigos en Python de la extensa documentación que existe sobre el tema, pero en inglés.
De todas formas, en el apéndice del libro hemos recopilado una lista de algunos de los términos que disponen de una traducción más o menos estable. No obstante — insisto — , lo fundamental es conocer el término en inglés para poder seguir los avances en este campo, en el que todo cambia muy rápidamente.
Relacionado con este tema, quiero hacer notar que los números se representan en notación anglosajona, con el punto reservado para los decimales, por tal de mantener una cierta coherencia con los códigos Python utilizados.
Página web del libro
Desde la página web https://torres.ai/aprendizaje-por-refuerzo, se puede acceder al contenido de este libro en la web. También se incluye una recopilación de enlaces a recursos sobre el tema (en su mayoría en inglés), así como una lista con la fe de erratas que puedan aparecer en el libro con su correspondiente corrección. Si encuentran un error en este contenido, agradeceremos que nos informen.
Finalmente, todos los códigos que aquí se proponen pueden descargarse desde el repositorio GitHub del libro:
github.com/JordiTorresBCN/aprendizaje-por-refuerzo
Convenciones tipográficas usadas en este libro
Hay una serie de convenciones de texto que se utilizan a lo largo de este libro. A continuación, las enumeramos para facilitar el seguimiento del libro:
· El texto en tipografía Courier indica nombres de variables usadas en el código, nombres de archivos, URLs, etc.
· Los bloques de código se establecen con tipografía consolas y fondo gris, de la siguiente manera:
is_done = False
t = 0
while not is_done:
action = env.action_space.sample()
state, reward, is_done, _ = env.step(action)
env.render()
t +=1
· La salida por pantalla, o standard output, de un código se indicará con la tipografía Courier New. Un ejemplo puede ser:
· Con tipografía en negrita se indica un término nuevo o una palabra o concepto importante dentro del texto que quiero destacar.
· Con tipografía en cursiva se indica un término en inglés (o cualquier otro extranjerismo). Para los términos principales del área en inglés que ya he avanzado que he decidido no traducir, no se usará tipografía cursiva.
· Una nota o comentario lateral al texto se indicará de la siguiente manera:
· En último lugar, para la definición compacta de alto nivel de los algoritmos se usará pseudocódigo[4] con notación y sintaxis en inglés.
Preparación del entorno de trabajo
En este apartado presentaremos brevemente el entorno de trabajo que nos permitirá ejecutar los códigos propuestos en el libro, para poder aprender practicando el conocimiento que se explica en el texto del libro y, de esta manera, asentar los conocimientos.
La forma recomendada de interactuar con los ejemplos de código en este libro es a través de Jupyter Notebook[5], que permite ejecutar el código paso a paso y tener todas las salidas resultantes — incluyendo gráficos — junto con el código.
En este libro se propone usar el entorno de trabajo Colaboratory Environment[6] — que referenciaremos como Colab a partir de ahora — , especialmente si no dispone de GPU en su ordenador (necesaria para algoritmos avanzados que usan redes neuronales). Como veremos, es muy fácil e intuitivo.
En el caso de que prefiera usar su propio ordenador y prescindir de Colab, no hay ningún impedimento dado que el código del libro está preparado para ser descargado a través de ficheros notebooks .ipnb. Para ello, solo debe instalar Jupyter Notebook en local. En la página oficial de Jupyter[7] encontrará toda la información para poder realizar la instalación y la configuración de un entorno en el ordenador personal.
Colab es un entorno de desarrollo en el Cloud de Google, al cual se puede acceder directamente (https://colab.research.google.com) a través de un simple navegador web. En este entorno, encontrará una interfaz de Jupyter Notebook donde podrá ejecutar los notebooks en Python que se pueden encontrar en el GitHub del libro.

Colab es un proyecto de investigación de Google creado para ayudar a difundir la educación e investigación de Machine Learning. Es un entorno de notebooks Jupyter que no requiere configuración y que se ejecuta completamente en el Cloud de Google. Una de las características más importantes que distingue a Colab de otros servicios gratuitos en el Cloud es que proporciona GPU o TPU. Los notebooks se almacenan en Google Drive y se pueden compartir como se haría con Google Docs. Este entorno es de uso gratuito y solo requiere la creación previa de una cuenta de Google, si no se dispone ya de una. Se puede encontrar información detallada sobre el servicio en la página de preguntas frecuentes[8].
Al acceder por primera vez, aparecerá una ventana emergente como la que se muestra en la Figura 1, desde la que se puede cargar cualquier fichero de código. En esta ventana se puede pulsar la pestaña «Upload» y aparecerá el botón «Choose file» que, si se pulsa, permitirá cargar en Colab cualquier fichero .ipnb que se encuentre en el sistema de ficheros del ordenador local.
Alternativamente, si desea descargar el código del GitHub del libro, en esta ventana debe seleccionar la pestaña «GitHub», completar el campo URL con JordiTorresBCN y pulsar el símbolo de la lupa. En el campo «Repository» saldrán diferentes repositorios del autor, y deberá seleccionar el repositorio correspondiente a este libro: JordiTorresBCN/aprendizaje-por-refuerzo.
Una vez realizado este paso, en esta pantalla podrá ver listados todos los notebooks que usaremos a lo largo del libro. Para cargar un notebook concreto, solo se requiere hacer clic en el botón que aparece a la derecha del nombre (abre el notebook en una pestaña nueva).
Por defecto, los notebooks de Colab se ejecutan en la CPU, pero puede cambiar su entorno de ejecución para que se ejecuten en una GPU o TPU. Para ello, debemos seleccionar la pestaña «Runtime» y seleccionar «Change runtime type», como se muestra en la Figura 2.
Puede aparecer en una ventana emergente una advertencia en la que se indica que Google no creó el código y se le pide que confirme que quiere cargar ese código. ¡Espero que confíe en nuestro código y lo ejecute de todos modos!
Posteriormente, asegúrese de estar conectado al entorno de ejecución (hay una marca de verificación verde que aparece junto a «Conect», a la derecha en la cabecera del menú). Una vez acabado el proceso, ya está en disposición de ejecutar en Google Colab el código del libro que ha cargado de un fichero local o del repositorio de GitHub.

Un notebook contiene una lista de celdas, que pueden contener código ejecutable o texto formateado que se puede seleccionar con las dos primeras pestañas del menú: «+Code» y «+Text», respectivamente. Tras crear una celda, esta se puede mover hacia arriba o hacia abajo seleccionándola y presionando las flechas de la barra de menú de la celda. Además, presionando las teclas «Shift» + «Enter» a la vez, se ejecuta la celda seleccionada, y nos devuelve los resultados debajo de la celda.
Si desea guardar su notebook debe pulsar la pestaña «Copy to Drive» en la barra de menú. Esta acción abrirá un nuevo notebooken una nueva pestaña una vez guardado en su Drive.
Es muy útil que Colab nos permita ejecutar comandos bash de Linux en nuestro entorno de ejecución, como si estuviésemos lanzando comandos desde la consola del ordenador. Esto se consigue añadiendo el signo de exclamación «!» delante del comando que queremos ejecutar dentro de una celda. Por ejemplo, podemos saber que estamos ejecutando nuestro código en un entorno Linux simplemente con el comando:
! cat /etc/os-release
tal como se muestra en la Figura 3, que nos muestra detalles del sistema operativo que tiene el entorno de ejecución que nos han asignado en Colab.

Estos son los conceptos básicos que necesitará para usar los notebooks de este libro; como verá al practicar, es muy intuitivo.
Acerca de WATCH THIS SPACE
Antes de empezar con el contenido técnico del libro, quisiera ofrecer una última explicación sobre el porqué de este «sello editorial» propio (y responder así a una pregunta que me llega a veces).
Como en casi todo en esta vida, detrás siempre hay una historia. Y la de este sello editorial se remonta al año 2008, cuando impartía la asignatura de máster Execution Environments of Distributed Systems para alumnos que estaban realizando el doctorado en diferentes programas de la UPC. Una de las actividades de aquel año fue realizar un survey de áreas relacionas con la asignatura y con el foco puesto en el Cloud Computing, algo que en aquel entonces era un tema de investigación y no de uso empresarial como ahora.
El trabajo preliminar que recibí de los alumnos fue brillante y, para acabar de estimular un buen resultado, les propuse publicarlo en abierto para ponerlo a disposición de quien quisiera acceder a ese conocimiento (y como material docente para otras ediciones del curso). Pero no solo les propuse «colgarlo en la web», como se hacía en aquel momento, sino que les sugerí publicarlo en formato libro. Además de trabajar de esta manera las habilidades de publicar un libro, también se le daba más propiedad a su esfuerzo.
Fue entonces cuando fui a ver a un compañero de la UPC, responsable del departamento de publicaciones, para contarle nuestra idea y pedirle que me aconsejara sobre algunos pasos (como, por ejemplo, cómo conseguir el famoso ISBN, que en aquel momento daba «prestigio» a cualquier publicación). No recuerdo con detalle la conversación, pero sí recuerdo que fue en la línea de «requiere tiempo pedir un ISBN», «no se ha hecho nunca antes para un curso», «esto no es fácil». Salí desanimado del encuentro, porque yo ya me había comprometido con los alumnos, que estaban ilusionadísimos con la aventura. Ya habíamos incluso decidido que nos repartiríamos los trabajos derivados de editarlo: el rol de maquetador, el rol de editor, etc.
Nada que reprochar a mi compañero de la UPC, con quien comparto la pasión por la bicicleta, y con quien me llevo muy bien. Al contrario, le agradezco profundamente que aquello se convirtiera en una «crisis» para mí, porque toda crisis es siempre una oportunidad.
Evidentemente, no podíamos ir a una editorial de libros técnicos «normal» porque queríamos conservar todos los derechos de autor y el control creativo de la obra, para poder compartir el contenido con cualquier estudiante interesado. Empecé a buscar, y fue entonces cuando descubrí la plataforma estadounidense de autopublicación lulu.com, que llevaba poco tiempo funcionando. Permitía publicar por medio de impresión bajo demanda y ofrecía la posibilidad de que te asignaran un ISBN a la obra sin perder todos los derechos de autor.
El resultado fue un fantástico libro titulado Cloud Computing: Execution Environments for Distributed Computation Issues[9], del que nos sentimos todos orgullosos. A partir de entonces, publiqué con este sistema algún que otro material docente que iba creando. Constaté que, cuando entregaba documentación «con ISBN» a los alumnos, estos la recibían «mejor». En realidad, seguramente era mejor, porque me imponía a mí mismo unos estándares de formato y revisión superiores, que aprendí cuando publiqué mi primer libro con la editorial Libros de Cabecera (titulado Empresas en la nube: ventajas y retos del Cloud Computing en 2011). Esa fue una experiencia única, ya que conté con un equipo humano maravilloso que dejó que me involucrara en todas las fases del proyecto, con lo que aprendí mucho sobre el proceso de editar un libro.
Pero el punto de partida real del WATCH THIS SPACE se sitúa a principios del 2016, cuando estaba generando material docente sobre la librería de aprendizaje profundo TensorFlow, que se había convertido en open sourcejusto hacía pocas semanas. Percibí que el interés en su contenido salía de los muros de la universidad. Clarísimamente el manuscrito podía ser un libro de interés más general. Además, Oriol Vinyals, entonces Research Scientist en Google Brain, se animó a prologar el libro.
Pero no podía publicarlo a través de una editorial técnica porque no podría mantener los derechos de autor ni distribuir libremente su contenido. Por tanto, decidí crear un sello editorial a mi medida, y distribuir libremente el contenido de los libros en mi página web. Y también, y no menos importante, poderlos retirar cuando yo considerara que su contenido había quedado absoleto (dado el rápido avance de la informática).
Tenía claro que el contenido de los libros de la colección sería sobre temas que no se deben perder de vista para estar al día en ingeniería informática. Con Katy Wallace encontramos el nombre para ese espacio, después de darle muchas vueltas: «WATCH THIS SPACE Book Series — Barcelona». Y, desde entonces, ya llevamos 6 libros publicados[10]:
- Hello World en TensorFlow para iniciarse en la programación del Deep Learning. WATCH THIS SPACE collection — Barcelona : Book 1. ISBN 978–1–326–53238–3 January 2016. UPC Library catalog: https://cataleg.upc.edu/record=b1472879
- First Contact with TensorFlow get started with deep learning programming. WATCH THIS SPACE collection — Barcelona: Book 2. ISBN 978–1–326–56933–4 March 2016. UPC Library catalog: https://cataleg.upc.edu/record=b1475713
- Understanding Supercomputing with Marenostrum supercomputer in Barcelona. WATCH THIS SPACE collection — Barcelona: Book 3. ISBN 978–1–365–37682–5 September 2016. UPC Library catalog: https://cataleg.upc.edu/record=b1490214
- Deep Learning Introducción práctica con Keras (PRIMERA PARTE). WATCH THIS SPACE collection — Barcelona: Book 4. ISBN 978–1–983–12981–0 . June 2018. UPC Library catalog: http://cataleg.upc.edu/record=b1508848 (VOL 1)
- First contact with Deep Learning Practical Introduction with Keras. WATCH THIS SPACE collection — Barcelona: Book 5. ISBN 978–1–983–21155–3 July 2018. UPC Library catalog: https://cataleg.upc.edu/record=b1510639
- Deep Learning Introducción práctica con Keras (SEGUNDA PARTE). WATCH THIS SPACE collection — Barcelona: Book 6. ISBN 978–1–687–47399–8 October 2019 . UPC Library catalog: http://cataleg.upc.edu/record=b1508848 (VOL 2)
REFERENCIAS DEL CAPÍTULO:
[1] Véase https://learning.mpi-sws.org/mlss2016 [Consultado: 29/12/2020].
[2] Véase http://joschu.net/index.html [Consultado: 29/12/2020].
[3] Véase https://towardsdatascience.com/tagged/deep-r-l-explained[Consultado: 29/01/2020].
[4] Véase https://en.wikipedia.org/wiki/Pseudocode [Consultado: 29/12/2020].
[5] Véase https://jupyter.org [Consultado: 12/12/2020].
[6] Véase https://colab.research.google.com [Consultado: 28/12/2020].
[7] Véase https://jupyter.org/install [Consultado: 28/12/2020].
[8] Véase https://research.google.com/colaboratory/faq.html[Consultado: 29/01/2020].
[9] Torres J., Goiri I., Macías M., Berral J., Fitó J., León X., Ejarque J, Martínez N., Miranda A. Cloud Computing: Execution Environments for Distributed Computation Issues. Lulu. 2008. ISBN 9081409217879. https://www.lulu.com/en/us/shop/alberto-miranda-and-norbert-mart%C3%ADnez-and-jorge-ejarque-and-xavier-león/cloud-computing-execution-environments-for-distributed-computation-issues/hardcover/product-1kqe589.html
[10] En el momento de escribir este libro, tres de ellos aún tienen contenido válido y se encuentran accesibles en abierto a través de mi página web. Véase https://torres.ai/deeplearning/ [Consultado: 29/03/2020].