机器学习为何选择GPU?
在深度学习社区中,启用GPU的机器和集群将大大加快训练神经网络所需的时间,这已不是什么秘密。在本文中,我们将了解Gradient Descent的运行时间以及GPU降低时间复杂度的地方。
伪代码,梯度下降(为简洁起见省略了一些细节)
While (k < max_iterations):
select batch size n
For each instance in n:
Calculate network output
For each weight dimension m:
# arbitrarily chosen update algorithm
delta_wi = delta_wi + eta * (desired - output) * x(n)i
For each weight dimension m:
wi(k+1) = wi(k) + delta_wi
k += 1
该算法以O(knm)运行,(抛去计算网络输出所需的时间,因为这完全取决于网络架构,如果您正在进行典型的矩阵*向量运算,则每个节点可以是O(m²), w ^ ^ T * X)。
O(knm):循环的k次迭代,批次大小的n个实例和权重的m个维度。
然而,神经网络算法的最佳特征之一是它们的并行化可扩展性。我们能够将批量大小的n个实例和m个维度更新拆分为GPU上的c个不同核心。
与CPU相比,NVIDIA GPU通常拥有上千个核心,而CPU速度非常快,但只有大约4-8个核心。这对我们的神经网络训练意味着什么?
这些核心允许我们分批批处理(n / c),并在每个核心上并行运行训练过程。这是可能的,因为Gradient Descent更新网络中的权重参数的方式。GD不会在每个训练步骤后立即更新权重,而是汇总批次的误差,然后在计算批次中所有实例的更新后更新权重。另外,权重的更新可以被分开,因为这些操作也彼此独立地运行。
感谢您的阅读,我希望这有助于您获得有关GPU和梯度下降算法的一些直觉!