¿Cuál es la razón (además del rendimiento) para usar C ++ sobre Python para implementar algoritmos de aprendizaje automático?

Python es hasta aproximadamente 400 veces más lento que C ++ y, con la excepción de un solo caso, Python es más un fanático de la memoria. Sin embargo, cuando se trata del tamaño de la fuente, Python gana de plano.

Mis experiencias con Python muestran la misma tendencia definida que Python es del orden de entre 10 y 100 veces más lento que C ++ cuando se hace cualquier cálculo serio de números. Hay muchas razones para esto, las principales son: a) Python se interpreta, mientras que C ++ se compila; b) Python no tiene primitivas, todo incluido los tipos incorporados (int, float, etc.) son objetos; c) una lista de Python puede contener objetos de diferente tipo, por lo que cada entrada debe almacenar datos adicionales sobre su tipo. Todos estos obstaculizan severamente tanto el tiempo de ejecución como el consumo de memoria.

Sin embargo, esta no es razón para ignorar Python. Una gran cantidad de software no requiere mucho tiempo o memoria, incluso con el factor de lentitud de 100 veces. El costo de desarrollo es donde Python gana con el estilo simple y conciso. Esta mejora en el costo de desarrollo a menudo supera el costo de recursos adicionales de CPU y memoria. Sin embargo, cuando no lo hace, entonces C ++ gana.

Encontré estas respuestas del desbordamiento de pila

Además de las otras excelentes respuestas, me gustaría preguntar, ¿por qué C ++? ¿Por qué no algo como Rust o Haskell ? Ambos están compilados y son comparables en velocidad a C ++, pero son mucho más seguros. Haskell se esfuerza por ser un lenguaje “puramente funcional”. Rust también es funcional, pero no tan estricto como Haskell. Rust tiene el concepto de propiedad de los objetos, lo que le permitirá escalar su código para aprovechar los multinúcleos que tienen la mayoría de las máquinas de hoy en día, sin tener que lidiar con el bloqueo habitual y el semáforo que rodea el enhebrado como debe hacer con C ++.

Rust le permite escribir rápidamente código seguro pero potente, mientras que C ++ requiere un esfuerzo adicional para hacerlo bien. Y sí, puede llamar a las bibliotecas C / C ++ desde Rust como puede hacerlo desde Python.

Además, Rust se basa en el LLVM, que puede orientarse al código de salida para, por ejemplo, GPU. Rust tiene soporte incorporado para la concurrencia, por lo que realizar operaciones paralelas será muy fácil. Realmente tienes que pensarlo detenidamente cuando trabajes con C ++, y aprender a hacerlo solo llevará tiempo.

Así que mira seriamente a Rust.

No discutiré el rendimiento desde que lo sacaste de la mesa. Aun así, puede haber más de una razón para preferir una sobre la otra.

Mi experiencia es que la falta de tipeo estático tiende a ser un impedimento para grandes proyectos de software. Entonces, si sus algoritmos de aprendizaje automático son parte de algo bastante pequeño, Python podría ser una buena opción. Sin embargo, si forman parte de un programa que espera que crezca considerablemente con el tiempo (incluido el hecho de que un equipo de colaboradores debe mantenerlo), un lenguaje de tipo estático puede ser una mejor opción (y C ++ ha demostrado su valía en muchos aspectos proyectos).

Otra posible razón puede ser que un intérprete de Python podría no ser una buena combinación para la plataforma de destino. Puede ser preferible que la aplicación se ejecute directamente en el hardware.

La razón no es el rendimiento bruto. Conozco bien C ++ e implementé un RNN en C ++, pensando que sería capaz de hacerlo mucho más rápido que el Python equivalente. No pude Prácticamente todo el tiempo se toma en la multiplicación de matrices, por lo que una vez que está utilizando una biblioteca BLAS optimizada, lo que hace numpy, la sobrecarga adicional de sondear las operaciones de álgebra lineal juntas usando Python es insignificante.

Sin embargo, C ++ hace posible explotar el paralelismo si su algoritmo es compatible con eso, permite un mejor control de la administración de la memoria si está presionando los límites de la memoria y si su sistema host no tiene una manera eficiente de incorporar sus datos y fuera de Python, Python puede no ser un iniciador.

Será más fácil trabajar con una biblioteca c ++ en otros lenguajes de programación que una biblioteca python equivalente. En algunos casos, como una aplicación rápida de iOS, la interoperabilidad de c ++ es posible y la interoperabilidad de Python es imposible. Lo mismo ocurre con lenguajes como Haskell y racket que solo tienen interfaces de funciones externas c, porque es posible ajustar las bibliotecas c ++ de manera adecuada para estos fines. En otros casos, como R y lua, el uso de bibliotecas de c ++ es más conveniente, aunque Python es posible. Que yo sepa, Julia es el único lenguaje, aparte de Python, por supuesto, donde la interoperabilidad de Python es igual de fácil (posiblemente más fácil).

El rendimiento en este tipo de trabajo es enormemente significativo, especialmente con un lenguaje como Python, seguro que con PyPy podría obtener un rendimiento loco.

La única razón real que se me ocurre es que conoces C ++ y no Python, esa sería una (otra) buena razón para usar C ++ en su lugar.

Python también tiene el GIL, bloqueo global, y también se recolecta basura, por lo que cuando crea miles, si no millones, de variables, python simplemente dejará de funcionar por falta de otras palabras más descriptivas.

Y tengo muchas otras razones. Pero cuando estás aprendiendo esto, Python podría ser mejor, pero rápidamente quieres algo más rápido.

Pero C ++ podría no ser la mejor solución, solo diciendo …… (No sé mucho sobre el aprendizaje automático), pero creo que Go, Rust y muchos otros “nuevos” lenguajes podrían ser mejores porque, como puede obtener más usos en los núcleos en lugar de usar hilos. No lo sé, pero conozco 1000 razones por las cuales no usar Python para el cálculo de números y la lógica y …

Cuando implemente algoritmos de aprendizaje automático, no necesitará ninguna otra razón para deshacerse de Python. C ++ es como cientos de veces más rápido que Python, pypy resolvió este problema en buena medida.

Pero, una vez más, la facilidad con la que puede trabajar en Python lo vale.

Me gustaría ir en la dirección opuesta a lo que ha pedido el OP. Python, aunque es mucho más lento, puede optimizarse mediante el uso de una variedad de módulos ( numpy y scikit ) y cosas como comprensión de listas, iteración zip, etc. Intel incluso hace versiones altamente optimizadas de dichos paquetes que aprovechan el libsvm (entre otros ) bibliotecas, y la diferencia (que he visto) es realmente sustancial cuando se trabaja con grandes conjuntos de datos.

La razón por la que le estoy lanzando Python es porque es mucho más intuitivo trabajar y desarrollar un algoritmo ML en Python que en C ++. No tendrá que perder mucho tiempo depurando el código no relacionado directamente con el algoritmo, y en su lugar puede centrarse en ajustarlo.

(Como nota al matplotlib , el módulo matplotlib de python también es realmente maravilloso para visualizar sus datos)

More Interesting

¿Cuál es el chatbot de IA más atractivo en línea para tener la conversación más sensual con casi cualquier cosa?

¿Qué sonidos vocales se deben grabar para crear una funcionalidad similar a SIRI de habla inglesa?

¿Crees que las matemáticas se trata de complicar la lógica simple?

¿El robot AI Luna de Luis Arana es real o es una estafa para recaudar fondos?

¿Cuáles son los trabajos que harán los robots en el futuro?

¿Puedo obtener un resultado de una red neuronal en particular?

Si la IA dominara el campo de la inversión de valor analizando y analizando, como los humanos, ¿tendría algún sentido producir contenidos para inversores de valor?

¿La IA desarrollará la autoconciencia o será la conciencia humana la que se unirá a la IA?

¿Cuál es el programa inteligente artificial más simple?

¿Cuál es la tecnología de punta que despegará en 2017?

¿En qué orden debo aprender el aprendizaje automático, el aprendizaje profundo, el procesamiento del lenguaje natural y la inteligencia artificial?

¿Cuáles son algunos ejemplos de juegos de computadora que usan aprendizaje automático? ¿Los juegos como FIFA 2013 de EA Sports aprenden de un usuario? ¿La computadora cambia sus tácticas de acuerdo con el estilo de juego del oponente? Si no, ¿es esto posible de implementar?

¿Hay alguna diferencia entre redes neuronales y redes neuronales convolucionales?

¿Cuáles son los conceptos erróneos más comunes sobre la IA?

¿Cuál es la diferencia entre estadísticos bayesianos y frecuentistas?