深度学习阅读笔记
前言
目前主要有两种<b>度量模型深度</b>的方式。第一种方式是基于评估架构所需执行的顺序指令的数目。假设我们将模型表示为给定输入后,计算对应输出的流程图,则可以将这张流程图中的最长路径视为模型的深度。另一种是在深度概率模型中使用的方法,它不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型深度。在这种情况下,计算每个概念表示的计算流程图的深度可能比概念本身的图更深。这是因为系统对较简单概念的理解在给出更复杂概念的信息后可以进一步精细化
目前大多数神经网络是基于一个称为<b>整流线性单元(rectified linear unit)</b>的神经单元模型。在 20 世纪 80 年代,神经网络研究的第二次浪潮在很大程度上是伴随一个被称为<b>联结主义(connectionism)</b>或<b>并行分布处理 ( parallel distributed processing)</b> 潮流而出现的。联结主义的中心思想是,当网络将大量简单的计算单元连接在一起时可以实现智能行为
联结主义中的几个关键概念在今天的深度学习中仍然是非常重要的
其中一个概念是<b>分布式表示</b>(distributed representation)。其思想是:系统的每一个输入都应该由多个特征表示,并且每一个特征都应该参与到多个可能输入的表示。即:可以将某一个具体的输入对象的各个组成元素抽象为多个特征,然后这多个特征就能够很好的描述该物体的特点或性质
联结主义潮流的另一个重要成就是<b>反向传播</b>在训练具有内部表示的深度神经网络中的成功使用以及反向传播算法的普及
线性代数基础
<b>转置</b>
$$ (A^T){i,j} = A{j,i} $$ <b>乘积</b>
$$ C = AB => C_{i.j} = \sum_k A_{i,k}B_{k,j} $$
矩阵乘积拥有的<b>性质</b>
<b>分配律</b>
$$ A(B + C) = AB + AC $$ <b>结合律</b>
$$ A(BC) = (AB)C $$
<font color=red>矩阵乘积不满足交换律</font>
两个相同维数的向量 x 和 y 的 <b>点积</b>(dot product)可看作是矩阵乘积 $x^{T}y$
两个向量的点积满足交换律
$$ x^{T}y=y^{T}x $$
矩阵乘积的转置
$$ (AB)^{T} = B^{T}A^{T} $$
由两个向量点积的结果是标量,标量转置是自身,可以得到
$$ x^{T}y = (x^{T}y)^{T} = y^{T}x $$
<b>单位矩阵</b>(identity matrix): 任意向量和单位矩阵相乘,都不会改变。将保持 n 维向量不变的单位矩阵记作 $I_{n}$。形式上,$I_{n} \in R^{n×n}$
单位矩阵的结构很简单:所有沿主对角线的元素都是 1,而所有其他位置的元素都是0
矩阵 $A$ 的 <b>矩阵逆</b>(matrix inversion)记作 $A^{−1}$,定义为
$$ A^{-1}A = I_{n} $$
等式 $Ax = b$,求解可得 $x = A^{-1}b$
如果 $A^{-1}$ 存在,那么该方程对于每一个向量 $b$ 恰好存在一个解。但是,对于方程组而言,对于向量 $b$ 的某些值,有可能不存在解,或者存在无限多个解。存在多于一个解但是少于无限多个解的情况是不可能发生的。因为如果 $x,y$ 都是解,那么 $z = ax + (1-a)y$ 也是一个解
一组向量的 <b>生成子空间</b>(span)是原始向量线性组合后所能抵达的点的集合。确定 $Ax = b$ 是否有解相当于确定向量 $b$ 是否在 $A$ 列向量的生成子空间中。这个特殊的生成子空间被称为 $A$ 的 <b>列空间</b>(column space)或者 $A$ 的 <b>值域</b>(range)
$n$ 为 $A$ 列空间维度,$m$ 为 $b$ 的维度,使方程对每一点都有解的必要条件是 $n \ge m$ 。这不是一个充分条件,因为有些列向量可能是冗余的。这种冗余被称为 <b>线性相关</b>(linear dependence)。如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为 <b>线性无关</b>(linearly independent)。所以,如果一个矩阵的列空间涵盖整个 $R^{m}$ ,那么该矩阵必须包含至少一组 $m$ 个线性无关的向量,其中 $b \in R^{m}$ 。这是对于任意 $b$ 的取值都有解的充分必要条件
不存在一个 $m$ 维向量的集合具有多于 $m$ 个彼此线性不相关的列向量,但是一个有多于 $m$ 个列向量的矩阵有可能拥有不止一个大小为 $m$ 的线性无关向量集
要想使矩阵可逆,需要保证式子 $Ax = b$ 对于每一个 $b$ 值至多由一个解。为此,需要确保该矩阵至多有 m 个列向量。否则,该方程会有不止一个解
要想使用 $x = A^{-1}b$ 求得 $x$ ,必须保证一个 $A$ 是一个<b>方阵</b>(square),即 m = n,并且所有列向量都是线性无关的。一个列向量线性相关的方阵被称为 <b>奇异的</b>(singular)。如果矩阵 $A$ 不是一个方阵或者是一个奇异的方阵,该方程仍然可能有解。但是不能使用矩阵逆去求解
对于方阵而言,它的左逆和右逆是相等的
在机器学习中,经常使用被称为 <b>范数</b>(norm)的函数衡量向量大小。形式上,$L^{p}$ 范数定义如下
$$ ||x||_{p} = (\sum_i |x_i|^{p})^{\frac{1}{p}} $$ 其中 $p \in R, p \ge 1$
范数是将向量映射到非负值的函数。直观上来说,向量 $x$ 的范数衡量从原点到点 $x$ 的距离。范数是满足下列性质的任意函数
- $f(x) = 0 ⇒ x = 0$
- $f(x + y) \le f(x) + f(y) ( 三角不等式(triangle inequality))$
- $\forall \alpha \in R, f(\alpha x) = |\alpha|f(x)$
$L^{2}$ 范数被称为 <b>欧几里得范数</b>(Euclidean norm)。它表示从原点出发到向量 $x$ 确定的点的欧几里得距离。平方 $L^{2}$ 范数也经常用来衡量向量的大小,可以简单地通过点积 $x^{⊤}x$ 计算
平方 $L^{2}$ 范数在数学和计算上都比 $L^{2}$ 范数本身更方便。但是在很多情况下,平方 $L^{2}$ 范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^{1}$ 范数
当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用 $L^{1}$ 范数。每当 $x$ 中某个元素从 0 增加 $\epsilon$ ,对应的 $L^{1}$ 范数也会增加 $\epsilon $
另外一个经常在机器学习中出现的范数是 $L^{\infty}$ 范数,也被称为 <b>最大范数</b>(max norm)。这个范数表示向量中具有最大幅值的元素的绝对值
$$ ||x||{\infty} = max_i|x{i}| $$
有时候我们可能也希望衡量矩阵的大小。在深度学习中,最常见的做法是使用 <b>Frobenius 范数</b>(Frobenius norm)
$$ ||A||F = \sqrt{\sum{i,j}A^2_{i.j}} $$
两个向量的 <b>点积</b>(dot product)可以用范数来表示,如
$$ x^Ty = ∥x∥_2 ∥y∥_2 \cos \theta $$
其中,$\theta$ 为向量 $x, y$ 之间的夹角
<b>对角矩阵</b>(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。用 $diag(v)$ 表示一个对角元素由向量 $v$ 中元素给定的对角方阵。对角方阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,$diag(v)^{−1} = diag([\frac{1}{v1}, . . . , \frac{1}{vn}]^T)$
不是所有的对角矩阵都是方阵。长方形的矩阵也有可能是对角矩阵。非方阵的对角矩阵没有逆矩阵,但我们仍然可以高效地计算它们的乘法。对于一个长方形对角矩阵 $D$ 而言,乘法 $Dx$ 会涉及到 $x$ 中每个元素的缩放,如果 $D$ 是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果 $D$ 是胖宽型矩阵,那么在缩放后去掉最后一些元素
<b>对称</b>(symmetric)矩阵是转置和自己相等的矩阵,即 $A = A^T$
<b>单位向量</b>(unit vector)是具有 <b>单位范数</b>(unit norm)的向量,如$||x||_2 = 1$
如果 $x^Ty = 0$,那么向量 $x$ 和向量 $y$ 互相 <b>正交</b>(orthogonal)。如果两个向量都有非零范数,那么这两个向量之间的夹角是 90 度。在 $R^n$ 中,至多有 $n$ 个范数非零向量互相正交。如果这些向量不仅互相正交,并且范数都为 1,那么我们称它们是 <b>标准正交</b>(orthonormal)
<b>正交矩阵</b>(orthogonal matrix)是指行向量和列向量是分别标准正交的方阵:$A^TA = AA^T = I$,这意味着 $A^{-1} = A^T$
<b>特征分解</b>(eigendecomposition)是使用最广的矩阵分解之一,即将矩阵分解成一组特征向量和特征值。方阵 $A$ 的 <b>特征向量</b>(eigenvector)是指与 $A$ 相乘后相当于对该向量进行缩放($Av = λv$)的非零向量 $v$。标量 $λ$ 被称为这个特征向量对应的 <b>特征值</b>(eigenvalue)
如果 $v$ 是 $A$ 的特征向量,那么任何缩放后的向量 $sv (s \in R,s \ne 0)$ 也是 A 的特征向量。此外,$sv$ 和 $v$ 有相同的特征值
假设矩阵 $A$ 有 $n$ 个线性无关的特征向量 ${v(1), . . . , v(n)}$,对应着特征值${λ1, . . . , λn}$。我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$V = [v^{(1)}, . . . , v^{(n)}]$。 类似地,我们也可以将特征值连接成一个向量 $λ = [λ_1, . . . , λ_n]^T$。因此 $A$ 的 <b>特征分解</b>(eigendecomposition)可以记作
$$ A = Vdiag(λ)V^{-1} $$
每个实对称矩阵都可以分解成实特征向量和实特征值
$$ A = Q Λ Q^{T} $$ 其中, $Q$ 是 $A$ 的特征向量组成的正交矩阵,$Λ$ 是对角矩阵。特征值 $Λ_{i,i}$ 对应的特征向量是矩阵 $Q$ 的第i列,记作 $Q_{:,i}$
因为 $Q$ 是正交矩阵,我们可以将 $A$ 看作沿方向 $v^{(i)}$ 延展 $λ_i$ 倍的空间
任意一个实对称矩阵 A 都有特征分解,但是特征分解可能并不唯一。如果两个或多个特征向量拥有相同的特征值,那么在由这些特征向量产生的生成子空间中,任意一组正交向量都是该特征值对应的特征向量
矩阵是奇异的当且仅当含有零特征值
所有特征值都是正数的矩阵被称为 <b>正定(positive definite)</b>;所有特征值都是非负数的矩阵被称为 <b>半正定(positive semidefinite)</b>。同样地,所有特征值都是负数的矩阵被称为 <b>负定(negative definite)</b>;所有特征值都是非正数的矩阵被称为 <b>半负定(negative semidefinite)</b>
另一种分解矩阵的方法,被称为 <b>奇异值分解(singular value decomposition, SVD)</b>,将矩阵分解为 <b>奇异向量(singular vector)</b> 和 <b>奇异值(singular value)</b>。每个实数矩阵都有一个奇异值分解,但不一定都有特征分解
奇异值分解将矩阵 $A$ 分解成三个矩阵的乘积
$$ A = UDV^{T} $$ 假设 $A$ 是一个 m × n 的矩阵,那么 $U$ 是一个 m × m 的矩阵,$D$ 是一个 m × n 的矩阵,$V$ 是一个 n × n 矩阵。矩阵 $U$ 和 $V$ 都定义为正交矩阵,而矩阵 $D$ 定义为对角矩阵,但不一定是方阵
对角矩阵 $D$ 对角线上的元素被称为矩阵 $A$ 的 <b>奇异值(singular value)</b>。矩阵 $U$ 的列向量被称为 <b>左奇异向量(left singular vector)</b>,矩阵 $V$ 的列向量被称 <b>右奇异向量(right singular vector)</b>
$A$ 的 <b>左奇异向量(left singular vector)</b>是 $AA^⊤$ 的特征向量。$A$ 的 <b>右奇异向量(right singular vector)</b>是 $A^{⊤}A$ 的特征向量。$A$ 的非零奇异值是 $A^{⊤}A$ 特征值的平方根,同时也是$AA^⊤$ 特征值的平方根
<b>迹运算</b>返回的是矩阵对角元素的和
$$ Tr(A) = \sum_i A_{i,i} $$ 迹运算提供了另一种描述矩阵Frobenius范数的方式
$$ ||A||_F = \sqrt{Tr(AA^{T})} $$
迹运算在转置运算下是不变的 $$ Tr(A) = Tr(A^T) $$
多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的
$$ Tr(ABC) = Tr(CAB) = Tr(BCA) $$
标量在迹运算后仍然是它自己:$a = Tr(a)$
<b>行列式</b>,记作 <b>det(A)</b>,是一个将方阵 A 映射到实数的函数。行列式等于矩阵特征值的乘积。行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。如果行列式是 0,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。如果行列式是 1,那么这个转换保持空间体积不变
<b>主成分分析(principal components analysis, PCA)</b>是一个简单的机器学习算法,可以通过基础的线性代数知识推导
在人工智能领域,<b>概率论</b>主要有两种用途。首先,概率法则告诉我们 AI 系统如何推理,据此我们设计一些算法来计算或者估算由概率论导出的表达式。其次,我们可以用概率和统计从理论上分析我们提出的 AI 系统的行为
几乎所有的活动都需要一些在不确定性存在的情况下进行推理的能力。不确定性有三种可能的来源
- 被建模系统内在的随机性
- 不完全观测。即使是确定的系统,当我们不能观测到所有驱动系统行为的变量时,该系统也会呈现随机性
- 不完全建模。当我们使用一些必须舍弃某些观测信息的模型时,舍弃的信息会导致模型的预测出现不确定性
直接与事件发生的频率相联系,被称为 <b>频率派概率(frequentist probability)</b>;涉及到确定性水平,被称为 <b>贝叶斯概率(Bayesian probability)</b>,如:在医生诊断病人的例子中,我们用概率来表示一种 <b>信任度(degree of belief)</b>,其中 1 表示非常肯定病人患有流感,而 0 表示非常肯定病人没有流感
<b>概率分布(probability distribution)</b>用来描述随机变量或一簇随机变量在每一个可能取到的状态的可能性大小。描述概率分布的方式取决于随机变量是离散的还是连续的
离散型变量的概率分布可以用 <b>概率质量函数(probability mass function, PMF)</b>来描述。概率质量函数将随机变量能够取得的每个状态映射到随机变量取得该状态的概率
概率质量函数可以同时作用于多个随机变量。这种多个变量的概率分布被称为 <b>联合概率分布(joint probability distribution)</b>。P(x = $x$, y = $y$) 表示 x = $x$ 和 y = $y$ 同时发生的概率。我们也可以简写为 P($x$, $y$)
当研究的对象是连续型随机变量时,用 <b>概率密度函数(probability density function, PDF)</b>而不是概率质量函数来描述它的概率分布
概率密度函数 p(x) 并没有直接对特定的状态给出概率,相对的,它给出了落在面积为 δx 的无限小的区域内的概率为 p(x)δx
有时候,我们知道了一组变量的联合概率分布,但想要了解其中一个子集的概率分布。这种定义在子集上的概率分布被称为 <b>边缘概率分布(marginal probability distribution)</b>,如:已知P(x, y),求P(x)
某个事件在给定其他事件发生时出现的概率叫做<b>条件概率</b>,将给定 x = $x$,y = $y$ 发生的条件概率记为 P(y = $y$ | x = $x$)
任何多维随机变量的联合概率分布,都可以分解成只有一个变量的条件概率相乘的形式
$$ P(x^{(1)},...,x^{(n)}) = P(x^{(1)})\pi^n_{i=2} P(x(i) | x^{(1)},...x^{(i-1)}) $$ 这个规则被称为概率的 <b>链式法则(chain rule)</b>或者 <b>乘法法则(product rule)</b>。举例
$$ P(a, b, c) = P(a | b,c)P(b, c) $$ $$ P(b, c) = P(b | c)P(c)
$$ $$ P(a, b, c) = P(a | b,c)P(b | c)P(c) $$
两个随机变量 x 和 y,如果它们的概率分布可以表示成两个因子的乘积形式,并且一个因子只包含 x 另一个因子只包含 y,我们就称这两个随机变量是 <b>相互独立的(independent)</b>
$$ \forall x \in X, y \in Y, p(x = x_0, y = y_0) = P(x = x_0)p(y = y_0) $$
如果关于 x 和 y 的条件概率分布对于 z 的每一个值都可以写成乘积的形式,那么这两个随机变量 x 和 y 在给定随机变量 z 时是 条件独立的(conditionally independent)
$$ \forall x \in X, y \in Y, z \in Z, p(x = x_0, y = y_0 | z = z_0) = p(x = x_0 | z = z_0)p(y = y_0 | z = z_0) $$
函数 f(x) 关于某分布 P(x) 的 <b>期望(expectation)</b>或者 <b>期望值(expectedvalue)</b>是指,当 x 由 P 产生,f 作用于 x 时,f(x) 的平均值
<b>方差(variance)</b>衡量的是当我们对 x 依据它的概率分布进行采样时,随机变量 x 的函数值会呈现多大的差异
$$ Var(f(x)) = E[(f(x) - E[f(x)])^2] $$ 当方差很小时,f(x) 的值形成的簇比较接近它们的期望值。方差的平方根被称为 <b>标准差(standard deviation)</b>
<b>协方差(covariance)</b>在某种意义上给出了两个变量线性相关性的强度以及这些变量的尺度
$$ Cov(f(x), g(y)) = E[(f(x) − E[f(x)])(g(y) − E[g(y)])]. $$
协方差的绝对值如果很大则意味着变量值变化很大并且它们同时距离各自的均值很远。如果协方差是正的,那么两个变量都倾向于同时取得相对较大的值。如果协方差是负的,那么其中一个变量倾向于取得相对较大的值的同时,另一个变量倾向于取得相对较小的值,反之亦然。其他的衡量指标如 <b>相关系数(correlation)</b>将每个变量的贡献归一化,为了只衡量变量的相关性而不受各个变量尺度大小的影响
两个变量如果相互独立那么它们的协方差为零,如果两个变量的协方差不为零那么它们一定是相关的。两个变量如果协方差为零,它们之间一定没有线性关系。独立性比零协方差的要求更强,因为独立性还排除了非线性的关系。两个变量相互依赖但具有零协方差是可能的
随机向量 $x ∈ R^n$ 的 <b>协方差矩阵(covariance matrix)</b>是一个 n × n 的矩阵,并且满足
$$ Cov(x)_{i,j} = Cov(x_i, x_j) $$ 协方差矩阵的对角元是方差
$$ Cov(x_i, x_i) = Var(x_i) $$
最常用的分布就是 <b>正态分布(normal distribution)</b>,也称为 <b>高斯分布(Gaussian distribution)</b>
$$ N(x; \mu, \sigma^2) = \sqrt{\frac{1}{2\pi\sigma^2}}exp(-\frac{1}{2\sigma^2}(x - \mu)^2) $$
正态分布的中心峰的 x 坐标由 $\mu$ 给出,峰的宽度受 $\sigma$ 控制
在具有相同方差的所有可能的概率分布中,正态分布在实数上具有最大的不确定性。可以认为正态分布是对模型加入的先验知识量最少的分布
正态分布可以推广到 $R^n$ 空间,这种情况下被称为 <b>多维正态分布(multivariate normal distribution)</b>。它的参数是一个正定对称矩阵 $\sum$
$$ N(x; \mu, \sum) = \sqrt{\frac{1}{(2\pi)^ndet(\sum)}}exp(-\frac{1}{2}(x-\mu)^T\sum^{-1}(x - \mu)) $$ 此时,参数 $\mu$ 仍然表示分布的均值,只不过现在是向量值。参数 $\sum$ 给出了分布的协方差矩阵
当对很多不同参数下的概率密度函数多次求值时,协方差矩阵并不是一个很高效的参数化分布的方式,因为对概率密度函数求值时需要对 $\sum$ 求逆。我们可以使用一个 <b>精度矩阵(precision matrix)</b> $\beta$ 进行替代
$$ N(x; \mu, \beta) = \sqrt{\frac{det(\beta)}{(2\pi)^n}}exp(-\frac{1}{2}(x-\mu)^T\beta(x - \mu)) $$
通过 <b>Dirac delta 函数(Dirac delta function)$\delta(x)$</b> 定义概率密度函数来将望概率分布中的所有质量都集中在一个点上
$$ p(x) = \sigma(x - \mu) $$
Dirac delta 函数被定义成在除了 $x=\mu$ 以外的所有点的值都为 0,但是积分为 1。在 $x=\mu$ 处具有无限窄也无限高的峰值的概率质量
Dirac 分布经常作为 <b>经验分布(empirical distribution)</b>的一个组成部分出现
$$ \hat{p}(x) = \frac{1}{m}\sum_{i=1}^{m} \sigma(x - x^{(i)}) $$ 经验分布将概率密度 $\frac{1}{m}$ 赋给 m 个点 $x^{(1)}$, . . . , $x^{(m)}$ 中的每一个,这些点是给定的数据集或者采样的集合。只有在定义连续型随机变量的经验分布时,Dirac delta 函数才是必要的
一些等式
$$ \sigma(x) = \frac{exp(x)}{exp(x) + exp(0)} $$ $$ \frac{d\sigma(x)}{dx} = \sigma(x)(1-\sigma(x)) $$ $$ 1 - \sigma(x) = \sigma(-x) $$ $$ log\sigma(x) = -\zeta(-x) $$ $$ \frac{d\zeta(x)}{d(x)} = \sigma(x) $$ $$ \forall x \in (0,1), \sigma^{-1}(x) = log(\frac{x}{1-x}) $$ $$ \forall x > 0, \zeta^{-1}(x) = log(exp(x) - 1) $$ $$ \zeta(x) = \int_{-\infty}^x \sigma(y)dy $$ $$ \zeta(x) - \zeta(-x) = x $$
<b>贝叶斯规则(Bayes' rule)</b>
$$ P(x | y) = \frac{P(x)P(y | x)}{P(y)} $$
如果我们对于同一个随机变量 $x$ 有两个单独的概率分布 $P(x)$ 和 $Q(x)$,我们可以使用 <b>KL 散度(Kullback-Leibler (KL) divergence)</b>来衡量这两个分布的差异
$$ D_{KL}(P||Q) = E_{X \sim P}[log\frac{P(x)}{Q(x)}] = E_{X \sim P}[logP(x) - logQ(x)] $$ 在离散型变量的情况下,KL 散度衡量的是,当我们使用一种被设计成能够使得概率分布 $Q$ 产生的消息的长度最小的编码,发送包含由概率分布 $P$ 产生的符号的消息时,所需要的额外信息量
KL 散度有很多有用的性质,最重要的是它是非负的。KL 散度为 0 当且仅当 $P$ 和 $Q$ 在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是 ‘‘几乎处处’’ 相同的。因为 KL 散度是非负的并且衡量的是两个分布之间的差异,它经常被用作分布之间的某种距离。然而,它并不是真的距离因为它不是对称的:对于某些 $P$ 和 $Q$,$DKL(P||Q) ̸= DKL(Q||P)$。这种非对称性意味着选择 $DKL(P||Q)$ 还是$DKL(Q||P)$ 影响很大
<b>交叉熵(cross-entropy)</b>
$$ H(P, Q) = H(P) + D_{KL}(P||Q) = -E_{X\sim P}logQ(x) $$ 交叉熵和 KL 散度很像但是缺少左边一项。针对 Q 最小化交叉熵等价于最小化 KL 散度,因为 Q 并不参与被省略的那一项
一种极具毁灭性的舍入误差是 <b>下溢(underflow)</b>。当接近零的数被四舍五入为零时发生下溢。许多函数在其参数为零而不是一个很小的正数时才会表现出质的不同。另一个极具破坏力的数值错误形式是 <b>上溢(overflow)</b>。当大量级的数被近似为$\infty$ 或 $-\infty$ 时发生上溢。进一步的运算通常会导致这些无限值变为非数字。必须对上溢和下溢进行数值稳定的一个例子是 <b>softmax 函数(softmax function)</b>。softmax 函数经常用于预测与 Multinoulli 分布相关联的概率,定义为
$$ softmax(x)i = \frac{exp(x_i)}{\sum{j=1}^n exp(x_j)} $$ 对于 $softmax(x)$ 的上溢和下溢问题,可以通过计算 $softmax(z)$ 同时解决,其中 $z = x - max_i x_i$ 。减去 $max_i x_i$ 导致 exp 的最大参数为 0,这排除了上溢的可能性。同样地,分母中至少有一个值为 1 的项,这就排除了因分母下溢而导致被零除的可能性
<b>条件数</b>表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化
对于函数 $ f(x) = A^{-1}x $。当 $A \in R^{n × n}$具有特征值分解时,其条件数为
$$ max_{i,j} |\frac{\lambda_i}{\lambda_j}| $$ 这是最大和最小特征值的模之比1。当该数很大时,矩阵求逆对输入的误差特别敏感
我们把要最小化或最大化的函数称为 <b>目标函数(objective function)</b>或 <b>准则(criterion)</b>。当我们对其进行最小化时,我们也把它称为 <b>代价函数(cost function)</b>、<b>损失函数(loss function)</b>或 <b>误差函数(error function)</b>
对于 $y = f(x)$,导数告诉我们如何更改 $x$ 来略微地改善 $y$ 。例如,我们知道对于足够小的 $\epsilon$ 来说,$f(x − \epsilon sign(f′(x)))$ 是比 $f(x) $小的。因此我们可以将 $x$ 往导数的反方向移动一小步来减小 $f(x)$。这种技术被称为 <b>梯度下降(gradient descent)</b>
当 $f′(x) = 0$,导数无法提供往哪个方向移动的信息。 $f′(x) = 0$ 的点称为 <b>临界点(critical point)</b>或 <b>驻点(stationary point)</b>。一个 <b>局部极小点(local minimum)</b>意味着这个点的 <b>f(x)</b> 小于所有邻近点,因此不可能通过移动无穷小的步长来减小 $f(x)$ 。一个 <b>局部极大点(local maximum)</b>意味着这个点的 $f(x)$ 大于所有邻近点,因此不可能通过移动无穷小的步长来增大 $f(x)$。有些临界点既不是最小点也不是最大点。这些点被称为 <b>鞍点(saddle point)</b>。使 f(x) 取得绝对的最小值(相对所有其他值)的点是 <b>全局最小点(global minimum)</b>。函数可能只有一个全局最小点或存在多个全局最小点,还可能存在不是全局最优的局部极小点
有时候,在 x 的所有可能值下最大化或最小化一个函数 f(x) 不是我们所希望的。相反,我们可能希望在 x 的某些集合 S 中找 f(x) 的最大值或最小值。这被称为 <b>约束优化(constrained optimization)</b>。在约束优化术语中,集合 S 内的点 x 被称为 <b>可行(feasible)点</b>