线性代数在深度学习领域有着举足轻重的作用,它是深度学习各种算法的基本数学工具。本文作者对深度学习中会用到的一些线性代数的基本概念和运算操作进行了介绍,希望能让有兴趣的同学一起来进行学习。
作者介绍:Brendan Fortuner 是一名在西雅图的亚马逊的软件工程师,目前自己在人工智能方面进行研究。
上过Jeremy Howard的深度学习课程后,我意识到我在线性代数方面的不足,而这大大影响我对类似反向传播这样的概念的理解。因此我决定在这个方面花点时间,以补全这方面的知识。 本文是对线性代数的基本介绍,用于深度学习中会使用到的一些常见的线性代数操作。
什么是线性代数?
在深度学习的背景下,线性代数是一个数学工具,它提供了有助于同时操作数组的技术。 它提供了像向量和矩阵(电子表格)这样的数据结构用来保存数字和规则,以便进行加,减,乘,除的运算。
线性代数为什么有用?
线性代数可以将复杂的问题简单化,让我们能够对问题进行高效的数学运算。 以下是线性代数如何达到这些目标的一个例子。
# Multiply two arrays
x = [1,2,3]
y = [2,3,4]
product = []
for i in range(len(x)):
product.append(x[i]*y[i])
# Linear algebra version
x = numpy.array([1,2,3])
y = numpy.array([2,3,4])
x * y
初始化这两个数组后,用线性代数的方法会快3倍。
如何在深度学习中使用线性代数?
神经网络将权重存储在矩阵中。 线性代数使矩阵运算变得更加快捷简便,尤其是在GPU上进行训练的时候。 实际上,GPU是以向量和矩阵运算为基础的。 比如,图像可以表示为像素数组。视频游戏使用庞大且不断发展的矩阵来产生令人炫目的游戏体验。 GPU并不是处理单个像素,而是并行地处理整个像素矩阵。
向量
向量是1维数组。 在几何中,向量将大小和方向的潜在变化存储到一个点。 例如,向量[3,-2]表示向右移3个单位距离和向下移2个单位距离。而具有多个维度的向量称为矩阵。
向量表示
我们可以以不同的方式来表示向量。 这里有几个常见的表示方式。
几何中的向量
向量通常表示从一个点出发的运动。 它们将大小和方向的潜在变化存储到一个点。 向量[-2,5]表示左移2个单位,向上5个单位。 参考资料。
向量可以应用于任何空间点。 向量的方向就是向上5个单位和向左2个单位的斜线,它的大小等于斜线的长度。
标量操作
标量运算涉及向量和某个数字。 我们可以通过对向量中的所有项进行加,减,乘,除操作来对其进行修改。
Scalar addition
元素操作
在诸如加法,减法和除法的元素操作中,相应位置的值被重新组合以产生新的向量。 向量A中的第一个值与向量B中的第一个值配对。第二个值与第二个值配对,依此类推。也就是说,这两个向量必须有着相同的尺寸,才能完成元素操作*。
Vector addition
y = np.array([1,2,3])
x = np.array([2,3,4])
y + x = [3, 5, 7]
y - x = [-1, -1, -1]
y / x = [.5, .67, .75]
*请参阅下面关于numpy 中的broadcasting方法详细信息。
向量乘法
向量乘法有两种类型:点积和Hadamard乘积。
点积
两个向量的点积是一个标量。 向量和矩阵的点积(矩阵乘法)是深度学习中最重要的操作之一。
y = np.array([1,2,3])
x = np.array([2,3,4])
np.dot(y,x) = 20
Hadamard乘积
Hadamard乘积是元乘法,它的输出是一个向量。
y = np.array([1,2,3])
x = np.array([2,3,4])
y * x = [2, 6, 12]
向量场
如果我们对一个点(x,y)应用一个加法或乘法的向量函数,向量场则表示了该点可能会移动多远。 给定空间中某一个点,向量场显示了图中各个不同点可能的变化力度和方向。
向量场是非常有趣的,因为它根据不同的起点可以向不同的方向移动。 这是因为向量场背后的向量存储着2x或x²这样的函数关系,而不是像-2和5这样的标量值。对于图上的每个点,我们将x值代入2x或x²,并从起始点绘制箭头指向新的位置。向量场对于类似梯度下降(Gradient Descent)这类的机器学习技术的可视化是非常有用的。
原文链接:
https://yq.aliyun.com/articles/72872?utm_content=m_15574