文章目录
- 1.千层面
- 层
- 多层
- 2. CPU与GPU架构差异
- 3.大规模矩阵操作
- 4.专为并行计算设计的库
1.千层面
神经网络的本质是千层面,由一层一层的线性代数方程组成,每个方程都表示一段数据与另一段数据相关的可能性
层
神经网络的每一次层可以看作是一次线性代数变换,然后接上一个非线性激活函数。每一层都对输入数据进行变换
线性变换,每层中的线性代数方程是矩阵乘法的形式:
z = W·x + b
W 是权重矩阵,x 是输入, b 是偏置向量, z 是线性变换
最后一层的输出通常表示与输入数据某个目标输出之间的“可能性”或“概率”。
多层
每一层的输出作为下一层的输入,使得数据逐步被加工或提取,每个链接都有一个权重,权重是通过训练来调整的。训练的过程是通过大量的数据,让网络中的权重调整到最优,使得模型能够很好地拟合输入与输出的关系
2. CPU与GPU架构差异
CPU在于处理复杂多样性的任务,每个核心都有复杂的控制逻辑、缓存层次结构、分支预测、流水线等,高性能核心较少(例如4-16个)。CPU擅长处理复杂的顺序任务,你一台计算机类型多样的应用都靠它执行。每个核心设计用来处理复杂的任务,主要以多线程和多进程的方式来实现,因此它可以执行高度复杂的任务,但它不适合处理大规模简单的数值运算。
相比之下,GPU就是为了简单大规模的数值计算任务而设计的,有成千上万个较小的处理核心,处理大规模的简单但相似的计算任务,例如神经网络中的矩阵运算和张量运算。因此控制逻辑简单,不需要对复杂指令的支持,它的重点在于提供更多的核心,实现同时执行大量的简单任务。这种设计使得GPU非常擅长进行大量简单的运算任务,正如神经网络中的矩阵运算。
GPU设计之初就是为了处理大量的数值计算任务(最初是用于图形渲染),显存带宽非常高,它可以迅速地从显存中加载大量的数据并用于并行计算。
因此在神经网络中进行类似的数值密集运算时,GPU具有天然优势。
3.大规模矩阵操作
神经网络的计算过程,包括前向传播和反向传播,本质上就是一系列的大规模矩阵乘法、卷积运算和张量操作。这些计算在GPU上的并行处理能力下,可以显著加速。举个例子:
我们可以用一个生活中的类比来解释。
假设我们现在要完成一项任务,用手电筒照亮1000个物品,检查它们的状态。你只有4个人(CPU的4个核心)。每个人只能同时检查一个物品。
CPU怎么做?
这4个人中的每个人一次只能处理一个物品,所以他们要逐一去检查物品。
比如,第1个人从物品1到物品250检查,第2个人检查物品251到500……其他两个人负责剩下的部分。
因为每个人一次只能处理一个物品,所以他们必须按顺序去检查这些物品,即使大家分配了不同的部分,还是得一个接一个地完成。
这种情况下,虽然4个人比1个人做得快,但他们仍然无法同时处理所有物品。换句话说,每个人处理的任务是按顺序来的,因为他们能同时处理的任务有限。处理完一个,再去处理下一个。
在CPU中,少量的核心(比如4个核心)就像这4个人一样,每个核心只能处理一部分任务,并且需要按顺序去处理。如果你有非常多的任务(比如1000个),每个核心只能一次处理一个任务,所以每次只能同时处理4个任务,其他任务要等前面的任务处理完了才能进行。
如果换成GPU,你突然有了1000个人,每个人同时检查一个物品。所有人同时开始工作,每个物品在同一时间都被检查完了。你不需要等待每个物品按顺序完成,而是所有的任务同时完成。
在GPU中,有成千上万个核心,它们就像这1000个人,可以同时进行处理。每个核心负责处理任务的一小部分,所有任务可以在同一时间并行进行。所以GPU可以同时处理大量任务,这就是为什么它在大规模计算任务(如神经网络中的矩阵运算)中比CPU更快
4.专为并行计算设计的库
CUDA,Computer Unified Device Architecure
cuDNN,CUDA Deep Neural Network Library
CUDA是NVIDIA开发的并行计算框架,让开发者能够直接使用 GPU 来进行计算,可以将计算任务从 CPU 移到 GPU 上,为开发者提供了编程接口,允许用C++或PYTHON写代码控制GPU的计算资源。可以把耗时的计算任务放到GPU上执行。如果有一段矩阵相乘的运算,通过CUDA编程,将这些矩阵的每个元素的计算分配给GPU的不同核心,GPU会同时计算所有元素
cuDNN基于CUDA的专门用于深度学习的库,提供了高度优化的神经网络的运算功能,虽然可以用CUDA编程,但是cuDNN进行了优化,集成在主流深度学习框架(如TensorFlow、PyTorch)中,框架会自动调用cuDNN来加速深度学习中的核心计算,这样你无需自己编写复杂的代码,就能够充分利用GPU的计算能力
CUDA 帮助你管理和使用 GPU 的资源,是一个广义的并行计算框架,它可以用来编写各种类型的高性能计算任务(不仅限于深度学习)。任何需要大量计算的应用都可以利用 CUDA 来在 GPU 上加速,比如图像处理、物理仿真等。cuDNN 是基于 CUDA 之上的一个库,它专门为深度学习中的常见操作做了优化。仅用于深度学习任务。