“Con un gran poder viene una gran responsabilidad.”
Este es un dicho popular en el mundo real. En informática, toda la abstracción utiliza esencialmente esta idea: cuando construye herramientas de alto nivel (abstractas) para realizar alguna acción, reduce la potencia otorgada al usuario y, en consecuencia, la responsabilidad sobre el usuario es menor, lo que hace que el código menos propenso a errores A medida que intenta trabajar con herramientas de nivel inferior, obtiene más control (más “potencia”), pero debe tener mucho cuidado con los pequeños detalles para que las cosas funcionen correctamente.
Por ejemplo, con un lenguaje de alto nivel como Python, debe prácticamente no administrar la memoria, mientras que con un lenguaje de nivel inferior como C, trabaja con punteros y tiene que administrar la memoria usted mismo. C le brinda más potencia (mejor utilización del hardware), pero también debe esforzarse más para lograr la misma funcionalidad.
- ¿Cuáles son las principales razones por las que todavía no existe una superinteligencia artificial?
- ¿Qué lenguaje usaría una IA para programarse a sí misma o su engendro?
- ¿Qué problemas resuelve el aprendizaje automático?
- ¿Cómo sabremos cuando hayamos creado la conciencia en una computadora?
- Quiero entrenar una red neuronal para reconocer la planta de su hoja. ¿Cómo puedo encontrar el área, el perímetro, el largo y el ancho de la hoja a partir de su imagen?
Del mismo modo, si va más abajo, los programas en código de máquina pueden optimizarse mucho más de lo que los compiladores pueden lograr al convertir programas de alto nivel en código de máquina.
Del lado del hardware, un FPGA se puede usar para crear circuitos electrónicos para tareas específicas y, por lo tanto, son más eficientes que el hardware de uso general.
Cuál es mejor depende de su aplicación y requisitos. Si desea escribir código para la industria donde el rendimiento (en términos de velocidad, uso de hardware, etc.) es muy crucial, es probable que necesite trabajar con herramientas de bajo nivel para tener el mayor control. Sin embargo, la mayoría de las veces, los requisitos no son tan estrictos y trabajar con herramientas de alto nivel es mucho más fácil y eficiente y, lo que es más importante, más fácil de mantener. Esa es la razón por la que escribe la mayoría del código en C ++ / Java / Python y no en lenguaje ensamblador. La mayoría de la creación de prototipos se realiza con herramientas de alto nivel, y la mayoría del código en producción finalmente también utiliza herramientas de alto nivel. Solo algunas partes muy específicas que pueden acelerarse significativamente se implementan típicamente con herramientas de nivel inferior. Por lo tanto, aprender TensorFlow y scikit-learn es importante si quieres trabajar en ML.
Otro argumento para usar estas herramientas es que no tiene sentido reinventar la rueda. Cuando alguien ha escrito un código GPU para realizar operaciones complejas para el aprendizaje profundo, y le ha proporcionado API de alto nivel, volver a implementar el código con la misma funcionalidad es una pérdida de tiempo y esfuerzo. Además, herramientas como estas han sido utilizadas por miles de programadores, por lo que en su mayoría están libres de errores. Si escribe su propio código, deberá pasar una cantidad considerable de tiempo para asegurarse de que esté libre de errores.
Sin embargo, permítanme señalar que, aunque normalmente usaría estas herramientas, mientras aprende ML, es una buena idea implementar algunos algoritmos de ML desde cero para obtener una buena comprensión del funcionamiento interno de estas técnicas. Ver
- La respuesta de Prasoon Goyal a ¿Cómo aprendo Machine Learning en 10 días?
- La respuesta de Prasoon Goyal a ¿Cómo aprendo el aprendizaje automático?
para más detalles.