载风月|深度学习中的内存管理问题研究综述( 二 )
笔者将通过一个典型的卷积神经网络对DNN的模型结构进行具体说明 ,如图1所示 。 神经网络需要经过训练才能用于推理或分类任务 。 训练通过执行正向传播(forward propagation)算法和反向传播(backward propagation)算法 , 学习和更新神经网络各层的权值 。
对于正向传播和反向传播来说 , 遍历的方向以及必须执行的操作是不同的 。 正向传播从第一层执行到最后一层 , 而反向传播从相反的方向执行(从最后一层到第一层) 。 正向传播遍历了整个神经网络层 , 并针对给定的输入执行特征提取和分类任务 , 从而完成图像分类 。 在正向传播过程中 , 每一层的数学操作应用于其输入特征图X , 将计算结果进行保存 , 并作为输出特征图Y 。 对于线性神经网络来说 , 第N?1层的输出结果Y直接用作第N层的输入X , 如图1所示 。 因此正向传播的计算是一个序列化的过程 , 第N层只有在第N?1层完成计算并将其输出结果Y传递到第N层的输入X时 , 才能开始相应的操作 。
对于未经充分训练的DNN来说 , 推断的图像类别可能是不准确的 。 因此 , 笔者使用一个损失函数来推导正向传播结束时推理误差的大小 。 具体来说 , 损失函数的梯度是根据最后一层的输出值推导出来的:
由式(1)可以得到最后一层的输出结果的梯度dY , 进而根据链式法则 , 能够得到最后一层输入的梯度dX:
由式(2)可以看出 , 计算第N层的输入X的梯度值dX需要的内存空间包括输入/输出梯度映射(dY和d X)的内存空间和该层的输入/输出特征映射(X和Y)的内存空间 。 对于线性网络 , 将计算得到的第N层的dX直接传递到第N?1层 , 作为第N?1层dX推导的dY 。 类似地 , 这个链式法则被用来推导权值的梯度 , 从而更新网络模型 。 与正向传播类似 , 反向传播也对各个梯度映射按层执行 。 当反向传播到达第一层时 , 利用权值梯度调整权值 , 以减少下一个分类任务的预测误差 。
2.2 深度学习中的内存管理问题近年来 , 机器学习框架如雨后春笋般蓬勃发展 , 如TensorFlow、Theano、PyTorch和MxNet等 。 这些框架提供了丰富的特性来帮助开发者快速设计各种各样的神经网络 , 并且使用各种加速设备来加速DNN的训练和推理 , 极大地简化了神经网络的实现过程 , 成为帮助研究者开展研究的利器 。 但是这些机器学习框架在内存管理方面受到严重的限制 。
图1 CNN模型的训练过程
现有的机器学习框架在训练DNN时 ,DNN所有层所需的内存空间必须能够被放在加速设备的内存中 , 以此来获得性能上的优势 。 由于层与层之间存在数据依赖关系 , 加速设备在任何给定时间都只能处理单层的计算 。 因此 , 不管神经网络的结构如何 , 神经网络在训练过程中的计算都是分层进行的 。 整个神经网络的内存分配策略没有考虑到DNN分层训练的特点 , 这对内存资源造成了极大的浪费 。 训练一个神经网络需要经过数百万甚至数亿次的迭代才能达到理想的训练效果 。 由于基于随机梯度下降(stochastic gradient-descent ,SGD)的反向传播算法具有随机性 , 神经网络的输入通常成批地训练数据 , 这也将显著增加内存占用 , 但是有助于网络模型更好地收敛到最优解 。 随着DNN的网络结构向着更深、更广的方向发展 , 训练DNN时所需的内存空间越来越大 , 单个加速设备的内存已经不能满足训练的需求 。
推荐阅读
- 上海市交通委员会|市交通委党组参加《民法典》学习会
- Java|计算机专业的本科生,该选择学习Java技术体系还是.NET技术体系
- 深度|创意信息:与成都市大数据股份有限公司签署深度合作协议
- |西装、奶奶针织衫显老气?深度解析“衣橱单品”,多看一眼就赚了
- 时尚穿搭生活馆|40、50岁女人就别穿“大妈装”了!学习博主减龄穿搭,洋气又减龄
- |西装、奶奶针织衫显老气?深度解析“衣橱单品”,建议你一定要看
- 中国新闻网|瓦努阿图群岛附近海域发生6.6级地震 震源深度10千米
- 环球网|【深度】突然驱逐15名中国公派留学生,美对华留学限制还将走多远……
- 消除"学历歧视",鹰视教育助力全民终身学习教育体系建设
- 光明网|回馈“山川异域,风月同天”中国援助抵达世界各地
