Cuando los cumpleaños pasan a segundo plano

El viernes pasado cumplí 39 años.

Alguna vez comenté aquí que no me gustaba mencionar cuándo era mi cumpleaños porque se me hacía presunción, pero con el paso de los años he aprendido a que eso no tiene nada que ver y depende más bien de cómo y a quién se lo digas.

No obstante, vaya que las cosas cambian cuando eres padre de familia.

Es el tercer cumpleaños que pasa desde que mi hijo nació, y por una cosa o por otra siempre sucede algo que hace que la fecha pase a segundo plano. No me refiero a que la gente no se acuerde, porque sí lo hacen 🙂 y hay personas a las que considero familia que se dan la vueltota hasta la casa nada más para celebrar conmigo. Me refiero a los sucesos que te “recuerdan” (figurativamente, porque la realidad es que nunca se te olvidan) que alguien depende completamente de ti, y que tu cumpleaños, o cualquier fecha importante, pierde relevancia. Hay prioridades 🙂

Por ejemplo, el año pasado, justo el 31 de diciembre, estábamos en el hospital a la 1 am porque a mi hijo le dio rotavirus. El día anterior había invitado a Carlos, un mexicano que vino a estudiar japonés, a comer a la casa, y con todo y la pena tuve que pedir que se retirara por su propio bien porque no queríamos que se infectara (tengan en cuenta que todavía no sabíamos que era rotavirus, y si Carlos se contagiaba de algo iba a pasar un terrible inicio de año). Ese mismo día fue memorable porque justo vomitó encima de mi esposa un poco después de las 11 pm, lo que hizo que recibiéramos el 2017 de forma curiosa: yo abrazando al niño y arrullńadolo inútilmente con esperanzas (casi inexistentes) de que se durmiera mientras mi esposa salía de bañarse por segunda vez.

Este fin de semana fue similar. Durante el día de mi cumpleaños el niño se portó “normal” y por la tarde me pidió que lo llevara a ver trenes. Les soy sincero: no tenía ganas de ir, pero eso no es excusa para no llevarlo (diría mi madre “¡Ah! Pero querías hijos, ¿verdad?”), y aunque al principio sí me aburrí como ostra, el hecho de ver cómo se emocionaba al ver que llegaba o pasaba un tren mientras disfrutaba de sus dulces favoritos me cambió el estado de ánimo de “total indiferencia hacia los trenes” a “¡Mira! ¡Ahí viene otro!”. Llámenlo “magia”, pero neta: la sonrisa de tu hijo tiene un poder impresionante para hacerte sentir bien no importa lo que haya sucedido.

Hasta aquí todo bien, y seguro algunos dirán: “Pinche Manuel. Ya estás ruco y te quejas de cualquier cosa”. Pero no, lo anterior no es de lo que quería hablar, solo la introducción. Por la noche tuvo fiebre… y no le bajaba. Adivinaron: hospital. Lo revisaron, nos dijeron que tenía, nos dieron medicina para bajarle la fiebre… y a esperar a que llegue el lunes para llevarlo con su pediatra. Explico: en Japón, cuando vas a emergencias por la noche, primero tienes que llamar al hospital para ver explicar los síntomas y ver si te pueden recibir; una vez que el doctor te revisa, por ley solamente te pueden dar medicina por un día, digamos que “para salir de la emergencia”, y tienes que ir a que te vea el doctor a horas habituales entre semana.

Sí, comí pizza el día de mi cumpleaños, pero la celebración queda detrás cuando suceden este tipo de circunstancias. No es queja, es análisis del cambio de perspectiva, y de cómo las prioridades se van acomodando de forma natural. Nunca he considerado estar viejo, pero cuando veo en retrospectiva cómo han cambiado mis costumbres me doy cuenta de que quizá ya no estoy tan joven (los dolores de espalda luego reafirman esa idea, pero soy terco y no lo acepto :P).

Las celebraciones son chidas, sí, cierto, pero darte cuenta de que automáticamente las haces al lado por alguien que te ve y te sonríe sin esperar nada cambio mientras dice: “Papá, quiero tomar jugo” es señal indiscutible de que, de una forma o de otra, las has sobrepasado.

Ya me faltan menos años para poder decirles a todos que no estén jugando en mi jardín. No obstante, desde ahora puedo decirles a todos los que viven en Guadalajara Jalisco dejen de decirle “Chapu” a la avenida Chapultepec. ¿Por qué? Porque yo lo digo 😛

Alma de estudiante

Ya es noviembre. Entre una cosa y otra, el año se pasa volando.

Hoy quiero hacer a un lado todas las entradas pendientes e incompletas que tengo para este blog y hablar un poco de lo que he hecho en poco más de un año.

En julio del año pasado viajé a Singapur, y en su momento escribí al respecto, pero no ahondé mucho en el tema de qué estaba haciendo por razones de manejo de información por acá. Ahora sí puedo al menos decir qué estoy haciendo sin temor a represalias por parte de la compañía en la que laboro.

El proyecto en el que estoy es sobre reconocimiento de escritura a mano usando redes neuronales, o para que suene más fancy, “Deep Learning“. Esa expresión ha cobrado mucha fuerza en los últimos años, al grado de haberse convertido en “Buzzword” y estar en boca de todos, aun en la de muchos que no tienen ni idea de qué onda. ¿No creen? Simplemente les menciono el ejemplo de una persona que quería ponerle Deep Learning a su sitio web para que fuera más llamativo…

Ahora bien: no es que yo haya estado alejado del área de aprendizaje máquina (ML – Machine Learning), puesto que cuando haces procesamiento de lenguaje natural usas algunas de sus técnicas (por ahí tengo un monstruo de código en Scala cuando quise implementar desde cero un clasificador bayesiano ingenuo), pero sí es la primera vez que trabajo con datos que no son palabras, y al mismo tiempo nunca me había metido tan de lleno a redes neuronales. Digamos que soy fan de las Support Vector Machine aunque las comencé a usar mucho después de haberme graduado. Por tanto, es la primera vez que me meto de lleno a las redes neuronales.

El caso es que he estado trabajando en ese proyecto desde hace más de un año, y aunque hemos obtenido avances significativos (nada todavía que sea digno de publicarse), sí tengo que mencionar que la burocracia japonesa (no necesariamente de esta compañía, sino de la forma en la que se hacen negocios en Japón) en general ha hecho que el proyecto vaya muy lento y que, como cualquier proyecto de software, deba de hacer ajustes a la mitad o cambios de esos que eran para ayer.

Ha habido muy buenas ganacias personales y profesionales a lo largo de este tiempo. Entre las más importantes puedo mencionar las siguientes:

  • Asistencia a conferencias importantes en el área de procesamiento de lenguaje natural. Este año he ido a 3: la de la sociedad de procesamiento de lenguaje natural de Japón en marzo, en Tsukuba; a la de la sociedad de inteligencia artificial de Japón en mayo; y a EMNLP 2017 en Dinamarca en septiembre. Sí, pisé tierras europeas por primera vez en mi vida. Esto conlleva también conocer a mucha gente, incluyendo a mexicanos que le están echando ganas en el extranjero dentro de la misma área.
  • Clase de Deep Learning en la Universidad de Tokio. Tomé la básica y ahora estoy tomando la avanzada, la cual termina en enero de 2018.

También es digno mencionarse que he aprendido a lidiar (léase: “perder toda la motivación”) con administradores de proyecto que se creen expertos en IA y que dicen cada sarta de p… aserciones incorrectas, y que en más de una ocasión me han ocasionado severos dolores de estómago porque a fin de cuentas dentro de la jerarquía japonesa ellos son los jefes y los de arriba solamente los escuchan a ellos… Experiencia amarga, sí, pero experiencia al fin y al cabo.

El título de esta entrada se refiere a que más que estar produciendo he estado del lado del aprendizaje, y ahora con el curso de la Universidad de Tokio ha revivido por completo el alma de estudiante, ya que el proyecto final es precisamente un sistema que use Deep Learning para algo, y todos mis compañeros de equipo son estudiantes de esa universidad; esto no me convierte inmediatamente en un líder, pero aquí sí comienza a pesar la experiencia de haber trabajado, sobre todo a la hora de dividir responsabilidades.

Con sus altibajos como casi cualquier cosa, más o menos en eso se ha resumido mi vida profesional desde julio de 2016 hasta la fecha. Así me he estado divirtiendo. No obstante, debo mencionar también que por obra de la misma burocracia mencionada arriba a veces pierdo todas las ganas de hacer las cosas y ha habido momentos en los que sí quiero mandar todo a la burger, pero luego recapacito, me tranquilizo y recuerdo que todavía no es el momento, pero que llegará.

Ahora nada más como dato cultural, dejo una breve explicación de lo que he aprendido y también referencias para quienes quieran leer más a detalle al respecto. Disculpen la terminología en inglés, pero es más fácil dar con información en ese idioma.

Primero que nada, omitiré todo lo referente a MNIST, puesto que hay infinidad de tutoriales y modelos que funcionan bastante bien. MNIST es como el “¡Hola mundo!” en ML, y curiosamente trata precisamente de reconocimiento de escritura a mano, aunque solamente de números. Si quieren probar por su cuenta, Tensorflow tiene un tutorial básico y uno avanzado al respecto.

Si buscan “Handwriting Recognition Deep Learning”, casi todos los papers que encuentren van a referenciar al trabajo de Alex Graves titulado “Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks”. Esta técnica ha hecho posible reconocer secuencias de caracteres sin necesidad de segmentarlos previamente. En sí, CTC puede ser aplicado al resultado de cualquier RNN, siendo hasta hace años las Bidirectional LSTMs , es decir: LSTM que no solamente toman en cuenta “el pasado”, sino también “el futuro”; conociendo más el contexto, los resultados obtenidos mejoran considerablemente; pero Alex Graves también presentó una alternativa a las BiLSTMs que mejoró todavía más los resultados: Las Multidimensional LSTMs (MDLSTMs), que lo que hacen es no nada más tomar en cuenta adelante y atrás de la secuencia analizada, sino también arriba, abajo, y cualquier otro punto en otra dimensión que colinde con el elemento analizado (una 2D MDLSTM analiza secuencias en 2 dimensiones – como imágenes; una 3D analiza secuencias en 3 dimensiones – como video, etc.). Gracias a que toma en cuenta mucho más contexto que las BiLSTM, las MDLSTMs presentan mejores resultados cuando son aplicadas correctamente.

Ahora bien, es muy importante tener datos para hacer que la computadora “aprenda”. Una buena base de datos para esta tarea es la de IAM. Es gratuita, solamente hay que registrarse para obtenerla.

He estado trabajando en diferentes frameworks:

Si se quieren quitar de broncas, Keras hace la vida muy sencilla. Lo usé durante un tiempo y, de entre los mencionados arriba, es mi framework favorito. Sin embargo, Keras es una librería de alto nivel que corre por encima de Tensorflow, CNTK o Theano, por lo que si necesitan hacer algun cambio significativo a bajo nivel, quizá no es opción.

Aprendí Tensorflow más motivado por conocer más profundamente las opciones que tiene que por obligación. Tensorflow es más difícil de digerir porque maneja un modelo de primero construir todo en grafos y estos se ejecutan solamente cuando es requerido, haciendo más difícil la depuración de los modelos (aunque justamente ayer Tensorflow sacó su versión experimental de Tensorflow Eager para evitar eso). Para que se den una idea muuuuy vaga, aprender Keras es como aprender Visual Basic (sin lo chafa, claro), y aprender Tensorflow es como aprender lenguaje C.

Torch es más por necesidad que por gusto. Aunque existe PyTorch, que es la versión de Python, el lenguaje original de Torch es Lua. Bien… otro lenguaje que aprender :/

En fin. La idea es que la computadora reconozca la escritura a mano de cierto lenguaje. Alex Graves presentó hace años un gran trabajo reconociendo escritura arábica, siendo que él no habla árabe. Las contribuciones de Alex Graves hacen posible omitir la segmentación de caracteres, puesto que los trabajos anteriores generalmente dependían de que cada carácter estuviera previamente segmentado y después se usaba algo como un diccionario o modelo de lenguaje para corregir posibles errores (se sigue haciendo y es recomendable, pero antes la dependencia era mayor).

Como ya he mencionado, aunque no he obtenido resultados dignos de ser publicados, ahí van las cosas. Al momento de escribir esto estoy relegado a hacer talacha en Lua (más programación que investigación), pero espero que sea solamente temporal. Y de pilón, también soy sysadmin de los servidores con los que trabajamos. Digamos que los demás aquí no tienen mucho conocimiento de Linux :/