AI算法工程师 | 04人工智能基础-高等数学知识强化(三)线性代数基础之向量

数学知识 之 线性代数基础

🗨 向量及其运算

向量的概念及其意义

ღ 向量的概念

向量是线性代数里面最基本的概念,它其实就是一维数组,由 N N N 个数构成的, X = ( X 1 , X 2 , . . . , X n ) X=(X_1,X_2, .. . ,X_n) X=(X1,X2,...,Xn)

  • X i X_i Xi 称为向量 X X X 的第 i i i 个分量,向量的分量称之为维度
  • n n n 维向量集合的全体就构成了 n n n 维欧式空间,符号表示为 R n R^n Rn
ღ 向量的意义

几何意义
几何意义:表示空间中的点

物理意义:可以看成是速度或者力这样的矢量(向量是矢量 → 是有方向的。如:力有方向,速度也有方向)

  • 即:向量可表达高维空间中的一个点,但从原点出发,它是有方向的

机器学习中的意义
机器学习中的意义:每个向量可以表达一个样本

  • 即:向量可以表达机器学习或深度学习中的每条样本

行向量和列向量

在线性代数中,

  • 行向量是一个 1×n 的矩阵,即矩阵由一个含有n个元素的所组成;
  • 列向量是一个 n×1 的矩阵,即矩阵由一个含有n个元素的所组成。

-_-

—— 摘自: 行向量-百度百科列向量-百度百科

ღ 相关概念

行向量是按行把向量排开:
( X 1 , X 2 , . . . , X n ) \begin{pmatrix} X_1,& X_2,&.. . &,X_n \end{pmatrix} (X1,X2,...,Xn)
列向量是按列把向量排开:
( X 1 X 2 . . . X n ) \begin{pmatrix} X_1\\ X_2\\ .\\ .\\ .\\ X_n\end{pmatrix} X1X2...Xn
为了方便书写,列向量也可写成如下形式:(即行向量的转置)
( X 1 , X 2 , . . . , X n ) T \begin{pmatrix} X_1,& X_2,&.. . &,X_n \end{pmatrix}^{T} (X1,X2,...,Xn)T

说明:在数学中,数据更多的被写成列向量;而在编程语言中,数据更多的被存成行向量

ღ 转置 Transpose
  • 把列向量变成行向量
    ( 1 2 3 4 ) T = ( 1 , 2 , 3 , 4 ) \begin{pmatrix} 1\\ 2\\ 3\\ 4\end{pmatrix}^T = \begin{pmatrix} 1,& 2,&3,&4 \end{pmatrix} 1234 T=(1,2,3,4)
  • 把行向量变成列向量
    ( 1 , 2 , 3 , 4 ) T = ( 1 2 3 4 ) \begin{pmatrix} 1,& 2,&3,&4 \end{pmatrix}^T =\begin{pmatrix} 1\\ 2\\ 3\\ 4\end{pmatrix} (1,2,3,4)T= 1234

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口:

>>> import numpy as np # 导入模块
>>> a = np.array([1,2,3]) # 创建一维数组
>>> a  # 行向量形式
array([1, 2, 3])
>>> a.T # 通过转置的方式,呈现出来的依旧是行向量
array([1, 2, 3])
>>> a.reshape(3,1) # 3:3行;1:1列(reshape:变形状)
array([[1],
       [2],
       [3]])
>>> a.reshape(-1,1) # -1 代表具体行数由计算机自己算,但必须是1列
array([[1],
       [2],
       [3]])

图解:
图解

向量的运算及对应的意义

ღ 加减法运算
  • 加法运算等于它们的分量分别相加(对应位置相加),显然两个向量的长度得是相等的
  • 减法运算同加法的类似,在此不再列举
    ( 1 2 3 4 ) + ( 5 6 7 8 ) = ( 6 8 10 12 ) \begin{pmatrix} 1\\ 2\\ 3\\ 4\end{pmatrix}+ \begin{pmatrix} 5\\ 6\\ 7\\ 8\end{pmatrix}=\begin{pmatrix} 6\\ 8\\ 10\\ 12\end{pmatrix} 1234 + 5678 = 681012

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> b = np.array([5,6,7,8])
>>> a
array([1, 2, 3, 4])
>>> b
array([5, 6, 7, 8])
>>> a + b   # 两个行向量相加
array([ 6,  8, 10, 12])
>>> a2 = a.reshape(-1,1) # 行向量转为列向量形式
>>> a2
array([[1],
       [2],
       [3],
       [4]])
>>> b2 = b.reshape(-1,1) # 转成列向量形式
>>> b2
array([[5],
       [6],
       [7],
       [8]])
>>> a2 + b2  # 两个列向量相加
array([[ 6],
       [ 8],
       [10],
       [12]])
>>> a - b    # 两个行向量相减
array([-4, -4, -4, -4])
>>> a2 - b2  # 两个列向量相减
array([[-4],
       [-4],
       [-4],
       [-4]])

图解:
向量加减法

ღ 数乘运算
  • 它是一个数和这个向量每个分量相乘
    2 × ( 1 2 3 4 ) = ( 2 4 6 8 ) 2 \times \begin{pmatrix} 1\\ 2\\ 3\\ 4\end{pmatrix}=\begin{pmatrix} 2\\ 4\\ 6\\ 8\end{pmatrix} 2× 1234 = 2468

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> a   # 接着前面所给的值
array([1, 2, 3, 4])
>>> 2 * a  # 数乘(行向量)
array([2, 4, 6, 8])
>>> a * 2 
array([2, 4, 6, 8])
>>> a2
array([[1],
       [2],
       [3],
       [4]])
>>> 2 * a2  # 数乘(列向量)
array([[2],
       [4],
       [6],
       [8]])
>>> a2 / 2  # 除法运算
array([[0.5],
       [1. ],
       [1.5],
       [2. ]])
>>> b
array([5, 6, 7, 8])
>>> b2
array([[5],
       [6],
       [7],
       [8]])
>>> a * b      # 两个行向量相乘
array([ 5, 12, 21, 32])
>>> a2 * b2    # 两个列向量相乘
array([[ 5],
       [12],
       [21],
       [32]])

图解:
向量的数乘

ღ 向量的内积
  • 两个列向量, X T Y X^TY XTY,等于对应位置相乘再相加(内积也叫点乘)
  • 两个向量的内积的本质是变成一个标量
    ( 1 , 2 , 3 , 4 ) ( 1 1 2 4 ) = 1 × 1 + 2 × 1 + 3 × 2 + 4 × 4 = 25 \begin{pmatrix} 1,& 2,&3,&4 \end{pmatrix}\begin{pmatrix} 1\\ 1\\ 2\\ 4\end{pmatrix}=1\times 1+2\times 1+3\times2+4\times 4=25 (1,2,3,4) 1124 =1×1+2×1+3×2+4×4=25

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> a   # 变量 a、b、a2、b2 接着前面所给的值
array([1, 2, 3, 4])
>>> b
array([5, 6, 7, 8])
>>> a2
array([[1],
      [2],
      [3],
      [4]])
>>> b2
array([[5],
      [6],
      [7],
      [8]])
>>> np.dot(a,b) # np.dot函数进行内积:编程中无需写成行向量与列向量,两行向量也可
70
>>> np.dot(a,a2)  # 1*1+2*2+3*3+4*4=30
array([30])
>>> np.dot(b,b2)  # 5*5+6*6+7*7+8*8=174
array([174])
>>> np.dot(a2,b2) # 报错
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<__array_function__ internals>", line 180, in dot
ValueError: shapes (4,1) and (4,1) not aligned: 1 (dim 1) != 4 (dim 0)

图解:
向量的内积

ღ 运算法则

可以理解为:向量的运算满足交换律、分配律
A + B + C = A + ( B + C ) ; K ∗ ( X + Y ) = K X + K Y A+B+C=A+(B+C);K*(X+Y)=KX+KY A+B+C=A+(B+C)K(X+Y)=KX+KY

ღ 各运算对于机器学习的意义

意义1
意义2

小贴士

向量到原点的范式

ღ 向量的范数
  • 范数的公式:先计算向量每个分量绝对值的 P 次方 的总和,再用幂函数计算 P 分之一(这里 P 是整数,如 1,2,3…到正无穷都是可以的)
  • 范数的本质:把向量变成一个标量
  • 范数的表示:两个竖线来表示,然后右下角写上 P
    ∥ x ∥ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p \left \| x \right \|_p=\left ( \sum_{i=1}^{n}\left | x_i \right |^{p}\right )^{\frac{1}{p}} xp=(i=1nxip)p1

1-范数

  • 即绝对值加和,1-范数写成 L1
  • L1范数的几何意义:向量到原点的曼哈顿距离
    ∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \left \| x \right \|_1= \sum_{i=1}^{n}\left | x_i \right | x1=i=1nxi

2-范数

  • 即平方加和开根号,代表向量的长度,2-范数写成 L2
  • L2范数的几何意义:空间中的向量点到原点的欧式距离(欧式距离:两点之间连直线的距离)
    ∥ x ∥ 2 = ∑ i = 1 n ( x i ) 2 \left \| x \right \|_2= \sqrt{\sum_{i=1}^{n}\left ( x_i \right )^{2}} x2=i=1n(xi)2

图解
范数

小贴士
出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。—— 摘自:百度百科-曼哈顿距离

ღ 范数与正则项的关系

范数在后面是非常有用的,在后面的正则项中会用到

L1正则项

  • 就是L1范数的公式,求的是到原点的曼哈顿距离
    ∑ i = 0 n ∣ w i ∣ \sum_{i=0}^{n}\left | w_i \right | i=0nwi

L2正则项

  • 相当于L2范数的平方,求的是欧式距离的平方
    ∑ i = 0 n ( w i ) 2 \sum_{i=0}^{n}\left ( w_i \right )^{2} i=0n(wi)2

在机器学习或深度学习中,所求的模型为 w w w 。一般会希望 w w w 向量所对应的 L1、 L2 范数尽可能的小。(好处: w w w 越小,说明模型的容错能力或泛化能力就越强,越可以防止过拟合)

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> import numpy as np
>>> W = np.array([3,5,6,-7,2,1])
>>> np.abs(W)
array([3, 5, 6, 7, 2, 1])
>>> np.sum(np.abs(W))
24
>>> L1 = np.sum(np.abs(W))  # 绝对值的加和( L1正则项 或 L1范数 )
>>> L1
24
>>> np.square(W)
array([ 9, 25, 36, 49,  4,  1])
>>> np.sum(np.square(W))
124
>>> L2 = np.sum(np.square(W))  # 平方的加和( L2正则项 )
>>> L2
124
>>> np.sqrt(np.sum(np.square(W)))  # 平方加和,开根号( L2范数 )
11.135528725660043

图解:
 范数与正则项

特殊的向量

ღ 0 向量

概念:0 向量是分量全为 0 的向量。如 ( 0 , 0 , . . . , 0 ) \begin{pmatrix} 0,& 0,&.. . &,0 \end{pmatrix} (0,0,...,0)

意义:在机器学习中,对 bias 偏置项进行初始化时,会全部初始为0

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> import numpy as np
>>> np.zeros(10) # 获取长度为 10 的,全为 0 的向量
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
ღ 全为1的向量

概念:分量全为 1 的向量。如 ( 1 , 1 , . . . , 1 ) \begin{pmatrix} 1,& 1,&.. . &,1 \end{pmatrix} (1,1,...,1)

意义
意义

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> np.ones(10) # 获取长度为 10 的,全为 1 的向量
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

小贴士

  • 深度学习中的使用:python 中可使用 import tensorflow as tf
  • TensorFlow是使用广泛的一个深度学习框架,其中也有像 numpy 中 zerosones 这类的API
ღ 稀疏向量与稠密向量

稀疏向量(Sparse Vector)

概念:大部分为0,少部分非0。如 ( 0 , 0 , 1 , 0 , 2 , 0 0 , 0 , 0 ) \begin{pmatrix} 0,& 0,&1, &0,&2, &0&0,&0, &0 \end{pmatrix} (0,0,1,0,2,00,0,0)

稠密向量(Dense Vector)

概念:大部分有值,少部分为0。如 ( 4 , 0 , 1 , 0 , 5 , 1 1 , 1 , 2 ) \begin{pmatrix} 4,& 0,&1, &0,&5,&1&1, &1,&2\end{pmatrix} (4,0,1,0,5,11,1,2)

存储时的区别

主要体现在占空间多少的差异,在计算机存储时:

  • 稀疏向量只需存储:向量长度 length,非0数据的索引号 index 及对应值 value
  • 稠密向量需要存储:向量长度 length,所有数据的索引号 index 及对应值 value
ღ 独热编码(One-Hot 编码)

概念:它是一种特殊的稀疏向量,单独有一个为1,其他为0。如 ( 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ) \begin{pmatrix} 0,& 0,&1, &0,&0, &0,&0, &0 \end{pmatrix} (0,0,1,0,0,0,0,0)

小贴士
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。—— 摘自:百度百科-独热编码

意义:在机器学习中,可通过 One-Hot 编码对离散型数据做离散化,如↓↓↓

SunnyRainyCloudy说明
010若这天为雨天,则雨天位置写1,其他位置写0
100若这天为晴天,则晴天位置写1,其他位置写0
ღ 单位向量

概念:单位向量是 L2 范数为1、模为1、长度为1 的向量
单位向量
计算:单位向量 = 向量 除以 对应的模
e = x ∥ x ∥ e=\frac{x}{\left \| x \right \|} e=xx
向量的模:向量 A B → \overrightarrow{AB} AB 的大小,也就是向量 A B → \overrightarrow{AB} AB 的长度(或称模),记作 ∣ A B → ∣ \left | \overrightarrow{AB} \right | AB 。 —— 参考:百度百科-向量的模

  • 空间向量 ( x , y , z ) ( x , y , z ) (x,y,z),其中 x , y , z x , y , z x,y,z 表示三个轴上的坐标,模长为: x 2 + y 2 + z 2 \sqrt{x^2+y^2+z^2} x2+y2+z2
  • 平面向量 ( x , y ) ( x , y ) (x,y),模长为: x 2 + y 2 \sqrt{x^2+y^2} x2+y2
  • 其中,L2 范数 ∥ x ∥ 2 = ∑ i = 1 n ( x i ) 2 \left \| x \right \|_2= \sqrt{\sum_{i=1}^{n}\left ( x_i \right )^{2}} x2=i=1n(xi)2 :代表的就是 向量的模

用途:单位向量可更好的代表一个方向

  • 通过两向量的单位向量可以知道这两个向量的方向是否一致
  • 向量可以由它所对应的单位向量再乘以一定的值(模)得到

Pyhton中的表示

以下是 cmd 命令端中输入python,所进入的 python 交互窗口

>>> import numpy as np
>>> W = np.array([3,5,6,-7,2,1])
>>> L2 = np.sqrt(np.sum(np.square(W)))  # L2 范数(模)
>>> e = W/L2 # 单位向量 = 向量 除以 模
>>> e
array([ 0.26940795,  0.44901326,  0.53881591, -0.62861856,  0.1796053 ,
        0.08980265])
>>> np.sqrt(np.sum(np.square(e))) # e 的模为 1,说明 e 是单位向量
1.0
>>> L2
11.135528725660043
>>> e * L2  # 单位向量 乘以 模 可得 原向量
array([ 3.,  5.,  6., -7.,  2.,  1.])

—— 说明:本文代码基于 python3.0,文章写于 2022.5.20~5.24

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值