机器学习线性代数基础


线性代数作为数学的一个分支,广泛用于科学和工程中。然而,因为线性代数主要是面向连续数学,而非离散数学,所以很多计算机科学家很少接触它。握好线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于深度学习算法而言。因此,我们集中探讨一些必备的线性代数知识。并使用numpy或者tf2的代码去展现这些运用。

标量 向量 矩阵和张量

  • 标量(scalar):一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。我们用斜体表示标量。标量通常被赋予小写的变量名称。当我们介绍标量时,会明确它们是哪种类型的数。比如,在定义实数标量时,我们可能会说‘‘令s 2 R 表示一条线的斜率’’;在定义自然数标量时,我们可能会说‘‘令n 2 N 表示元素的数目’’。
np_scalar = np.array(1)
tf_scalar = tf.constant(1)
print(np_scalar, tf_scalar)
out: 1 tf.Tensor(1, shape=(), dtype=int32)
  • 向量(vector):一个向量是一列数。这些数是有序排列的。通过次序中的索引,我们可以确定每个单独的数。通常我们赋予向量粗体的小写变量名称,比如x。向量中的元素可以通过带脚标的斜体表示。向量x 的第一个元素是x1,第二个元素是x2,等等。我们也会注明存储在向量中的元素是什么类型的。如果每个元素都属于R,并且该向量有n 个元素,那么该向量属于实数集R 的n 次笛卡尔乘积构成的集合,记为Rn。当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵列:

np_vector = np.array([1,2,3])
tf_vector = tf.constant([1,2,3])
print(np_vector, tf_vector)
out: [1 2 3] tf.Tensor([1 2 3], shape=(3,), dtype=int32)
  • 矩阵
    矩阵(matrix):矩阵是一个二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。如果一个实数矩阵高度为m,宽度为n,那么我们说A 属于Rmxn^{mxn}mxn。我们在表示矩阵中的元素时,通常以不加粗的斜体形式使用其名称,索引用逗号间隔。比如,A1,1_{1,1}1,1​ 表示A 左上的元素,Am,n_{m,n}m,n​ 表示A 右下的元素。我们通过用“:’’ 表示水平坐标,以表示垂直坐标i 中的所有元素。比如,Ai;: 表示A 中垂直坐标i 上的一横排元素。这也被称为A 的第i 行(row)。同样地,A:;i 表示A 的第i 列(column)。
np_matrix = np.array([[1, 1, 1],[2, 2, 2]])
tf_matrix = tf.constant([[1, 2, 3],[2, 2, 2]])
print(np_matrix, tf_matrix)
out:
[[1 1 1][2 2 2]] tf.Tensor(
[[1 2 3][2 2 2]], shape=(2, 3), dtype=int32)
  • 张量(tensor):在某些情况下,我们会讨论坐标超过两维的数组。一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们将其称之为张量。

矩阵于与向量相乘

矩阵乘法是矩阵运算中最重要的操作之一。两个矩阵A 和B 的矩阵乘积
(matrix product)是第三个矩阵C。为了使乘法定义良好,矩阵A 的列数必须和矩阵B 的行数相等。如果矩阵A 的形状是mn,矩阵B 的形状是np,那么矩阵C 的形状是mp。我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法
C = AB:
具体地,该乘法操作定义为:

A = tf.constant([[1, 1, 1],[2, 2, 2],[3, 3, 3]])
B = tf.constant([[1, 1, 1],[2, 2, 2],[3, 3, 3]])C = A @ B
print(C)

需要注意的是,两个矩阵的标准乘积不是指两个矩阵中对应元素的乘积。不过,那样的矩阵操作确实是存在的,被称为元素对应乘积(element-wise product)或者Hadamard 乘积(Hadamard product),记为A ⊙ B。

两个相同维数的向量x 和y 的点积(dot product)可看作是矩阵乘积x⊤y。我们可以把矩阵乘积C = AB 中计算Ci;j 的步骤看作是A 的第i 行和B 的第j 列之间的点积。

Broadcasting

在深度学习中,我们也使用一些不那么常规的符号。我们允许矩阵和向量相加,产生另一个矩阵:C = A + b,其中Ci;j = Ai;j + bj。换言之,向量b 和矩阵A 的每一行相加。这个简写方法使我们无需在加法操作前定义一个将向量b 复制到每一行而生成的矩阵。这种隐式地复制向量b 到很多位置的方式,被称为广播(Broadcasting)

A = tf.constant([[1, 1, 1],[2, 2, 2],[3, 3, 3]])
b = tf.constant([1])
C = A + b
print(C)

线性相关和生成子空间

接下来就不写太多冗余的定义了,说人话时间
想要了解线性相关和生成子空间让我们先来了解几个概念

  • 矩阵方程组的解有一个或者无数个
  • 线性组合: 子向量的组合,可以从二维坐标系中坐标的分解与组合进行理解

生成子空间: 原始向量线性组合后所能抵达的点的集合。

线性相关:
假设A有m列,n行
不等式n >=m 仅是方程对每一点都有解的必要条件条件。这不是一个充分条件,因为有些列向量可能是冗余的。假设有一个R22 中的矩阵,它的两个列向量是相同的。那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。换言之,虽然该矩阵有2 列,但是它的列空间仍然只是一条线,不能涵盖整个R2 空间。说人话就算在运算的过程中有的列可以被消去,变成全为0

正式地说,这种冗余被称为线性相关(linear dependence)。
(怎么感觉还是不在说人话…)

范数

有时我们需要衡量一个向量的大小。注意划重点,范数是用来衡量一个向量的大小,在机器学习中,我们经常使用被称为范数(norm)的函数衡量向量大小。形式上,Lp 范数定义如下

范数(包括Lp 范数)是将向量映射到非负值的函数。直观上来说,向量x 的范数衡量从原点到点x 的距离。更严格地说,范数是满足下列性质的任意函数:

范数是一种函数不是数

当p = 2 时,L2 范数被称为欧几里得范数(Euclidean norm)。它表示从原点出发到向量x 确定的点的欧几里得距离。L2 范数在机器学习中出现地十分频繁,经常简化表示为∥x∥,略去了下标2。平方L2 范数也经常用来衡量向量的大小,可以简单地通过点积x⊤x 计算。

平方L2 范数在数学和计算上都比L2 范数本身更方便。例如,平方L2 范数对x 中每个元素的导数只取决于对应的元素,而L2 范数对每个元素的导数却和整个向量相关。但是在很多情况下,平方L2 范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:L1 范数。L1 范数可以简化如下:


当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用L1 范数。每当x 中某个元素从0 增加ϵ,对应的L1 范数也会增加ϵ。

有时候我们会统计向量中非零元素的个数来衡量向量的大小。有些作者将这种函数称为“L0 范数’’,但是这个术语在数学意义上是不对的。向量的非零元素的数目不是范数,因为对向量缩放 a 倍不会改变该向量非零元素的数目。因此,L1 范数经常作为表示非零元素数目的替代函数。

范数还有很多种类:

  • 最大范数
  • Frobenius范数
  • L1范数
  • L2范数

有兴趣的可以去了解了解,这里就不多做说明了

机器学习线性代数基础相关推荐

  1. 机器学习--线性代数基础

    数学是计算机技术的基础,线性代数是机器学习和深度学习的基础,了解数据知识最好的方法我觉得是理解概念,数学不只是上学时用来考试的,也是工作中必不可少的基础知识,实际上有很多有趣的数学门类在学校里学不到, ...

  2. 施密特正交化_机器学习 线性代数基础 | 3.3施密特正交化:寻找最佳投影基

    ▼ 更多精彩推荐,请关注我们 ▼3.3  施密特正交化:寻找最佳投影基 在本章的前面两个小节里,我们通过向指定子空间进行投影,探索到了如何寻找"最近距离"的有效途径,通过理论分析和 ...

  3. 两个列向量相乘怎么计算_机器学习 线性代数基础 | 1.4 矩阵乘向量的新视角:变换基底...

    我们即将步入这一章的尾声,在本章前面的三个小节中,我们学习了矩阵和向量的表示方法以及加法.乘法等基本运算的规则,并能够熟练利用Python语言工具正确的对其进行描述和表示.但是显然我们不能仅仅满足于此 ...

  4. 吴恩达机器学习【第三天】线性代数基础知识

    前言:昨天又偷懒了,学到一半就跑了 之前觉得机器学习对线性代数的要求很高,但是在这个课程中,老师给出的线性代数基础知识,却很少,更多是强调应用. 文章目录 矩阵是什么 矩阵的加法和减法[与常数相乘] ...

  5. 【机器学习算法专题(蓄力计划)】十、机器学习中必备的高等数学和线性代数基础

    文章目录 高等数学基础 函数 方向导数(引出梯度) 梯度 微积分 微积分基本理论 泰勒公式 线性代数基础 矩阵和特征 向量内积 SVD矩阵分解 高等数学基础 函数 WHAT:后面基本都是用函数,这里先 ...

  6. 程序员的数学【线性代数基础】

    目录 前言 1.向量是什么 1.1 向量的定义 1.2 向量的表示 1.3 向量物理意义 2.行向量与列向量 3.向量运算 3.1 向量加减法 3.2 向量数乘 3.3 转置 3.4 向量内积 3.5 ...

  7. 人工智能之数学基础篇—线性代数基础(上)

    人工智能之数学基础篇-线性代数基础(上) 1 向量 1.1 标量 1.2 向量 1.3 向量的两个基本运算 1.3.1 向量的加法 1.3.2 向量的数乘 1.4 向量与数据 2 矩阵 2.1 矩阵的 ...

  8. 人工智能之数学基础篇—线性代数基础(下)

    人工智能之数学基础篇-线性代数基础(下) 1 转置矩阵和逆矩阵 1.1 转置矩阵 1.2 逆矩阵 2 行列式 2.1 行列式引例 2.2 行列式的定义 2.3 行列式与矩阵的区别 2.4 行列式的计算 ...

  9. 大福利!Google机器学习零基础在线课程发布,免费!有中文版!

    作者 | Leo 新的学习资源来了!刚刚,谷歌上线了人工智能学习网站 Learn with Google AI,并推出了机器学习在线课程,免费!而且还有中文版! 传送门: "机器学习速成课程 ...

最新文章

  1. c语言程序设计日历推后几天是星期几,C语言程序设计: 输入年月日 然后输出是星期几...
  2. HDU 3410 Passing the Message
  3. 《告别失控:软件开发团队管理必读》一一1.2 成功的程序设计经理为什么难当...
  4. okhttp上传文件结束后服务器才收到,okhttp3 Null Respone上传文件
  5. 单核工作法19:给创意充电(上)
  6. Git/码云上多人协作,创建分支,上传修改
  7. base64核心原理
  8. Xcode6.1 模拟器路径
  9. JAVA基础----java中E,T,?的区别
  10. html如何将设置文本效果,css如何对文本进行修饰
  11. HUE与Mysql的集成
  12. MyBatis学习(四)MyBatis缓存
  13. git checkout切换分支
  14. java单号生成器_订单号生成工具类 - Yaphis的个人页面 - OSCHINA - 中文开源技术交流社区...
  15. go程序设计语言学习 popCount
  16. 大连理工大学电路计算机,大连理工大学电路计算机辅助分析实验报告.pdf
  17. linux系统下网络吞吐量/CPU占用率/流量控制的测试
  18. ansible 远程Windows主机
  19. 推荐几个常用的 Chrome 扩展神器
  20. 四羧基锌酞菁(ZnC4Pc),Zn-taPc 酞菁类化合物,齐岳生物供应酞菁材料

热门文章

  1. iPad有触控笔是哪几款?高性价比的第三方电容笔推荐
  2. 新手做短视频二次剪辑,0基础入门流程,手把手教会你,手机就行
  3. excel常用函数address的使用
  4. Io 异常: Connection reset;Io 异常: Got minus one from a read call;IO 错误: Connection reset by peer, Authe
  5. 为什么成功人士都是工具控?10个高效率生产力工具及官方福利
  6. 腾讯围棋AI技术PhoenixGo正式开源 1
  7. 到店事业群java面试_航旅事业群面试(li)
  8. libevent_Rector模式
  9. SpringCloud教程二
  10. 操作系统实验2---进程管理(更完..)