artificial neural networks

Download Artificial Neural Networks

If you can't read please download the document

Upload: german-ramos-garcia

Post on 11-Apr-2017

45 views

Category:

Software


0 download

TRANSCRIPT

Germn Ramos [email protected]

Artificial Neural Networks

(Silenciar el Mvil)Hola a todos, soy German Ramos. Trabajo en el departamento de Innovacin de BBVA y mi rea de investigacin desde hace ms 1 ao es la Inteligencia Artificial.El objetivo de esta charla es promover el conocimiento y uso de Redes Neuronales. Har una breve explicacin de los conceptos bsicos necesarios para comprender y empezar a usar esta tecnologa de un modo prctico y sencillo.El pblico objetivo es gente que quiere introducirse en el mundo de las Redes de Neuronas sin ningn conocimiento previo.El mensaje que quiero transmitir es que cualquiera puede usar Redes de Neuronas en su mbito de trabajo y no hace falta tener profundos conocimientos tcnicos para ello. Prometo que no habr ninguna frmula matemtica!!!No voy a hacer la tipica presentacion en la que se cuenta la historia de las redes de neuronas, y su lugar en Machine Learning en general.. ni nada por el estilo. Para esto hay disponibles un montn de presentaciones en Internet a las que podeis acceder.En su lugar, voy a contar lo que me gustara que me hubiesen contado a mi cuando empec a aprender a usar redes de neuronas.

Artificial Neuron

Lo primero de todo. Que es una neurona artificial?Pues es algo muy sencillo.Es un componente matemtico, que recibe unas entradas numricas, las multiplica por un nmero previamente almacenado, que se denomina peso. Y se suele representar con la letra w. Hace un sumatorio y le aplica una funcin lineal muy sencilla, llamada funcin de activacin. Produciendo una salida, que por supuesto, tambin es un nmero.

What is an Artificial Neural Network is?

De The original uploader was Gengiskanhg de Wikipedia en espaol - Transferido desde es.wikipedia a Commons., CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=2175731

Una red de neuronas es una estructura matemtica inspirada en el cerebro biolgico cuyo objetivo es aprender un comportamiento dado.Esta estructura matemtica se ha llevado al mundo de la computacin para poder realizar los clculos necesarios manera eficiente.Toda red de neuronas est tiene de una capa de entrada y una capa de salida.La capa de entrada contiene los datos que voy a proporcionar a la red para que aprenda. Por ejemplo los productos contratados por un cliente.La capa de salida contiene los datos que quiero predecir. Por ejemplo, el siguiente producto que contratar dicho cliente, o por ejemplo, la probabilidad de que un cliente contrate un producto nuevo.La capa de entrada tiene exactamente el mismo nmero de neuronas que el tamao de los datos a introducir, y es un tamao fijo. Esto quiere decir, que si tengo 200 productos, mi capa de entrada tendra exactamente 200 neuronas.Y la capa de salida tiene exactamente el mismo nmero de neuronas que el nmero de datos que quiero predecir. En el ejemplo anterior, seran 200 productos. O bien la salida sera solo una si solo quiero predecir si un cliente va a contratar algn producto, sin especificar cual.Las capas ocultas pueden ser de cualquier tamao y puede haber desde ninguna hasta decenas. En las capas ocultas es donde la red de neuronas es capaz de almacenar el conocimiento y lo que aporta ms valor para hacer predicciones complejas.Cuantas ms capas ocultas y ms grandes haya, ms capacidad tendr nuestra red de neuronas, pero ms recursos computacionales requerir para ser entrenada.La gran pregunta que se hace todo el mundo es. Tengo que aprender cmo funciona matemticamente todo esto para usar una red de neuronas?La respuesta corta es No. No hace falta tener muchos conocimientos matemticos para usar redes de neuronasLa respuesta larga es No hace falta, pero sers capaz de sacar ms partido de las redes de neuronas si sabes exactamente cmo funcionan por dentro.

ANN vs Drive a Car

Me gustara insistir en este ltimo punto porque considero que es algo muy importante.La gran mayora de la gente que quiere usar redes de neuronas se ve abrumada por conceptos matemticos y explicaciones muy detalladas sobre la implementacin de redes de neuronas.Pero la realidad, es que no hace falta implementar una red de neuronas, ya existen muchos frameworks maduros, y algunos de muy alto nivel, que te abstraen de esa complejidad y la nica preocupacin del usuario es definir el tamao de la red y unos pocos parmetros.Una analoga que me gusta mucho es la de conducir un coche. La gran mayora de la gente es capaz de conducir un coche sin problemas, y para aprender, tan solo necesitas unas cuantas clases en la autoescuela para aprender a usar los mandos del coche y adems te ensean las normas bsicas de circulacin.Por contra, muy poca gente sabra disear un automvil, o un motor de combustin interna. Y la gente que sabe, ha estudiado muchos aos para adquirir dicho conocimiento. Curiosamente, los mejores pilotos de coches de carreras no son ingenieros. Ni los mejores ingenieros son pilotos de coches de carreras.Por lo tanto, nos va a resultar mucho ms rentable centrarnos en aprender cmo pilotar las redes de neuronas, en lugar de centrarnos en su funcionamiento interno. Por supuesto, saber como funcionan internamente las redes de neuronas nos puede resultar muy til a la hora de afinar su funcionamiento. Pero, yo considero que es algo prescindible en muchos casos.

Use cases

Generic use cases:Classification

Recommender

Pattern recognition

Specific use cases:Image recognition

Buyer recommender

Weather prediction

Financial prediction

etc, etc.

Muy bien, ya sabemos lo que es una red de neuronas, y que podramos aprender a utilizarlas.Pero para qu sirve una red de neuronas?Los principales usos de una red de neuronas es para hacer clasificaciones. Para hacer recomendadores. Y para reconocer patrones en los datos.Estos 3 usos genricos pueden ser aplicados a multitud de problemas reales. Los ms tpicos, como siempre, son reconocimiento de objetos en imgenes, lectura de texto, conduccin autnoma, recomendador de productos, prediccin del tiempo, compra de acciones, deteccin de fraude, etc.Por otro lado, en una empresa hay infinidad de casos de uso especficos que son un problema de clasificacin, recomendacin o reconocimiento de patrones. Para sacar partido del Machine Learning tenemos que ser capaces de identificar estos casos y lo ms importante, conseguir los datos necesarios para alimentar la red de neuronas.

Input data

Labeled data (Supervised learning). Example:

(255,0,0) -> Red

(255,255,0) -> Yellow

Training set (70%)Thousands of valid labeled data to train the ANN

Test set (30%)This data is used to see prediction accuracy so we can have an idea about our algorithm's performance on unseen data.

Las redes de neuronas son un tipo de aprendizaje supervisado. Esto quiere decir que no solo tenemos que proporcionar los datos de entrada a la red, sino tambin, los datos de salida que queramos que aprenda.Esto suele ser el mayor problema a la hora de sacar adelante un proyecto de Machine Learning con redes de neuronas. Conseguir datos etiquetados. La mayor parte de las veces implica cruzar los datos de 2 o ms bases de datos y emparejarlos.Por lo tanto, es fundamental que guardemos todos los datos de los actuales sistemas en produccin, tanto entradas como salidas. Hoy en dia es muy barato guardar datos, y en el futuro es muy probable se pueda sacar gran valor de esos datos utilizando Machine Learning.Una vez que hemos conseguido nuestros datos, los tendremos que dividir en diferentes sets. El set de entrenamiento y el de prueba. Un porcentaje habitual es 70-30. Esto nos permitir reservar un conjunto de datos para comprobar la precisin de nuestra red y para detectar fenmenos como el overfitting que veremos luego.

ANN Modeling

Topology: Number of hidden layers and neurons.

Activation Function: Function inside every neuron. It has one parameter named Weight that customize the function behavior. Examples: RELU, Sigmoid

Loss Function: Function that is applied after every sample of labeled data. It gives a numerical representation about the accuracy of the network. Example: square loss

Cost Function: Usually the sum of loss functions over the training set. Example: Mean Squared Error

Optimization Algorithm: Algorithm that modify the weights of the neurons in order to minimize the cost function

Una vez que tenemos claros los datos necesarios para alimentar la red, es hora de tomar ciertas decisiones de diseo de nuestra red de neuronas.Lo primero de todo, es elegir la topologa de nuestra red, esto es el nmero de capas ocultas, y el tamao de esas capas. Recordad que la capa de entrada y de salida depende nuestros datos. No hay una norma a seguir a la hora de elegir el nmero de capas ocultas y el tamao de ellas. Tendremos que hacerlo por prueba y error.Lo siguiente son las funciones matemticas que caracterizan el comportamiento de nuestra red. Todas estas funciones ya existen. Tan solo debemos elegir las que queremos usar. O simplemente las ms usadas.En primer lugar, la funcin de activacin. Es una funcin lineal muy simple que recibe una entrada y segn el peso que tenga asignado se activa o no, generando una salida. El conjunto de pesos de todas las neuronas de llama matriz de pesos. Esta matriz de pesos es lo que hace que una red de neuronas se comporte de una manera u otra. Se podra decir que que la matriz de pesos es la memoria de la red. La eleccin de la funcin de activacin es muy fcil, RELU o Sigmoid. En cualquier caso, la red debera funcionar.La funcin de prdida. Para cada dato de entrenamiento, esta funcin nos da una medida de la diferencia entre el dato que predice la red, y el valor esperado. Esta medida de error, se utilizar para ajustar los pesos de toda la red. Hay muchas funciones de prdida, la ms sencilla es el error cuadrtico.La funcin de coste es una funcin de agregacin de todas las funciones de prdida. Esta se utiliza como paso intermedio para aplicar un algoritmo de optimizacin. La ms sencilla y habitual es el error cuadrtico medio, utilizada junto con la la funcin de prdida de error cuadrtico.Y finalmente, el algoritmo de optimizacin. Este algoritmo trata de minimizar la funcin de coste y como resultado, se modifican todos los pesos de las neuronas de la red con una tcnica llamada back propagation. Pero no os asusteis, no hace falta que aprendais como funciona este algoritmo ni cmo se propagan las modificaciones en los pesos de las neuronas. Lo nico que tenemos que hacer es elegir un optimizador de los ms utilizados, puesto que ya se ha comprobado empricamente que funcionan bien en la mayora de las ocasiones. Un algoritmo optimizador muy bueno y muy utilizado es el Adam.Estas son las decisiones difciles, y probablemente tengamos que hacer varias pruebas hasta encontrar la que mejor funciona con nuestros datos.

Model concepts

Learning rate: This parameter determines how fast or slow we will move towards the optimal weights. If the learning rate is very large we will skip the optimal solution. If it is too small we will need too many iterations to converge to the best values. Example: 0.1 - 0.0001

Batch size: The number of training examples in one complete training pass. The higher the batch size, the more memory space you'll need.

Epoch: One complete training pass of all the training example.

Iterations: number of passes, each pass using [batch size] number of examples. Example: if you have 1000 training examples, and your batch size is 500, then it will take 2 iterations to complete 1 epoch.

Algunos conceptos ms...El learning rate. Es el ratio de modificacin que vamos a utilizar cuando apliquemos el back propagation para modificar el peso de las neuronas.El batch size. Es el nmero de muestras de datos que vamos a utilizar en cada ciclo de optimizacin.Epoch. Cada ciclo completo con todos los datos de entrenamiento.Iteraciones. Contador de pases del tamao del Batch size

Visual example

http://playground.tensorflow.orgLo primero que vemos aqu son los controles para iniciar y reiniciar el entrenamiento.Al lado estan los parametros basicos: learning rate, la funcion de activacion, y otros parmetros voy a ignorar por ahora.Abajo a la izquierda vemos los datos de entrada. Podemos elegir entre 4 tipos de datasets. Todos son imagenes en 2 dimensiones.En el centro la red de neuronas. Aqu podemos aadir y quitar capas y modificar el tamao de ellas.Y a finalmente a la derecha vemos el resultado de la red, que tambin es una forma en 2 dimensiones capaz de clasificar la entrada.Probar con la configuracin inicial

Probar aadiendo ms capas

Probar con una capa de 1 neurona (cuello de botella por falta de diversidad combinatoria)

Quitar la capa de 1 neurona y reducir el batch size

Ensear con otro dataset

Overfitting & Underfitting (1/2)

Ahora vamos a ver 2 efectos no deseados que pueden ocurrir cuando entrenamos redes de neuronas. Podis ignorar las frmulas debajo de las figuras.Este ejemplo es de regresin lineal en lugar de redes de neuronas, pero el problema es exactamente el mismo y de este modo se puede visualizar muy bien.La imagen del medio nos muestra el dataset de 5 datos y una curva que predice esos datos. Como podemos ver la curva se acerca bastante bien a los puntos a predecir y en los puntos intermedios toma una valor razonable.En la imagen de la izquierda vemos el problema del underfitting. Esto es que nuestra curva de prediccin no predice correctamente. Puesta que est muy lejos del resultado correcto para la mayora de los puntos. Normalmente esto se soluciona con ms muestras de entrenamiento o con un modelo ms grande.En la imagen de la derecha vemos el problema del overfitting. Esto es que nuestra curva es capaz de predecir perfectamente nuestros casos de entrenamiento. Sin embargo, no funciona nada bien para predecir datos nuevos puesto que las curva toma unos valores muy raros en los puntos intermedios. Normalmente esto se soluciona introduciendo datos ms variados en la red o reduciendo el modelo.

Overfitting & Underfitting (2/2)

En estas imgenes otro ejemplo de estos mismos problemas. En este caso con un problema de clasificacin.Creo que se va bastante bien tanto el caso de underfitting como el de overfitting.

ETL: Extract, Transform, Load

Label data : Get the right label for the example data

Discretize data: Assign a number to every non numeric value

Handle incomplete examples

Remove non representative data

Normalize input data

Set maximum value to 1

Set minimum value to -1 or 0

Distributed all the examples in the range [0,1]

Handle unbalance examples

More and more

Una duda muy habitual a la hora de empezar con las redes de neuronas es: Como introduzco los datos en la red de neuronas?Bueno, lo primero que tenemos que saber es que la red de neuronas no se puede alimentar directamente con los datos que tengamos en crudo. Es necesario limpiarlos y transformarlos. Esta parte del proceso es nos puede llevar el 70% del trabajo en un proyecto de Machine Learning con redes de neuronas.Las tareas principales son:Etiquetar los datos, como hemos mencionado al principio. Esto puede implicar hacer join entre varias tablas. El objetivo es tener una sola tabla con los datos de entrada y la salida esperada de la red.

Discretizar los datos. Esto es asignar un valor numrico a los datos de tipo no numrico.

Tratar los casos incompletos. Puede pasar que tengamos muestras que no tienen completas todas las columnas. Y la red de neuronas necesita que todos los campos estn completos. En este caso tendremos que decidir qu hacer con las columnas que no estn completas. Si hay muchos huecos podemos eliminar la columna entera. Si hay pocos huecos podemos asignar un valor nico a todos los huecos. O incluso podemos usar heursticas para rellenar los huecos.

Eliminar los datos no representativos. Por ejemplo, los identificadores. Y cualquier campo que nunca se repita.

Normalizar los datos. Esto es es, una vez que hemos limpiado y discretizado. Tenemos que poner todos los valores en el rango de 0 a 1. Esto es muy sencillo. Tan solo hay que dividir todos los casos de cada columna por el mximo de esa columna.

Finalmente, otra cosa importante, es balancear los datos. Es decir, si tengo muchos datos de un tipo y muy pocos de otro, podemos desechar muestras del tipo mayoritario para que los datos estn balanceados.

Por supuesto, hay otras tcnicas para balancear los datos y tambin para transformar los datos de modo que sean ms representativos. Pero bueno, creo que al menos he nombrado lo imprescindible.

Recurrent
Neural
Networks

Ahora voy a comentar brevemente lo que son las redes de neuronas recurrentes. No voy a profundizar mucho en el tema porque son bastante ms complejas que las redes normales. Pero si me gustara que las conocieseis.Las redes de neuronas recurrentes son especialmente tiles para tratar secuencias. De hecho, se utilizan mayoritariamente en tratamiento de texto y lenguaje natural.La caracterstica principal que tienen es que la salida de la red se utiliza tambin como parte de la entrada. Por lo tanto, se podra decir que tienen estado, y en funcin de las entradas previas darn un resultado u otro para una entrada presente.

RNN Example

All the works of Shakespeare concatenated into a single (4.4MB) file.

The input data is a character.

3-layer RNN with 512 hidden nodes on each layer.

Os voy a ensear un par de casos de uso muy curiosos de Redes de Neuronas RecurrentesEste caso es una red, cuya entrada son caracteres y smbolos de puntuacin y la salida es la misma. Por cierto, que a esto se le llama autogenerativa.La red tiene una capa oculta de 512 neuronas y se ha entrenado durante horas con los libros Shakespeare.Una vez entrenada, si le pedimos a la red que comience a predecir, obtendremos resultados como este. Como veis, es un texto en perfecto ingls, con sus correspondientes signos de puntuacin, y adems parece una obra de teatro de Shakespeare.

RNN Example

All the source and header files found in the Linux repo on Github, concatenated all of them in a single giant file (474MB of C code)

Trained on 3-layer LSTMs over a period of a few days. These models have about 10 million parameters, which is still on the lower end for RNN models

Este otro caso les gustar especialmente a los programadores de C.Es un caso similar al anterior, pero los datos de entrenamiento es el cdigo fuente del repositorio de Linux de Github.Una vez entrenada, la red es capaz de generar cdigo linux sintcticamente correcto aunque tiene ciertos errores gramaticales. Por ejemplo, a veces usa variables que no han sido previamente declaradas.

Links

Recommended course:

https://es.coursera.org/learn/machine-learning

Recommended framework:https://keras.io/

Interesting links:http://playground.tensorflow.org

https://es.wikipedia.org/wiki/Red_neuronal_artificial

http://blog.datumbox.com/tuning-the-learning-rate-in-gradient-descent/

http://scottge.net/2015/06/22/ml101-overfitting-vs-underfitting/

http://rtdibermatica.com/?p=55

http://karpathy.github.io/2015/05/21/rnn-effectiveness/

Esto ha sido todo. Pero no quiero terminar sin antes hacer un par de recomendaciones.Primero, si buscis un busco introductorio a Redes de Neuronas, el de Stanford en Coursera est bastante bien. Me resulta demasiado terico en algunos casos, pero de momento es el mejor que he visto.Por otro lado, si queris empezar a trastear ya, necesitis un framework de Machine Learning. Os recomiendo que utilices Keras. Es un framework de muy alto nivel que por debajo utiliza Tensorflow o Theano. Muy recomendable.Finalmente, aqu hay otros links interesantes que he utilizado para esta presentacin.

Questions?

ThanksGermn Ramos [email protected]

Muchas gracias a todos