0
点赞
收藏
分享

微信扫一扫

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量


深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量

  • ​​一、标量、向量、矩阵与张量​​
  • ​​1. 标量(scalar)​​
  • ​​2. 向量(vector)​​
  • ​​3. 行列式​​
  • ​​4. 矩阵(matrix)​​
  • ​​5. 张量(tensor)​​
  • ​​二、一些运算​​
  • ​​1. 转置(transpose)​​
  • ​​2. 矩阵运算​​
  • ​​3. 矩阵乘法​​
  • ​​4. 单位矩阵(identity matrix)​​
  • ​​5. 逆矩阵​​
  • ​​6. 求解 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法
  • ​​三、使用Python Numpy进行一些矩阵定义​​
  • ​​1. 矩阵定义与矩阵形状​​
  • ​​2. 矩阵的截取​​
  • ​​3. 按条件截取​​
  • ​​4. 条件截取后赋值​​
  • ​​5. 矩阵合并​​
  • ​​6. 通过函数创建矩阵​​
  • ​​arange 递增矩阵​​
  • ​​linspace 等差数列​​
  • ​​logspace 等比数列​​
  • ​​其它特殊矩阵​​

  • ​​四、Python Numpy里一些矩阵运算​​
  • ​​1. 基础运算​​
  • ​​2. 一些运算函数​​
  • ​​3. 矩阵乘法(点乘) dot​​
  • ​​4. 矩阵转置​​
  • ​​5. 逆矩阵​​
  • ​​6. 统计函数​​

一、标量、向量、矩阵与张量

1. 标量(scalar)

  • 一个标量就是一个单独的数。标量用斜体表示。
  • 标量通常使用小写变量名称。

在介绍标量时,会明确它是哪种类型的数,如:

  • 定义实数标量时,可能会说: “令深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_02表示一条线的斜率”;
  • 在定义自然数标量时,可能会说 “令深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_03”表示元素的数目。

2. 向量(vector)

  • 一个向量是一列数,这些数是有序排列的。向量中的元素可以用深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_04 这样来表示 。
  • 我们可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。
    如果要定义包含元素索引的集合,如 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_05 , 我们定义集合
    深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_06
    然后写作: 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_07
  • 使用符号深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_08 表示集合补集中的索引,如
    深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_09 表示深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_10中除了 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_11外的所有元素。
    深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_12 表示除了 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_05 外所有元素构成的向量。

3. 行列式

行列式在数学中,是一个函数,其定义域为det的矩阵A,取值为一个标量,写作det(A)或 | A | 。无论是在线性代数、多项式理论,还是在微积分学中(比如说换元积分法中),行列式作为基本的数学工具,都有着重要的应用。

行列式可以看做是有向面积或体积的概念在一般的欧几里得空间中的推广。或者说,在 n 维欧几里得空间中,行列式描述的是一个线性变换对"体积"所造成的影响。

4. 矩阵(matrix)

矩阵是一个二维数组,通常使用大写变量名称,如深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14
一个实数矩阵高m宽度n,可以表示为 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_15
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_16 表示左上的元素
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_17 表示右下的元素
通过 “:” 来表示水平坐标, 以表示垂直坐标 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_18 中的所有元素。如:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_19 表示 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14 中垂直坐标 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_18 上的一横排元素。这也被称为 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14 的第 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_18 行。
同样的,通过”深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_24 来表示 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14 的第深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_18 列。

5. 张量(tensor)

在某些情况下,我们会讨论坐标超过两维的数组,一般的,一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。我们使用字体 A 来表示张量“A"。张量A中坐标为深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_27 的元素记作 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_28 .

二、一些运算

1. 转置(transpose)

转置是以对角线为轴的矩阵的镜像,从左上到右下称为主对角线(main diagonal)。
公式定义为:

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_29

向量可以看作只有一列的矩阵, 对应地,向量的转置可以看作只有一行的矩阵。
标量的转置等于自身。

2. 矩阵运算

矩阵可以进行加法、乘法计算。

深度学习中,允许矩阵和向量相加:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_30,其中 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_31,即向量b和矩阵A的每一行相加。这是一种隐式地复制向量b到很多位置的方式,称为广播(broadcasting)。

3. 矩阵乘法

两个矩阵的标准乘积不是两个矩阵中对应元素的乘积。
两个矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_33 的矩阵乘积(matrix product)是第三个矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_34
为了使乘法可被定义,矩阵深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14的列数和矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_33的行数相等。如果矩阵深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14的形状是 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_38, 矩阵深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_33 的形状是 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_40 , 我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法。例如:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_41
具体地,该乘法操作定义为
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_42

示例:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_43
元素对应乘积(Hadamard乘积)
如果是元素对应乘积(element-wise product)或者Hadamard乘积,记为 : [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oVQitIc-1607997146629)(https://wikimedia.org/api/rest_v1/media/math/render/svg/c341d3106d2763836b32f992b74e73f4cef0d24d)]

点积
两个相同维数的向量 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_44深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_45 的点积(dot poduct)可看作矩阵乘积 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_46。我们可以把矩阵乘积 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_47 中计算 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_48 的步骤看作 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14 的第 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_18 行和 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_33 的第 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_52 列之间的点积。

矩阵乘法分配律
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_53

矩阵乘积结合律
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_54

矩阵乘积并不满足交换律,然而两个向量的点积满足交换律:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_55

矩阵乘积的转置有着简单的形式:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_56

4. 单位矩阵(identity matrix)

从形式上看,单位矩阵所有沿对角线的元素都是1, 而其它位置的所有元素都是0.如:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_57
任意向量和单位矩阵相乘,都不会改变。我们将保持 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_58 维向量不变的单位矩阵记作 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_59。形式上, 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_60
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_61

5. 逆矩阵

矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_14 的逆矩阵记作 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_63, 其定义的矩阵满足如下条件:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_64

6. 求解 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_65

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_65
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_67
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_68
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_69

这取决于我们能否找到一个逆矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_63
当逆矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_63 存在时,有几种不同的算法都能找到它的闭解形式。理论上,相同的逆矩阵可用于多次求解不同向量 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_72 的议程。然而,逆矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_63 主要是作为理论工具使用的,并不会在大多数软件应用程序中实际使用。这是因为逆矩阵 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_63 在数字计算机上只能表现出有限的精度,有效使用向量 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_72 的算法通常可以得到更精确的 深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_44

三、使用Python Numpy进行一些矩阵定义

1. 矩阵定义与矩阵形状

import numpy as np

# 创建一维的narray对象
a = np.array([1,2,3,4,5])

# 创建二维的narray对象
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])

print(a)

print(a2)
# 打印a2的形状
print(a2.shape)
# 行数
print(a2.shape[0])
# 列数
print(a2.shape[1])

输出结果:
深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_77

2. 矩阵的截取

import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])

# 截取第一行,返回 [[1 2 3 4 5]]
print(a[0:1])

# 截取第二行,第三到六列,返回 [8 9 10]
print(a[1,2:5])

# 截取第二行,返回 [ 6 7 8 9 10]
print(a[1,:])

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_78

3. 按条件截取

import numpy as np

a = np.array([[1,2,3,4,5],[6,7,8,9,10]])

# 截取矩阵a中大于6的元素,范围的是一维数组 返回 [ 7 8 9 10]
b = a[a>6]
print(b)

# 通过布尔语句生成一个布尔矩阵(其次将布尔矩阵传入[](方括号)实现上面截取运算)
print(a>6)

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_矩阵乘法_79

4. 条件截取后赋值

import numpy as np

a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a)

a[a>6] = 0
print(a)

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_80

5. 矩阵合并

import numpy as np

a1 = np.array([[1,2],[3,4]])
a2 = np.array([[5,6],[7,8]])

#参数传入时要以列表list或元组tuple的形式传入

# 横向合并
print(np.hstack([a1,a2])) # 或 np.concatenate( (a1,a2), axis=1 )

# 纵向合并
print(np.vstack((a1,a2))) # 或 np.concatenate( (a1,a2), axis=0 )

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_数学_81

6. 通过函数创建矩阵

arange 递增矩阵

import numpy as np

a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]

a1 = np.arange(5,10) # 从5开始到10(不包括10),步长为1
print(a1) # 返回 [5 6 7 8 9]

a2 = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2
print(a2) # 返回 [ 5 7 9 11 13 15 17 19]

linspace 等差数列

import numpy as np

a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7个数的等差数列
print(a)

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_82

logspace 等比数列

import numpy as np

a = np.logspace(0,2,5) # 生成首位是10^0,末位是10^2,含5个数的等比数列
print(a)

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_83

其它特殊矩阵

  • ones 全1矩阵
  • zeros 全0矩阵
  • eye 单位矩阵
  • empty 全空矩阵(未初始化值状态,值不可预测)
  • fromstring 从字符串转ndarray对象
  • fromfunction 通过函数生成矩阵元素,可指定每个元素的生成算法

四、Python Numpy里一些矩阵运算

1. 基础运算

运算符

说明

+

矩阵对应元素相加

-

矩阵对应元素相减

*

矩阵对应元素相乘

/

矩阵对应元素相除,如果都是整数则取商

%

矩阵对应元素相除后取余数

**

矩阵每个元素都取n次方,如**2:每个元素都取平方

示例:

import numpy as np
a1 = np.array([[4,5,6],[1,2,3]])
a2 = np.array([[6,5,4],[3,2,1]])

print(a1+a2) # 相加
print(a1/a2) # 整数相除取商

print(a1%a2) # 相除取余数

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_84

2. 一些运算函数

  • np.sin(a) 每个元素取正弦
  • np.cos(a) 每个元素取余弦
  • np.tan(a) 每个元素取正切
  • np.arcsin(a) 每个元素取反正弦
  • np.arccos(a) 每个元素取反余弦
  • np.arctan(a) 每个元素取反正切
  • np.exp(a) 每个元素取指数函数,深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_85
  • np.sqrt(a) 每个元素开根号√x

3. 矩阵乘法(点乘) dot

import numpy as np

a1 = np.array([[1,2,3],[4,5,6]]) # a1为2*3矩阵
a2 = np.array([[1,2],[3,4],[5,6]]) # a2为3*2矩阵

print(a1.shape[1]==a2.shape[0]) # True, 满足矩阵乘法条件,即第一个矩阵的列数等于第二个矩阵的行数
print(a1.dot(a2))
print(a2.dot(a1))

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_86

可以看到点乘不满足乘法交换率。

4. 矩阵转置

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a.transpose())
# 或 a.T

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_逆矩阵_87

5. 逆矩阵

import numpy as np
import numpy.linalg as lg

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

print(lg.inv(a))

a = np.eye(3) # 定义一个3阶单位矩阵
print(lg.inv(a)) # 单位矩阵的逆为他本身

深度学习的数学基础 1. 线性代数:标量、向量、矩阵和张量_标量_88

6. 统计函数

  • 最大值、最小值: a.max()
  • 平均值: a.mean()
  • 方差: a.var()
  • 标准差:a.std()
  • 中值: np.median(x)
  • 求和:a.sum()
  • 累积和: a.cumsum()

本文学习资源:

  • 深度学习 《人民邮电出版社》


举报

相关推荐

0 条评论