miércoles, 22 de abril de 2020

Las sencillas intuiciones tras los complejos algoritmos


Cuando se entienden bien, que suele coincidir con cuando se explican bien, las cosas suelen ser más sencillas de lo que parecen a primera vista.

La intuición que nos une


Y aunque ese aserto tan vago creo que es de validez bastante general, en este momento 'las cosas' en que ahora estoy pensando son matemáticas y son algoritmos y, más concretamente, los algoritmos que se esconden, cada vez menos eso si, tras el Machine Learning y la Inteligencia Artificial.

Y las cosas, los algoritmos, bien entendidos, son algo menos complejos de lo que parece. Más intuitivos, incluso. Y es que, al fin y al cabo, aunque probablemente muy inteligente, detrás de la invención de un algoritmo está una persona o un grupo de personas y, al final, a las personas nos une más de lo que nos separa, en muchos sentidos.

Y en este caso, nos une la intuición.


La idea tras el cálculo infinitesimal. Una historia de juventud.


Hace ya muchos años, más de los que me gustaría, era yo estudiante de primer curso de Ingeniería y, como sabe todo aquel que haya estudiado ingeniería al menos hace unos años, 'el coco' de primero de carrera era el Cálculo Infinitesimal. La verdad, y prefiero no explayarme mucho, el profesor que me toó en suerte, tampoco ayudaba mucho a la comprensión. Pero no recuerdo muy bien la razón, el caso es que hacia final de curso, nos unieron a los varios grupos que constituíamos el primer curso en una especie de clases de refuerzo conjuntas. Y para esas clases, asignaron esta vez a un profesor que tenía justa fama de ser el mejor profesor de cálculo de la escuela. Y de éste sí diré el apellido, Huidobro, porque el nombre, francamente, no lo recuerdo, aunque sí su imagen.

Y no se me olvida, y lo he contado en mi entorno varias veces, que siempre, antes de iniciar las frecuentísimas demostraciones de los frecuentísimos teoremas, antes de sumergirse en símbolos y artificios, siempre decía 'La idea es...' y nos explicaba a continuación de forma simple y muy intuitiva lo que se estaba buscando con ese teorema, por qué era importante y por que´cabía intuir que era cierto. Nos hacía ponernos, en cierto modo, en la cabeza del matemático que demostró por primera vez el teorema, un teorema que el matemático ya había intuido, más bien ya había llegado a la convicción de que era cierto, y sólo buscaba ya el camino para demostrarlo. Y si, el camino, la demostración en sí, podía ser larga y compleja, pero la idea, el verdadero objetivo, era claro e intuitivo.


El descenso de gradiente


Recientemente, leyendo el libro 'Deep Learning con Python' de François Chollet me he topado un algoritmo, el descenso de gradiente ('gradient descent') que, aunque de forma borrosa, recuerdo haber estudiado en la carrera, no sé si con ese nombre. Un algoritmo que se usa, entre otras cosas, en redes neuronales, y más en concreto, en Deep Learning, como algoritmo de entrenamiento en aprendizaje supervisado. Un algoritmo que, en el fondo, lo que busca es minimizar el valor de una función que, en este caso, representaría la diferencia entre el resultado esperado en la red neuronal y el valor que actualmente tenemos. 

Visualización del Descenso de Gradiente
Si uno ve la formulación en álgebra tensorial o incluso el código en Python, lo fácil es perderse y no entender nada. Y si a uno se lo explica alguien que no sabe transmitir la idea principal, lo más probable es que nos perdamos aún más.

Pero si a uno se lo explican intuitivamente, y usando un figura que la que se muestra a la izquierda, la cosa adquiere otro cariz. En ese figura, tenemos sólo dos variables, las dos ejes horizontales, digamos X y Y que serían los pesos a ajustar en la red neuronal. Y la función, que representa, la diferencia entre la salida de la red y el objetivo sería el eje Z (la altura, para entendernos). Y lo que queremos es que esa altura sea lo menor posible, que significará que la red está lo más cerca posible de la respuesta acertada. 

Pues 'lo único' que hace el descenso de gradiente es buscar bajar las pendientes de la superficie bidimensional que se forma, hasta encontrar el valle, el mínimo, tal y como se observa en la línea negra que caracolea por la superficie coloreada. Y para conseguirlo el algoritmo va, en pasos sucesivos, moviendo 'de a pocos' los pesos de la red, es decir, el valor de los ejes X e Y ennuestra figura. Es decir, se mueve un poquito en horizontal (un poquito en el eje X y otro poquito en el eje Y) para desplazarse a un punto de la superficie un poco 'mas bajito', un poco más cerca del mínimo, un poco más cerca del objetivo. Así las veces que haga falta hasta alcanzar ese mínimo.

Vale, en una red neuronal las dimensiones no son dos (X e Y) sino muchas, muchísimas más. Y vale, saber cómo ajustar los pesos para bajar la pendiente tiene algo de dificultad y necesidad de conocimientos matemáticos. Pero no es difícil, al menos, captar la idea, la intuición detrás del algoritmo. Una intuición que es sencilla, razonable, fácil de entender y de comunicar. Y suficiente para la inmensa mayoría de la gente, incluso muchos científicos de datos y muchos desarrolladores de inteligencia artificial.


Y al final, la belleza


No siempre es fácil conocer esas intuiciones porque, con mucha frecuencia, quien conoce el algoritmo o tampoco conoce estas intuiciones, o nos las sabe explicar o puede que incluso no quiera.

Pero esas intuiciones existen y, su existencia demuestra no sólo que la ciencia y la tecnología son asequibles, no sólo que la ciencia y la tecnología pueden ser intuitivas, sino que, además, que la ciencia y la tecnología, incluso los algoritmos, pueden ser bellos, muy bellos...

No hay comentarios:

Publicar un comentario