社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

机器学习初学者 • 1 周前 • 75 次点击  

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

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

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

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

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

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

引言

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

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

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

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

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

线性代数还是迈向向量化运算的第一步,它提供了一种更深层次的思路来思考某些操作的并行化。采用传统“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