MXNet(或“mix-net”)由多学术机构联合创建,并在 Apache Software Foundation 培养而成,旨在混合不同编程方法的优势,以进行深度学习模型开发 – 命令式,明确指定了“如何”执行计算,以及声明式或符号式,主要关注应该执行“什么”。
图像参考:https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf
命令式编程模式
MXNet 的 NDArray 包含命令式编程,是 MXNet 存储和转换数据的主要工具。NDArray 用于将模型的输入和输出表示为多维阵列并对其进行操作。NDArray 类似于 NumPy 的 ndarray,但它们可以在 GPU 上运行,以加速计算。
命令式编程的优势在于,有程序编程背景的开发者对其很熟悉,所以参数更新和交互式调试更自然。
符号式编程模式
神经网络通过对输入参数应用多层嵌套函数来转换输入数据。每一层由一个线性函数和一个非线性变换组成。深度学习的目标是通过计算相对于损失指标的偏导数(梯度),优化这些参数(包括权重和偏差)。在前向传播中,神经网络接受输入参数,并向下一层的节点输出置信度分数,直至到达输出层,在该层计算分数误差。在一个称为梯度下降的过程中,通过反向传播,错误会再次通过网络发送回来,并调整权重,从而改进模型。
图形是由已连接节点(称为顶点)和边缘组成的数据结构。每个现代深度学习框架都基于图形的概念,其中神经网络表示为计算的图形结构。
MXNet 符号式编程允许通过计算图形抽象地定义函数。借助符号式编程,复杂函数首先采用占位符值表示。然后,可以通过将这些函数绑定到实际值来执行这些函数。符号式编程还提供预定义的神经网络层,允许以更少的重复性工作和更好的性能简单表示大型模型。
图像参考:https://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf
符号式编程具有以下优势:
- 计算图形的清晰边界通过后端 MXNet 执行程序提供更多优化机会
- 更轻松地为神经网络配置指定计算图形
采用 Gluon API 的混合编程模式
MXNet 的主要优势之一是其包含混合编程接口 Gluon,其在保持命令接口和符号接口的功能和优势的同时,弥合了两者之间的差距。Gluon 是一种易于学习的语言,可以生成快速移动模型。借助 Gluon API,您可以使用 NDArray 命令式创建模型。然后,您可以通过混合命令切换到符号模式,加快模型训练和推理速度。在符号模式下,该模型以经优化的图形形式通过后端 MXNet 执行程序以更快速度运行,并且可以轻松导出,用于在不同语言绑定(如 Java 或 C++)中进行推理。