深度学习(书)
第一章 前言
$log$表示自然对数$ln$
数据的表示:对算法性能产生影响
特征集=>不知道提取哪些=>表示学习(representation learning,机器学习发掘表示本身,最少的人工干预)
- 自编码器(autoencoder):编码器(encoder)+解码器(decoder),训练目标:希望编码解码后尽可能多保留信息。
- 变差因素(factors of variation):解释观察数据,通常不能直接观察。需要理清变差因素并且忽略不重要的。
- 抽象特征提取困难,深度学习(deep learning)用较简单的方法表达复杂表示。
- 将复杂映射分解成一系列嵌套简单映射(模型的不同层)
- 输入展示在可见层(visible layer),之后隐藏层(hidden layer)
- 组合简单的概念表示图像中:多层感知机(multilayer perceptron,MLP):将输入值映射到输出值的函数,简单函数复合而成。每一次应用为输入提供新的表示。
- 某层激活函数里面,还保留着状态信息,用于帮助程序理解输入。
- 评估(深度的两种定义):
- 流程图最长路径:深度
- 描述概念彼此如何关联的图:深度
- $Deep\ Learning\sub Representation\ Learning\sub Machine\ Learning\sub AI$
- Classic machine learning 相比较于Rule-based systems多了从特征的映射,Representation learning将手动的feature改成了自动的feature,Deep learning将feature拆分成simple features和additional layers of more abstract features
人工神经网络:artificial neural network, ANN
控制论:学习一组参数,直接做内积进行输出
McCulloch-Pitts神经元:脑功能早期模型,操作人员设定权重。控制论输出的正负判断输入类别。
感知机:根据每个类别输出样本学习权重。
自适应先行单元:adaptive linear element,ADALINE:返回f(x)来预测实数,并且可以学习从数据中预测
- 随机梯度下降:某种方法可以用于调节ADALINE权重
线性模型:无法学习XOR
现在:
基于整流线性单元(rectified linear unit)的神经单元模型
计算神经科学:了解大脑在算法层面上的工作
-
联结主义:connectionism,也称并行分布处理(parallel distributed processing),认知科学背景。认为:当网络将大量简单计算单元连接在一起可以实现智能行为(适用于神经元)
其中涉及到:
- 分布式表示distributed representation:每一个输入都应该由多个特征表示,每一个特征都应该参与到多个可能输入的表示。(多对多。如一共有3种颜色3种物体,颜色可以从所有种类的物体中学习)
- 反向传播
- 长短期记忆long short-tem memory, LSTM网络:序列建模任务中。(带有循环的神经网络,信息保留一段时间)
第二章 线代
张量tensor:超过二维的数组(即超过二维的矩阵)
广播broadcasting:隐式复制一个到很多方式,如矩阵和向量相加,即向量作为一个行向量,和矩阵中的每一行相加。
矩阵相乘:
- 元素对应乘积(element-wise product,相同位置相乘,Hadamard product,记为$A\odot B$
- 点积,正常相乘
矩阵相乘服从分配律结合律
逆矩阵精度有限,因此不会实际使用。
生成子空间span:生成的空间(原始向量线性组合之后能抵达的所有点。)
列空间:$Ax=b$的所有$b$
奇异的singular:方块矩阵列线性相关(非满秩),不可逆。
$L_p$范数:$||x||p=\left(\sum\limits{i}|x_i|p\right){\frac 1p}$
范数:只有0对应的是0,三角不等式,线性。
最大范数max norm:$||x||{\infty}=\max\limits{i}|x_i|$
衡量矩阵大小:Frobenius范数:$||A||F=\sqrt{\sum\limits{i,j}A^2_{i,j}}$
正交矩阵:行向量、列向量为标准正交,转置为逆
特征分解:分解成(右)特征向量$\upsilon$和特征值$\lambda$,$A\upsilon=\lambda\upsilon$。$V=[\upsilon{(1)},...,\upsilon{(n)}], \mathbf{\lambda}=[\lambda_1,...\lambda_n]^T$,因此$A=V diag(\lambda)V^{-1}$
实对称矩阵都可以分解。$A=A\Lambda Q^T$,$\Lambda$为对角矩阵。分解不唯一,一般降序排列$\Lambda$中的元素。
$f(x)=x^TAx$,其中$||x||_2=1$,则$x$为$A$的某个特征向量的时候,返回对应的特征值。最大值为最大特征值,最小值为最小特征值。
正定:所有特征值都是正数;半正定:所有特征值都非负数。
奇异值分解singular value decomposition,SVD:奇异向量singular vector,奇异值singular value。每个实数矩阵都有奇异值分解。
- $A=UDV^T$,其中$U,V$正交矩阵,$D$为对角矩阵(但不一定是方阵)。
- $U$的列向量:左奇异向量;$V$的列向量:右奇异向量;$D$对角线上元素:奇异值。
- 左奇异向量:$AA^T$的特征向量。
Moore-Penrose伪逆:
- 非方阵无逆矩阵,$A+=VD+UT$,其中$D+$是非零元素取倒数后转置
- $x=A^+y$是可行解中欧几里得范数最小的一个,若无解则是$||Ax-y||_2$最小。
迹运算:$Tr(A)$,对角元素的和。
- $||A||_F=\sqrt{Tr(AA^T)}$
- $Tr(ABC)=Tr(CAB)=Tr(BCA)$(循环将最后一个拿到前面)
主成分分析Principal components analysis,PCA:
有损压缩。要找到编码函数。
用矩阵乘法定义解码器。$g(c)=Dc$,其中$D\in \R^{n×l}$是定义解码的矩阵。从$l$维变到$n$维,$l
限制$D$的列向量彼此正交。则$D^TD=I_l$.
定义loss:输入向量$x$和$g(c*)$之间的距离。即$(x-g(c))T(x-g(c))$
因此最小化$g(c)Tg(c)-2xTg(c)$
即最小化$cTc-2xTDc$
-
向量微积分:将$c$认为是变量,求梯度$grad()=\nabla=\mathbf{0}$
若$c=(c_1, c_2,...,c_l)T$,则$2c-2DTx=\mathbf 0$($2x^TD$是一个行向量,需要变为列向量,因此再次转置)
现在选择$D$,则最小化所有点。求所有误差的几何平均。
矩阵$D$由前$l$个最大特征值对应的特征向量组成。
第三章 概率论 信息论
概率分类:
- 频率派概率frequentist probability
- 贝叶斯概率:确定性水平,表示信任度degree of belief
Multinoulli分布:范畴分布(categorical distribution):在$k$个不同状态(有限个)的单个离散型随机变量上的分布。概率有$k-1$个分量,每一个分量表示为第$i$个状态的概率。
一些分布的概率密度函数:
- 指数分布:$\lambda \mathbf 1_{x\ge 0}e^{-\lambda x}$
- Laplace分布:$\frac 1{2\gamma}e^{-\frac{|x-\mu|}{\gamma}}$
- Dirac delta函数:$\delta(x)=0, x\ne 0$,$\int_{-\infty}^\infty \delta(x)dx = 1$, 概率密度函数为$\delta(x-\mu)$,则为Dirac 分布
- 经验分布:$\frac 1m \sum\limits_{i=1}m\delta(x-x{(i)})$
混合分布mixture distribution :Multinoulli分布:$P(x)=\sum\limits_{i}P(c=i)P(x|c=i)$
潜变量:latent variable:不能直接观测到,如上面的组件标志变量$c$。
高斯混合模型:$P(x|c=i)$是一个高斯分布。
先验概率:$P(c=i)$(观测到$x$之前传递进去的概率)。
常用函数:
- logistic sigmoid函数:
- $\sigma(x)=\frac 1{1+e^{-x}}$
- 用来产生Bernoulli分布中的参数$\phi$
- 绝对值很大时,饱和saturate现象,对输入的微小改变不敏感
- softplus函数:
- $\zeta(x)=log(1+e^x)$
- 产生正态分布的$\beta$和$\sigma$参数
- 是正部函数$x^+=max(0,x)$的平滑形式
贝叶斯公式:略
测度论:涉及到零测度measure zero、几乎处处almost everywhere, a.e.、$p_x(x)=p_y(g(x))\left|det\left(\frac{\part g(x)}{\part x}\right)\right|$
信息论:
- 一个信号包含多少信息进行量化
- 不太可能的事件发生,比非常可能的事情发生提供更多信息
- 独立事件有增量的信息(越多则信息量越大)
- 事件的自信息self-information:$I(x)=-logP(X)$
- 单位为nats,即以$\frac 1e$的概率观测到一个事件时获得的信息量。若以$2$为底,则单位为比特bit或者香农shannons,这两个单位正比关系。
- 香农熵Shannon entropy:整个概率分布中不确定性总量的量化:$H(x)=\mathbb E_{x\sim P}[I(x)]=-\mathbb E_{x\sim P}[log P(x)]$
- 遵循分布P的时候的期望信息总量。
- 给出依据概率分布P生成的符号进行编码所需的比特数在平均意义上的下界。
- 确定性分布的熵较小,接近均匀分布的有较高的熵。
- KL散度Kullback-Leibler divergence:衡量概率分布$P(x),Q(x)$的差异:$D_{KL}(P||Q)=\mathbb E_{x\sim P}\left[log\frac{P(x)}{Q(x)}\right]=\mathbb E_{x\sim P}\left[log{P(x)}-logQ(x)\right]$但不是两个分布的香农熵之差。
- 使得$Q$的产生消息的长度最小的编码,若改成以$P$产生的消息的编码的时候,需要的额外信息量
- 非负,为0时当且仅当是相同分布(离散型)
- 非对称$D_{KL}(P||Q)\ne D_{KL}(Q||P)$
- 交叉熵cross-entropy:$H(P,Q)=H(P)+D_{KL}(P||Q)=-\mathbb E_{x\sim P}logQ(X)$
- 针对$Q$最小化交叉熵等于最小化KL散度。
- 认为$0log0=\lim\limits_{x\rightarrow 0}xlogx=0$
结构化概率模型:
- 分解成多因子乘积形式:$p(a,b,c)=p(a)p(b|a)p(c|b)$,也就是说,用更少变量的分解方法,可以使用图的方法描述。
- 有向无向,每个节点对应一个随机变量,边表示概率分布可以表示成他们的直接作用。
- 有向图对应的,用条件概率表示。每一个节点的随机变量,都有一个影响因子,组成它的条件概率的影响因子叫做其父节点。
- 无向图:团(完全子图)都有一个因子,非负。随机变量的联合概率与他们的乘积成比例。
第四章 数值计算
下溢underflow:做除数/取log
上溢overflow:变为$\infty$变为非数字
softmax function:$\frac{e{x_i}}{\sum\limits_{j=1}n e^{x_j}}$
- 通过每一个都减去最大值,避免上溢
- 如果要对结果取log,实现单独函数来避免分子下溢
病态条件:条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。
- 条件数:$f(x)=A^{-1}x, A\in \mathbb R^{n×n}$具有特征值分解时,条件数为最大和最小特征值的模之比
梯度下降/最速下降法:
- 思路:如果更大,则$x-\epsilon sign(f'(x))$
- 多维:基于梯度,找下降最快的方向。(负梯度向量,最速下降法):$\mathbf x' = \mathbf x - \epsilon\nabla_{\mathbf x}f(\mathbf x)$
- $\epsilon$为学习率
- 梯度为0时收敛
- 离散参数:称为爬山hill climbing算法
- 每一个很接近0的时候收敛
Jacobian矩阵:
- $J_{i,j}=\frac{\part}{\part x_j}f(x)_i$ ($J_i$表示一个行向量,是第$i$个分量的分别导数的向量)
- 二阶导决定函数的曲率curvature:没有曲率的时候是直线,曲率为正的时候比梯度预测下降更快
Hessian矩阵:
- 梯度的Jacobian矩阵
- $H(f)(x)_{i,j}=\frac{\part^2}{\part x_i\part x_j}f(x)$
- 深度学习背景下,几乎处处都是对称的。可以分解成特征值和特征向量的正交基$V\Lambda V{-1}$。特定方向$d$上的二阶导数可以写作$dTHd$,如果$d$是特征向量,则对应这个方向的特征值。其他方向的为所有特征值加权平均,权重在0和1之间,夹角越小的特征向量权重越大。
- 二阶Taylor级数下,考虑学习率:
- $f(x)\approx f(x{(0)})+(x-x{(0)})^T\nabla f(x^{(0)})+\frac 12 (x-x{(0)})TH(x-x^{(0)})$
- $H$是$x^{(0)}$点的Hessian. 记$g=\nabla f(x^{(0)})$
- 学习率$\epsilon$下,新的点$x=x^{(0)}-\epsilon \nabla f(x^{(0)})$
- 则$f(x^{(0)}-\epsilon g)\approx f(x^{(0)})-\epsilon g^Tg + \frac 12 \epsilon^2 g^THg$
- 最优步长$\epsilon^* = \frac{gTg}{gTHg}$
- 一阶导为0二阶导大于0时,为极小
- 多维下,Hessian正定代表是局部极小点。
- 牛顿法:$x*=x{(0)}-H^{-1}g$
- 比梯度下降更快,但鞍点附近有害
- 梯度下降不会被吸引到鞍点(除非梯度指向这里)
梯度下降称为一阶优化算法,牛顿法等称为二阶优化算法。
Lipschitz连续或者导数Lipschitz连续:
- Lipschitz连续函数变化速度以Lipschitz常数$L$为界,即$|f(x)-f(y)|\le L||x-y||_2$
凸优化:只适用于凸函数(Hessian处处半正定)
约束优化:在集合$\mathbb S$中的点(可行feasible点)中找到最大/最小。
- Karush-Kuhn-Tucker (KKT)方法:针对约束优化通用。拉格朗日乘数法的推广。
- 广义Lagrangian:
- 描述$\mathbb S$:$\mathbb S={x|\forall i, g^{(i)}(x)=0\ and\ \forall j, h^{(j)}(x)\le 0}$
- $L(x,\lambda, \alpha)=f(x)+\sum\limits_i \lambda_ig^{(i)}(x) + \sum\limits_j\alpha_j h^{(j)}(x)$
- $\min\limits_x \max\limits_\lambda \max\limits_{\alpha, \alpha \ge 0}L(x,\lambda, \alpha)$
- 约束最大化问题:构造$-f(x)$的广义Lagrange函数
- KKT条件:
- 必要条件
-
- 广义Lagrangian梯度为0
- 约束满足
- 不等式约束的互补松弛性:$\alpha\odot h(x)=0$ (对应位置的乘积都是0)
- 广义Lagrangian:
线性最小二乘:
- 最小化$f(x)=\frac 12 ||Ax-b||^2_2$
- 通过梯度优化解决
- 梯度:$\nabla_xf(x)=A^T(Ax-b)$
- 算法:
- 梯度大于容差$\delta$时,$x=x-\epsilon(ATAx-ATb)$
- 也可以直接使用牛顿法
- 如果有约束$x^Tx\le 1$
- $L(x,\alpha)=f(x)+\alpha(x^Tx-1)$
- 关于$x$求微分:$ATAx-ATb+2\alpha x$ (注意$x^Tx$的$\nabla$是$2x$)
- $\alpha$要使得约束满足,$\frac{\part L}{\part \alpha}$应该为非正。应该增加$\alpha$直到约束满足并且关于$\alpha$的导数为0.
第五章 机器学习基础
深度学习是机器学习的特定分支
学习算法
定义:
- 通过经验$E$改进后,在任务$T$上由性能度量$P$衡量的性能有所提升。
任务$T$:
- 学习过程本身不是任务
- 定义:机器学习系统应该如何处理样本example
- 样本:特征的集合,通常表示成向量$x\in \R^n$,向量中每一个元素是一个特征。
- 举例:
- 分类
- 输入缺失分类:在不知道某些变量的情况下的分类(求关于缺失变量的边缘分布)
- 回归:针对输入预测数值
- 转录:OCR、语音识别
- 机器翻译
- 结构化输出:包括转录、翻译、语法分析、图像分割标注。输出值之间内部紧密相关
- 异常检测:如检测信用卡欺诈
- 合成、采样:生成和训练数据相似的新样本。是结构化输出任务。
- 缺失值填补
- 去噪
- 密度估计、概率质量函数估计
性能度量$P$:
- 针对于特定任务
- 准确率、错误率
- 测试集数据
经验$E$:
- 分为无监督算法、监督算法
- 数据集dataset上获取经验。样本也称为数据点data point
- 无监督学习算法unsupervised learning algorithm:学习出数据集上有用的结构性质;涉及到概率分布
- 监督学习算法supervised learning algorithm:样本有标签label或者母表target;涉及到条件概率
- 但是概率和条件概率可以互相转化$P(x)=\prod\limits_{i=1}^nP(x_i|x_{1}x_{2}...x_{i-1})$,$P(x|y)=\frac{P(x,y)}{\sum_{x'} P(x', y)}$因此界限不明显。
- 传统地,人们将回归、分类或者结构化输出问题称为监督学习。支持其他任务的密度估计通常被称为无监督学习。
- 半监督学习:一些样本有监督目标,其他没有。
- 强化学习:与环境进行交互,学习系统和训练过程有反馈回路。
- 设计矩阵design matrix:表示数据集,每行是不同样本,每列是不同特征。
- 如果不是矩阵:使用m个样本向量,每个样本向量可以有不同大小
- 标签向量:第i个分量是样本i的标签
示例:线性回归
- 输入向量,预测输出的标量
- $\breve y = w^Tx$
- $w$为参数parameter向量,每个分量可以看作权重;$x$的每个分量是一个特征,权重调整特征的预测。
- 误差:使用均方误差(每个测试样例的误差平方的平均)
- 最小化均方误差:直接求导数为0(梯度),得$\nabla_w \mathbf{MSE_{train}}=\nabla_w(wTXTXw-2wTXTy+y^Ty)=0$
- 因此$2XTXw-2XTy=0$
- $w=\left(XTX\right){-1}X^Ty$
- 实际上,预测得应该是$\breve y = w^Tx+b$,b为偏置bias参数
容量、过拟合、欠拟合
- 泛化generalization:在之前未观测到的输入上表现良好的能力
- 训练误差training error
- 泛化误差generalization error(测试误差test error):新输入的误差期望
- 统计学习理论statistical learning theory:
- 数据生成过程data generating process:训练集和测试数据集生成的过程
- 独立同分布假设i.i.d. assumption
- 数据生成分布$p_{data}$:测试、训练数据共享的潜在分布
- 随机模型训练误差的期望和测试误差期望相同
- 欠拟合underfitting:模型不能在训练集上获得足够低的误差
- 过拟合overfitting:训练误差与测试误差差距太大
- 通过调整模型容量capacity,可以控制模型是否偏向于过拟合或者欠拟合。容量指拟合各种函数的能力。
- 控制算法容量的一种方法是选择假设空间hypothesis space,即学习算法可以选择为解决方案的函数集
- 表示容量representational capacity:可以从哪些函数族中选择函数
- 有效容量effective capacity:由于优化算法不完美等原因,实际上可以表示的函数
- 奥卡姆剃刀Occam's razor:同样能解释已知现象的假设中,选择最简单的一个
- VC维度度量二元分类器的容量:分类器能够分类的训练样本的最大数目。
- 训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降
- 虽然更简单的函数更可能泛化,但是仍要选择充分复杂的假设达到较低的训练误差。通常泛化误差是关于模型容量的U形曲线函数
- 非参数non-parametric模型:
- 容量任意高
- 参数模型学习的函数在观测到新数据前参数向量分量个数有限且固定。非参数模型没有这些限制。
- 例子:
- 最近邻回归nearest neighbor regression
- 储存训练集中所有的X和y
- 需要为x分类时,先查找最近的点,并返回其对应的目标
- 如果最近距离的有多个,就将其对应的目标取平均
- 可以通过调整参数个数
- 最近邻回归nearest neighbor regression
- 监督学习中,x到y的映射可能内在随机,从预先知道的真实分布预测出现的误差是贝叶斯误差Bayes error
- 没有免费午餐定理no free lunch theorem:所有可能数据生成分布上平均之后,每一个分类算法在未事先观测到的点上都有相同的错误率。
正则化:
- 修改学习算法,使其降低泛化误差而非训练误差
- 如加入权重衰减weight decay来修改线性回归的训练标准:
- 偏好于平方范数$L^2$较小的范数
- $J(w)=\mathbf{MSE_{train}}+\lambda w^Tw$
- $w^Tw$项称为正则化项,$\lambda$提前挑选出来的偏好小范数权重的程度
超参数和验证集:
- 超参数控制算法行为,不是学习算法学习出来的
- 多项式回归示例中的超参数是容量超参数:多项式的次数,控制权重衰减程度的$\lambda$也是超参数
- 有时设计为超参数是因为难以优化,更多时候因为不适合学习(如控制模型容量的参数,总是趋向于最大可能)
- 验证集validation set样本:
- 测试样本不能参与到模型的选择中,包括设置超参数
- 验证集估计训练中或者训练后的泛化误差,更新超参数
交叉验证:
- 固定的训练集和测试集,若测试集误差很小,则有问题,说明平均测试误差的统计不确定性
- 数据集太小时,$k-$折交叉验证过程。分割为$k$份(互斥),每次用其中一份测试,剩下的训练。
- 带来的问题:不存在平均误差方差的无偏估计