Bueno chicos, aunque no he sido muy participativo en el hilo de ciencia anterior, creo tras la inauguración de este subforo es el momento perfecto de que me inicie y cree un hilo sobre la inteligencia artificial dado que por lo que he podido observar a la gente le interesa bastante el tema. Aquí podríamos poner noticias y un poco de teoría.
Así pues iniciaré el hilo con un poco de background sobre machine learning.
¿Qué es machine learning?
Machine learning es una rama de la inteligencia artificial que pretende hacer "aprender" a las máquinas. A mi modo de ver el nombre puede llevar a la confusión a nuevos aficionados en esta ciencia, porque puede llevar a hacer pensar que realmente la máquina piensa. Realmente siendo más estrictos lo que realmente hacemos es crear un clasificador bastante complejo al cual tras introducirle un input con diferentes características lo clasifica en una clase. Visualmente lo que el clasificador hace es crear unas fronteras de decisión de este estilo:
En este ejemplo de arriba tendríamos 4 posibles clases porque tenemos 4 regiones diferentes. Si nuestro vector cae en una región determinada se le asignaría una clase u otra.
Imaginemos un ejemplo simple. Tenemos un input que es un vector de muestras RGB (característica 1,característica 2,característica 3) en este caso tendríamos un espacio de 3 dimensiones en vez de las 2 del ejemplo anterior ya que tenemos 3 características. Veamos como se traduce esto matemáticamente:
Conjunto de muestras:
S = {x_n | n = 1, 2 ... N, x_n ∈ Rd}
Tenemos un conjunto "{}" de muestras llamado "S". Este conjunto de muestras está formado por vectores "x_n" tales que "|" "n" va de 1 a N (vamos que tenemos N muestras) donde "," los vectores "x_n" pertenecen "∈" al espacio de reales "R" de dimensión "d" "Rd", lo que quiere decir que los vectores estarán formados por "d" características pertenecientes a los números reales. En el ejemplo de arriba tenemos una d = 3 que pertenecerían a "N" (espacio de los naturales) lo que correspondería a un espacio de 3 dimensiones .
Clasificador:
f: Rd -> 1, 2 ,..., C
Básicamente el clasificador se define como "f" y transforma una muestra de Rd a una clase (de 1 a C).
Aunque esto que puede parecer simple a priori tiene bastante miga detrás. La parte más compleja es como crear un clasificador "f" que sea capaz de crear las fronteras de decisión de manera eficiente y es en lo que se centra esta ciencia.
¿Cómo crear un clasificador?
He aquí la madre del cordero. Para ello tenemos 3 maneras diferentes de hacerlo: De manera supervisada, de manera no supervisada y por refuerzo. Intentaré explicar al menos un clasificador de cada para que quede más claro el concepto y para los demás dejaré enlaces para que los expliquen.
Entrenamiento supervisado:
En este método básicamente "entrenamos" a nuestro clasificador con una base de datos que contiene muestras ya clasificadas. Es decir, utilizando el ejemplo anterior: para que el clasificador cree fronteras de decisión le introduciríamos muestras del estilo (255,23,1|0), (21,248,5|1) ,(12,13,250|2)... donde entenderíamos que los números después del "|" serían las etiquetas de las clases: 0 = rojo, 1 = verde, 2 = azul. Así poco a poco se van creando las fronteras de clasificación.
Los clasificadores más utilizados son:
Linear regression: http://people.duke.edu/rnau/regintro.htm
Naive Bayes: https://www.cs.cmu.edu/tom/mlbook/NBayesLogReg.pdf
Decision trees: http://www.cs.cmu.edu/afs/cs/project/theo-20/www/mlbook/ch3.pdf
Neural networks: Sorprendentemente bien explicado: http://www.xataka.com/robotica-e-ia/las-redes-neuronales-que-son-y-por-que-estan-volviendo
Support vector machines: http://cs229.stanford.edu/notes/cs229-notes3.pdf
En este apartado explicaré Decision Trees ya que es la base del algoritmo Random Forest (el que estoy utilizando en mi proyecto). A parte es muy fácil de entender y muy utilizado en general.
Un árbol de decisión no deja de ser una secuencia ordenada de preguntas concatenadas que dan lugar a una forma de árbol. Veamos un par de ejemplos para hacernos una idea de como clasifica:
Como podéis ver en la figura de arriba tenemos 2 clases: cruces y redondas. En este ejemplo hemos supuesto que tenemos un vector de entrada con los valores (1,3) nuestro árbol no lo sabe, pero es una cruz tal y como podéis ver. Así que para clasificar hace la siguiente pregunta: ¿Es x_1 menor o igual que 2? La afirmación es correcta por lo que clasifica como una cruz, por lo que ha acertado. Como podéis ver las preguntas coinciden con las fronteras.
En este último ejemplo se muestra como puede también fallar nuestro árbol. Veamos, tenemos una entrada (4,3), ¿ x_1 es menor o igual que 2? No => no es concluyente, pasamos siguiente pregunta. ¿Es x_2 mayor o igual a 2? Sí => el árbol clasifica como cruz (pero se equivoca porque es una redonda).
Como podéis ver este clasificador es muy simple de entender, pero en sistemas complejos os podéis imaginar que el árbol crece descontroladamente y se vuelve muy lento, por lo que se ha de podar... No entraré en detalles matemáticos porque se podrían llenar páginas sobre esto así que si queréis más info consultad el enlace que he puesto!
Entrenamiento no supervisado:
Este tipo de clasificador se entrena sin añadir etiquetas en la base de datos de entrenamiento. Así pues lo que hace es crear fronteras en base (principalmente) a distancias entre los vectores.
Los clasificadores más utilizados son:
K-means: http://www.autonlab.org/tutorials/kmeans11.pdf
K-nearest neightbors: http://www.cs.ubc.ca/murphyk/Teaching/CS340-Fall07/L4_knn.pdf
Hierarchical clustering: http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html
Gaussian mixture models: http://statweb.stanford.edu/tibs/stat315a/LECTURES/em.pdf
Self-organizing maps : http://www.cs.bham.ac.uk/jxb/NN/l16.pdf
Para este tipo de clasificadores explicaré el super conocido K-means. Como su nombre nos insinúa este método consiste en hacer K medias diferentes. El número de medias a calcular la indicamos nosotros al algoritmo. Imaginemos que tenemos una fotografía con N píxels y cada uno es introducido en nuestro clasificador, tras introducir los datos el algoritmo busca k pixels aleatorios que serán el centro temporal de nuestros "cluster" de datos. A partir de estos comienza a iterar y actualizar estos centros según para que la distancia a los otros pixels sea mínima. (a groso modo)
Debajo podéis ver el funcionamiento del algoritmo con una foto mía (cuando hice esto la profesora pidió que lo hiciéramos con nuestras fotos) variando la K.
K=2
Quizás en la foto de arriba podéis ver más claramente el como divide por medias. Las zonas más oscuras son la media de los pixels más oscuros, los cuales los acaba asociando a ese color.
K=6
Entrenamiento por refuerzo:
Sinceramente este tipo no lo he estudiado así que no puedo profundizar mucho en ello. Conceptualmente los datos de entrada son proporcionados por estímulos a un modelo desde un entorno en el cual el modelo pueda responder y reaccionar. El feedback en este caso no se proporciona como en el proceso de entrenamiento del método supervisado, sino que se hace a través de castigos y premios en el entorno. Este método a mi modo de ver es el que más se parecería a simular un IA, si alguien en el foro lo conoce con más profundidad estaría genial que lo comentase!
Los clasificadores que he encontrado son:
Temporal differences: https://web.stanford.edu/group/pdplab/pdphandbook/handbookch10.html
Sarsa: http://www.cse.unsw.edu.au/cs9417ml/RL1/algorithms.html
Q-learning: http://www.cse.unsw.edu.au/cs9417ml/RL1/algorithms.html
Y bueno hasta aquí mi muy pequeña introducción a machine learning! Espero que os haya gustado, haya aclarado ideas y pueda servir a alguien a interesarse por el tema
Recopilación de hilos similares:
Por candrew: Información general de IA
http://www.mediavida.com/foro/ciencia/its-science-time-432387/137#4087