El hilo de la inteligencia artificial

Modok

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

7
varuk

Buen hilo este.

Actualmente ya está esto bastante trabajado y se puede tirar de algoritmos que ya han sido más que probados. Por ejemplo, hace años había que programarse uno mismo una red neuronal pero ahora ya hay buenas opciones por ahí, lógicamente. Por no hablar en temas de visión artificial, como reconocimiento de caras y los clasificadores en cascada que usa opencv.

El año pasado programé con R, que lleva un paquete de red neuronal, un programilla que en base a un entrenamiento, datos que cogía yo, predecía, mas o menos, el próximo país extranjero que ganaría el Oscar a la mejor película, basándose en número de premios que había tenido esa película hasta el momento, numero de visionados del trailer en youtube... Un poco de iniciación. Tampoco ninguna maravilla.

Personalmente el tema este del aprendizaje computacional está bien pero me gusta más el campo de la Inteligencia Artificial de los sistemas expertos basados en reglas, la lógica difusa, RETE... sobre todo cuando se aplica al campo de la medicina.

Modok

Esos temas no los he tocado y me parecen muy interesantes. Yo ahora mismo estoy haciendo mi tesis en Spark y estoy aplicando Random Forest para la detección en tiempo real de fraude en transacciones bancarias. No se si quedarme solo con eso o también probar más cosas para comparar rendimiento, crees que se podría aplicar lo que has mencionado en este campo, o lo ves demasiado complejo para lo que se pretende?

B

Me alegro que alguien se haya animado tan pronto a crear un hilo como este. Intentaré aportar contenido, un saludo.

Zerokkk

Buen hilo! Te he insertado imágenes, pero parecen fallar. Revisa los enlaces!

1 respuesta
Sawi

Creo que el primer post de este hilo es el lugar ideal para rescatar un aporte que hizo el usuario candrew en la página 137, comentario 4087, del hilo It's science time!

1 respuesta
nic098765

#6 It's science time! Esta puesto de tal manera que salta directamente al comentario sobre IA de Candrew.

1
allmy

Gran hilo, me encantaría aprender sobre esto. Sabéis de algún curso en plan "los de udacity" que sea sobre esta temática y sea práctico?

2 respuestas
varuk

#8 En coursera.org hay muchos de esto ahora. Siempre suele salir uno cada poco tiempo. Ahora se lleva mucho todo este tema. Y suelen ser buenos los de esa web.

Modok

#5 Solucionado!
#8 Tal y como ha dicho varuk, en coursera tienes un curso gratuito de machine learning. En youtube también hay un canal en que explican detalladamente la parte matemática de esto: https://www.youtube.com/playlist?list=PLD0F06AA0D2E8FFBA

Perurena

Una duda chicos, estoy mirando cosas en coursera pero los cursos no se pueden tomar hasta que estén disponibles, ¿hay alguna web con los vídeos y tal para hacerlo por tu cuenta?

2 respuestas
B

#11 jGcz creo que posteó algo en el hilo de ciencia de un curso de caltech. Si no, tienes los OCW de MIT y de Stanford, que acostumbran a tener videos en abierto de sus cursos.

s4suk3

Año 2215 :
Inversor "Tengo 2.000M para invertir en chips, cuando nazca un Chino le implantaremos este chip de bebé y será mandando a construir la ciudad Nueva York de Marte.

Lo creéis posible? Es ciencia?

Kartalon

A mí siempre que alguien me pregunta sobre esto recomiendo el mismo libro, así que aquí lo dejo:

"Artificial Intelligence: A Modern Approach" de Stuart Russell y Peter Norvig.

Pillé este libro en la biblioteca para estudiarme determinadas cosas de robótica y acabé leyéndome varios capítulos por mero vicio. Muy bien explicado todo y desde una forma bastante práctica si se quieren entender las bases de la Inteligencia Artificial moderna. Ya digo, es para entender estas bases, para cosas más avanzadas y modernas se queda corto.

2 respuestas
Sawi

Yo estoy leyéndome ahora mismo "La nueva mente del emperador" de Roger Penrose, ya que lo ví en fnac y como no tengo demasiada idea de todo esto pero me interesa me lo pillé.
¿Imagino que está bastante desfasado no?

Aprovecho el post para lanzar otra pregunta al aire, ¿Consideráis que se conseguirá desarrollar una inteligencia artificial que tenga conciencia verdadera sobre sí misma antes de que acabe el siglo?

1 respuesta
varuk

#14 Sí. Ese libro lo tengo yo comprado y es bastante bueno para iniciarse en el tema.

Como dices, explica, sin complicarse, todo el tema desde los algoritmos de aprendizaje básicos a más complejos así como los temas de juegos (no me refiero a videojuegos por si alguien me lee, si no a juegos en el sentido de enfrentarse uno contra otro y como una máquina decide como mover ficha en un juego tipo ajedrez y demás estrategias como decisiones, etc), aprendizaje, algortimos genéticos...

Creo que el cine ha desvirtuado un poco el tema de la Inteligencia Artificial. No sé si se llegará a lo que tanto aparece en la literatura, supongo que sí, pero si cogéis este libro y lo leéis... veréis que la IA no es tanto como una especie de Dios si no todo más sencillo, al menos en su base.

#15 Ese libro lo quiero leer, entre otros. Me lo han recomendado ya varias veces.

Zerokkk

#14 Tengo pensado pillarme el libro o algo, pero está carillo por ahí :/. ¿Es verdad que te enseña a programar agentes sencillos y demás? Algún día tendré que meterme muy de lleno en la IA xD.

jGcz

La biblia del machine learning para mi es el libro de Duda et al. "Pattern Classification":

https://books.google.es/books/about/Pattern_Classification.html?id=Br33IRC3PkQC&source=kp_cover&hl=en

Raro es el artículo que escribo y que no lo cito. Por cierto, aunque hay ciertas diferencias (y eso incluso depende de a quien preguntes), pattern recognition también se usa para referirse a este campo.

#11 A mi me gusta este

https://work.caltech.edu/telecourse.html

más que los de Coursera. Aunque el de Coursera entra un poco más en Redes Neuronales, que está ahora muy de moda (otra vez).

#1 Por aportar algo, en clasificadores supervisado añadirías sin duda la regla del vecino más cercano (Nearest Neighbour). Seguramente el más sencillo y con el que se suelen conseguir resultados muy buenos, además de aportar otro tipo de ventajas.

2 respuestas
Modok

#18 Gracias, se me olvidó. Añadido!

Kartalon

Estoy pensando en escribir sobre cadenas de Markov y procesos de decisión de Markov por refrescarlo para mí más que por otra cosa (no es que yo pueda enseñar mucho a nadie sobre esto).

Pero esta semana no voy a poder, así que si alguien escribiera sobre ello antes estaría muy agradecido xDDD

1 respuesta
B

http://neurocritic.blogspot.com.es/2015/08/will-machine-learning-create-new.html

Me mantengo escéptico.

jGcz

#20 En Wikipedia está bastante bien explicado, sobre todo en inglés. Se queda en lo básico pero creo que como introducción vale la pena.

1 respuesta
Kartalon

#22 Y yo pensando en tirar de mis apuntes de hace un par de años para contarlo... xDD No sé como estará contado en la Wikipedia, pero vamos, contarlo de forma sencillita y ligándolo bien a los procesos de control estocásticos y tal estaría bien para este hilo IMO, por poner cosas que son bases.

1 respuesta
Slowbro

Magnífico hilo #1

Un aporte: Cosas interesantes de /r/machinelearning

Y una serie de preguntas de novato:
-Respecto a las redes neuronales, me han dicho que si el sistema cambia es mejor rehacerla a intentar modificar una red entrenada. ¿Podríais explicar esto?
-¿Conoceis algun recurso introductorio para la gente que venimos del control? He leído que para control adaptativo el ML es un candidato bastante potente y me interesa aprender.

1 respuesta
jGcz

#24 La primera pregunta no la entiendo del todo, ¿qué es que el sistema cambie?

De todas formas, con Deep Learning (la nueva generación de redes neuronales) parece que es justo al contrario. Por ejemplo, si quieres entrenar un reconocedor de razas de perros (?) pero tienes muchísimas más imágenes de razas de gatos (?). Pues parece ser que es tremendamente útil entrenar con los gatos y luego hacer un fine-tuning con tu pequeña muestra de perros. Por ir a algo más concreto, que yo sepa casi todo el mundo está cogiendo la red neuronal entrenada para la ImageNet (http://www.image-net.org/) y luego hacen una segunda fase de entrenamiento con sus imágenes.

El tema está en que las primeras capas de la red se especializan en detectar qué características son relevantes en las imágenes, y en las últimas se hace el reconocimiento en sí. Por tanto, para entrenar las primeras capas da un poco igual qué uses, siempre y cuando sea el mismo dominio (en este caso, imágenes). Obviamente no tiene sentido entrenar un reconocedor de audio con imágenes, aunque nunca se sabe xD

1 respuesta
Slowbro

#25 No se me ocurría de que otra manera expresar lo de 'cambio de sistema' pero tu ejemplo recoge a donde quería llegar así que perfecto xD.

No sabía nada de Deep Learning. Te entiendo que la idea es estratificar el aprendizaje de tal modo que cambiar de perros a gatos o incluso algas pueda ser relativamente fácil porque la base es la misma.
Entonces siempre y cuando la base sean imágenes... ¿La red se puede amoldar a lo que quieras reconocer siempre y cuando puedas detallar lo que buscas en esas fotos?

1 respuesta
Gif

Lectura por Jeff Clune sobre Evolving Regular, Modular Neural Networks.

The property of regularity is produced by using HyperNEAT, a generative encoding based on concepts from developmental biology [1]. The property of modularity arises because we add a cost for connections between neurons in the network [2]. Evolving structurally organized neural networks, including those that are regular and modular, is a necessary step in our long-term quest of evolving computational intelligence that rivals or surpasses human intelligence.

[1] Clune J, Stanley KO, Pennock RT, Ofria C (2011) On the performance of indirect encoding across the continuum of regularity. IEEE Transactions on Evolutionary Computation. 15(3): 346-367. PDF: http://goo.gl/qYHPR

[2] Clune J, Baptiste-Mouret J-B, Lipson H (2012) The evolutionary origins of modularity. ArXiv. 1207.2743v1. PDF: http://arxiv.org/pdf/1207.2743v1.pdf

1 respuesta
jGcz

#26 Deep Learning es para referirse a la nueva generación de redes neuronales pero los conceptos son iguales, incluso los algoritmos de aprendizaje. Y si, parece ser que utilizar una red entrenada para una cosa y tunearla un poco para tu propia tarea da muy buenos resultados. La clave está en lo que te digo de las primeras capas, que esas "extraen caracteristicas", no tanto reconocen. Y es probable que las características para una tarea no cambien tanto para otra.

Para más información, y de muchísimo más nivel, puedes echarle un ojo a este artículo (del investigador de #27, entre otros):

http://creativemachines.cornell.edu/sites/default/files/yosinski_2014_NIPS_0.pdf

B

#23 puedo ayudar con ello desde una perspectiva de teoria de la probabilidad si quieres (convergencia, condicion de Doeblin, teorema de Perron-Frobenius...).
#18 por cierto ese curso de caltech lo esta haciendo mi padre y esta encantado con el, se lo recomende gracias a ti (lo pusiste en el hilo de ciencia), so thanks.

B

Adoptaré a un niño sólo para ser un padre molón que hace cursos de ciencia on-line xD.