一文带你了解深度学习的前置预备知识(下)

1,502 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

之前我们说过了数据操作以及预处理的知识,对于里面用到的线性代数和概率的知识,我们在本篇文章中详细描述。

线性代数

标量

仅包含一个数值的我们称之为 标量(scalar),它由只有一个元素的张量表示

  • 在深度学习中,标量通常由普通小写字母表示(例如,xxyyzz);
  • R\mathbb{R} 表示所有(连续)实数标量的空间,那么表达式xRx\in\mathbb{R}是表示xx是一个实值标量的整式形式,例如x,y{0,1}x, y \in \{0,1\}表明xxyy是值只能为0011的数字。

在下面的代码中,我们实例化两个标量,并使用它们执行一些熟悉的算术运算,即加法、乘法、除法和指数。

import torch

x = torch.tensor([3.0])
y = torch.tensor([2.0])

x + y, x * y, x / y, x**y

# 运行结果
(tensor([5.]), tensor([6.]), tensor([1.5000]), tensor([9.]))

向量

1. 向量表示

我们可以将向量视为标量值组成的列表,这些标量值称为向量的元素(element)或分量(component)。

当我们使用向量表示数据集中的样本时,它们的值具有一定的现实意义。例如,如果我们正在训练一个模型来预测贷款违约风险,我们可能会将每个申请人与一个向量相关联,其分量与其收入、工作年限、过往违约次数和其他因素相对应。如果我们正在研究医院患者可能面临的心脏病发作风险,我们可能会用一个向量来表示每个患者,其分量为最近的生命体征、胆固醇水平、每天运动时间等。

通常将向量记为粗体、小写的符号(例如,x\mathbf{x}y\mathbf{y}z)\mathbf{z})

我们使用一维张量处理向量x = torch.arange(6),使用下标来引用向量的任一元素。例如,我们可以通过xix_i来引用第ii个元素。注意,元素xix_i是一个标量,大量文献中都会默认列向量是向量的默认方向。在数学中,向量x\mathbf{x}可以写为:

x=[x1x2xn],\mathbf{x} =\begin{bmatrix}x_{1} \\x_{2} \\ \vdots \\x_{n}\end{bmatrix},

其中x1,,xnx_1,\ldots,x_n是向量的元素。

2. 向量维度

向量只是一个数字数组。就像每个数组都有一个长度一样,每个向量也是如此。在数学表示法中,如果我们想说一个向量x\mathbf{x}nn个实值标量组成,我们可以将其表示为xRn\mathbf{x}\in\mathbb{R}^n

向量的长度通常称为向量的维度(dimension)。
当用张量表示一个向量(只有一个轴)时,我们可以通过.shape属性访问向量的长度。形状(shape)是一个元组,列出了张量沿每个轴的长度(维数),对于只有一个轴的张量,形状只有一个元素。

x.shape     # torch.Size([4])

为什么我会着重强调这个概念呢,因为维度(dimension)这个词在不同上下文往往会有不同的含义,这经常会使人感到困惑。

  • 向量的维度 被用来表示向量的长度,即向量或轴的元素数量。
  • 张量的维度 用来表示张量具有的轴数。在这个意义上,张量的某个轴的维数就是这个轴的长度。

矩阵

1. 矩阵定义

向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。

矩阵,我们通常用粗体、大写字母来表示(例如,X\mathbf{X}Y\mathbf{Y}Z\mathbf{Z}),在代码中表示为具有两个轴的张量。

在数学表示法中,我们使用ARm×n\mathbf{A} \in \mathbb{R}^{m \times n}来表示矩阵A\mathbf{A},其由mm行和nn列的实值标量组成。直观地,我们可以将任意矩阵ARm×n\mathbf{A} \in \mathbb{R}^{m \times n}视为一个表格,其中每个元素aija_{ij}属于第ii行第jj列:

A=[a11a12a1na21a22a2nam1am2amn].\mathbf{A}=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{bmatrix}.

对于任意ARm×n\mathbf{A} \in \mathbb{R}^{m \times n},A\mathbf{A}的形状是(mm,nn)或m×nm \times n。当矩阵具有相同数量的行和列时,我们称之为方矩阵(square matrix)。

当调用函数来实例化张量时,我们可以通过指定两个分量mmnn来创建一个形状为m×nm \times n的矩阵

A = torch.arange(20).reshape(5, 4)
A

2. 矩阵的转置

当我们交换矩阵的行和列时,可以得到一个新的矩阵,我们称之为矩阵的转置(transpose),用a\mathbf{a}^\top来表示矩阵的转置。

  • 如果B=A\mathbf{B}=\mathbf{A}^\top,则对于任意iijj,都有bij=ajib_{ij}=a_{ji}

  • 作为方矩阵的一种特殊类型,对称矩阵(symmetric matrix)A\mathbf{A}等于其转置:A=A\mathbf{A} = \mathbf{A}^\top

3. 哈达玛积

两个矩阵按元素相乘称为哈达玛积(Hadamard product)(数学符号\odot)。

对于矩阵ARm×n\mathbf{A} \in \mathbb{R}^{m \times n}BRm×n\mathbf{B} \in \mathbb{R}^{m \times n},其中矩阵A\mathbf{A} 和 矩阵B\mathbf{B}ii行和第jj列的元素分别为aija_{ij},bijb_{ij}。那么这两个矩阵的哈达玛积为:

AB=[a11b11a12b12a1nb1na21b21a22b22a2nb2nam1bm1am2bm2amnbmn].\mathbf{A} \odot \mathbf{B} = \begin{bmatrix} a_{11} b_{11} & a_{12} b_{12} & \dots & a_{1n} b_{1n} \\ a_{21} b_{21} & a_{22} b_{22} & \dots & a_{2n} b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} b_{m1} & a_{m2} b_{m2} & \dots & a_{mn} b_{mn} \end{bmatrix}.

点积(Dot Product)

线性代数中最基本的操作之一是点积。给定两个向量x,yRd\mathbf{x},\mathbf{y}\in\mathbb{R}^d,它们的点积 xy\mathbf{x}^\top\mathbf{y}(或x,y\langle\mathbf{x},\mathbf{y}\rangle)是相同位置的按元素乘积的和

  • xy=i=1dxiyi\mathbf{x}^\top \mathbf{y} = \sum_{i=1}^{d} x_i y_i
y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)

# tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.)

点积在很多场合都有用。例如,给定一组由向量xRd\mathbf{x} \in \mathbb{R}^d表示的值,和一组由wRd\mathbf{w} \in \mathbb{R}^d表示的权重。x\mathbf{x}中的值根据权重w\mathbf{w}的加权和可以表示为点积xw\mathbf{x}^\top \mathbf{w}。当权重为非负数且和为1(即(i=1dwi=1)\left(\sum_{i=1}^{d}{w_i}=1\right))时,点积表示加权平均(weighted average)。将两个向量归一化得到单位长度后,点积表示它们夹角的余弦。

概率

在某种形式上,机器学习就是做出预测。举例说明
例一:如图所示,我们很容易的可以从160×160160 \times 160像素的分辨率识别出狗,但它在40×4040\times40像素上变得具有挑战性,而且在10×1010 \times 10像素下几乎是不可能的。换句话说,我们在很远的距离(从而降低分辨率)区分狗的能力可能会接近不知情的猜测。 概率给了我们一种正式的途径来说明我们的确定性水平。

  • 如果我们完全肯定图像是一只狗,我们说标签yy是"狗"的概率,表示为P(y=P(y="狗"))等于11
  • 如果我们没有证据表明y=y=“猫”或y=y=“狗”,那么我们可以说这两种可能性是等可能的,把它表示为P(y=P(y="猫")=P(y=)=P(y="狗")=0.5)=0.5
  • 如果我们有足够的信心,但不确定图像描绘的是一只狗,我们可以将概率赋值为0.5<P(y=0.5<P(y="狗")<1)<1

image.png

例二,给出一些天气监测数据,我们想预测明天金华下雨的概率。如果是夏天,下雨的概率是0.5。

在这两种情况下,我们都不确定结果。但这两种情况之间有一个关键区别。在第一种情况中,图像实际上是狗或猫,我们只是不知道哪个。在第二种情况下,结果实际上可能是一个随机的事件。因此,概率是一种灵活的语言,用于说明我们的确定程度。

联合概率

联合概率(joint probability)P(A=a,B=b)P(A=a,B=b)。给定任何值aabb,联合概率可以回答,同时满足A=a同时满足A=aB=bB=b的概率是多少。

请注意,对于任何aabb的取值,P(A=a,B=b)P(A=a)P(A = a, B=b) \leq P(A=a)。这点是确定的,因为要同时发生A=aA=aB=bB=bA=aA=a就必须发生,B=bB=b也必须发生(反之亦然)。因此,A=aA=aB=bB=b同时发生的可能性不大于A=aA=a或是B=bB=b单独发生的可能性。

条件概率

我们称下面比率为条件概率(conditional probability),并用P(B=bA=a)P(B=b \mid A=a)表示它:它是B=bB=b的概率,前提是A=aA=a已发生。

  • 0P(A=a,B=b)P(A=a)10 \leq \frac{P(A=a, B=b)}{P(A=a)} \leq 1

期望和差异

为了概括概率分布的关键特征,我们需要一些测量方法。

随机变量XX期望(或平均值)表示为

  • E[X]=xxP(X=x).E[X] = \sum_{x} x P(X = x).

当函数f(x)f(x)的输入是从分布PP中抽取的随机变量时,f(x)f(x)的期望值为

  • ExP[f(x)]=xf(x)P(x).E_{x \sim P}[f(x)] = \sum_x f(x) P(x).

在许多情况下,我们希望衡量随机变量XX与其期望值的偏置。这可以通过方差来量化

  • Var[X]=E[(XE[X])2]=E[X2]E[X]2.\mathrm{Var}[X] = E\left[(X - E[X])^2\right] = E[X^2] - E[X]^2.

方差的平方根被称为标准差(standared deviation)。

随机变量函数的方差衡量的是,当从该随机变量分布中采样不同值xx时,函数值偏离该函数的期望的程度:

  • Var[f(x)]=E[(f(x)E[f(x)])2].\mathrm{Var}[f(x)] = E\left[\left(f(x) - E[f(x)]\right)^2\right].

总结

这部分的数学知识还是很重要的,但本文涉及的知识面并没有那么全,只是讲了论文中经常用到的数学知识。如果想要了解更多,大家可以在掘金平台上再搜索补习下相关知识。同时对于本文所叙述的内容,我概括了以下几点:

  • 标量、向量、矩阵和张量是线性代数中的基本数学对象。
  • 向量泛化自标量,矩阵泛化自向量。
  • 标量、向量、矩阵和张量分别具有零、一、二和任意数量的轴。