Cómo aprender prácticamente las redes neuronales mientras se obtiene una comprensión profunda

Bien, ahora que has hecho las teorías, ahora es tiempo de práctica,

Mi plan era formar un MLP simple sobre un ConvNet y luego arquitecturas clásicas como Alexnet, LeNet, etc. Pensé en comenzar con Theano para ser forzado a codificar en un nivel bajo.

Esa es una muy buena idea y tu amigo también tiene razón, Caffe2 es genial. La decisión final es suya, ya que recién está comenzando con el lado práctico de las redes neuronales (NN), es importante no insistir mucho sobre qué biblioteca usar. Mi consejo es que intente rápidamente tantas bibliotecas como pueda y vea cuál, naturalmente, lo hace sentir cómodo, luego quédese con ella.

Personalmente, normalmente no me preocupa mucho mi biblioteca de elección. Aunque a veces me gusta jugar con TensorFlow.

Mi comienzo fue un poco extraño, así es como empecé:

En 2009, cuando me presentaron a C ++ y cuando el único programa que escribí fue solo:

cout << "¡Hola mundo!";

Decidí perseguir un sueño mío de la infancia, que era sobre robots, así que el primer paso fue dar vista a las máquinas, así comencé mi propio proyecto con el objetivo de construir un sistema de visión por computadora (CV) muy eficiente y robusto para dispositivos móviles. , sistemas embebidos y robóticos. No tenía idea de cómo construir un sistema de CV. Así que pasé mucho tiempo leyendo revistas de visión por computadora y neurociencia, era un estudiante universitario de ingeniería electrónica en ese momento, así que usé las habilidades de ingeniería matemática para comenzar rápidamente, así que las matemáticas no fueron / no son un problema para mí. También he ampliado aún más mis habilidades matemáticas más allá de las matemáticas de ingeniería :).

Me tomó 4 años enseñarme todo sobre la visión por computadora y la programación en C ++ y Java, y construir mis propios algoritmos CV nuevos. Condensé todos esos 4 años de trabajo duro continuo en una biblioteca de CV muy compacta y eficiente. Después de terminar esa biblioteca, construí una aplicación panorámica automatizada, Bimostitch, para Android que compitió directamente con la aplicación AutoStitch, antes de que AutoStitch fuera desactivado cuando Google adquirió CloudBurst (Desarrollador de AutoStitch), todavía estoy esperando a Google para adquirirme :).

Seguí haciendo mejoras en el sistema CV a través de los comentarios de los usuarios a través de la aplicación panorámica para mejorarlo cada vez más. En ese momento, me preocupaba mucho la artesanía de todo, hasta que comencé a leer mucho sobre los enfoques de aprendizaje automático aquí en Quora y en revistas de investigación de Google, Facebook, Microsoft y otros. Comencé a notar que la artesanía estaba pasada de moda, con redes neuronales convolucionales (convNets) se puede hacer un reconocimiento de imagen notable, por lo que me impulsó a profundizar en ML. Sentí mucha curiosidad sobre cómo puedo hacer un buen uso de los algoritmos de ML en mi biblioteca de CV.

Así que comencé un nuevo proyecto llamado IRIS, abreviatura de sistema integrado de reconocimiento e inferencia, en lugar de usar otras bibliotecas para implementar modelos de ML, decidí expandir mi biblioteca de CV para incluir esos módulos de ML, como las redes neuronales profundas (DNN) y muchos otros. como máquinas de vectores de soporte. Eso significa que actualmente mi biblioteca es una biblioteca de CV / ML ahora, puedo construir módulos de ML locos a voluntad con ella, así que estoy a punto de terminar el nuevo sistema de visión basado en ML y bloguearé al respecto y haré videos de demostración en aproximadamente 2 meses desde ahora.

Ese fue el desafío para mí, así es como me enamoré de CV y ​​ML.

Entonces, para aprender, normalmente comienzo un proyecto real tratando de resolver un problema real. Aprendí la visión por computadora al construir un sistema de visión por computadora real desde cero y aprendí sobre ML al construir un sistema de ML real desde cero.

Mi aplicación panorámica se ha descargado unas 200K veces en todo el mundo con una calificación de 4.2 / 5. Es una aplicación de puntadas panorámicas de última generación, aunque el nombre y la apariencia pueden decir lo contrario. Es realmente más de lo que parece. Espero que el sistema IRIS también haga maravillas, su diseño es un poco diferente de los sistemas de visión convencionales basados ​​en ML.

No le recomiendo que cree sus propias bibliotecas como lo hice, y todavía lo estoy haciendo, porque es mucho trabajo, pero seguramente le da a uno una comprensión realmente más profunda de los campos de CV / ML. Entonces, si realmente desea conocer los NN más profundamente, al menos cree un modelo NN desde cero, usar una biblioteca de álgebra lineal para ayudar no es una trampa aquí. De hecho, te animo a que uses solo una biblioteca de álgebra lineal para implementar tu NN desde cero. Comience con el NN multicapa totalmente conectado, implemente backprop y luego extienda a redes neuronales convolucionales.

Pero no veo nada malo en su enfoque, quédese con lo que está funcionando para usted.

Espero que esto ayude.

Después de su teoría, sugeriría algo de codificación directa en Python y numpy primero, antes de pasar a un marco. Esto le hará pensar en cuestiones prácticas como la vectorización eficiente, cómo diseñar un optimizador, ordenar todos sus índices de matriz / tensor, etc. Luego pasaría a implementar mejoras prácticas como la regularización, una mejor inicialización del peso, jugar con diferentes funciones de activación, etc.

Solo después de jugar en Python construyendo MLP estándar, que no es demasiado oneroso dada la facilidad de uso de Python y numpy, pasaría a un marco de algún tipo. Es difícil pasar TensorFlow si está buscando comenzar en un marco de nivel inferior. Es casi tan bajo como Theano, pero la API es más agradable y tiene algunas características agradables de visualización en TensorBoard. Sin embargo, probablemente tampoco te equivoques demasiado.

Comencé exactamente de la manera que describí: Python y numpy primero, luego en TensorFlow con una mirada superficial a Theano. Esto ha funcionado para mí.

Hay muchos buenos recursos para ayudar, pero aquí hay algunos tutoriales completos que he escrito si son de alguna utilidad para usted:

Tutorial de redes neuronales: un camino hacia el aprendizaje profundo

Tutorial de Python TensorFlow – Construya una red neuronal

Tutorial de redes neuronales convolucionales en TensorFlow

¡Todo lo mejor y diviértete!

Te sugiero que sigas esta hoja de ruta de lectura de aprendizaje profundo para mantenerte actualizado (songrotek / Deep-Learning-Papers-Reading-Roadmap) e implementarlos simultáneamente con una biblioteca de aprendizaje profundo de tu elección. Puede construir sobre implementaciones disponibles desde github; solo búscalos aquí: Cargando….

¡Espero que esto ayude!

Recientemente he encontrado interés en el aprendizaje profundo y la red neuronal, y después de leer mucha teoría estaba listo para hacer un trabajo real. Igual que tú

Decidí que la mejor manera de construir un NN utilizable y obtener una comprensión más profunda sería implementar todo el paquete yo mismo.

Entonces encontré Python y Numpy y comencé a implementar un NN simple con una sola capa oculta para clasificar un problema fácil, el XOR. Después de hacer esto de manera efectiva, tendría en mis manos los datos de MNIST y probaría mi implementación.

Mi objetivo era tener un error <4%, que necesitaba algunos ajustes e implementación de más teoría. Pero al final tenía una red que podía clasificarse con un error de ~ 2% y siento que tengo una comprensión mucho mayor de cómo funciona Neural Networks que antes.