深度学习读书笔记
bias & variance
神经网络的优化
参数学习
网络前向传播过程如下
反向传播的误差要传导到\(z^{(l)}\),第\(l\)层净输入,表示为\(\delta^{(l)}=\frac{\partial \mathcal{L}(y, \hat y)}{\delta z^{(l)}}\)。要学习的参数是\(W\)和\(b\)。
根据前向传播的过程得到\(\delta^{(l)}\)与\(\delta^{(l+1)}\)的关系
\(\mathcal{L}(y ,\hat y)\)对\(W^{(l)}\)的梯度为
Ex: 两层分类神经网络
卷积神经网络
卷积与互相关
图像处理上的卷积和平时简便操作的卷积(应该叫互相关)有些区别,它们的公式如下:
两者基本操作是一样的,无非是将卷积核沿着中心点旋转180°。
卷积的变种
在深度学习中经常会有full
,same
, valid
三种卷积方式
full
,宽卷积,步长为1,对于大小为\(K\)的卷积核,两边填充\((K-1)\)same
,等宽卷积,步长为1,对于大小为\(K\)的卷积核,两边填充\((K-1)/2\)valid
,窄卷积,步长为1,不进行填充
卷积的求导
假设\(\mathbf{Y=W\otimes X}\),其中\(\mathbf{X}\in R^{M\times N}\),\(\mathbf W \in R^{U\times V}\),\(\mathbf Y \in R^{(M-U+1, N-V+1)}\),\(f(\mathbf Y)\in R\),则
同理可以得到
即\(f(\mathbf Y)\)关于\(\mathbf X\)的偏导数为\(W\)和\(\frac{\part f(\mathbf Y)}{\part \mathbf Y}\)的宽卷积。
卷积与全连接的对比
相比于全连接,卷积共享权重、采用的是局部连接。
\(1\times1\)的卷积操作可以在深度方面进行更为方便的处理。
参数学习
卷积网络中的学习参数是\(\mathbf W\)和偏置\(b\),损失函数对第\(l\)层的卷积核\(\mathbf W^{(l, p , d)}\)的偏导数为
-
汇聚层\(\delta^{(l, p)}\)
汇聚层的操作都在同一个特征映射中,令\(l+1\)层为汇聚层
\[\begin{align*} \delta^{(l, p)} &= \frac{\part \mathcal L}{\part Z^{(l, p)}}\\ &=\frac{\part X^{(l,p)}}{\part Z^{(l, p)}}\frac{\part Z^{(l+1, p)}}{\part X^{(l, p)}}\frac{\part \mathcal L}{\part Z^{(l+1, p)}}\\ &=f'(Z^{(l, p)}) \odot up(\delta^{(l+1, p)}) \end{align*} \] -
卷积层\(\delta^{(l, p)}\)
\[Z^{(l+1, p)}=\sum_{d=1}^D W^{(l+1, p, d)}\otimes X^{(l, d)}+b^{(l+1, p)} \]\[\begin{align*} \delta^{(l, d)} &= \frac{\part \mathcal L} {\part Z^{(l, d)}}\\ &= \frac{\part X^{(l, d)}}{\part Z^{(l ,d)}}\frac{\part \mathcal L} {\part X^{(l, d)}}\\ &= f'(Z^{(l, d)})\odot\sum_{p=1}^P(rot180(W^{(l+1, p, d)})\otimes \delta^{(l+1, p)}) \end{align*} \]
其他卷积方式
-
转置卷积
转置卷积可以看作一种上采样
-
空洞卷积
在卷积核的两个元素之间插入\(D-1\)个空洞,卷积核的有效大小为
\[K' = K + (K-1)\times(D-1) \]
循环神经网络
感觉循环神经网络一定程度上借鉴了自回归模型,保存一定的历史信息,用来预测下一阶段的状态。
循环神经网络的三种类型
-
序列类别
如语句情感分析
-
同步的序列到序列
如逐字的生成
-
异步的序列到序列
auto-encoder
上面三个类型对历史信息\(h_t\)的预测有所区别
参数学习
-
BPTT
\[\begin{align*} \frac{\part \mathcal L_t}{\part U} &= \sum_{k=1}^t\frac{\part \mathcal L_t}{\part z_k}\frac{\part z_k}{\part U}\\ &= \sum_{k=1}^t \delta_{t, k} h_{k-1}^T \end{align*} \]\[\begin{align*} \delta_{t, k} &= \frac{\part L_t}{\partial z_k}\\ &= \frac{\part z_{k+1}}{\part z_k} \frac{\part L_t}{\partial z_{k+1}}\\ &= f'(z_k)\odot (U^T \delta_{t, k+1}) \end{align*} \]
网络优化与正则
网络优化
神经网络为了满足一定的泛化能力,要求最后收敛到平坦最小值。当一个模型收敛到一个平坦的局部最小值时,其鲁棒性会更好,即微小的 参数变动不会剧烈影响模型能力;而当一个模型收敛到一个尖锐的局部最小值 时,其鲁棒性也会比较差.具备良好泛化能力的模型通常应该是鲁棒的,因此理想的局部最小值应该是平坦的。
优化方法
-
批量梯度下降
批量大小随迭代次数和epoch的变化
-
学习率衰减
指数衰减:\(\alpha_t = \alpha_0 \beta ^t\)
自然指数衰减:\(\alpha_t = \alpha_0 \exp(-\beta \times t)\)
余弦衰减:\(\alpha_t = \frac 1 2\alpha_0(1+\cos(\frac{t\pi}{T}))\)
-
AdaGrad
自适应的学习率(根据变量的方差变化)
\[G_t = \sum_{\tau=1}^t g_\tau \odot g_\tau \]AdaGrad算法的缺点是在经过一定次数的迭代依然没有找到最优点时,由 于这时的学习率已经非常小,很难再继续找到最优点。
-
RMSprop
将AdaGrad中的\(G\)变为滑动平均
\[G_t = (1-\beta)\sum_{\tau=1}^t \beta^{t-\tau} g_\tau \odot g_\tau \] -
动量法
使用负梯度的加权移动平均替代当前批量梯度
\[\Delta \theta_t = \rho \Delta \theta_{t-1} - \alpha g_t = -\alpha \sum_{\tau =1}^t \rho ^{t-\tau} g_{\tau} \] -
Nesterov加速梯度
将动量法的梯度求解拆为两步骤
\[\Delta \theta_t = \rho \Delta \theta_{t-1} - \alpha g_t(\theta + \rho \Delta \theta_{t-1}) \] -
Adam
Adam是动量法和RMSprop方法的结合
\[\begin{align*} 平均梯度:& M_t = \beta_1 M_{t-1} + (1-\beta_1) g_t\\ 适应学习率:& G_t = \beta_2 G_{t-1} + (1-\beta_2)g_t\odot g_t \end{align*} \]在迭代初期𝑀𝑡 和𝐺𝑡 的值会比真实的均值和方差,对偏差进行修正
\[\begin{align*} \hat{M}_t &= \frac{M_t}{1-\beta_1^t}\\ \hat{G}_t &= \frac{G_t}{1-\beta_2^t}\\ \end{align*} \]
注意力机制与外部记忆
神经网络中可以存储的信息量称为网络容量
。由于计算的限制,在处理复杂任务时不希望过多的提升模型的复杂度,但同时不丢失过多的信息。在有限的计算能力下,通过引入注意力和记忆机制处理过载的信息。注意力,通过自上而下的信息选择机制来过滤掉大量的无关信息;外部记忆,优化神经网络的记忆结构来提高神经网络存储信息的容量。
注意力机制
在神经学上,注意力分为两种:
- 聚焦式注意力(自上而下,任务驱动的)。
- 基于显著性的注意力(自下而上,外界刺激,如名字)。
在目前的神经网络模型中,可以将最大汇聚(Max Pooling)、门控(Gating)机制近似地看作自下而上的基于显著性的注意力机制。
注意力机制的计算可以分为两步:一是在所有输入信息上计算注意力分布,二是根据注意力分布来计算输入信息的加权平均。
-
注意力分布。
为了从\(N\)个输出向量\(\begin{bmatrix}\mathbf x_1, \cdots, \mathbf x_n\end{bmatrix}\)中选择出和某个特定任务相关的信息,需要引入一个和任务相关的表示,称为查询向量。并通过一个打分函数来计算每个输入向量和查询向量之间的相关性。
\[\begin{align*} \alpha_n &= p(z=n\vert X, q)\\ & = softmax(s(\mathbf x_n,q)) \end{align*} \]\(\alpha_n\)成为注意力分布,\(s(\mathbf x_n, q)\)是一种相似性度量,称为注意力打分函数,可以采用
\[\begin{align*} s(\mathbf x_n, q) &= \mathbf v^T \text{tanh}(\mathbf {W x_n + U} q)\\ s(\mathbf x_n, q) &= \mathbf x_n^T q\\ s(\mathbf x_n, q) &= \frac{\mathbf x_n^T q}{\sqrt{D}}\\ s(\mathbf x_n, q) &= \mathbf x_n^T W q\\ \end{align*} \] -
加权注意力
注意力加权可以使软性加权,即求分布期望也可以直接选择概率值最大的向量\(\mathbf x_z\)作为输出。
\[att(\mathbf X, q) = \sum_{i=1}^n \alpha_n \mathbf x_n = E_{z\sim p(z\vert X, q)}[\mathbf x_z] \]更一般的可以用一种键值对的格式来表示输入信息,即\(\mathbf x= (K, v)\),其中\(K\)用来计算注意分布\(\alpha\),\(v\)用来计算聚合信息。
-
指针网络
自注意力模型
序列模型一个重要的问题就是表示长距离的依赖关系。循环神经网络和卷积神经网络虽然可以记录依赖关系,但是由于梯度消失等问题导致并不能建立长距离的依赖关系。全连接虽然可以建立长距离的依赖关系,但是无法适应序列模型的不定长输入。
自注意力模型就是解决对序列不定长输入建立长距离的依赖关系提出的,其模型如下
- 对于输入向量\(\begin{bmatrix} \mathbf x_1,\cdots, \mathbf x_n\end{bmatrix}\),通过
线性映射
生成\((Q,K,V)\)对,分别表示查询向量矩阵,键向量和值向量。 - 对于每一个查询向量,利用注意力分布共公式计算出注意力分布。
自注意力模型可以作为神经网络中的一层来使用,既可以用来替换卷积层和循环层,也可以和它们一起交替使用。在计算注意力分布的过程中忽略了输入信息的位置信息,在使用时需要加入位置编码。
记忆增强网络
为了增强网络容量,我们可以引入辅助记忆单元,将一些和任务相关的信息保存在辅助记忆中,在需要时再进行读取,这样可以有效地增加网络容量。
- 控制器,负责信息处理,以及与外界的交互
- 外部记忆单元负责存储信息
- 读操作,根据控制器生成的查询向量从外部记忆单元读取相应的信息
- 写操作,根据控制器生成的查询向量和要写入的信息\(a\)来更新外部记忆单元。
模型独立的学习方式
模型独立的意思是使用的方法和所应用的模型无关,例如可以将集成学习用在支持向量机、逻辑回归上也可以用在神经网络上。虽然学习方式和模型无关,但是
集成学习(Ensemble Learning)
定义\(\bar {\mathcal R}(f) = \frac 1 M \sum_{m=1}^M \, E_x[\epsilon_m(x^2)]\),最简单的集成学习策略是平均各个模型的预测结果(voting
)
\(F(x)\)的经验误差在\(\begin{bmatrix} \bar{\mathcal R}(x) & \frac{1}{M}\bar{\mathcal R}(x)\end{bmatrix}\)之间
证明:
\[\begin{align*} E_x[F(x) - f(x)]^2 &= \frac {1} {M^2}\sum_i \sum_j E(\epsilon_i\epsilon_j) \end{align*} \]如果\(\epsilon_i\epsilon_j\)独立,那么上式就等于\(\frac{1}{M}\bar{\mathcal R}(x)\)如果两者完全相等,那么上式就等于\(\bar{\mathcal R}(x)\)。因此为了使集成学习有意义,则模型间的应尽可能有差异。这也是集成学习的原理所在。
为了增加模型之间的差异性,可以采取Bagging
和Boosting
这两类方法。
- Bagging类方法是通过随机构造训练样本、随机选择特征等方 法来提高每个基模型的独立性
- Boosting类方法是按照一定的顺序来先后训练不同的基模 型,每个模型都针对前序模型的错误进行专门训练
AdaBoost
\[F(x) = \sum_{m=1} \, \alpha_m f_m(x) \]\(f_m(x)\)成为弱分类器,集成的\(F(x)\)为强分类器。
AdaBoost
算法是一种迭代式的训练算法,通过改变数据分布来提高弱分类器的差异。在每一轮训练中,增加分错样本的权重,减少分对样本的权重,从而得到一个新的数据分布。对于\([-1, +1]\)二分类的
AdaBoost
算法流程如下对于第\(m\)个弱分类器\(f_m(x)\)它要学习的目标是
\[\mathcal L(f_m(x), \alpha_m) = \sum\exp(-y^{(n)}(F_{m-1}(x^{(n)})+\alpha_m f_m(x^{(n)}))) \]令\(w_m^{(n)} = \exp(-y^{(n)}F_{m-1}(x^{(n)}))\),上式可以写为
\[\mathcal L(\alpha_m, f_m(x))=\sum\, w^{(n)}_m \exp(-\alpha y^{(n)}f_m(x^{(n)})) \]将上式在\(0\)处进行泰勒展开
\[\begin{align*} \mathcal L(\alpha_m, f_m)&=\sum\, w_m^{(n)}(1-\alpha y^{(n)}f_m(x^{(n)})+\frac1 2 \alpha_m^2)\\ &\propto \alpha_m \sum w_m^{(n)} I(y^{(n)}\neq f_m(x^{(n)})) \end{align*} \]上式最后一步正比于是除去与训练数据,\(f_m\)无关的项,而且\(y^{(n)}f_m^{(n)}=1-2I(y^{(n)}\neq f_m(x^{(n)}))\)。
在求出\(f_m(x)\)后,为了得到\(\alpha_m\)对没有进行泰勒展开的式子进行整理得到
\[\begin{align*} \mathcal L(\alpha_m)&=\sum\, w^{(n)}_m \exp(-\alpha y^{(n)}f_m(x^{(n)}))\\ &= \sum_{y^{(n)}=f_m(x^{(n)})}w^{(n)}\exp(-\alpha_m)+\\ &\quad \sum_{y^{(n)}\neq f_m(x^{(n)})}w^{(n)}\exp(\alpha_m)\\ &\propto (1-\epsilon_m)\exp(-\alpha_m) + \epsilon_m\exp(\alpha_m) \end{align*} \]其中\(\epsilon_m = \frac{\sum_{y^{(n)}\neq f_m(x^{(n)})} w_m^{(n)}}{\sum_n w_m^{(n)}}\),就是第\(m\)弱分类器预测错误所占的比例。通过对\(\alpha_m\)求导数,令其为0得到
\[\alpha_m =- \frac 1 2 \log(\frac{1-\epsilon_m}{\epsilon_m}) \]
自训练
自学习是为了解决监督学习中缺少标签样本的问题,利用已经标记好的样本训练一个模型,并利用这个模型来预测五标注样本的标签,把预测置信度较高的样本和伪标签加入训练集。整体流程如下:
Multi task
多任务学习是指同时学习多个相关任务,让这些任务在学习过程中共享知识,利用多个任务之间的相关性来改进模型在每个任务上的性能和泛化能力,有一点类似collaborative Learning
。
多任务学习在深度学习中有四种常见的知识共享模式:
- 硬共享模式。类似于某视觉任务直接套用
VGG
底层网络权重。- 软共享模式。隐性的知识共享,如从隐状态、或者注意力机制主动选择一些有用的信息。
- 层次共享模式。任务有层次,底层输出低层任务,高层输出语义级别的任务。
- 共享-私有模式。共享模块和任务模块分开运行。
迁移学习
迁移学习要解决的是将在一个样本空间domain
(source
)内训练好的模型迁移到另一个相似样本空间target
来帮助学习的问题,两个样本空间有一定相似性但是分布是不同的,而且target domain
的数据量是不足的。例如将识别狗的网络应用到识别猫的任务中,猫和狗的特征可能有一定相似性,但是特征分布是有送不同的。
迁移学习可以分为两类:
归纳迁移学习
归纳迁移学习是指在源领域和任务上学习出一般的规律,然后将这个规律迁移到目标领域和任务上。
源领域和目标领域有相同的输入空间,而输出空间不一致。一般要求源领域内有大量样本,如果样本是没有标注的,可以通过自编码等无监督学习方式学习到一种特征表示。
转导迁移学习
转导迁移学习是一种从样本到样本的迁移,直接利用源领域和目标领域的样本进行迁移学习,如领域适应
domain adaption
,通过一种变换将两个样本分布映射到分布一致的空间上。造成数据分布不一致通常有三种原因:
- 协变量偏移
covariate shift
,即源领域和目标领域的输入边际分布不同,但是后验分布相同。- 概念偏移
concept shift
,即输入边际分布相同,但是后验分布不同。- 先验偏移
prior shift
,即输入标签\(y\)的边际分布不同,特征\(x\)的条件分布相同。如果数据分布确实是因为协变量偏移造成的,那么可以学习一种数据表示\(g\)是的,两个分布相似,即下公式
\[\begin{align*} \mathcal R_T(\theta_f)&= E_{(x, y) \sim P_T(x, y)}[\mathcal L(f(\theta, x), y)]\\ & = E_{(x, y) \sim P_S(x, y)}\frac{P_T(x, y)}{P_S(x, y)}[\mathcal L(f(\theta, x), y)]\\ & = E_{(x, y) \sim P_S(x, y)}\frac{P_T(x)}{P_S(x)}[\mathcal L(f(\theta, x), y)]\\ &= E_{(x, y) \sim P_S(x, y)}[\mathcal L(f(g(\theta_g, x), \theta), y)]+\gamma d_g(S, T)\\ \end{align*} \]\(d_g(S, T)\)是两个分布的度量
这方面的内容可以阅读知乎王晋东不在家的文章。
终身学习(lifelong learning or continuous learning)
终身学习是建立在贝叶斯公式上的,假设有两个样本\({\cal D_A}, {\cal D_B}\),则对于两个样本同时学习到的参数后验分布等价于先学习\({\cal D_A}\)得到的参数后验再学习数据集\({\cal D_B}\)(反过来也是对的)
由于后验分布难以建模,通常通过一个近似的方法来估计,假设\(p(\theta\vert {\cal D_A})\)是一个高斯分布,精度矩阵可以通过参数\(\theta\)在\(\cal D_A\)的Fisher
信息矩阵来近似。
其中\(E(\nabla_{\theta}\log(p(x, \theta)))\)为\(0\)。Fisher信息矩阵的对角线的值反映了对应参数在通过最大似然进行估计时的不确定性,其值越大,表示该参数估计值的方差越小,估计更可靠性,其携带的关于数据分布的信息越多。
元学习(meta learning)
元学习的目的是从已有任务中学习一种学习方法或元知识,可以加速新任务的学习。元学习侧重从多种不同(甚至是不相关)的任务中归纳出一种学习方法。
有一篇关于元学习的综述,将元学习大致分为,基于优化的,模型的等三种类型,当时我为了理解
MAML
只看了基于优化的。
- 基于优化器的元学习
基于优化器的元学习是学习一个参数迭代过程,输入当前时刻的梯度差,预测下一个时刻的梯度差(是不是看起来是时间序列预测问题)。
- 模型无关的元学习(Model agnostic meta learning)
模型无关的元学习假设所有任务都来自于同一个任务空间,MAML的任务是学习到一个参数\(\theta\)使其经过一个梯度迭代就可以在新任务上达到最好的表现。
\[\min_{\theta}\sum_{{\cal \Tau_m}\sim p(\mathcal \Tau)} \mathcal L_{\mathcal T_m}(f_{\theta_m'}) = \min_{\theta}\sum_{{\cal \Tau_m}\sim p(\mathcal \Tau)} \mathcal L_{\mathcal T_m}(f_{\theta-}\alpha\nabla_{\theta}\mathcal L) \]
概率图模型
无向图模型
无向图模型也成为马尔可夫随机场或者马尔可夫网络,相对于有向图的局部马尔可夫性,无向图的马尔可夫性只需将父节点替换为邻居节点即可。
由于无向图模型并不提供一个变量的拓扑顺序,无向图模型的联合概率的分解一般以全连接子图为单位进行分解,全连接子图称为团
(clique),如果一个团不被其他团包围则成为最大团
(maximal clique)。
其中\(\phi_c(x_c) = \exp(-E_c(x_c))\),\(E_c(x_c)\)是一种势能函数。
- 对数线性模型
\[\phi_c(x_c \vert \theta_c ) = \exp(\theta_cf_c(x_c)) \]
- 线性链条件随机场
\[p(y\vert x, \theta)= \frac{1}{Z(x, \theta)}\exp(\sum_{t=1}^T \theta_1^Tf_1(x, y_t)+\sum_{t=1}^{T-1}\theta_2^Tf_2(x, y_t, y_{t+1})) \]
模型学习
概率图的学习包含网络结构的学习和参数的学习,网络结构的学习我看之前的文章都是利用条件独立
来做,因果推断的文章就是在做网络结构的学习。有了网络结构之后,网络参数的学习可以直接通过极大化似然函数就可以。
相较于有向图,无向图的求解更为困难
\(\tilde{p}(x)\)为经验分布,因此无向图的最大似然估计的优化目标等价于,对于每个团\(𝑐\)上的特征\(f_c(x_c)\)使得其在经验分布\(\tilde p(x)\)下的期望等于其在模型分布的期望。