Como dirían los entrevistados de Punset: "No es tan sencillo" |
Esta semana vamos a darle un rápido repaso a cómo las máquinas, ordenadores, son capaces de aprender. Había pensado ponerle de título a la entrada "Ordenadores que aprenden", pero, seamos sinceros, la palabra ordenador suena fatal, mientras que máquina aporta al título un aspecto duro y, sobre todo, sexy.
Para entender como un ordenador aprende algo, es necesario saber su
funcionamiento básico. Una computadora ejecuta programas, que son
secuencias de instrucciones previamente programadas. Estas
instrucciones no son muy distintas a las de una calculadora programable.
Básicamente, a una velocidad increíble, el ordenador está leyendo
números de memoria, operando con ellos y almacenándolos de nuevo para un
uso posterior. La pregunta que planteo es ¿qué grado de aprendizaje
puede asumir un ordenador, si su comportamiento viene definido por una
secuencia de instrucciones de este estilo?
Bien, para un programa dado, sus instrucciones no se ejecutan siempre de
la misma manera porque existe un elemento variable: los parámetros. Día
a día, a veces sin darnos cuenta, comunicamos parámetros al ordenador.
La dirección de una web, a la hora de introducirla en la barra del
navegador, es un parámetro, y en función de su valor, la
respuesta del programa será distinta. Nada más lejos de la realidad,
este texto que escribo es un parámetro que estoy variando, luego el
sistema de gestión de contenidos del blog, dependiendo de su contenido,
lo transformará a un formato presentable (y si, esta vez con los
párrafos justificados). La gracia de estos parámetros es que un cambio
en sus valores pueden producir una respuesta diferente, sin necesidad de
cambiar el programa subyacente.
Vale, ha quedado claro que los ordenadores pueden actuar de una manera u
otra según los parámetros que se le introducen, pero no he dicho qué
puede aprender un ordenador. Está claro que introducir la URL en el
navegador no se presta a mucho aprendizaje (¿seguro?) y el texto que
escribo es un simple bulto que se arrastra a lo largo
de Internet (repito, ¿seguro?). Dar una definición de aprendizaje es
compleja, incluso para seres humanos, y su generalización al ámbito
computacional también lo es.
A grosso modo, se denomina aprendizaje automático (machine learning) al campo de la computación que se encarga de dar a los ordenadores la capacidad de aprender sin ser explícitamente programados para ello. Veamos algunos ejemplos de lo que puede aprender a hacer un ordenador:
A grosso modo, se denomina aprendizaje automático (machine learning) al campo de la computación que se encarga de dar a los ordenadores la capacidad de aprender sin ser explícitamente programados para ello. Veamos algunos ejemplos de lo que puede aprender a hacer un ordenador:
- Reconocer texto en general, ya sea manuscrito o tipografiado.
- Reconocer caras.
- Diagnóstico de enfermedades.
- Selección de perfiles de personal.
- Determinar si una transacción bancaria es fraudulenta.
- Corregir el texto que escribimos en la pantalla táctil de un móvil (dios, esta si que me gusta)
- ...
A las tareas anteriores podemos añadir conducir, andar o incluso
componer música (si, si Conde Chócula me lo permite, algún día haré una
entrada sobre música generativa). En general un ordenador es capaz de
aprender cualquier tarea cuyo conocimiento pueda verse de manera formal.
Ahora bien, no podemos programar, es decir cambiar explícitamente las instrucciones que sigue el programa, pero sí podemos modificar los parámetros
de un programa ya escrito. Pero claro, entonces necesitaría un programa
para cada tarea de la lista anterior, es decir no puede usarse la misma
técnica para reconocer texto que para reconocer caras o corregir texto
mal escrito.
MENTIRA
Imaginaos la situación. Una letra, al igual que un texto escaneado, es
una imagen. Una imagen es algo que está escrito en el idioma del
ordenador. Por simplicidad, centrémonos en el reconocimiento de
caracteres manuscritos. Si cada carácter esta contenido en una imagen en
blanco y negro, existen ciertos píxeles que están en blanco y otros que
estan en negro, lo cual puede verse como una matriz cuyas celdas pueden
tomar valores de 0 para el negro o 1 para el blanco (o al revés, como
más os plazca).
Una vez formalizada la entrada, vosotros, lectores míos, ¿que más hace falta para que el ordenador sea capaz de, a partir de la imagen, averiguar el carácter que representa?. Pensad como aprenderíais vosotros las letras del abecedario (¡dejadlo en los comentarios!), yo os voy a contar cómo lo haría el ordenador.
En primer lugar se construye un conjunto de entrenamiento, que se caracteriza porque para cada imagen se dispone del resultado, es decir del carácter que representa la letra contenida en la imagen. Una vez establecido, se procede a mostrar una y otra vez estos ejemplos al ordenador, el cual produce un resultado. La dinámica es la siguiente: si el programa se equivoca, modifica sus parámetros para evitar volver a cometer el error en un futuro.
Después de varias pasadas, cuyo número, entre otros factores, depende del número de ejemplos, el programa ha aprendido con más o menos "nota" los ejemplos. Si os dais cuenta, este procedimiento se asemeja bastante a los malvados ejercicios que mandan antes de hacer un examen. Genial, sois un ordenador y os sabéis de puta madre los ejercicios que habéis memorizado una y otra vez, pero ha llegado la hora del examen. El examen se realiza con otros ejercicios diferentes, el conjunto de test. Estos ejemplos no han sido vistos nunca por parte del programa y sirven únicamente para ver cuantos aciertos se tienen con datos desconocidos, lo cual da una medida de lo bien que nuestro programa ha aprendido lo que queríamos enseñarle.
Una vez formalizada la entrada, vosotros, lectores míos, ¿que más hace falta para que el ordenador sea capaz de, a partir de la imagen, averiguar el carácter que representa?. Pensad como aprenderíais vosotros las letras del abecedario (¡dejadlo en los comentarios!), yo os voy a contar cómo lo haría el ordenador.
En primer lugar se construye un conjunto de entrenamiento, que se caracteriza porque para cada imagen se dispone del resultado, es decir del carácter que representa la letra contenida en la imagen. Una vez establecido, se procede a mostrar una y otra vez estos ejemplos al ordenador, el cual produce un resultado. La dinámica es la siguiente: si el programa se equivoca, modifica sus parámetros para evitar volver a cometer el error en un futuro.
Después de varias pasadas, cuyo número, entre otros factores, depende del número de ejemplos, el programa ha aprendido con más o menos "nota" los ejemplos. Si os dais cuenta, este procedimiento se asemeja bastante a los malvados ejercicios que mandan antes de hacer un examen. Genial, sois un ordenador y os sabéis de puta madre los ejercicios que habéis memorizado una y otra vez, pero ha llegado la hora del examen. El examen se realiza con otros ejercicios diferentes, el conjunto de test. Estos ejemplos no han sido vistos nunca por parte del programa y sirven únicamente para ver cuantos aciertos se tienen con datos desconocidos, lo cual da una medida de lo bien que nuestro programa ha aprendido lo que queríamos enseñarle.
Bueno señores, el problema del reconocimiento de caracteres es un problema de aprendizaje supervisado,
porque se indica al método cuales han sido sus errores diciéndole la
respuesta cada vez que intenta adivinar el resultado. Además se trata de
un problema de clasificación, porque se trata de averiguar a que
clase pertenecen las distintas imágenes, que en este caso son las
letras del abecedario. La clave es que existen técnicas (de aprendizaje
automático) que resuelven problemas de este tipo, las cuales de manera
transparente al usuario (no hay que cambiar el comportamiento del
método), dada una base de ejemplos y una representación adecuada de la
entrada (en el caso anterior una matriz) y una salida (la clase,
cualquiera de las letras del abecedario) son capaces de ajustar los parámetros para que en el futuro clasifique datos que no ha visto nunca.
Otra técnica interesante son los árboles de clasificación...
Lea el artículo completo en:
Mente Enjambre