¿Qué es PyTorch? Todo lo que debes saber

El aprendizaje profundo se está volviendo cada vez más popular, y muchos entusiastas de la tecnología intentan aprenderlo. Hay solo unos pocos marcos de aprendizaje profundo significativos en el mercado, y PyTorch es el mejor de ellos. Contribuye a la aceleración de la investigación de aprendizaje profundo al hacerla computacionalmente más rápida y menos costosa.

¿Por qué alguien debería seleccionar PyTorch sobre TensorFlow ? Cualquiera que haya trabajado con marcos de aprendizaje profundo está familiarizado con TensorFlow, que ya es muy popular en el mercado.

En este artículo, aprenderemos sobre 5 razones por las que el marco de aprendizaje de PyTorch está disponible en el mercado. Pero primero, comprendamos mejor PyTorch.

¿Qué es PyTorch?

PyTorch es una biblioteca de aprendizaje automático de código abierto que se especializa en cálculos de tensor, diferenciación automática y aceleración de GPU. Por esos motivos, PyTorch es una de las bibliotecas de aprendizaje profundo más populares, y compite tanto con Keras como con TensorFlow por el premio al paquete de aprendizaje profundo «más utilizado».

PyTorch tiende a ser especialmente popular entre la comunidad de investigación debido a su naturaleza pitónica y su facilidad de ampliación (es decir, la implementación de tipos de capas personalizadas, arquitecturas de red, etc.).

En este tutorial, analizaremos los conceptos básicos de la biblioteca de aprendizaje profundo de PyTorch.

Como todos sabemos, Python es uno de los lenguajes de codificación más populares utilizados por los ingenieros de aprendizaje profundo y los científicos de datos.

Los autores de PyTorch tenían la intención de mejorar la experiencia de aprendizaje profundo para Python, por lo que crearon Torch, una biblioteca complementaria basada en Lua. PyTorch aspira a ser una biblioteca de aprendizaje automático y aprendizaje profundo basada en Python de código abierto.

A diferencia de la mayoría de los otros marcos de aprendizaje profundo destacados, como TensorFlow, PyTorch emplea computación dinámica, lo que brinda una mayor flexibilidad en la creación de redes complicadas.

Pytorch emplea ideas básicas de Python, como clases, estructuras y bucles condicionales, que son más reconocibles a nuestros ojos y, por lo tanto, más fáciles de entender. Esto hace que sea más fácil de usar que otros marcos como TensorFlow, que tienen su estilo de programación.

TorchScript

TorchScript en PyTorch ayuda en la creación de modelos serializables y optimizables. Estos modelos pueden operarse independientemente de Python una vez que hayan sido entrenados en Python. Esto es útil cuando se trabaja en una etapa de implementación de modelos de proyectos de ciencia de datos.

Python se puede usar para entrenar un modelo en PyTorch, y luego TorchScript se puede usar para exportar el modelo a un entorno de producción cuando no se puede acceder a Python.

Conceptos básicos

Ahora que sabemos qué son PyTorch y TorchScript, veamos los conceptos básicos de PyTorch:

Tensores

PyTorch representa los datos como matrices multidimensionales similares a NumPy llamadas tensores. Los tensores almacenan entradas a su red neuronal, representaciones de capas ocultas y las salidas.

Los tensores en PyTorch son análogos a las matrices n-dimensionales en NumPy. Estos tensores también se pueden usar en una GPU. FloatTensor, DoubleTensor, HalfTensor, IntTensor y LongTensor son solo algunos de los tipos de tensores compatibles con PyTorch.

Operaciones matemáticas

En PyTorch, podemos implementar operaciones matemáticas como suma, resta, multiplicación y división al inicializar matrices. Las operaciones de Pytorch son similares a las de NumPy.

Inicialización de matriz

PyTorch ofrece un método zeros() que acepta un formulario como entrada y produce una matriz de ceros de una forma definida, similar a NumPy. Ahora inicializamos aleatoriamente los pesos para el modelo mientras desarrollamos una red neuronal.

Módulos de PyTorch

Estos son los módulos de PyTorch:

Módulo de Autograduación

La diferenciación automática es un método utilizado por PyTorch. Registra todas nuestras operaciones y luego calcula los gradientes reproduciéndolos hacia atrás.

Debido a que calculamos los gradientes en el paso hacia adelante, este enfoque nos permite ahorrar tiempo en cada época.

Módulo Optim

La mayoría de los optimizadores que se utilizan al desarrollar una red neuronal tienen scripts escritos previamente en el módulo Optim de PyTorch. Solo necesitamos importarlos antes de poder utilizarlos para crear modelos.

Nn modelo

A medida que avanzamos en el modelo, el módulo de graduación automática de PyTorch nos ayuda a definir gráficos de cálculo. Sin embargo, cuando se trabaja con una red neuronal sofisticada, el solo uso del módulo de autograduación puede ser de bajo nivel.

Podemos utilizar el módulo nn en esas situaciones. Esto describe una serie de funciones que toman la entrada del estado anterior y crean una salida, análoga a las capas de una red neuronal.

PyTorch, aprendizaje profundo y redes neuronales

PyTorch se basa en Torch, un marco de computación científica para Lua. Antes de PyTorch y Keras/TensorFlow, los paquetes de aprendizaje profundo como Caffe y Torch solían ser los más populares.

Sin embargo, a medida que el aprendizaje profundo comenzó a revolucionar casi todas las áreas de la informática, los desarrolladores e investigadores querían una biblioteca eficiente y fácil de usar para construir, entrenar y evaluar redes neuronales en el lenguaje de programación Python.

Python, junto con R, son los dos lenguajes de programación más populares para los científicos de datos y el aprendizaje automático, por lo que es natural que los investigadores deseen algoritmos de aprendizaje profundo dentro de sus ecosistemas de Python.

François Chollet, investigador de IA de Google, desarrolló y lanzó Keras en marzo de 2015, una biblioteca de código abierto que proporciona una API de Python para entrenar redes neuronales. Keras ganó rápidamente popularidad debido a su API fácil de usar que modeló gran parte de cómo funciona scikit-learn, la biblioteca de aprendizaje automático estándar de facto para Python.

Poco después, Google lanzó su primera versión de TensorFlow en noviembre de 2015. TensorFlow no solo se convirtió en el backend/motor predeterminado para la biblioteca de Keras, sino que también implementó una serie de características de nivel inferior que los profesionales e investigadores avanzados de aprendizaje profundo necesario para crear estado- redes de última generación y realizar investigaciones novedosas.

Sin embargo, había un problema: la API de TensorFlow v1.x no era muy Pythonic, ni intuitiva ni fácil de usar. Para resolver este problema, PyTorch, patrocinado por Facebook y respaldado por Yann LeCun (uno de los abuelos del resurgimiento de las redes neuronales modernas e investigador de IA en Facebook), fue lanzado en septiembre de 2016.

PyTorch resolvió gran parte de los problemas que tenían los investigadores con Keras y TensorFlow. Si bien Keras es increíblemente fácil de usar, por su propia naturaleza y diseño, Keras no expone algunas de las funciones de bajo nivel y la personalización que necesitan los investigadores.

Por otro lado, TensorFlow ciertamente dio acceso a este tipo de funciones, pero no eran Pythonic y, a menudo, era difícil revisar la documentación de TensorFlow para averiguar exactamente qué función se necesitaba. En resumen, Keras no ofreció la API de bajo nivel que necesitaban los investigadores y la API de TensorFlow no era tan amigable.

PyTorch resolvió esos problemas al crear una API que era Pythonic y fácil de personalizar, lo que permitió implementar nuevos tipos de capas, optimizadores y arquitecturas novedosas. Los grupos de investigación comenzaron lentamente a adoptar PyTorch, cambiándose de TensorFlow. En esencia, es por eso que hoy en día se ven tantos investigadores que usan PyTorch en sus laboratorios.

Tanto PyTorch como TensorFlow ahora implementan la misma funcionalidad y la API confiable y llaman a funciones para lograr lo mismo. Ambas bibliotecas implementan características muy similares, solo que usan diferentes llamadas a funciones y diferentes paradigmas de entrenamiento.

Los fundamentos del aprendizaje profundo son los mismos, independientemente de si usas PyTorch o Keras/TensorFlow.

Ventajas

Como ventajas de PyTorch, podemos destacar las siguientes:

Más rápido que TensorFlow

Cuando se trata de velocidad de entrenamiento de aprendizaje profundo, TensorFlow y PyTorch están muy cerca. Los modelos con una gran cantidad de parámetros necesitan procesos adicionales.

Debido a que cada actualización de gradiente requiere una cantidad significativa de cómputo, el tiempo de entrenamiento aumentará rápidamente a medida que aumente la cantidad de parámetros.

Mayor productividad del desarrollador

PyTorch es un programa fácil de usar que nos permite editar gráficos computacionales sobre la marcha.

Enfoque dinámico para el cálculo gráfico

PyTorch crea aplicaciones de aprendizaje profundo basadas en gráficos dinámicos que se pueden manipular en tiempo real.

Otros marcos destacados de aprendizaje profundo funcionan con gráficos estáticos, que requieren la creación de gráficos computacionales con anticipación.

El usuario no puede observar lo que está haciendo la GPU o la CPU mientras procesa el gráfico. PyTorch, por otro lado, permite a los usuarios acceder y mirar en cualquier nivel de computación.

Fácil de usar

PyTorch es mucho más fácil de aprender que cualquier otra biblioteca de aprendizaje profundo, ya que no se desvía demasiado de los enfoques de programación estándar.

La documentación de PyTorch también es fantástica y bastante beneficiosa para los novatos. Aunque la comunidad de desarrollo de PyTorch es más pequeña que la de otros marcos, está segura en Facebook.

La estructura proporciona a los desarrolladores la independencia y la flexibilidad que tanto necesitan para centrarse en las preocupaciones más importantes de la herramienta en lugar de optimizar aspectos pequeños.

PyTorch ha podido lograr ganancias significativas en el campo con un grupo enfocado de desarrolladores como resultado de esto.

Simple y transparente

Para desarrolladores y científicos de datos, el gráfico dinámico proporciona transparencia. Debido a la pronunciada curva de aprendizaje que requiere TensorFlow, la programación de redes neuronales profundas es significativamente más fácil con PyTorch.

El gráfico computacional de PyTorch se define en tiempo de ejecución, lo que facilita el uso de muchas herramientas comunes de Python con PyTorch.

Este es un gran beneficio ya que nos permite utilizar nuestras herramientas favoritas de depuración de Python como pdb, ipdb y el depurador PyCharm para depurar el código PyTorch.

Lo mejor para la investigación

PyTorch es el sueño de un investigador, como se ve por su aparición en documentos en todas las principales conferencias de aprendizaje profundo.

Cuando la creación de nuevos componentes personalizados es una subclase sencilla y confiable de una clase común de Python, experimentar con nuevas nociones es considerablemente más fácil.

Y debido a la flexibilidad proporcionada, uno puede construir fácilmente una capa que alimenta información de parámetros a TensorBoard, ElasticSearch o un depósito de Amazon S3.

Gran comunidad

Finalmente, la comunidad PyTorch es algo fantástico de lo que ser parte. El sitio web principal, pytorch.org, incluye una excelente documentación que se mantiene actualizada con los lanzamientos de PyTorch, así como un excelente conjunto de tutoriales que cubren todo, desde un curso intensivo de una hora sobre las funciones clave de PyTorch hasta análisis detallados de cómo para expandir la biblioteca con operadores C++ personalizados.

Si bien los tutoriales pueden usar más uniformidad en áreas como entrenamiento/validación/divisiones de prueba y bucles de entrenamiento, son un recurso esencial, particularmente cuando se agrega una nueva característica.

Más allá de la documentación oficial, el foro basado en Discourse en debate.pytorch.org es un excelente recurso para chatear y recibir ayuda de los principales desarrolladores de PyTorch.

Es un grupo agradable y animado, con más de 1500 publicaciones cada semana. Si bien la atención se centra en la biblioteca de fast.ai, los foros paralelos en forums.fast.ai son otra comunidad fantástica que está dispuesta a ayudar a los novatos en una forma sin control, lo cual, desafortunadamente, es un problema. en muchos lugares de debate de aprendizaje profundo.

Aplicaciones

Las principales aplicaciones de PyTorch son:

Visión por computadora

Se utiliza una red neuronal de convolución para desarrollar la clasificación de imágenes, la detección de objetos y la aplicación generativa. Usando PyTorch, un programador puede procesar imágenes y videos para desarrollar un modelo de visión por computadora altamente exacto y preciso.

Procesamiento del lenguaje natural

Se puede usar para desarrollar el traductor de idiomas, el modelado de idiomas y para desarrollar un chatbot. Utiliza RNN, LSTM, etc. Arquitectura para desarrollar lenguaje natural, modelos de procesamiento.

Aprendizaje por refuerzo

Se utiliza para desarrollar robótica para automatización, planificación de estrategias comerciales o control de movimiento de robots, etc. Utiliza la arquitectura de aprendizaje Deep Q para construir un modelo.

¿Por qué PyTorch es popular entre los investigadores?

PyTorch se afianzó en la comunidad de investigación entre 2016 (cuando se lanzó PyTorch) y 2019 (antes del lanzamiento oficial de TensorFlow 2.x).

Las razones por las que PyTorch pudo obtener este punto de apoyo son muchas, pero las razones predominantes son:

  • Keras, si bien es increíblemente fácil de usar, no tuvo acceso a las funciones de bajo nivel que los investigadores necesitaron para realizar investigaciones novedosas de aprendizaje profundo.
  • Del mismo modo, Keras dificultó a los investigadores la implementación de sus propios optimizadores personalizados, tipos de capas y arquitecturas de modelos.
  • TensorFlow 1.x presentó este acceso de bajo nivel e implementación personalizada; sin embargo, la API era difícil de usar y no muy Pythonic
  • PyTorch, y específicamente su compatibilidad con la autograduación, ayudó a resolver gran parte de los problemas con TensorFlow 1.x, lo que facilitó a los investigadores la implementación de sus propios métodos personalizados.
  • Además, PyTorch brinda a los profesionales del aprendizaje profundo un control completo sobre el ciclo de capacitación.

Por supuesto, hay una dicotomía entre los dos. Keras hace que sea trivial entrenar una red neuronal usando una sola llamada a modelo.fit, similar a cómo entrenamos un modelo estándar de aprendizaje automático dentro de scikit-learn.

La desventaja es que los investigadores no pueden (fácilmente) modificar este modelo.fit, por lo que tuvieron que usar las funciones de nivel inferior de TensorFlow. Pero estos métodos no les facilitaron la implementación de sus rutinas de entrenamiento.

PyTorch resolvió ese problema, lo cual es bueno en el sentido de que tenemos control total, pero malo porque podemos dispararnos fácilmente en el pie con PyTorch ( todos los usuarios de PyTorch han olvidado antes poner a cero sus gradientes).

Dicho todo esto, gran parte del debate sobre si PyTorch o TensorFlow es «mejor» para la investigación está empezando a asentarse. Las API de PyTorch 1.xy TensorFlow 2.x implementan características muy similares, simplemente lo hacen de una manera diferente, como aprender un lenguaje de programación versus otro. Cada lenguaje de programación tiene sus ventajas, pero ambos implementan los mismos tipos de declaraciones y controles.

¿Es PyTorch mejor que TensorFlow y Keras?

Esta es la pregunta incorrecta, especialmente si eres un novato en el aprendizaje profundo. Tampoco es mejor que el otro. Keras y TensorFlow tienen usos específicos, al igual que PyTorch.

Por ejemplo, no harías una declaración general diciendo que Java es inequívocamente mejor que Python. Cuando se trabaja con aprendizaje automático y ciencia de datos, existe un fuerte argumento a favor de Python sobre Java. Pero si tienes la intención de desarrollar aplicaciones empresariales que se ejecuten en múltiples arquitecturas con alta confiabilidad, es probable que Java sea una mejor opción.

Desafortunadamente, los humanos tendemos a “atrincherarnos” en nuestro pensamiento una vez que nos volvemos leales a un campo o grupo en particular. El atrincheramiento que rodea a PyTorch frente a Keras/TensorFlow a veces puede ponerse feo.

Mi punto aquí es que no debes atrincherarte tanto como para atacar a otros en función de la biblioteca de aprendizaje profundo que utilizan. En serio, hay problemas más importantes en el mundo que merecen tu atención, y realmente no necesitas usar el botón de respuesta en tu cliente de correo electrónico o plataforma de redes sociales para instigar y catalizar más odio en nuestro ya frágil mundo.

En segundo lugar, si eres nuevo en el aprendizaje profundo, realmente no importa con qué biblioteca comenzar. Las API de PyTorch 1.xy TensorFlow 2.x se han convertido: ambas implementan una funcionalidad similar, solo que de diferentes maneras.

Lo que aprendas en una biblioteca se transferirá a la otra, al igual que aprender un nuevo lenguaje de programación. El primer idioma que aprendes suele ser el más difícil, ya que no solo aprendes la sintaxis del idioma, sino también las estructuras de control y el diseño del programa.

Tu segundo lenguaje de programación es a menudo un orden de magnitud más fácil de aprender, ya que en ese momento ya comprendes los conceptos básicos de control y diseño de programas.

Lo mismo es cierto para las bibliotecas de aprendizaje profundo. Solo elige uno y apréndelo. Si tienes problemas para elegir, arroja una moneda. Realmente no importa, tu experiencia se transferirá de todos modos.

Conclusión

Claramente, hay lugares donde falta PyTorch en este momento, por ejemplo, en dispositivos móviles, con redes escasas y cuantificación simple de modelos, por nombrar algunos.

Sin embargo, debido a su rápido crecimiento, PyTorch tendrá un desempeño significativamente mejor en estas áreas para fin de año. PyTorch será el marco de desarrollo principal de OpenAI.

Esta es una gran ganancia para PyTorch porque muestra que los inventores de GPT-2, un modelo de lenguaje de vanguardia para responder preguntas, traducción automática, comprensión de lectura y resúmenes, piensan que PyTorch es un mejor entorno para iterar sus ideas que TensorFlow.