Retropropagación en redes neuronales y Machine Learning

Publicado por en Programación el 18/04/2016
Comentarios:

En el mundo de la programación, para resolver un determinado problema se codifica un programa que resuelve de la forma más eficiente ese determinado problema (o eso intentamos hacer la mayoría de las veces) y que tenga el menor número de fallos posibles. Si queremos calcular todas las combinaciones posibles de un juego de azar, un programa podría ser creado para esa tarea pero ese mismo programa por muy complejo que sea, será totalmente inútil jugando al aljedrez por ejemplo. Simplemente por que fue diseñado para una sola tarea y el programador ha escrito un modelo para ese caso específico. En ese aspecto, las redes neuronales lo cambian todo ya que un programa de este tipo ya no se basa en la pericia del programador para resolver un problema, sino utiliza la fuerza bruta de computación y por supuesto un buen modelo para resolverlo. A continuación hago un repaso breve soobre las redes neuronales y técnicas de machine learning. A mi personalmente es un tema que la pone como la clavícula de un transformer ;)

Encuentra el kit perfecto para Arduino

Redes Neuronales y Machine Learning

Con la redes neuronales todo eso cambia radicalmente ya que no se programa para resolver un determinado problema, sino que se programa un sistema que es capaz de aprender a resolver un problema a base de entrenamiento basado en un modelo y eso lo cambia todo. Recientemente está el tema muy caliente gracias a Google y su proyecto Deepdream, pero no es algo nuevo sino que este tipo de sistemas fueron creados ya en los años 50 sobre el trabajo de Donald Hebb entre otros.

Estos sistema funcionan de una forma muy similar a las neuronas del cerebro y de hecho las diferentes capas son llamadas neuronas o unidades (units). En su forma más básica, existen capas de entrada, capas intermedia ocultas y capas de salidas. Todas las posibles combinaciones entre las entradas y intermedias y las intermedias a las salidas tiene un valor determinado o peso que al principio no es más que un número aleatorio que se irá ajustando en las siguientes iteraciones. Mediante la retropropagación se ajustan los pesos. Si lo piensas bien, no es más que un calculo estadísticos que devuelve una tasa de error. El dataset serían los valores de referencia para calcula el error y retroalimentar el sistema. En el caso de deepdream, el dataset son fotos de animales, principalmente perros y por eso la salida intenta encontrar patrones similares perros. Al fin y al cabo, es un caso concreto orientado a reconocimiento de caras de perros pero debido a su funcionamiento, el sistema puede inventarse caras basándose en su experiencia precia (el training o entrenamiento) o lo que es lo mismo, es un sistema de predicción. 

Cambiando el dataset y el modelo, se puede aplicar el mismo sistema a todo tipo de campos. Por ejemplo, aportando un dataset de valores de bolsa, podríamos eventualmente calcular valores futuros ya que al fin y al cabo se están calculando patrones. Bajando un poco de escala, imagínate un simple robot que resuelve laberintos. Teniendo un gran dataset de laberintos, podríamos hacer que nuestro robot procese un laberinto basándose en su experiencia para "predecir" si girar a la izquierda o derecha en un cruce según su modelo. No garantiza que el robot resuelva un laberinto a la primera, sino que tendrá una aproximación estadística basada en probabilidades para resolverlo lo mejor posible. Y cuando más grande sea su aprendizaje (traning), mejor lo va hacer. Además no es descabellado teniendo en cuenta las posibilidades de placas como la Raspberry Pi 3. Otra cosa es poder hacer en tiempo real o por lo menos en un tiempo razonable, pero eso ya es otra historia.

Si tienes curiosidad sobre todo este tema, te dejo a continuación un vídeo explicativo de los fundamentos de las redes neuronales. Y como seguramente al final del vídeo ya estés calentito con el tema, también te dejo una série de vídeo tutoriales en Python sobre el tema que te darán para jugar un rato. ¡Happy programming!

Backpropagation neural network software (3 layer)

Enlace: Backpropagation neural network software (3 layer)

Tutorial Machine Learning (Python 3)

Si te ha gustado, compártelo con tus amigos!
Google Plus