机器学习中的数学(一):向量、求和符号、累乘符号

一、向量

1.1 什么是向量?

向量 是由几个数横向或纵向排列而成的。数纵向排列的向量叫作 列向量 ,如下式所示的变量就是列向量:
x = [ 6 8 ] \mathbf{x}=\left[\begin{matrix} 6 \\ 8\end{matrix}\right] x=[68]
数横向排列的向量叫作 行向量,如下式所示的变量就是行向量:
y = [ 1 2 3 4 5 6 ] \mathbf{y} = \left[\begin{matrix}1 & 2 & 3 & 4 & 5 & 6\end{matrix}\right] y=[123456]
构成向量的一个一个数叫作元素。向量中的元素个数叫作向量的维度。如上例所示, 为二维列向量, 为四维行向量。如 x \mathbf{x} x y \mathbf{y} y 所示,本文向量使用 字母小写粗体 表示。与向量不同的普通的单个数叫作标量。本文中的标量用 小写斜体 表示,如 xy。向量右上角的 T 是转置符号,表示将列向量转换为行向量,或者将行向量转换为列向量,如下式所示:
y T = [ 1 2 3 4 5 6 ] T = [ 1 2 3 4 5 6 ] \mathbf{y^T} =\left[\begin{matrix}1 & 2 & 3 & 4 & 5 & 6\end{matrix}\right]^T= \left[\begin{matrix}1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6\end{matrix}\right] yT=[123456]T=123456
x T = [ 6 8 ] T = [ 6 8 ] \mathbf{x^T} =\left[\begin{matrix} 6 \\ 8\end{matrix}\right]^T= \left[\begin{matrix}6 & 8\end{matrix}\right] xT=[68]T=[68]

1.2 向量的简单定义及使用

import numpy as np  # 导入numpy包
x = np.array([6, 8])
print(x)
# 一维的 ndarray 类型没有纵横之分,往往表示为行向量。
# 表示 2 × 2 的二维数组(矩阵)
y = np.array([[1, 2], [3, 4]])  # 列向量
print(y)
z = np.array([[1], [2]])  # 列向量
print(z)
# 向量通常定义为一维 ndarray 类型,必要时可以用二维 ndarray 类型 

# 转置用 变量名.T
print(z.T)
print(z.T.T) # 转置操作对于二维 ndarray 类型有效,但对于一维 ndarray 类型是无效的。

1.3 向量的加法和减法

有如下两个向量:
a = [ 2 1 ] , b = [ 1 3 ] \begin{aligned} \mathbf{a}=\left[\begin{matrix} 2 \\ 1\end{matrix}\right], \mathbf{b}=\left[\begin{matrix} 1 \\ 3\end{matrix}\right]\end{aligned} a=[21],b=[13]
首先进行加法运算。向量的加法运算 是将各个元素相加:
a + b = [ 2 1 ] + [ 1 3 ] = [ 2 + 1 1 + 3 ] = [ 3 4 ] \begin{aligned} \mathbf{a+b}=\left[\begin{matrix} 2 \\ 1\end{matrix}\right] +\left[\begin{matrix} 1 \\ 3\end{matrix}\right]\end{aligned}=\left[\begin{matrix} 2 +1 \\ 1 +3\end{matrix}\right]=\left[\begin{matrix} 3 \\ 4\end{matrix}\right] a+b=[21]+[13]=[2+11+3]=[34]
向量的加法运算可以通过图形解释。首先,将向量的元素看作坐标点,将向量看作一个从坐标原点开始,延伸到元素坐标点的箭头。这样一来,单纯地将各个元素相加的向量加法运算就可以看作,对以 a 和 b \begin{aligned} \mathbf{a}和\mathbf{b}\end{aligned} ab为邻边的平行四边形求对角线。

示例代码:

import numpy as np
a = np.array([2, 1])
b = np.array([1, 3])
print(a + b)

向量的减法运算与加法运算相同,是对各个元素进行减法运算:
a − b = [ 2 1 ] − [ 1 3 ] = [ 2 − 1 1 − 3 ] = [ 1 − 2 ] \begin{aligned} \mathbf{a-b}=\left[\begin{matrix} 2 \\ 1\end{matrix}\right] -\left[\begin{matrix} 1 \\ 3\end{matrix}\right]\end{aligned}=\left[\begin{matrix} 2 -1 \\ 1 -3\end{matrix}\right]=\left[\begin{matrix} 1 \\ -2\end{matrix}\right] ab=[21][13]=[2113]=[12]
示例代码:

import numpy as np
a = np.array([2, 1])
b = np.array([1, 3])
print(a - b)

a - b 就是 a + (-b) ,可以看作 a-b 的加法运算。从图形上来说, -b 的箭头方向与 b 相反。所以,a + (-b) 是以 a-b 为邻边的平行四边形的对角线。

1.4 标量积

在标量与向量的乘法运算中,标量的值会与向量的各个元素分别相乘,比如 2a
2 a = 2 × [ 2 1 ] = [ 2 × 2 2 × 1 ] = [ 4 2 ] \begin{aligned} \mathbf{2a}=2×\left[\begin{matrix} 2 \\ 1\end{matrix}\right]\end{aligned}=\left[\begin{matrix} 2×2 \\ 2 ×1\end{matrix}\right]=\left[\begin{matrix} 4 \\ 2\end{matrix}\right] 2a=2×[21]=[2×22×1]=[42]
示例代码:

import numpy as np
a = np.array([2, 1])
print(2 * a)

从图形上来说,向量的长度变成了标量倍,如下图所示:

1.5 内积

向量与向量之间的乘法运算叫作内积。内积是由相同维度的两个向量进行的运算,通常用 · 表示,这在机器学习涉及的数学中很常见。内积运算是把对应的元素相乘,然后求和,比如:
b = [ 1 3 ] , c = [ 2 4 ] \begin{aligned} \mathbf{b}=\left[\begin{matrix} 1 \\ 3\end{matrix}\right], \mathbf{c}=\left[\begin{matrix} 2 \\ 4\end{matrix}\right]\end{aligned} b=[13],c=[24]
的内积:
b ⋅ c = [ 1 3 ] ⋅ [ 2 4 ] = 2 × 1 + 3 × 4 = 14 \begin{aligned} \mathbf{b·c}=\left[\begin{matrix} 1 \\ 3\end{matrix}\right] ·\left[\begin{matrix} 2 \\ 4\end{matrix}\right]\end{aligned}=2×1+3×4=14 bc=[13][24]=2×1+3×4=14
示例代码:

import numpy as np
b = np.array([1, 3])
c = np.array([2, 4])
print(b.dot(c))

bc 上的投影向量为 b',那么 b'c 的长度相乘即可得到内积的值。当两个向量的方向大致相同时,内积的值较大。相反,当两个向量近乎垂直时,内积的值较小;当完全垂直时,内积的值为 0。可以说,内积与两个向量的相似度相关。

但是,请注意内积与向量自身的大小也相关。即使两个向量方向相同,只要其中一个向量变成原来的 2 倍,那么内积也会变成原来的 2 倍。

1.6 向量的模

向量的模是指向量的长度,将向量夹在两个 || 之间,即可表示向量的模。二维向量的模可计算为:
∥ a ∥ = ∥ [ a 0 a 1 ] ∥ = a 0 2 + a 1 2 \mathbf{\lVert a \rVert}=\begin{Vmatrix} \left[\begin{aligned}a_0\\ a_1\end{aligned}\right]\end{Vmatrix}=\sqrt{a_0^2 + a_1^2} a=[a0a1]=a02+a12
三维向量的模则可计算为:
∥ a ∥ = ∥ [ a 0 a 1 a 2 ] ∥ = a 0 2 + a 1 2 + a 2 2 \mathbf{\lVert a \rVert}=\begin{Vmatrix} \left[\begin{aligned}a_0\\ a_1\\a_2\end{aligned}\right]\end{Vmatrix}=\sqrt{{a_0^2 + a_1^2}+a_2^2} a=a0a1a2=a02+a12+a22
在一般情况下, D 维向量的模计算为:
∥ a ∥ = ∥ [ a 0 a 1 ⋮ a D − 1 ] ∥ = a 0 2 + a 1 2 + ⋯ + a D − 1 2 \mathbf{\lVert a \rVert}=\begin{Vmatrix} \left[\begin{aligned}a_0\\ a_1\\\vdots\\a_{D-1}\end{aligned}\right]\end{Vmatrix}=\sqrt{{a_0^2 + a_1^2}+\cdots+a_{D-1}^2} a=a0a1aD1=a02+a12++aD12
示例代码:

import numpy as np
a = np.array([3, 4])
print(np.linalg.norm(a))

二、求和符号

求和符号经常出现在机器学习的教材中。比如,下式的意思是将 从1到10的变量的值全部相加
∑ i = 1 10 i = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 \begin{aligned}\sum_{i=1}^{10}i=1+2+3+4+5+6+7+8+9+10\end{aligned} i=110i=1+2+3+4+5+6+7+8+9+10
用于简洁地表示长度较长的加法运算。对上式加以扩展,如下式所示,它表示对于 右边的 f(n),令变量 n 的取值从 a 开始递增 1,直到 a 变为 b,然后把所有 f(n) 相加。
∑ n = a b f ( n ) = f ( a ) + f ( a + 1 ) + ⋯ + f ( b ) \begin{aligned}\sum_{n=a}^{b}f(n)=f(a)+f(a+1)+\cdots+f(b)\end{aligned} n=abf(n)=f(a)+f(a+1)++f(b)
例子如下:
∑ n = 1 5 n = 1 + 2 + 3 + 4 + 5 = 15 \begin{aligned}\sum_{n=1}^{5}n=1+2+3+4+5=15\end{aligned} n=15n=1+2+3+4+5=15
∑ n = 1 5 n 2 = 1 2 + 2 2 + 3 2 + 4 2 + 5 2 \begin{aligned}\sum_{n=1}^{5}n^2=1^2+2^2+3^2+4^2+5^2\end{aligned} n=15n2=12+22+32+42+52
∑ n = 1 5 3 = 3 + 3 + 3 + 3 + 3 = 3 × 5 = 15 \begin{aligned}\sum_{n=1}^{5}3=3+3+3+3+3=3×5=15\end{aligned} n=153=3+3+3+3+3=3×5=15
∑ n = 1 3 2 n 2 = 2 ∑ n = 1 3 n 2 \begin{aligned}\sum_{n=1}^{3}2n^2=2\sum_{n=1}^{3}n^2\end{aligned} n=132n2=2n=13n2
∑ n = 1 5 [ 2 n 2 + 3 n + 4 ] = 2 ∑ n = 1 5 n 2 + 3 ∑ n = 1 5 n + 4 × 5 \begin{aligned}\sum_{n=1}^{5}[2n^2+3n+4]=2\sum_{n=1}^{5}n^2+3\sum_{n=1}^{5}n+4×5\end{aligned} n=15[2n2+3n+4]=2n=15n2+3n=15n+4×5
在思考机器学习的问题时,我们常常需要对带求和符号的数学式进行变形。接下来,思考一下如何变形。最简单的情况是求和符号右侧的函数 f(n) 中没有 n,比如 f(n)=3。这时,只需用相加的次数乘以 即可,所以可以去掉求和符号:
在这里插入图片描述
f(n)标量×n 的函数时,可以将标量提取到求和符号的外侧(左侧):
∑ n = 1 3 2 n 2 = 2 × 1 2 + 2 × 2 2 + 2 × 3 2 = 2 ( 1 2 + 2 2 + 3 2 ) = 2 ∑ n = 1 3 n 2 \begin{aligned}\sum_{n=1}^{3}2n^2=2×1^2+2×2^2+2×3^2=2(1^2+2^2+3^2)=2\sum_{n=1}^{3}n^2\end{aligned} n=132n2=2×12+2×22+2×32=2(12+22+32)=2n=13n2
当求和符号作用于多项式时,可以将求和符号分配给各个项:
∑ n = 1 5 [ 2 n 2 + 3 n + 4 ] = 2 ∑ n = 1 5 n 2 + 3 ∑ n = 1 5 n + 4 × 5 \begin{aligned}\sum_{n=1}^{5}[2n^2+3n+4]=2\sum_{n=1}^{5}n^2+3\sum_{n=1}^{5}n+4×5\end{aligned} n=15[2n2+3n+4]=2n=15n2+3n=15n+4×5
之所以可以这样做,是因为无论是多项式相加,还是各项单独相加再求和,答案都是一样的。1.5 小节的向量的内积也可以使用求和符号表示。比如:
w = [ w 0 w 1 w 2 w 3 w 4 ⋮ w D − 1 ] \mathbf{w} = \left[\begin{matrix}w_0 \\ w_1 \\ w_2 \\ w_3\\ w_4 \\\vdots\\ w_{D-1}\end{matrix}\right] w=w0w1w2w3w4wD1

x = [ x 0 x 1 x 2 x 3 x 4 ⋮ x D − 1 ] \mathbf{x} = \left[\begin{matrix}x_0 \\ x_1 \\ x_2 \\ x_3\\ x_4 \\\vdots\\ x_{D-1}\end{matrix}\right] x=x0x1x2x3x4xD1可以表示为:
w ⋅ x = [ w 0 w 1 w 2 w 3 w 4 ⋮ w D − 1 ] ⋅ [ x 0 x 1 x 2 x 3 x 4 ⋮ x D − 1 ] = w 0 x 0 + w 1 x 1 + w 2 x 2 + w 3 x 3 + ⋯ + w D − 1 x D − 1 = 14 \begin{aligned} \mathbf{w·x}=\left[\begin{matrix}w_0 \\ w_1 \\ w_2 \\ w_3\\ w_4 \\\vdots\\ w_{D-1}\end{matrix}\right]·\left[\begin{matrix}x_0 \\ x_1 \\ x_2 \\ x_3\\ x_4 \\\vdots\\ x_{D-1}\end{matrix}\right]\end{aligned}=w_0x_0+w_1x_1+w_2x_2+w_3x_3+\cdots+w_{D-1}x_{D-1}=14 wx=w0w1w2w3w4wD1x0x1x2x3x4xD1=w0x0+w1x1+w2x2+w3x3++wD1xD1=14
在这里插入图片描述
左侧称为 矩阵表示法(向量表示法),右侧称为 元素表示法,而上式则可以看作在两者之间来回切换的一个式子。前面我们说过 跟编程中的 for 语句很像,根据上式, 也与内积有关,所以也可以通过内积计算 。例如,从 1 加到 1000 的和为:
1 + 2 + 3 + ⋯ + 1000 = [ 1 1 1 1 1 ⋮ 1 ] ⋅ [ 1 2 3 4 5 ⋮ 1000 ] \begin{aligned} \mathbf{1+2+3+\cdots+1000}=\left[\begin{matrix}1 \\ 1 \\ 1 \\ 1\\ 1 \\\vdots\\ 1\end{matrix}\right]·\left[\begin{matrix}1 \\ 2 \\ 3 \\ 4\\ 5 \\\vdots\\1000\end{matrix}\right]\end{aligned} 1+2+3++1000=111111123451000
在 Python 中,上式计算示例代码如下。与 for 语句相比,这种方法的运算处理速度更快。

import numpy as np

a = np.ones(1000)     # [1 1 1 ...     1]
b = np.arange(1,1001) # [1 2 3 ...  1000]
print(a.dot(b))

三、累乘符号

累乘符号 Π 符号在使用方法上类似。这个符号将会在机器学习中的分类问题里出现。Π 用于使 f(n) 的所有元素相乘:
∏ n = a b f ( n ) = f ( n ) × f ( n + 1 ) × ⋯ × f ( b ) \prod_{n = a}^{b}f(n)=f(n)×f(n+1)×⋯×f(b) n=abf(n)=f(n)×f(n+1)××f(b)
下式是一个最简单的例子:
∏ n = 1 5 n = 1 × 2 × 3 × 4 × 5 \prod_{n = 1}^{5}n=1×2×3×4×5 n=15n=1×2×3×4×5
下式是累乘符号 Π 作用于多项式的示例:
∏ n = 2 5 ( 2 n + 1 ) = ( 2 ⋅ 2 + 1 ) ( 2 ⋅ 3 + 1 ) ( 2 ⋅ 4 + 1 ) ( 2 ⋅ 5 + 1 ) \prod_{n = 2}^{5}(2n+1)=(2·2+1)(2·3+1)(2·4+1)(2·5+1) n=25(2n+1)=(22+1)(23+1)(24+1)(25+1)
如下图所示:
在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1. $\alpha$: 学习率,用于控制每次参数更新的步长。 2. $\theta$: 参数向量,包含机器学习模型的所有参数。 3. $x$: 输入特征向量,包含训练集的所有特征。 4. $y$: 标签,训练集每个样本的目标值。 5. $h_\theta(x)$: 假设函数,用于预测输入特征向量 $x$ 对应的目标值。 6. $J(\theta)$: 代价函数,用于衡量模型预测值与真实值之间的误差。 7. $\nabla J(\theta)$: 代价函数的梯度,表示代价函数在当前参数向量 $\theta$ 处的变化率。 8. $\sum$: 求和符号,用于对向量矩阵元素求和。 9. $\prod$: 积符号,用于对向量矩阵元素求积。 10. $\cdot$: 点乘符号,用于计算两个向量的内积。 11. $\times$: 叉乘符号,用于计算两个向量的外积。 12. $\rightarrow$: 箭头符号,表示向量的方向。 13. $||\cdot||$: 范数符号,用于计算向量的长度。 14. $\in$: 属于符号,用于表示某个元素是否属于某个集合。 15. $\forall$: 全称量词符号,用于表示某个命题对于集合的所有元素都成立。 16. $\exists$: 存在量词符号,用于表示某个命题对于集合存在的某个元素成立。 17. $\Rightarrow$: 蕴含符号,用于表示某个命题的必要性和充分性。 18. $\Leftrightarrow$: 等价符号,用于表示两个命题的等价性。 19. $\partial$: 偏导符号,用于表示多元函数在某个变量上的偏导数。 20. $\Sigma$: 累加符号,用于对多元函数进行求和

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Amo Xiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值