Py学习  »  机器学习算法

深度学习中的线性代数——标量、向量、矩阵与张量

机器学习初学者 • 昨天 • 29 次点击  

为了更好的学习深度学习,接下来会撰写一些面向初学者的数学基础教程,涵盖线性代数、微积分和概率论等核心主题,这些知识是真正掌握量化交易中深度学习方法所不可或缺的。

本文是该系列中关于“深度学习中的线性代数”的第一篇。我们的目标在于帮助读者熟悉基本概念和常用符号,这些对于寻找最优量化交易策略至关重要,因此掌握相应的数学语言会事半功倍。

线性代数是数学的基础分支,在物理科学中应用极为广泛,同时它也是众多机器学习算法的理论基石。因此,对于深度学习从业者而言,深刻理解其核心思想至关重要。

需要指出的是,线性代数属于连续数学的范畴,而非离散数学。数学家、物理学家、工程师以及量化分析师通常通过微分方程的学习来接触连续数学,而微分方程正是描述诸多物理和金融现象的重要工具。

然而,计算机科学家、软件开发人员或个人交易者可能更多接触的是图论、组合数学等离散数学内容。因此,对于这类读者,本文中所涉及的集合与函数符号可能初看略显陌生。

为此,本系列文章将摒弃传统本科数学教材中“定理-证明”式的写法,而是有选择地讨论与深度学习实践密切相关的主题,力求让不同背景的从业者都能有所收获。

引言

线性代数、概率论与微积分是机器学习的“语言”。掌握这些学科,不仅能帮助你更深入地理解算法背后的运行机制,还能为开发新算法奠定基础,而这些算法最终可应用于更复杂的量化交易策略之中。

许多监督机器学习与深度学习算法,本质上都是通过调整模型参数来优化损失函数,要实现这一目标,就需要了解损失函数随模型参数变化而变化的规律。

这自然引出了微积分,数学中研究一个量相对于另一个量变化的基础分支。具体而言,这里需要用到偏导数的概念,它描述了每个参数单独变化时对损失函数的影响。

这些偏导数通常以矩阵形式组织在一起,从而简化计算过程。即便是最基础的机器学习模型,如线性回归,也是借助线性代数方法进行优化的。

线性代数的一个核心内容,便是向量与矩阵的表示方法。能够“读懂”线性代数的语言,将使你有能力理解包含复杂模型描述的教材、线上教学文章和研究论文等。这不仅有助于复现和验证已有模型,还能推动你进行拓展与创新,进而将其应用于交易策略之中。

线性代数还是迈向向量化运算的第一步,它提供了一种更深层次的思路来思考某些操作的并行化。采用传统“for循环”编写的算法,可以改写为矩阵方程形式,从而显著提升计算效率。

这类方法已被广泛应用于NumPy、SciPy、Scikit-Learn、Pandas和TensorFlow等主流Python库中。GPU的设计本身也针对线性代数运算进行了优化。深度学习的爆发式增长,在一定程度上正是得益于底层算法在普通GPU硬件上的高度并行化特性。

线性代数虽属连续数学范畴,但本文后续讨论的对象最终都要在离散的计算环境中实现。这些线性代数对象的离散表示可能会带来溢出和下溢问题,即数值计算中有效表示极大或极小数字时会遇到的限制。

缓解数值表示精度问题的一种方法,是采用矩阵分解技术。这类技术可以将某些矩阵表示为更简单、更具结构性的矩阵,从而获得良好的计算性质。

矩阵分解方法包括LU分解、QR分解和奇异值分解SVD。它们是一些机器学习算法(如线性最小二乘法和主成分分析)的内在组成部分。

线性代数对于深度学习的重要性,怎么强调都不为过。对于希望应用基于深度学习技术的最前沿量化模型,或有意向相关机构求职的读者来说,扎实掌握线性代数知识是必不可少的。

本系列文章所涵盖的内容仅为最基本的入门知识,若要深入理解研究前沿,还需在此基础上进一步学习。

向量与矩阵

线性代数中两个基本的数学对象是向量和矩阵。它们属于更一般的数学对象:张量,的具体实例。张量具有阶,或称秩,该阶数决定了表示该张量所需数组的维度数目。

标量

标量即单个数值,是零阶张量的一个实例。在数学中,通常需要明确标量所属的数值集合。记号 𝑥∈𝑅 表示标量值 𝑥 是实数集合 𝑅 中的一个元素,或称成员。

机器学习中常涉及若干不同的数集。𝑁表示正整数集合(1, 2, 3, …);𝑍表示整数集合,包含正整数、负整数和零;𝑄表示有理数集合,即可以表示为两个整数之比的数。

向量

向量是按一定顺序排列的单个数值数组,是一阶张量的实例。向量属于称为向量空间的对象中的成员。向量空间可以理解为特定长度,或称维度的所有可能向量的全体集合。三维实值向量空间,记为 𝑅^3,常用于在数学上表示我们对现实三维空间的直观概念。

更正式地说,向量空间是一个集合与其自身的 𝑛 维笛卡尔积,并配以合适的向量加法与标量乘法定义。如果向量中的所有标量均为实数,则记号 𝑥∈𝑅^𝑛表示向量值 𝑥是 𝑛维实数向量空间 𝑅^𝑛中的成员。

有时需要明确指出向量的各个分量。向量的第 𝑖个标量元素记为 𝑥𝑖。注意此处使用非粗体小写,因为该元素是标量。一个 𝑛维向量本身可采用如下记号明确写出:

既然已经有了表示数值的标量,为什么还需要向量呢? 向量的主要用途之一,是表示同时具有大小和方向的物理量,而标量只能表示大小。

例如,标量和向量可以区分汽车速率和速度这两个概念。速度不仅包含速率大小,还包含行驶方向。不难想象,许多物理量都具有类似特征,如重力、电磁力或风速等。

在机器学习中,向量通常用作特征向量,其各个分量表示某一特定特征的重要程度。这些特征可以包括:文本文档中词语的相对重要性、二维图像中像素点的灰度值,或一组金融工具的历史价格数据等。

矩阵

矩阵是由数字构成的矩形数组,是二阶张量的一个实例。若 𝑚和 𝑛为正整数(即 𝑚,𝑛∈𝑁),则一个 𝑚×𝑛矩阵包含 𝑚𝑛个数字,排列成 𝑚行和 𝑛列。

若矩阵中的所有标量均为实数,则该矩阵用粗体大写字母表示,如 𝐴∈𝑅^𝑚×𝑛。也就是说,该矩阵属于 𝑚×𝑛维的实值向量空间。因此,矩阵实质上就是向量,只不过以二维表格的形式书写而已。

矩阵的各个分量现在由两个下标 𝑖 和 𝑗 来标识。其中 𝑖 表示行索引,𝑗 表示列索引。矩阵 𝐴 的每个分量记为 𝑎𝑖 。完整的 𝑚×𝑛 矩阵可写成如下形式:

为简化表达,完整的矩阵分量展开式通常可简写为如下形式:

其中,𝑎𝑖𝑗  称为矩阵 𝐴 的 (𝑖,𝑗)元素。若矩阵的维度在上下文中已明确,则可省略下标中的 𝑚×𝑛 标注。

需要留意的是,列向量实际上是大小为 𝑚×1 的矩阵,因为它有 𝑚 行、1 列。除非另有说明,本文中所有向量均视为列向量。

矩阵代表了一类称为线性映射的函数。根据后续文章中将介绍的相关规则,可以定义矩阵与矩阵之间、或矩阵与向量之间的乘法运算。这些运算在物理科学、量化金融、计算机科学和机器学习等领域都具有极其重要的意义。

矩阵可以编码几何操作,如旋转、反射和变换。因此,若在计算机辅助设计(CAD)软件中,一组向量表示某个三维几何模型的顶点,则将这些向量分别与预定义的旋转矩阵相乘,即可得到旋转后顶点位置的新向量。这正是现代三维计算机图形学的基础。

在深度学习中,神经网络的权重以矩阵形式存储,而特征输入则以向量形式存储。将问题用线性代数的语言表述,可以紧凑地处理这些计算。通过将问题转化为张量形式,并借助线性代数的运算法则,便能在现代GPU硬件上实现快速的训练。

张量

张量作为更一般的数学对象,涵盖了标量、向量和矩阵。在物理科学和机器学习中,有时需要使用阶数超过二的张量。

在理论物理学,特别是广义相对论中,黎曼曲率张量是一个四阶张量,用于描述时空的局部曲率。在机器学习,尤其是深度学习中,三阶张量可用于表示二维图像多个通道(如红、绿、蓝)的强度值。

本系列文章中,张量将采用粗体无衬线字体符号(如 𝐴)来标识。三阶张量的元素记为 𝑎𝑖𝑗𝑘 ,四阶张量的元素则记为 𝑎𝑖𝑗𝑘𝑙


在下一篇文章中,我们将介绍矩阵与向量、矩阵与矩阵之间乘法运算的基本规则。这一部分内容统称为矩阵代数。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/198469