Implementar capas desde cero es un enfoque excelente para desmitificar deep learning. Coincido en que usar NumPy o similares fuerza a entender los detalles matemáticos, no solo la API. En mi experiencia, ir más allá del snippet básico y añadir backpropagation manual, aunque sea para una sola neurona, revela cómo se propagan los gradientes y reduce esa sensación de fraude al ver que todo se reduce a operaciones matriciales.
Para integrarlo con el diario de aprendizaje, sugiero documentar no solo el código, sino los errores comunes y por qué ocurren, como problemas de inicialización de pesos o vanishing gradients. Herramientas como Obsidian pueden enlazar estas entradas con conceptos teóricos, creando un recurso reutilizable. Por ejemplo, tras implementar una capa, anotar cómo afecta el learning rate al entrenamiento ayuda a conectar práctica con teoría.
En deep learning, también recomiendo probar con datasets más simples que MNIST, como jugar con datos sintéticos en 2D para visualizar decision boundaries. Esto hace tangible lo que ocurre dentro de la red. ¿Has explorado técnicas similares para optimizadores como Adam, implementándolos desde cero para ver cómo ajustan los pesos?