¿Por qué no hay implementaciones de aprendizaje profundo (populares) escritas en Golang?

Hay unas pocas razones. En primer lugar, no hay muchas bibliotecas que admitan el tipo de computación científica que requieren las Redes neuronales profundas (DNN). Go ha sido ignorado por esta comunidad. Simplemente no hay suficientes características convincentes para acceder y hay algunas desventajas. Sure Go puede llamar a las bibliotecas C (y ordenar las de C ++), pero hay un golpe por llamada que es difícil de ignorar. Es más fácil permanecer en Python, LuaJIT y Julia y disfrutar de REPL, escritura más libre y una gran cantidad de otras opciones.

La segunda razón es un poco menos clara, pero en general Go no funcionará tan bien en este campo como lo hace en general. Hay muy poca optimización para las instrucciones y subsistemas SIMD en CPU genéricas, y mucho menos GPU o hardware especializado. Implementar algo como una FFT va a sufrir. Extiéndalo a través de los núcleos y la sobrecarga de gochannel podría ser más grande que el grano de la computación (esto requiere una consideración cuidadosa para evitar desaceleraciones y mucho menos aumentar la velocidad del paralelismo).

Cuando aparece la opción para diferentes tipos de optimización en la comunidad Go, hay una voz mucho más fuerte para acelerar los tiempos de compilación que para un código más rápido. Para DevOps, eso tiene sentido (aunque Go construye lo suficientemente rápido en mi opinión), pero alguien que tiene que alquilar o comprar grandes cantidades de hardware para completar grandes trabajos científicos no lo hace.

Claro, Go puede convertirse en un buen entorno para la informática científica, para incluir DNN, pero no es el foco. Está diseñado para construir el back-end que se ejecuta en servidores. Es realmente bueno en esto y creo que continuará enfocándose en esa vertical. Hay un gran impulso en otros idiomas que Go tendría que ponerse al día. Python ha estado acumulando este vapor durante años. Julia eligió esta área para enfocarse y está diseñada para apoyarse en gran medida en Python, R y la infraestructura C / C ++ existente para obtener una ventaja. LuaJIT puede apoyarse en C y es tan rápido y eficiente en el uso de las capacidades SIMD de los procesadores que fue una elección rápida y lógica. Go no tiene ninguna de estas cosas en marcha hoy.