Acertando quinielas con redes neuronales

Por Guillermo Peris Ripollés, el 9 diciembre, 2015. Categoría(s): Divulgación • Matemáticas

BoletoRedes

El uso de redes neuronales de distintos tipos está cada vez más extendido en nuevas tecnologías, sobre todo asociado a inteligencia artificial o reconocimiento de formas. Hoy en día se utilizan redes neuronales para reconocimiento y etiquetado de imágenes, reconocimiento de voz y traducción instantánea, en predicción del cáncer, y en tareas menos trascendentes como  el nuevo algoritmo de YouTube que elige automáticamente la miniatura más adecuada de un vídeo o un programa que escribe artículos periodísticos.

Reconocer formas, objetos, patrones e incluso realizar predicciones sencillas es algo que nuestro cerebro aprende a hacer desde pequeño, pero cuando intentamos que un ordenador lo emule no resulta nada sencillo. Por ejemplo, seguro que no tendrás problemas en identificar los números que aparecen en la siguiente imagen.

mnist examples

Nuestro cerebro empezó a los pocos años de vida a reconocer números y lo hizo mediante un entrenamiento en el cual se nos mostraban imágenes de, por ejemplo, el número 2 y se nos indicaba su significado. Mediante ejemplos de números 2 escritos de distintas formas se establecieron en nuestro cerebro las conexiones neuronales adecuadas que ahora nos permiten reconocer sin problemas este número.

Sin embargo, esta es un tarea que no es fácil para un ordenador. Y es que no resulta sencillo escribir código con instrucciones que reconozcan que un 2 es un dos. O que cuando reciba la imagen de una silla de diseño sepa que es una silla y no otro mueble (bueno, a veces eso es difícil hasta para un humano).

0810056ke

Las redes neuronales artificiales –se nombran así para distinguirlas de las redes neuronales biológicas, aunque a partir de ahora hablaremos en general de redes neuronales– tratan de alguna forma de copiar el comportamiento de las neuronas de nuestro cerebro y su forma de aprendizaje. En la siguiente figura podéis ver la estructura básica de una neurona, en la que hay una serie de dendritas que reciben señales de otras neuronas mediante conexiones sinápticas.

NEURONA1

En el cerebro, las neuronas establecen distintas conexiones entre ellas y cada una de estas células es una unidad independiente que emite una señal de salida a través del axón en función de las señales de entrada que recibe a través de las dendritas. Los varios centenares de billones de conexiones entre los miles de millones de neuronas que existen en nuestro cerebro son los que permiten, entre otras funciones, el reconocimiento de formas. De hecho, distintas partes del cerebro se encargan de procesar diferente información mediante una estructura jerárquica de capas de neuronas que varían en su nivel de abstracción.

La idea detrás de una red neuronal artificial es simular este comportamiento biológico. Para ello se emula con fórmulas matemáticas una neurona a la que van a llegar señales de entrada con distintos pesos, que se sumarán, y se emitirá una señal de salida que dependerá de una determinada función de activación.

image4722

Una red neuronal artificial estaría formada por un conjunto de neuronas como la anterior conectadas entre sí, y que podríamos someter a un proceso de aprendizaje (igual que con nuestro cerebro) para enseñarle a reconocer formas o hacer predicciones. Al igual que con las neuronas cerebrales, también se puede construir una estructura jerárquica en capas de neuronas que procesan la información básica antes de transmitirla a una capa más especializada.

Voy a intentar con este artículo que tengas una idea muy básica del funcionamiento de las redes neuronales y para ello explicaré de forma sencilla cómo construir una red neuronal que prediga el resultado de un partido de fútbol (o al menos lo intente) y nos permita acertar quinielas (o no).

Empieza el partido

Para simplificar el ejemplo voy a suponer que como resultado de un partido de fútbol sólo puede ganar uno de los dos equipos, excluyendo por tanto el empate. Esta situación tampoco es tan irreal ya que serviría, por ejemplo, para las fases finales de competiciones como el Mundial de fútbol, la Eurocopa o la Liga de Campeones.

Empezaré con una suposición muy básica: tener en cuenta el número de goles marcados por cada equipo en partidos anteriores. Para facilitar los cálculos vamos a introducir una variable normalizada (¡no te asustes!), que será el número de goles del equipo local (gL)  respecto a la suma de goles de ambos equipos (gL+gP), es decir,

\large x_g=\left\{\begin{array}{cc}\frac{g_L}{g_L+g_P}&g_L\neq g_P\neq 0\\ &\\ 0.5 & g_L= g_P= 0\end{array}\right.

Pongamos un ejemplo sencillo. Si el equipo local lleva marcados 20 goles y el visitante 30, el valor de xg sería 0.4; si el número respectivo de goles fuera 30 y 10, sería 0.75. Un valor de xg por encima de 0.5 implica que el equipo local ha marcado más goles, y si es por debajo ha marcado más el visitante (la ecuación inferior es para evitar la división por cero en el caso de 0 goles de ambos equipos). Nuestro primer pronóstico será que xg nos dirá la probabilidad de que gane el equipo local; en los ejemplos anteriores, las probabilidades respectivas serían del 40% y el 75%.
Con esto podemos diseñar nuestra primera red neuronal:

neuron1a

Esta red únicamente consta de una neurona que recibe la variable xg y devuelve como resultado la probabilidad de que gane el equipo local. Para ello, esta neurona aplica la siguiente función lineal f(x) (para los quisquillosos, realmente sería f(xg)):

f(x) = x_g

Esta función se limita a devolver el valor de la variable de entrada, pero podrían utilizarse funciones más complejas (y más adecuadas) como por ejemplo una función sigmoide.

Si te parece bien vamos a llamar también neuronas a los datos introducidos, aunque son neuronas que no reciben información, sólo la emiten.

neuron1b

Ya te puedes imaginar que con esta red, utilizando sólo los goles marcados por cada equipo, vamos a acertar más bien poco. Lo que hace esta red es predecir que es más probable que gane el equipo que haya marcado más goles antes del partido: ¡no hacía falta tanta historia para eso!  Quizás necesitaríamos más información, como el número de goles en contra (xc), los tiros a puerta (xt) o la posesión de balón (xp). Vamos a incorporar estos datos a nuestra red. Ten en cuenta que todos los datos que añadamos estarán normalizados igual que el número de goles (el valor estará entre 0 y 1, siendo 0.5 cuando ambos equipos presentan el mismo valor). Nuestra nueva red ahora podría parecerse a esta:

neuron3a

¿Por qué he añadido en las conexiones de las neuronas de entrada con la neurona central valores de 0.25? Básicamente, porque al pasar de una neurona a cuatro –y si quiero que la fórmula de la neurona que me da el resultado siga representando una probabilidad– he de promediar los valores de entrada multiplicando por un peso de ¼ cada uno de ellos. Ahora nuestra función f(x) sería:

\displaystyle f(x) =0.25x_g+0.25x_c+0.25x_p+0.25x_t

Pero esto no parece adecuado, porque hay información que parece que será más relevante que otra a la hora de determinar un ganador. Por ejemplo ¿es más importante el número de goles marcados o el número de tiros a puerta? Lo que podemos hacer es dar distintos pesos a estas variables.

neuron4a

Ahora nuestra función f(x) (recuerda que nos da la probabilidad de que el equipo local gane el partido) dependería de los pesos de cada variable de entrada según esta expresión matemática:

\large f(x) = x_gw_g+x_cw_c+x_pw_p+x_tw_t

Ahora sólo tenemos que dar valores a cada uno de los pesos w de la figura anterior y con las estadísticas de cada equipo en la mano podemos empezar a hacer pronósticos de partidos (y a forrarnos invirtiendo sólo 1 euro en una quiniela). Si hacemos esto de forma arbitraria es probable que no acertemos muchos resultados, ya que no sabemos a priori qué combinación de valores w es la más adecuada. ¿Qué hacemos entonces?

Entrenando antes del partido

Para obtener los coeficientes de la red neuronal debemos entrenarla. Este proceso es el equivalente al del aprendizaje que nos permite reconocer números desde que somos pequeños: observar varias formas de números acompañadas de su interpretación correcta para que nuestro cerebro realice la asociación adecuada.
¿Y cómo entrenar nuestra red neuronal para pronosticar partidos? Pues lo podemos hacer dando los resultados de las estadísticas previas al enfrentamiento entre dos equipos junto con el resultado del partido. Así, si nuestra red analiza el partido Levante-Celta, predice que gana el Celta, pero el resultado real es que el Levante es el ganador, podemos ajustar ligeramente los valores de los pesos w de las variables de entrada para que la red dé un resultado más semejante al esperado. Este cálculo de las variables durante el entrenamiento se consigue mediante un procedimiento matemático de búsqueda de mínimos de funciones, normalmente con el método conocido como descenso por gradiente. Para que el entrenamiento sea efectivo, debemos aportar a la red neuronal un gran número de ejemplos para que estime de forma correcta y estable los parámetros de la red.

Una vez entrenada con suficientes partidos, nuestra red ya está preparada para pronosticar resultados de encuentros por disputar y, sin duda, acertar los 15 encuentros de nuestra quiniela. ¿O aún no?

Escondiendo neuronas

La red neuronal que hemos diseñado es extremadamente sencilla. Con sólo una neurona activa resulta difícil aprender toda la complejidad que hay detrás de cualquier forma o, como en este caso, la información necesaria para predecir resultados de competiciones deportivas. Lo mismo ocurre en nuestro cerebro: con una sola neurona no podríamos recordar toda la información sobre, por ejemplo, la cara de una persona.

Siguiendo con el ejemplo del cerebro, podemos mejorar nuestra red neuronal futbolística añadiendo más neuronas. ¿Dónde? Una opción sería añadir más información de entrada, como el número de tarjetas amarillas, rojas, número de lesionados, faltas por partido, penaltis, etc. Pero eso no solucionaría el problema: seguiríamos teniendo una sola neurona para procesar toda la información.

Otra cosa que podemos hacer es crear nuevas neuronas que gestionen información relacionada. Por ejemplo, parece natural agrupar el número de goles marcados, el número de tiros a puerta y el número de penaltis. Así, podríamos utilizar una neurona que recibiera la información de entrada de estas tres variables y emitiera una salida para la neurona que calcula el resultado. De la misma forma, podríamos añadir nuevas neuronas intermedias que gestionaran distintos grupos de variables de entrada. A esta nueva capa de neuronas, situada entre las variables de entrada y la neurona que da el resultado final, se la denomina capa oculta.

neuron5a

Obviamente, cada una de estas agrupaciones tendría sus propios pesos de las neuronas de entrada, al igual que la neurona de la capa de salida también dará distinta importancia a las neuronas de la capa oculta. Los valores de estos pesos se obtendrían durante el entrenamiento.

Podemos seguir mejorando nuestra red creando nuevas capas ocultas que recibirían y procesarían el resultado de las neuronas de la capa anterior.

neuron6a

Obviamente, cuantas más capas ocultas y más neuronas compongan nuestra red, mejor será el aprendizaje y por lo tanto mejores las predicciones, pero cabe recordar que el proceso matemático de aprendizaje tiene un coste computacional: si añadimos un número excesivo de neuronas puede que el tiempo de entrenamiento sea excesivamente grande.

¿Y así conseguimos los quince aciertos en la quiniela?

Pues lo cierto es que lo que te he expuesto es algo más que un ejemplo, ya que hay algunos estudios (por ejemplo, este o este otro) que intentan predecir el resultado de competiciones deportivas  a partir de estadísticas previas mediante el uso de redes neuronales artificiales. Ya te puedes imaginar que los resultados no son excesivamente buenos, porque en ese caso el negocio del Estado con las quinielas se iría a pique (¡quién sabe si hay una conspiración para evitar que adivinemos los resultados!). Diversos modelos de pronóstico basados en redes neuronales tienen una tasa de acierto de alrededor del 75%, es decir, se acierta el resultado de tres de cada cuatro partidos. Por ejemplo, el siguiente modelo utilizado en este estudio utiliza una capa oculta de 8 neuronas para la predicción de resultados. En este caso hay 8 neuronas de entrada (la última neurona de la izquierda no es exactamente para introducir datos) y 3 neuronas de salida con las probabilidades respectivas de ganar, empatar y perder el partido. Este modelo aplicado a las fases finales del mundial de fútbol de 2006 acertó sólo tres de cada cuatro resultados.

374816.fig.003

Si aplicáramos estos modelos para rellenar una quiniela no obtendríamos ni once resultados de catorce. Aún así, si quieres intentarlo, existen diversas páginas web – que no enlazo por no hacer publicidad– que te permiten hacer predicciones de este tipo.

En este caso la dificultad del aprendizaje deriva del hecho de que “la predicción del resultado de un partido de fútbol no es fácil porque los jugadores usan los pies para controlar el balón” (no, no me lo invento). Pero el uso de redes neuronales artificiales sí que ha demostrado ser extremadamente útil en campos como el reconocimiento de imágenes. Por ejemplo, con el algoritmo DeepFace presentado recientemente por Facebook para el reconocimiento facial, que consta de 9 capas y unos 120 millones de parámetros, se consiguió una tasa de acierto del 97.25%, cuando el grupo de control con humanos reconoció el 97.5%. No está mal para un cerebro artificial, ¿verdad?


 

Agradecimiento: Gracias a Juan Miguel Vilar por la revisión del texto y por sus aportaciones que sin duda han mejorado el artículo.



Por Guillermo Peris Ripollés, publicado el 9 diciembre, 2015
Categoría(s): Divulgación • Matemáticas