[Recursos] Aprehendiendo sobre redes neuronales

hda

Preámbulo

Buenas, compañeros mediavidensis,

dado que ha unos días un compañero me preguntaba sobre redes neuronales por mp, sobre hacer un hilo con recursos, y que yo me estoy metiendo en ello en mis ratos libres por curiosidad, paso a transcribir mi contestación ligeramente modificada para que todos podamos aprovecharnos de ella. Ojo, que yo ni de lejos soy un gurú en el tema.

Desde hace no mucho me he ido poniendo intensito con el tema de redes neuronales, además de que últimamente han surgido hilos en el foro sobre esto ([1], [2], [3], [4], [5], [6]); sin duda suscita interés, he estado buscando información, libros y cursos y esto es lo que he podido compendiar.

Libros

  1. I. Goodfellow - Deep Learning [en abierto] [Amazon] [GoodReads]
  2. M. Nielsen - Neural networks and deep learning [en abierto] [GoodReads]
  3. F. Chollet - Deep Learning with Python [Amazon] [GoodReads]
  4. A. Geron - Hands On Machine Learning with Scikit-Learn and TensorFlow [Amazon] [GoodReads]
  5. N. McClure - TensorFlow Machine Learning Cookbook [Amazon] [GoodReads]
  6. P. Gibson - Deep Learning. A Practitioner's Approach [Amazon] [GoodReads]
  7. S. Kapur - Computer Vision with Python 3 [Amazon] [GoodReads]

Actualmente estoy leyendo el segundo de esta lista (es abierto y web): http://neuralnetworksanddeeplearning.com/
Según parece es uno de los mejores recursos para entender los fundamentos. Voy por el capítulo tres, y a excepción de repasar un poco más las mates para interiorizar ciertos resultados (referentes al algoritmo de backpropagation), la verdad es que me siento un poco más confiado con el tema.

Cursos

Algunos cursos que todavía no he tocado que he visto por la bahía son estos:

  1. Lynda Building and Deploying Deep Learning Applications with TensorFlow [link]
  2. Python Machine Learning in 7 Days [link]
  3. TensorFlow 1.x Deep Learning Recipes for Artificial Intelligence Applications [link]
  4. Udacity - Deep Learning Foundation [link]

Aún no he indagado, no sé qué tal están. Por las referencias que he visto son decentes.

Mi aproximación la estoy haciendo mucho más teórica, aunque lo que busque luego es una aproximación práctica con tensorflow. Mi objetivo es controlar tensorflow, no sin antes saber qué estoy haciendo.

Youtube

El canal de Youtube de divulgación matemática 3blue1brown tiene una serie de vídeos sobre redes neuronales, están muy bien. Acabo de comprobar ahora que también tiene subs en español:

Se habla de la buena labor divulgativa de este otro canal, Welch Labs, aunque yo todavía no lo he visto.

Serie sobre redes neuronales:

Serie sobre visión computerizada (redes neuronales para reconocimiento de imágenes):

Adenda

Por último, recientemente tuve la suerte de formar parte de los "betatesters" de libro «Redes Neuronales & Deep Learning» de Fernando Berzal [amazon], mi rol entre tantos expertos testeadores era el de ser el lego en la materia :man_shrugging:. Pese a lo reciente de su publicación este libro ostenta ya el ser el más vendido en amazon español de inteligencia artificial, puede que ello sea indicativo de que merezca la pena.

Termino diciendo que, con lo que me estoy metiendo, al final me molaría hacer una serie de hilos explicando los fundamentos (tipo lo que es un perceptrón, la función escalon, la función sigma, etc.), pero realmente con la tesis no tengo tiempo, ya bastante estoy haciendo leyendo sobre esto en mis ratos libres jaja

Un saludo :)

35
HeXaN

Yo dejo esto por aquí: http://cs231n.github.io/

Total, luego cuando trabajéis con ellas lo que haréis serán miles de experimentos de optimización de parámetros y arquitectura hasta dar con el que mejor funciona xD

2 2 respuestas
hda

#2 gracias por el enlace. Parece poderoso :)

Sí, según he ido entendiendo gran parte de trabajar con redes neuronales radica en (a parte de montar/tener un dataset decente), aplicar los parámetros iniciales correctamente, número de capas, número de neuronas en cada capa, ratio de aprendizaje, etc.

Pero bueno, como pongo en #1 , en lo personal busco comprender un poquito cómo funciona, cuáles son los fundamentos del invento. Luego ya sí, a darle duro a lo que comentas xD

B

Muchas gracias por montar este hilo, suscrito desde ya!.

Ojearé esos libros en abiertos aportados y el canal lo desconocía por completo, vaya filón de información.

Mi pequeña aportación: Llevo unos días con un libro de amazon con el que empece a meterme en este jaleo: Redes neuronales & deep learning de Fernando Berzal : https://www.amazon.es/Redes-Neuronales-Learning-Fernando-Berzal/dp/1731265387/ref=sr_1_1?ie=UTF8&qid=1551199984&sr=8-1&keywords=redes+neuronales

Para aquellos que quieran saber el qué, para qué y cómo le recomiendo este tipo de lecturas, no es necesario (no mucho) la programación a nivel teórico. A los que le tengan curiosidad al tema, este libro complementado con todo lo que hay en #1 te permite el "primer contacto" y dejar de ver esto tan abstracto.

B

#2 Que denso me ha parecido, te importaría desarrollar un poco más?. Por lo que pude ver aquí : http://cs231n.github.io/classification/
la cosa ya es para avanzado nivel pro jhejeje.

Se agradece mucho el contenido.

Recomiendas algún libro que consideres algo como primera toma de contacto?.

PD, Mierda, no quería doblepostear.

2 respuestas
B

respecto a clasificadores, yo he hecho alguna que otra competicion en kaggle y he utilizado kneighbors (knn), svc, arboles de decision, bayes, redes neuronales y alguna otra cosa que no recordare ahora

las redes neuronales siempre me han dado una accuracy muy baja (alrededor del 0.5), debo suponer que es por la reducida cantidad de datos?

2 respuestas
HeXaN

#6 O porque tu arquitectura no era la adecuada.

1 respuesta
hda

#6 o que tus hiperparámetros no eran óptimos.

1 respuesta
B

#7 #8 Revisare esto que comentáis, le he estado dando a la competición de MNIST, reconocimiento de numeros, thx

1 respuesta
HeXaN

#9 MNIST está tan trillado ya que cualquier red simple de pelotas te lo saca casi perfecto (hay un par de valores que ni los humanos nos aclaramos).

Slowbro

No sé si sois muy fans de coursera, pero la especialización de Deep Learning de Andrew Ng está bastante bien. Toca las bases y aspectos un poco más avanzados, como gestionar proyectos de DL, redes convolucionales y redes recurrentes. El tío hasta explica Yolo xD. Toca temas de Keras y TF. La putada es que hay que pagar unos 60€/mes, pero se hace facil en un mes. Excepto alguna semana loca, las practicas son asequibles para hacer en una tarde y valen para asentar fundamentos.

Más detalles en https://www.deeplearning.ai/

1 2 respuestas
rackinck

Yo estoy metiéndome en LSTM con un toque bayesiano para optimizar parámetros a ver si consigo diseñar un trader basado en sentiment analysis de noticias/twitter efectivo. Todavía me queda mucho camino y trabajo de por medio, though.

PD: Para machine learning en general y no tanto deep learning, recomiendo mucho el curso de Trevor Hastie y Rob Tibshirani . Es gratis jeje.

PD2: Tengo un set de slides de un mini curso que nos dio Christian Hansen de Chicago Booth sobre machine learning aplicado a ciencias sociales, si a alguien le interesa PM.

2 2 respuestas
HeXaN

#12 Justamente la tesis de un compañero es sobre eso. Yo las uso para predicción de series temporales.

1 respuesta
_Rpv

https://www.youtube.com/channel/UCy5znSnfMsDwaLlROnZ7Qbg

Otro youtuber de redes neuronales

pon en #1 todos los enlaces que vayan saliendo para no repetir jeje

3
hda

Mi objetivo es enseñar a una red neuronal todos mis posts en mv y que me cree uno. A ver qué tal.

Fuera bromas, dado que estoy por terminar mi tercer libro de poesía, creo que me atreveré a meter una generada por NN tras enseñarle todo lo mío. Tengo muchas ganas xDDDDD

1 2 respuestas
Yekale7

#15 Hilo a Fav :thumbsup: .

Seguiré el hilo y así aprovecho para intentar informarme sobre el tema.

Ardi

Añadido a favs mi tfg es hacer una red neuronal con tensorflow para aplicaciones medicas

c0b4c

#12 buena suerte con el sentiment analysis xDDD

yo en mi caso estoy trabajando con CNNs y RNNs para predecir disrupciones del plasma en tokamaks

n3krO

Yo he estado trasteando con NEAT (Neuroevolution of augmenting topologies), lo unico que no me gusta es que no se como podria dibujar las redes resultantes para hacer una animacion T-T

HeXaN

#5 No he leído ningún libro completo ya que sólo leo los capítulos que me interesan (de los libros de Bishop y Bengio, fundamentalmente). El resto de la información la saco de papers ya que forma parte de mi trabajo.

1
Frave

Mola el hilo.

#1 también esta este libro de Andrew Ng yo solo lo he ojeado pero parece bastante accesible para gente que quiera introducirse al tema de las cnns, mas o menos sintetiza el contenido de su curso de coursera. https://www.mlyearning.org/

#5 para seguir ese repositorio lo mejor es que te mires las clases de standford, aunque son durillas y necesitas unos fundamentos de estadística y machine learning medio-altos la verdad. Esta mas enfocado para aplicaciones en imagen de las cnns aunque claro también es el aspecto en el que mas lo petan y en el que se usan ya exhaustivamente. Las dejo por aquí.

#11 yo hice ese curso hace ya unos años y esta bastante bien para aprender lo básico la verdad.

1
hda

Chicos del hilo, viendo que por el foro hay tanta gente que controla de redes neuronales, ¿os plantearíais hacer un hilo conjunto sobre los fundamentos? Lo más básico. Estaría genial y la gente podría preguntar dudas :)

¿Qué me decís?

12
bLaKnI

¿Creéis que este es el "siguiente paso" en la evolución de la programación entendida como tal?
Es decir, creéis que todo programador en un futuro DEBERÁ saber trabajar con toda noción requerida de IA para integrarla en cualquier desarrollo que se precie, y que con el tiempo, se simplificará el uso de la IA en capas de abstracción funcionales tipo librerías embebidas en el propio core de los lenguajes, y que llamaremos a dichas funciones y las integraremos en patrones de diseño evolucionados como si de POO estructurada prensáramos hoy día?

Pienso en la idea de un programador "old-school" que jamás haya entrado en terreno de POO y ya no digamos en patrones ni lenguajes de alto nivel. Que se haya quedado """desfasado"""... Pues el programador "moderno" actual, en un futuro no tan lejano con la IA en general.

4 respuestas
hda

#23 no sé, yo no lo tengo tan claro. Opino que las redes neuronales por lo menos a día de hoy y hasta donde yo sé, existen para temas muy concretos, como el reconocimiento de patrones (y la inferencia de nuevos a partir de los antiguos).

La clave, corregidme si me equivoco, es que las NN deben ser entrenadas, no pueden crear nada genuino, solo extrapolar algo desde lo que haya sido entrenada.

Eso no quita que en medio plazo se apliquen NN en nuestro día a día (ya hoy sucede, con el reconocimiento de voz, por ejemplo), por lo que es una competencia interesante para todo programador que se digne. Tengo constancia de un framework recientemente liberado por Google que hace pentesting mediante NN a webs, cosa interesantísima, por cierto.

2 respuestas
Frave

#23 pues me sorprendería que fuera ese el camino la verdad. Osea entiendo que esto lo comentas por el cambio de paradigma de en lugar de nosotros diseñar las reglas de la toma de decisiones lo hacemos es programar una arquitectura que a base de ensayo y error es capaz de diseñar unas reglas. Ese ha sido a mi modo de ver el cambio que ha permitido un avance significativo en IA. Pero esto no ha afectado a como programamos ya que simplemente en lugar de poner if x > 0.5: tal tal tal, ahora una red recibe x y decido si a o b o lo que sea.

Yo lo que veo, bueno se esta viendo ya, es que se están integrando cada vez mas IAs entrenadas en entornos y librerías y dentro de poco si estas haciendo un código para manejar un robot en una cadena de montaje tendrás una llamada a una librería que sera DL_detector( ) o algo del estilo que sera una red entrenada ya para resolver problemas mas o menos complejos.

O al menos así lo veo yo. También digo que mi campo es mas el machine learning y no tanto el diseño de codigo a nivel pro. Pero no veo una aplicación directa la verdad.

1
n3krO
#24hda:

La clave, corregidme si me equivoco, es que las NN deben ser entrenadas, no pueden crear nada genuino, solo extrapolar algo desde lo que haya sido entrenada.

No se si te he entendido pero creo que tratas de decir que las NN las entrenas con un Data Set y que despues cuando las usas estas usando una extrapolacion de ese data set, no?

Pero hay redes que entrenan sin necesidad de un Data Set. Por ejemplo, para crear inteligencias artificiales que juegan videojuegos o juegos de mesa les puedes poner jugando una y otra vez. Lo unico que tienes que hacer es definir unos objetivos (Fitness Function) para cada juego.

3 respuestas
R

#26 eso no seria ya algo mas como algoritmos geneticos?

1 respuesta
n3krO

#27 :psyduck:

Claro que lo haces con algoritmos geneticos, pero estas entrenando una red neuronal sin darle data real de otros jugadores.

O sea, si tu le pones jugando y defines una fitness function en funcion de los objetivos del juego, la IA aprende a jugar.

Si le pones grabaciones de otros jugadores, la IA no va a aprender a jugar, va a aprender a imitar otros jugadores.

no?

hda

#26 hasta donde yo sé, páginas 261 y 262 del libro de Berzal, hay tres sistemas de entrenamiento: no supervisado (correlación), supervisado (gradiente descendente y backpropagation) y por refuerzo (recompensas y castigos).

La mayoría de las NN a día de hoy son las supervisadas. Para lo que aludes, juegos, serían entrenamiento por refuerzo.

Independientemente del objetivo de la NN debe ser entrenada, obvio. Para lo que comenta el compañero en #23 el objetivo de la NN es crear. No estoy seguro de cómo puede crear una NN cuyo objetivo es hacer algo más eficiente (como pasarse un juego), empero sí contemplo cómo puede crear una NN de búsqueda de patrones.

Mi argumento, al respecto de #23 , tira porque una NN de búsqueda de patrones no puede crear nada genuino pues se fundamenta en un entrenamiento discreto de cosas ya genuinas. Creo que aquí nos podemos ir a la filosofía y proponer el problema de si lo que crea una persona puede ser genuino, etc., pero nos saldríamos del objetivo de la discusión.

No sé, no estoy seguro de lo que hablo.

2 respuestas
n3krO
#29hda:

Para lo que comenta el compañero en #23 el objetivo de la NN es crear. No estoy seguro de cómo puede crear una NN cuyo objetivo es hacer algo más eficiente (como pasarse un juego), empero sí contemplo cómo puede crear una NN de búsqueda de patrones.

Aqui me he perdido, en cuanto a lo de que "el objetivo de la NN es crear" y "no estoy seguro como puede crear una NN cuyo objetivo es pasarse un juego", o sea, lo primero no lo entiendo, y lo segundo, es algo que a dia de hoy se "hace", con juego sencillos que se pueden resolver con redes neuronales modestas (si quieres que la red neuronal actue en tiempo real en vez de ir frame por frame).

De hecho las NEAT estan bastante bien para esos cases puesto que permiten dependencias inversas (que una celda mas adelante en la red pueda afectar el valor de una celda anterior, creando bucles de realimentacion).

No es lo mismo un problema estatico que un problema dinamico. De hecho tengo compañeros que estan investigando redes neuronales para regulacion automatica, para reemplazar los controladores PID.