百面机器学习记录

目录

1、特征工程

1.1 特征归一化

线性函数归一化:\(X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}}\)

零均值归一化:\(z=\frac{x-\mu}{\sigma}\)

归一化对收敛速度的影响

![image-20210712235858167](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712235858167.png)

树模型不需要做归一化

1.2 类别型特征

在对数据进行预处理时,应该怎么处理类别型特征?

序号编码

独热编码

二进制编码

1.3 高维组合特征的处理

什么是组合特征?如何处理高维组合特征的处理?

特征之间的交叉,如逻辑回归:\(Y=sigmoid(\sum_i\sum_j w_{ij<x_i,x_j>})\)

怎样有效的找到组合特征?

决策树、FM等

1.5 文本表示模型

有哪些文本表示模型?它们各有什么优缺点?

1)词袋模型和N-gram模型

\({TF-IDF}(t,d)=TF(t,d)\times IDF(t)\),其中\(IDF(t)=\log\frac{\text{文章总数}}{\text{包含单词t的文章总数+1}}\)\(TF(t,d)\)为单词t在文档d中出现的频率

2)主题模型

3)词嵌入与深度学习模型

1.6 Word2Vec

![image-20210713075046028](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210713075046028.png)

1.7 图像数据不足时的处理方法

迁移学习、生成对抗网络、图像处理、上采样技术、数据扩充

2、模型评估(20~45)

2.1 评估指标的局限性

1)准确率的局限性:数据分布不均衡,如99%的负样本+1%的正样本

2)精确率与召回率的权衡:Precision值和Recall值时既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低

\(F1=\frac{2\times precision \times recall}{precision + recall}\)

3)平方根误差的意外:个别偏离程度非常大的离群点,会让RMSE指标变得非常差,此时可以使用MAPE(Mean Absolute Percent Error)

\(MAPE=\sum_{i=1}^n|\frac{y_i-\hat y_i}{y_i}|\times \frac{100}{n}\)

2.2 ROC曲线

ROC曲线时Receiver Operating Characteristic Curve的简称,受试者工作特征曲线;起源于军事领域,对雷达兵观测雷达数据的统计。

x坐标为假阳率\(FPR=FP/N\),y坐标真阳率\(TPR=TP/P\)

通过不断提高截断点的阈值,使分类阈值越来越高;使得模型预测为正例的样本越来越多,对应的FPR和TPR都会不断提高。如果FPR升高的更快,则曲线会尽量贴近x轴;如果TPR升高的更快,则曲线会尽量贴近y轴

2.2.1 如何计算AUC

2.2.2 ROC曲线与P-R曲线有什么特点

PR曲线:x轴是recall,y轴是precision

当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变;而P-R曲线的形状一般会发生较剧烈的变化。

选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多的看到模型在特定数据集上的表现,P-R曲线则能够更直观的反映其性能

![image-20210713080948817](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210713080948817.png)

2.3 余弦距离的应用

为什么在一些场景中要使用余弦相似度而不是欧式距离?

2.3.1 欧式距离与余弦距离

余弦相似度的定义\(cos(A,B)=\frac{A·B}{||A||_2||B||_2}\)

在某些场景,其向量的模长是经过归一化的,此时欧氏距离与余弦距离有着单调的关系,即:

\(||A-B||_2=\sqrt{2(1-cos(A,B))}\),其中\((1-cos(A,B))\)表示余弦距离

欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

1)统计两部剧的用户观看行为,用户A的观看向量为\((0,1)\),用户B为\((1,0)\),此时二者的余弦距离很大,而欧式距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离

2)分析用户活跃度时,用户A的登陆次数分别为\((1,10)\),用户B为\((10,100)\),此时两人的余弦距离很近,但此时更关注数值绝对差异,应当使用欧式距离

2.3.2 余弦距离是否时一个严格定义的距离

距离的定义:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性、对称性、三角不等式)成立,则该实数可称为这对元素之间的距离。

正定性:\(dist(A,B)=1-cos\theta = (||A||_2||B||_2-AB)/||A||_2||B||_2\)

由于\(||A||_2||B||_2\geq AB\),所以\(dist(A,B)\geq 0\)恒成立

对称性:\(dist(A,B)=\frac{||A||_2||B||_2-AB}{||A||_2||B||_2}=\frac{||B||_2||A||_2-AB}{||B||_2||A||_2}=dist(B,A)\)

三角不等式(不成立):已知A、B、C三个点,由于欧式距离满足三角不等式,即\(Eu(A,B)+Eu(B,C)>Eu(A,C)\)

由于\(dist(A,B)=Eu(A,B)^2\),此时\(Eu(A,B)^2+Eu(B,C)^2>Eu(A,C)^2\)便不一定成立

例如给定\(A=(1,0),B=(1,1),C=(0,1)\),则有\(dist(A,B)=1-\sqrt 2/2, dist(B,C)=1-\sqrt 2/2, dist(A,C)=1\)

因此有\(dist(A,B)+dist(B,C)=2-\sqrt 2 < 1=dist(A,C)\)

2.4 AB测试的陷阱

需要进行在线AB测试的原因:

1)离结评估无法完全消除模型过拟台的影响,因此得出的离线评估结果无法完全替代线上评估结果 。

2)离线评估无法完全还原线上的工程环境,一般来讲,离结评估往往不会考虑线上环境的延迟 、数据丢失、标签数据缺失等情况 。 离线评估的结果是理想工程环境下的结果 。

3)线上系统的某些商业指标在离结评估中无法计算。如CTR、留存时间等。

如何划分实验组和对照组(王哲书中的一节)

2.5 模型评估的方法

Holdout检验:固定的将数据切分为训练集和测试集;Holdout检验的缺点很明显,即在验证集上计算出来的最后评估指标与原是分组有很大关系。

交叉验证:首先将全部样本划分成k个大小相等的样本子集,依次便利这k个子集,每次把当前子集作为验证集,其余子集作为训练集,进行模型的训练和评估

自助法:不管是Holdout 检验还是交叉检验 , 都是基于划分训练集和测试集的方法进行模型评估的,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。自助法是基于自助采样法的检验方法 。 对于总数为 n 的样本集合,进行 n 次有放回的随机抽样,得到大小为 n 的训练集 。 n 次采样过程中有的样本会被重复采样,有的样本没有被抽出过,将这些没青被抽出的 样本作为验证集,进行模型验证,这就是自助法的验证过程 。

计算样本未被抽中的概率:假设共抽取n个样本,则一个样本在一次采样过程中,未被抽中的概率是\((1-\frac{1}{n})\),n次抽样均未被抽中的概率是\((1-\frac{1}{n})^n\)

\(\underset{n\rightarrow \infty}{lim}(1-1/n)^n=\underset{n\rightarrow \infty}{lim}\frac{1}{(1+\frac{1}{n-1})^n}=\frac{1}{\underset{n\rightarrow \infty}{lim}(1+\frac{1}{n-1})^{n-1}}·\frac{1}{\underset{n\rightarrow \infty}{lim}(1+\frac{1}{n-1})}= \frac{1}{e}\approx 0.368\)

2.6 超参数调优

网格搜索:网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。 这种操作方案可以降低所需的时间和计算 量, 但由于目标函数一般是非凸的,所以很可能会错过全局最优值 。

随机搜索:随机搜索的思想与网恪搜索比较相似 , 只是不再测试上界和下界之间的所有值而是在搜索范围中随机选取样本点 。 它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值或其近似值。

贝叶斯优化算法:网恪搜索和随机搜索在测试一个新点时,会忽略前一个点的信息,而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。

  1. 根据先验分布,假设 一个搜集函数

  2. 每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布

  3. 算法测试由后验分布给出的全局最值最可能出现的位置的点。

贝叶斯优化算法一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点。

2.7 过拟合与欠拟合

降低“过拟合”风险的方法

1)从数据入手,获取更多的训练数据

2)降低模型复杂度

3)正则化方法

4)集成学习方法

降低“欠拟合”风险的方法

1)添加新特征

2)增加模型复杂度

3)减小正则化系数

3、经典算法

3.1 支持向量机

3.1.1 在空间上线性可分的两类点,分别向SVM分类的超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?

是线性不可分的,如下所示:

![image-20210716104507095](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210716104507095.png)

SVM的分类结果仅依赖于支持向量,这也是SVM拥有极高运行效率的关键之一。

借助超平面分离定理(Separaing Hyperplane Theorem SHT)解决,该定理描述的是:对于不相交的两个凸集,存在一个超平面,将两个凸集分离。对于二维的情况,两个凸集间距离最短两点连线的中垂线就是一个将他们分离的超平面。

3.1.2 是否存在一组参数使SVM训练误差为0?

根据SVM的原理,我们可以将SVM的预测公式写为:\(f(x)=\underset{i=1}{\overset m\sum}\alpha_iy^{(i)}K(x^{(i)},x)+b\)

其中\(\{(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})\}\)为训练样本,\(\{a_1,...,a_m,b\}\)以及高斯核参数\(\gamma\)为训练样本的参数。由于不存在两个点在同一位置,因此对于任意的\(i \neq j\),有\(||x^{(i)}-x^{(j)}||\geq \varepsilon\)。可以对任意\(i\),固定\(\alpha_i=1\)以及\(b=0\),只保留参数\(\gamma\),则有

\(f(x)=\underset{i=1}{\overset m\sum}\alpha_iy^{(i)}K(x^{(i)},x)+b=\underset{i=1}{\overset m\sum}y^{(i)}K(x^{(i)},x)=\underset{i=1}{\overset m\sum}y^{(i)}e^{-||x-x^{(i)}||^2/\gamma^2}\)

从而可得\(f(x^{(j)}-y^{(j)})=\underset{i=1,j\neq i}{\overset m\sum}y^{(i)}e^{-||x^{(j)}-x^{(i)}||^2/\gamma^2}\)

\(||f(x^{(j)}-y^{(j)})||\leq \underset{i=1,j\neq i}{\overset m\sum}e^{-||x^{(j)}-x^{(i)}||^2/\gamma^2}\)

由于\(||x^{(i)}-x^{(j)}||\geq \varepsilon\),取\(\gamma = \varepsilon/\sqrt{\log m}\),可将上式重写为

\(||f(x^{(j)}-y^{(j)})||\leq \underset{i=1,j\neq i}{\overset m\sum}e^{-||x^{(j)}-x^{(i)}||^2/\gamma^2}\leq ||\underset{i=1,j\neq i}{\overset m\sum}e^{-||x^{(j)}-x^{(i)}||^2/\gamma^2}||\leq ||\underset{i=1,j\neq i}{\overset m\sum}e^{-logm}||=\frac{m-1}{m}<1\)

所以任意\(x^{(j)}\),预测结果\(f(x^{(j)})\)与真实标签\(y^{(j)}\)的距离小于1.注意到\(y^{(j)} \in \{1,-1\}\),当训练样本为正例即\(y^{(j)}=1\)时,预测结果\(f(x^{(j)})>0\),样本被预测为正例;当训练样本为正负即\(y^{(j)}=-1\)时,预测结果\(f(x^{(j)})<0\),样本被预测为负例。因此所有样本的类别都被正确预测,训练误差为0

3.1.3 训练误差为0的SVM一定存在吗?

虽然上题中找到了一组参数\(\{a_1,...,a_m,b\}\)\(\gamma\)使得SVM的训练误差为0,但这组参数不一定满足SVM条件的一个解。

考虑SVM模型中解的限制条件。\(y^{(j)}f(x^{(j)})\geq 1\),我们已经得到了一组参数使得当\(y^{(j)}=1\)时,\(f(x^{(j)})>0\),而当\(y^{(j)}=-1\)时,\(f(x^{(j)})<0\),因此存在\(y^{(j)}f(x^{(j)})>0\)。现在需要找到一组参数满足更强的条件,即\(y^{(j)}f(x^{(j)})\geq 1\)

仍然固定\(b=0\),于是预测公式为\(f(x)=\underset{i=1}{\overset m\sum}\alpha_iy^{(i)}K(x^{(i)},x)\),将\(y^{(j)}f(x^{(j)})\)展开有\(y^{(j)}f(x^{(j)})\geq 1\)

\(y^{(j)}f(x^{(j)}) = y^{(j)}\underset{i=1}{\overset m\sum}\alpha_iy^{(i)}K(x^{(i)},x^{(j)})\\=\alpha_j y^{(j)}y^{(j)}K(x^{(j)},x^{(j)})+\underset{i=1,j\neq j}{\overset m\sum}\alpha_iy^{(i)}y^{(j)}K(x^{(i)},x^{(j)})\\=\alpha_j+\underset{i=1,j\neq j}{\overset m\sum}\alpha_iy^{(i)}y^{(j)}K(x^{(i)},x^{(j)})\)

这时可以把每个\(\alpha_j\)都选择一个很大的值,同时取一个非常小的\(\gamma\),使得核映射\(K(x^{(i)},x^{(j)})\)非常小,于是\(\alpha_j\)在上式中占据绝对的主导地位,这样就保证对任意\(j\)\(y^{(j)}f(x^{(j)})> 1\),满足SVM解的条件。因此SVM最优解也满足上述条件,同时一定使模型分类误差为0。

3.1.4 加入松弛变量的SVM的训练误差可以为0吗?

实际应用中,如果使用SMO算法来训练一个加入松弛变量的线性SVM模型,并且惩罚因子C为任一未知常数,我们是否能得到训练误差为0的模型呢?

使用SMO算法训练的线性分类器并不一定能得到训练误差为0的模型,这是由于我们的优化目标改变了,并不再是使训练误差最小。考虑带松弛变量的SVM模型优化的目标函数所包含的两项:\(C\underset{i=1}{\overset m\sum \xi_i}\)\(\frac{1}{2}||w||^2\),当我们的参数C选取较小值时,后一项将占据优化的较大比重。一个简单的特例是,当C取0时,w也取0即可达到优化目标,但是显然此时我们的训练误差不一定能达到0。

3.2 逻辑回归

3.2.1 逻辑回归和线性回归的异同

将逻辑回归的公式进行整理,可以得到\(\log \frac{p}{1-p}=\theta^Tx\),其中\(p=P(y=1|x)\)为给定输入x预测为正样本的概率。时间的几率可以定义为\(p/(1-p)\),那么逻辑回归可以看作是对于\(y=1|x\)这一事件的对数几率的线性回归。

但是逻辑回归中\(y\)时因变量,而非\(p/(1-p)\),这便引出了逻辑回归和线性回归的最大区别,即逻辑回归中的因变量为离散的,而线性回归中的因变量是连续的。并且在自变量x于超参数\(\theta\)确定的情况下,逻辑回归可以看作广义线性模型(Generalized Linear Models)在因变量y服从二元分布时的一个特殊情况;而使用最小二乘法求解线性回归时,我们认为因变量时服从正态分布的。

相同点时二者都是用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是在自变量x与超参数\(\theta\)确定,因变量y服从正态分布的假设下,使用极大似然估计的一个化简;而逻辑回归中通过对似然函数\(L(\theta)=\underset{i=1}{\overset N \prod}P(y_i|x_i;\theta)=\underset{i=1}{\overset N \prod}(\pi(x_i))^{y_i}(1-\pi(x_i))^{1-y_i}\)的学习,得到最佳参数\(\theta\)。且两者在求解超参数的过程中,都可以使用梯度下降的方法,这也是监督学习中一个常见的相似之处。

3.2.2 当使用逻辑回归处理多标签的分类问题时,有哪些常见做法,分别应用于哪些场景,它们之间又有怎样的关系?

使用哪种办法处理多分类问题取决于具体问题的定义。

如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于集合分布,使用多项逻辑回归(Softmax Regression)来进行分类

\(h_\theta(x)=\begin{bmatrix} p(y=1|x;\theta) \\ p(y=2|x;\theta) \\... \\ p(y=k|x;\theta)\end{bmatrix}=\frac{1}{\underset{j=1}{\overset k \sum}e^{\theta_j^Tx}}\begin{bmatrix} e^{\theta_1^Tx} \\ e^{\theta_2^Tx} \\... \\ e^{\theta_k^Tx}\end{bmatrix}\)

其中\(\theta_1,\theta_2,...,\theta_k \in \R\)是模型参数

当存在样本可能属于多个标签的情况时,我们可以训练k个二分类的逻辑回归分类器。第i个分类器用以区分每个样本是否可以归为第i类,训练分类器时,需要把标签重新整理为“第i类标签”与“非第i类标签”两类。通过这样的方法,就解决了每个样本可能拥有多个标签的情况。

3.3 决策树

3.3.1 ID3、C4.5、CART

3.3.2 如何对决策树进行剪枝

预剪枝,即在生成决策树的过程中提前停止树的增长。

核心思想是在数中节点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能则不再继续生长子树。此时可能存在不同类别的样本同时存在于节点中,按照多数投票的原则判断该节点所属类别。预剪枝对于合适停止决策树的生长有以下几种方法:

1)当树达到一定深度的时候,停止树的生长

2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长

3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。

预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题,但如何准确的估计合适停止树的生长,针对不同问题会有很大差别,需要一定经验判断。且剪枝存在一定局限性,具有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。

后剪枝,时在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树

剪枝过程将子树删除,用一个叶子节点替代,该节点的类别同样按照多数投票的原则进行判断

常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning:REP),悲观剪枝(Pessimistic Error Pruning:PEP),代价复杂度剪枝(Cost COmplexity Pruning:CCP),最小误差剪枝(Minimum Error Pruning:MEP),CVP(Critical Value Pruning),OOP(Optimal Pruning)等方法,这些剪枝方法各有利弊,关注不同的优化角度。

代价复杂剪枝主要包括以下两个步骤(CART中使用的剪枝方法)
  1. 从完整决策树\(T_0\)开始,生成一个子树序列\(\{T_0,T_1,...,T_n\}\),其中\(T_{i+1}\)\(T_i\)生成,\(T_n\)为树的根节点

  2. 在子树序列中,根据真实误差选择最佳的决策树

步骤(1)从\(T_0\)开始,裁剪\(T_i\)中关于训练数据集合误差增加最小的分支得到\(T_{i+1}\)。具体地,当一个数\(T\)子节点\(t\)出剪枝时,它的误差增加可以用\(R(t)-R(T_t)\),其中\(R(t)\)表示进行剪枝之后的该节点误差,\(R(T_t)\)表示未进行剪枝时子树\(T_t\)的误差。考虑到树的复杂性因素,使用\(|L(T_t)|\)表示子树\(T_t\)的叶子节点个数,则树在节点\(t\)处剪枝后的误差率增加为:\(\alpha = \frac{R(t)-R(T_t)}{|L(T_t)|-1}\)

在得到\(T_i\)后,我们每步选择\(\alpha\)最小的节点进行相应的剪枝。

1)已知完整的决策树\(T_0\)如下:

![image-20210717112956977](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717112956977.png)

2)计算误差增加率:

\(\alpha(t_0)=\frac{25-(1+1+1+2+0+0)}{6-1}=4,\ \alpha(t_1)=\frac{10-(1+2+0+0)}{4-1}=2.33,\\ \alpha(t_2)=3, \ \alpha(t_3) =1, \ \alpha(t_4)=\frac{4-0}{2-1}=4\)

可见\(\alpha(t_3)\)最小,因此对\(T_3\)进行剪枝,得到心的子树\(T_1\),如下所示:

![image-20210717114339151](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717114339151.png)

而后继续计算所有节点对应的误差增长率,分别为\(\alpha(t_1)=3,\alpha(t_2)=3,\alpha(t_4)=4\),因此对\(t_1\)进行剪枝,得到\(T_2\),此时\(\alpha(t_0)=6.4,\alpha(t_2)=3\),得到\(T_3\),于是只剩下一爱一个内部节点,即根节点,得到\(T_4\).

![image-20210717114638822](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717114638822.png)

步骤2)中我们需要从子树序列中选出真实误差最小的决策树。CCP给出了两种常用的方法,一种时给予独立剪枝数据集,该方法与REP类似,但由于其职能从子树序列\(\{T_0,T_1,...,T_n\}\)中选择最佳决策树,而非像REP能在所有可能的子树中寻找最优解,因此性能上会有一定不足。另一种是基于K折交叉验证,将数据集分成k分,前k-1份用于生成决策树,最后一份用于选择最优的剪枝树。重复进行N次,再从这N个子树中选择最优的子树。

代价复杂度剪枝使用交叉验证策略时,不需要测试数据集,京都与REP差不多,但形成的树复杂度小。而从算法复杂度角度,由于生成子树序列的时间复杂度与原始决策树的非叶节点个数呈二次关系,导致算法相比REP、PEP、MEP等线性复杂度的后剪枝,运行时间开销更大。

有很多研究表明,剪枝比树的生成过程更为关键。

4、降维(72~86)

4.1 PCA最大方差理论

线性、非监督、全局的降维方法

如何定义主成分?从这种定义出发,如何设计目标函数使得降维达到提取主成份的目的?针对这个目标函数,如何对 PCA 问题进行求解?

![image-20210712131953352](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712131953352.png)

因为在黄线所处的轴上,数据分布得更为分散,这也意昧着数据在这个方向上方差更大。在信号处理领域,我们认为信号具有较大方差,噪声具有较小方差。信号与躁声之比称为信噪比。信噪比越大意味着数据的质量越好,反之信噪比越小意味着数据的质量越差。因此我们引出PCA的目标:最大化投影方差。

对于给定的一组数据点\(\{v_1,v_2,...,v_n\}\),其中所有向量均为列向量,中心化后的数据表示为\(\{x_1,x_2,...,x_n\}=\{v_1-\mu_1,v_2-\mu_2,...,v_n-\mu_n\}\),其中\(\mu = \frac{1}{n}\sum_{i=1}^n v_i\)

向 量 内积在几何上表示为第一个向 量投影到第二个向量上的长度,因此向量\(x_i\)\(w\)(方向向量)上的投影坐标为\((x_i,w)=x_i^Tw\),所以目标是找到一个投影方向\(w\)使得\(\{x_1,x_2,...,x_n\}\)\(w\)的投影方差尽量大。因为已经进行了中心化,所以投影后的均值为0,即:\(\mu = \frac{1}{n}\sum_{i=1}^n x_i^Tw=\Big(\frac{1}{n} \sum_{i=1}^n x_i^T\Big)w=0\)

因此投影后的方差可以表示为:\(D(x)=\frac{1}{n} \underset{i=1}{\overset n \sum} (x_i^Tw)^2=\frac{1}{n}\underset{i=1}{\overset n \sum} (x_i^Tw)^T(x_i^Tw)=\frac{1}{n}\underset{i=1}{\overset n \sum} w^Tx_ix_i^Tw\\=w^T\Big(\frac{1}{n}\underset{i=1}{\overset n \sum} x_ix_i\Big)w\)

其中\(\Big(\frac{1}{n}\underset{i=1}{\overset n \sum} x_ix_i\Big)\)是样本协方差矩阵,记为\(\Sigma = \Big(\frac{1}{n}\underset{i=1}{\overset n \sum} x_ix_i\Big)\)

另外,由于\(w\)是单位方向向量,有\(w^Tw=1\),因此我们要求解一个最大化问题:

\(\begin{cases} max\{w^T\Sigma w\} \\ s.t. w^Tw=1\end{cases}\)

引入拉格朗日乘子,并对\(w\)求其导数等于0,便可以推出\(\Sigma w=\lambda w\),此时

\(D(x)=w^T\Sigma w=\lambda w^Tw=\lambda\),即投影后的方差就是协方差矩阵的特征值

我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量 。次佳投影方向位于最佳投影方向的正交空间中 ,是第二大特征值对应的特征向量,以此类推。

PCA求解方法:

1)对样本数据进行中心化处理

2)求样本协方差矩阵

3)对协方差矩阵进行特征值分解,将特征值从大到小排列

4)取特征值前d大对应的特征向量\(w_1,w_2,...,w_d\),通过以下映射将n维样本映射到d维

\(x_i'=\begin{bmatrix} w_1^Tx_i \\ w_2^Tx_i \\ ... \\w_d^Tx_i\end{bmatrix}\)

定义后的信息占比为\(\eta = \sqrt{\sum_{i=1}^d\lambda_i^2/\sum_{i=1}^n\lambda_i^2}\)

4.2 PCA最小平方误差理论

PCA求解的其实是最佳投影方向,即一条直线,这与数学中线性回归问题的目标不谋而合,能否从回归的角度定义PCA目标并相应的求解问题呢?

在高维空间中,我们希望找到一个d维超平面,使得数据点到这个超平面的距离平方和最小。以\(d=1\)为例,超平面退化为直线,即把样本点投影到最佳直线,最小化的就是所有点到直线的距离平方和。

![image-20210712182838017](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712182838017.png)

数据集中每个点\(x_k\)\(d\)为超平面\(D\)的距离为\(distance(x_k,D)=||x_k-\tilde x_k||_2\),其中\(\tilde x_k\)表示\(x_k\)在超平面\(D\)上的投影向量。如果该超平面由\(d\)个标准正交基\(W=\{w_1,w_2,...,w_d\}\)构成,根据线性代数理论\(\tilde x_k\)可以由这组基线性表示,即:\(\tilde x_k=\underset{i=1}{\overset d\sum}(w_i^Tx_k)w_i\)

其中\(w_i^Tx_k\)表示\(x_k\)\(w_i\)方向上投影的长度,\(\tilde x_k\)实际上就是\(x_k\)\(W\)这组标准正交基下的坐标,此时PCA要优化的目标为:

\(\begin{cases} \underset{w_1,...,w_d}{min} \underset{k=1}{\overset n\sum}||x_k-\tilde x_k||_2^2 \\ s.t. \underset{\forall i,j }{w_i^Tw_j}=\delta_{ij}={\begin{cases} 1 & i=j \\ 0 & i \neq j\end{cases}}\end{cases}\)

由向量内积的性质,我们知道\(x_k^T\tilde x_k \approx \tilde x_k^Tx_k\),于是:

\(||x_k-\tilde x_k||_2^2=(x_k-\tilde x_k)^T(x_k-\tilde x_k)=x_k^Tx_k - x_k^T\tilde x_k-\tilde x_kx_k+\tilde x_k^T\tilde x_k\\=x_k^Tx_k-2x_k^T\tilde x_k+\tilde x_k^T\tilde x_k\)

第一项\(x_k^Tx_k\)是个常数,与选取的W无关

第二项:\(x_k^T\tilde x_k=x_k^T\underset{i=1}{\overset d\sum}(w_i^Tx_k)w_i=\underset{i=1}{\overset d\sum}(w_i^Tx_k)x_k^Tw_i=\underset{i=1}{\overset d\sum}w_i^Tx_kx_k^Tw_i\)

第三项:\(\tilde x_k^T\tilde x_k = \Big(\underset{i=1}{\overset d\sum}(w_i^Tx_k)w_i\Big)^T\Big(\underset{i=1}{\overset d\sum}(w_i^Tx_k)w_i\Big)= \underset{i=1}{\overset d\sum}\underset{i=j}{\overset d\sum} \Big((w_i^Tx_k)w_i\Big)^T\Big((w_j^Tx_k)w_j\Big)^T\)

由于\(w_i^Tx_k\)\(w_j^Tx_k\)表示投影长度,都是数字,且当\(i\neq j\)\(w_i^Tw_j=0\),因此第三项只剩下d项:

\(\tilde x_k^T\tilde x_k = \underset{i=1}{\overset d\sum} (x_i^Tx_k)(w_i^Tx_k)=\underset{i=1}{\overset d\sum} w_i^Tx_kx_k^Tw_i\)

此时\(\underset{i=1}{\overset d\sum} w_i^Tx_kx_k^Tw_i\)实际上就是矩阵\(W^Tx_kx_k^TW\)的迹(对角线元素之和),于是可以将上式继续化简:

\(||x_k-\tilde x_k||_2^2=x_k^Tx_k-2x_k^T\tilde x_k+\tilde x_k^T=x_k^Tx_k-\underset{i=1}{\overset d\sum} w_i^Tx_kx_k^Tw_i \\=x_k^Tx_k-tr(W^Tx_kx_k^TW)\)

从而可得:\(\underset w{argmin}\underset{k=1}{\overset n\sum}||x_k-\tilde x_k||_2^2=\underset w{argmin}\underset{k=1}{\overset n\sum} (-tr(W^Tx_kx_k^TW)+x_k^Tx_k)\\=\underset w{argmin}\underset{k=1}{\overset n\sum}-tr(W^Tx_kx_k^TW)+C\)

根据矩阵乘法的性质\(\sum_kx_kx_k^T=XX^T\),因此可以等价为带约束的优化问题:

\(\begin{cases} \underset{W} {argmax} \ tr(W^TXX^TW) \\s.t. W^TW=I\end{cases}\)

如果我们对W中的d个基\(w_1,w_2,...,w_d\)依次求解,就会发现和最大方差理论的方法是等价的。如d=1时,需求解\(\begin{cases} \underset{w} {argmax} \ tr(w^TXX^Tw) \\s.t. w^Tw=1\end{cases}\),这个与最大方差的最优化问题时一致的。

4.3 线性判别分析

对于具有类别标签的数据,应当如何设计目标函数使得降维的过程中不损失类别信息?这种目标下,应当如何进行求解?

LDA是为分类服务的,只要找到一个投影方向\(w\)使得投影后的样本尽可能按照原是类别分开。不妨从一个简单的二分类问题出发,有\(C_1,C_2\)两个类别的样本,两类的均值分别为:

\(\mu_1=\frac{1}{N}\underset{x\in C_1}\sum x, \ \mu_2=\frac{1}{N}\underset{x\in C_2}\sum x\)

我们希望投影之后两类之间的距离尽可能大,距离表示为:\(D(C_1,C_2)=||\tilde\mu_1 - \tilde \mu_2 ||_2^2\)

其中\(\tilde \mu =w^T\mu\),表示中心点在\(w\)方向上的投影向量,因此需要优化的问题为:

\(\begin{cases} \underset w{max} ||w^T(\mu_1-\mu_2)||_2^2 \\ s.t. w^Tw=1\end{cases}\)

容易发现,当\(w\)方向与\(\mu_1-\mu_2\)方向一致的时候,该距离达到最大值。若仅按照最大化两类投影中心距离的准则,投影后数据会有一定程度的重叠,因此需要增加另一个限制--即投影后的类内方差应该尽量小。

![image-20210712191431718](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712191431718.png)

在前面已经找到了使类间距离尽可能大的投影方法,现在只需要同时优化类内方差,使其尽可能小。将整个数据集的类内方差定义为各个类分别的方差之和,将目标函数定义为类间距离和类内距离的比值,从而引出优化目标为:

\(\underset w{max}J(w) =\underset w{max} \frac{||w^T(\mu_1-\mu_2)||_2^2}{D_1+D_2}\)

其中\(D_1,D_2\)分别表示两类投影后的方差,即\(D_1=\underset{x\in C_1}\sum (w^Tx-w^T\mu_1)^2=\underset{x\in C_1}\sum w^T(x-\mu_1)(x-\mu_1)^Tw^T\)

\(J(w) = \frac{||w^T(\mu_1-\mu_2)||_2^2}{D_1+D_2}=\frac{w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw}{\underset{x\in C_i}\sum w^T(x-\mu_i)(x-\mu_i)^Tw}= \frac{w^Ts_Bw}{w^Ts_ww}\)

其中类间散度矩阵\(S_B=(\mu_1-\mu_2)(\mu_1-\mu_2)\)

类内散度\(S_w=\underset{x\in C_i}\sum (x-\mu_i)(x-\mu_i)^T\)

我们要最大化\(J(w)\),只需要对\(w\)求偏导,并令导数等于0

\(\frac{\partial J(w)}{\partial w}=\frac{\frac{\partial w^TS_Bw}{\partial w}w^TS_ww -\frac{\partial w^TS_ww}{\partial w}w^TS_Bw}{(w^TS_ww)^2}=0\)可得\((w^TS_ww)S_Bw =(w^TS_Bw)S_ww\)

由于\(w^TS_ww\)\(w^TS_Bw\)是两个数,我们令\(\lambda = J(w)=\frac{w^TS_Bw}{w^TS_ww}\)

于是有\(S_Bw=\lambda S_w w\),从而可得\(S_w^{-1}S_Bw=\lambda w\)

从这里可以看出,最大化的 目标对应了一个矩阵的特征值,于是LDA降维变成了一个求矩阵特征向量的问题。\(J(w)\)就对应了矩阵\(S_w^{-1}S_B\)最大的特征值,而投影方向就是这个特征值对应的特征向量。

对于二分类问题,由于\(S_B=(\mu_1-\mu_2)(\mu_1-\mu_2)\),因此\(S_Bw\)的方向始终与\((\mu_1-\mu_2)\)一致;如果只考虑\(w\)的方向,不考虑其长度,可以得到\(w=S_B^{-1}(\mu_1-\mu_2)\)即只要求样本的均值和类内方差,就可以马上得出最佳的投影方向\(w\)

4.4 线性判别分析与主成分分析

LDA和PCA作为经典的降维算法,如何从应用的角度分析其原理的异同?从数学推导的角度,两种降维算法在目标函数上有何区别与联系?

4.4.1 相同点

首先将LDA的两类问题推广到多类,定义一个全局散度矩阵\(S_t=\underset{i=1}{\overset n\sum} (x_i-\mu)(x_i-\mu)^T\)

![image-20210712221357009](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712221357009.png)

如果把全局散度定义为类内散度和类间散度之和,即\(S_t=S_b+S_w\),那么类间散度矩阵可以表示为:

\(S_b=S_t-S_w=\underset{i=1}{\overset n\sum} (x_i-\mu)(x_i-\mu)^T-\underset{x \in C_i}\sum (x-\mu_i)(x-\mu_i)^T\\=\underset{i=1}{\overset N\sum}\Big( \underset{x \in C_j}\sum(x-\mu)(x-\mu)^T -\underset{x \in C_j}\sum(x-\mu_j)(x-\mu_j)^T \Big)=\underset{i=1}{\overset N\sum}\Big( \underset{x \in C_j}\sum [-2x\mu+\mu^2+2x\mu_j-\mu_j^2]\Big)\\=\underset{i=1}{\overset N\sum}\Big( \underset{x \in C_j}\sum [-2x\mu_j+\mu^2+\mu_j^2]\Big)=\underset{i=1}{\overset N\sum} m_j(\mu_j-\mu)(\mu_j-\mu)^T\)

其中\(m_j\)是第j个类别中个样本的个数,N是总的类别个数。从式中可以看出,类间散度表示的就是每个类别中心到全局中心的一种加权距离,此时的最大化目标同上一节是类似的,即:

\(J(w)=\frac{tr(W^TS_BW)}{tr(W^TS_wW)}\),其中\(W^TW=I\)

\(J(W)\)进行求导并令其等于0可得\(S_bw=\lambda S_ww\),求解嘴头投影平面\(W=\{w_1,w_2,...,w_d\}\)即求解\(W_w^{-1}S_b\)矩阵特征值的前d大对应的特征向量组成的矩阵,这就是原是的特征空间投影到了新的d为空间中。至此我们得到了与 PCA 步骤类似 , 但具有多个类别标签高维数据的 LDA 求解方法 。

1)计算数据集中每个类别呀那个本的均值向量\(\mu_j\),及总体均值向量\(\mu\)

2)计算类内散度矩阵\(S_w\),全局散度矩阵\(S_t\),并得到类间散度矩阵\(S_b=S_t-S_w\)

3)对矩阵\(S_w^{-1}S_b\)进行特征值分解,将特征值从大到小排列

4)去特征值前d大的对应特征向量\(w_1,w_2,...,w_d\),通过以下映射将n维样本映射到d维

\(x_i'=\begin{bmatrix} w_1^Tx_i \\ w_2^Tx_i \\ ... \\w_d^Tx_i\end{bmatrix}\)

4.4.2 不同点

1)首先从目标出发,PCA选择的是投影后数据方差最大的方向。由于它是无监督的,因此PCA假设方差越大,信息量越多,用主成分来表示原是数据可以去除冗余的维度,达到降维。

而LDA选择的是投影后类内方差小、类间方差大的方向。其用到了类别标签信息,为了找到数据中具有判别行的维度,使得原是数据在这些方向投影后,不同类别尽可能去分开。

2)从应用的角度,我们可以掌握一个基本的原则--对无监督的任务使用PCA进行降维,对有监督的则应用LDA

5、非监督学习(90~111)

5.1 K均值聚类

聚类是事先不知道任何样本类别标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高,不同类别之间的样本相似度低。K-means通过迭代方式寻找K个簇的一种划分方案,使得聚类结果对应的代价函数最小。代价函数可以定义为各个样本距离所属簇总新店的误差平方和

\(J(c,\mu)=\underset{i=1}{\overset M \sum}||x_i-\mu_{c_i}||^2\)

5.1.1 简述K均值算法的具体步骤

  1. 数据预处理,如过一化、离群点处理等

  2. 随机选取K个簇中心,记为\(\mu_1^{(0)},\mu_2^{(0)},...,\mu_K^{(0)}\)

  3. 定义代价函数:\(J(c,\mu)=\underset \mu {min} \underset c {min}\underset{i=1}{\overset M \sum}||x_i-\mu_{c_i}||^2\)

  4. 令t=1,2,...为迭代步数,重复下面过程直到\(J\)收敛:

对于每个样本\(x_i\),将其分配到距离最近的簇\(c_i^{(t)} \leftarrow \underset k {argmin}||x_i-\mu_k^{(t)}||^2\)

对于每个类簇k,重新计算该类簇中心\(\mu_k^{(t+1)} \leftarrow \underset \mu {argmin} \underset{i:c_i^{(t)}=k}\sum||x_i-\mu||^2\)

5.1.2 K均值算法的优缺点是什么,如何对其进行调优

K均值算法有一些缺点,如受初值和离群点的影响每次的结果不稳定、结果通常不是全局最优而是局部最优解、无法很好的解决数据簇分布差别比较大的情况(比如一类是另一类样本数量的100倍)、不太适用于离散分类等。

K均值的优点是:对于大数据集,K均值聚类算法相对是可伸缩和高效的,它的计算复杂度是\(O(NKt)\)接近于线性,其中N是数据对象的数目,K是聚类的簇数,t是迭代的轮数。

K均值算法的调优一般可以从以下几个角度出发

1)数据归一化和离群点处理

2)合理选择K值。可采用手肘法,尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴为K的取值,纵轴为误差平方和所定义的损失函数。手肘法是一个经验方法,缺点是不够自动化。

![image-20210714223253309](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714223253309.png)

Gap Statistic方法不再需要肉眼判断,而只需要找到最大的Gap Statistic所对应的K即可,假设分为K簇,对应的损失函数为\(D_k\),Gap Statistic定义为:

\(Gap(K)=E(\log D_k)-\log D_k\)

其中\(E(\log D_k)\)\(\log D_k\)的期望,一般通过蒙特卡洛模拟产生。

在样本所在的区域内按照均匀分布随机的产生和原始样本数一样多的随机样本,并对这个随机样本做K均值,得到一个\(D_k\),重复多次就可以计算出\(E(\log D_k)\)的近似值。

\(Gap(K)\)可以视为随机样本的损失与实际样本的损失之差。

3)采用核函数。核聚类方法的主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在心的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率,从而在经典聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。

5.1.3 针对K均值算法的缺点,有哪些改进的模型

K均值算法的主要缺点为:

1)需要人工预先确定初始K值,且该值和真实的数据分布未必吻合

2)K均值只能收敛到局部最优,效果受到初始值很大

3)易受到噪声点的影响

4)样本只能划分到单一的类中

K-means++算法

针对初始簇中心的改进。假设已经选取了\(n(0<n<K)\)个初始聚类中心,则在选取第\(n+1\)个聚类中心时,距离当前\(n\)个聚类中心越远的点回又更高的概率被选为\(n+1\)个聚类中心。第一个聚类中心随机选取。

ISODATA算法

当K值的大小不确定时,可以使用SIODATA算法,全称是迭代自组织数据分析法。ISODATA在原始K均值的基础上增加了两个操作,分别是分裂操作和合并操作。当属于某个类别的样本数过少时,把该类别去除;当属于某个类别的样本数过多、粉彩程度较大时,把该类别分为两个子类别。

ISODATA共有4个参数,分别为:

1)预期的聚类中心数据\(K_0\),用户指定的参考值,聚类中心数据变动范围由其决定;常见范围是\([K_0/2,2K_0]\)

2)每个类所要求的最少样本数目\(N_{min}\)

3)最大方差Sigma,用于控制某个类别中样本的分散程度。当样本的分散程度超过这个阈值时,且分裂后满足(1),进行分裂操作

4)两个聚类中心之间所允许最小距离\(D_{min}\),如果两个类靠的非常近,小于阈值时,则对这两个类进行合并操作。

如果希望样本不划分到单一的类中,可以使用模糊C均值或者高斯混合模型。

5.1.4 证明K均值算法的收敛性

K均值聚类迭代算法实际上是一种最大期望(Expenctation-Maximization algorithm:EM)算法,EM算法解决的事概率模型中含有无法观测的隐含变量情况下的参数估计问题,假设有m个观察样本,模型的参数为\(\theta\),最大化对数似然函数可以写为:

\(\theta=\underset{\theta}{argmax}\underset{i=1}{\overset m \sum}\log P(x^{(i)}|\theta)\)

当概率模型中含有无法被观测的隐含变量时,参数的最大似然估计变为

\(\theta=\underset{\theta}{argmax}\underset{i=1}{\overset m \sum}\log\underset{z^{(i)}}\sum P(x^{(i)},z^{(i)}|\theta)\)

由于\(z^{(i)}\)是未知的,无法直接通过最大似然估计求解参数,这是就需要利用EM算法来求解,假设\(z^{(i)}\)对应的分布为\(Q_i(z^{(i)})\),并满足\(\underset{z^{(i)}}\sum Q_i(z^{(i)})=1\),利用Jensen不等式,可以得到

\(\underset{i=1}{\overset m \sum}\log\underset{z^{(i)}}\sum P(x^{(i)},z^{(i)}|\theta)=\underset{i=1}{\overset m \sum}\log\underset{z^{(i)}}\sum Q_i(z^{(i)}) \frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}\geq\underset{i=1}{\overset m \sum}\underset{z^{(i)}}\sum Q_i(z^{(i)}) \log\frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}\)

要使上式中的等号成立,需要满足\(\frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}=c\),其中c时常数,且满足\(\underset{z^{(i)}}\sum Q_i(z^{(i)})=1\),因此\(Q_i(z^{(i)})=\frac{P(x^{(i)},z^{(i)}|\theta)}{\sum_{z(i)}P(x^{(i)},z^{(i)}|\theta)}=P(z^{(i)}|x^{(i)},\theta)\)

不等式的右侧记为\(r(x|\theta)\),当等式成立时,我们相当于为待优化的函数找到了一个逼近的下界,然后通过最大化这个下界可以使得带优化函数向更好的方向改进。

如下图时一个\(\theta\)为一维的例子,其中棕色的曲线代表我们待优化的函数,记为\(f(\theta)\),优化过程即为找到使得\(f(\theta)\)取值最大的\(\theta\)。在当前\(\theta\)的取值下(即图中绿色的位置),可以计算\(Q_i(z^{(i)})=P(z^{(i)}|x^{(i)},\theta)\),此时不等式右侧的函数(记为\(r(x|\theta)\))给出了优化函数的一个下界,如图中蓝色曲线所示,其中\(\theta\)处两条曲线的取值是相等的。接下来找到使得\(r(x|\theta)\)最大化的\(\theta'\),即图中红色的位置,此时\(f(\theta')\)的值比\(f(\theta)\)有所提升。可以证明\(f(\theta)\geq r(x|\theta)=f(\theta)\),而且\(P(z^{(i)}|x^{(i)},\theta) \in (0,1)\)从而函数是有界的。根据函数单调有界必收敛的性质,EM算法的收敛性得证。但是EM算法只保证收敛到局部最优解,当函数为非凸时,如图所示,如果初始化在左边的区域时,则无法找到右侧的高点

![image-20210715075112757](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210715075112757.png)

由上面的推导,EM算法的框架可以总结如下:

  1. E步骤:计算隐变量的期望\(Q_i(z^{(i)})=P(z^{(i)}|x^{(i)},\theta)\)

  2. M步骤:最大化\(\underset{\theta}{argmax}\underset{i=1}{\overset m \sum}\underset{z^{(i)}}\sum Q_i(z^{(i)}) \log\frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}\)

剩下的事情就时说明K均值算法与EM算法的关系了。K均值算法等价于用EM算法求解以下含隐变量的最大化似然问题:

\(P(x,z|\mu_1,\mu_2,...,\mu_k)\propto \begin{cases} exp(-||x-\mu_z||-2^2) & ,||x-\mu_z||_2=min_k||x-\mu_k||_2 \\ 0 &,||x-\mu_z||_2 > min_k||x-\mu_k||_2\end{cases}\)

其中\(z \in \{1,2,...,k\}\)是模型的隐变量。就是当样本x离第k个簇的中心点\(\mu_k\)距离最近时,概率正比于\(exp(-||x-\mu_z||-2^2)\),否则为0。

在E步骤,计算

\(Q(z^{(i)})=P(z^{(i)}|x^{(i)},\mu_1,\mu_2,...,\mu_k)\propto \begin{cases} 1 & ,||x^{(i)}-\mu_{z^{(i)}}||_2=min_k||x-\mu_k||_2 \\ 0 &,||x^{(i)}-\mu_{z^{(i)}}||_2 > min_k||x-\mu_k||_2\end{cases}\)

这等同于在K均值算法中对于每一个点\({x^{(i)}}\)找到当前最近的簇\({z^{(i)}}\)

在M步骤,找到最优的参数\(\theta=\{\mu_1,\mu_2,...,\mu_k\}\),使得似然函数最大

\(\theta = \underset{\theta}{argmax}\underset{i=1}{\overset m \sum}\underset{z^{(i)}}\sum Q_i(z^{(i)}) \log\frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}\)

经过推导可得\(\underset{i=1}{\overset m \sum}\underset{z^{(i)}}\sum Q_i(z^{(i)}) \log\frac{P(x^{(i)},z^{(i)}|\theta)}{Q_i(z^{(i)})}=const-\underset{i=1}{\overset m \sum}||x^{(i)}-\mu_{z^{(i)}}||^2\)

因此这一步骤等同于找到最优的中心点\(\{\mu_1,\mu_2,...,\mu_k\}\),使得损失函数\(\underset{i=1}{\overset m \sum}||x^{(i)}-\mu_{z^{(i)}}||^2\)达到最小,此时每个样本\({x^{(i)}}\)对应的簇\({z^{(i)}}\)已确定,因此每个簇k对应的中心点\(\mu_k\)可以由该簇中所有点的平均计算得到,这与K均值算法中根据当前簇的分配更新聚类中心的步骤是等同的。

5.2 高斯混合模型

高斯混合模型(Gaussian Mixed Model:GMM)是一种常见的聚类算法,与K均值算法类似,使用EM算法进行迭代计算。假设每个簇的数据都是符合高斯分布的,当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果

![image-20210715081148394](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210715081148394.png) ![image-20210715081158210](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210715081158210.png)

图中数据明显分为两簇,只用一个高斯分布来拟合是不太合理的,需要推广到用多个高斯分布的叠加来对数据进行拟合。

GMM的核心思想是什么,它是如何迭代计算的?

我们研究各类数据时,假设同一类的数据符合高斯分布;当数据事实上由多个类,或者我们希望将数据分为一些簇时,可以假设不同簇中的样本各服从不同的高斯分布,由此得到的聚类算法称为高斯混合模型。

GMM的核心思想是,假设数据可以看作从多个高斯分布中生成出来的。每个单独的分模型都是标准高斯模型,其均值\(\mu_i\)和方差\(\Sigma_i\)是待估计的参数。此外每个模型都还有一个参数\(\pi_i\),可以理解为权重或生成数据的概率,GMM的公式为:

\(p(x)=\underset{i=1}{\overset K \sum} \pi_i N(x|\mu_i,\Sigma_i)\)

高斯混合模型是一个生成式模型。即假设有一个组简单的情况,只有两个一维标准高斯分布的分模型\(N(0,1)\)\(N(5,1)\),其权重分别为0.7和0.3.那么在生成第一个数据点时,先按照权重的比例,随机选择一个分布,比如选择第一个高斯分布,接着从\(N(0,1)\)中生成一个点,如-0.5,便是第一个数据点。在生成第二个数据点时,随机选择第二个高斯分布\(N(5,1)\),生成第二个点4.7,如此循环执行,便生成出所有的数据点。

然而通常我们并不能直接得到GMM的参数,而是观察到一系列数据点,给出一个类别的数量K后,希望求得最佳的K个高斯分模型。因此GMM的计算,便成了最佳的均值均值\(\mu\)、方差\(\Sigma\)和权重\(\pi_i\)的寻找,这类问题通常通过最大似然估计来求解。

但是此问题中直接使用最大似然估计,得到的是一个复杂的非凸函数,目标函数是和的对数,难以展开和对其求偏导。可以用EM算法框架来求解优化问题。先固定一个变量使整体函数变为凸优化函数,求导得到最值,然后利用最优参数更新被固定的变量,进入下一个循环。

初始随机选择各参数的值,然后重复执行E步和M步,直到收敛

E步:根据当前参数,计算每个点由某个分模型生成的概率

M步:使用E步估计出的概率,来改进每个分模型的均值,方差和权重。

GMM与K-means的相同点是:都是可用于聚类的算法,都需要指定K值,都是使用EM算法来求解,都往往只能收敛于局部最优。

GMM相比K-means的优点是:可以给出一个样本属于某类的概率是多少,不仅仅可以用于聚类,还可以用于概率密度的估计,并且可以用于生成新的样本点

5.3 自组织映射神经网络

自组织映射神经网络(Self-Organizing Map: SOM)是无监督学习中一类重要方法,可以用作聚类、高维可视化、数据压缩、特征提取等多种用途。

5.3.1 SOM是如何工作的,与K-means 有何区别?

SOM是对生物神经系统功能的一种人工神经网络模拟。是一个两层的神经网络,包括输入层和输出层,输入层模拟感知外界输入信息的视网膜,输出层模拟做出响应的大脑皮层。输出层中神经元的个数通常是聚类的个数,代表每个需要聚称的类。训练时采用“竞争学习”的方式,每个输入的阳历在输出层找到一个和它最匹配的节点,称为激活节点(winning neuron),紧接着用随机梯度下降法更新激活节点的参数;同时和激活节点临近的点也根据他们距离激活节点的远近而适当的更新参数。这种竞争可以通过神经元之间的横向抑制连接(负反馈路径)来实现。SOM的输出节点是由拓扑关系的,这个拓扑关系依据需求确定,如果想要一维的模型,那么隐藏节点可以是“一维线阵”,如果想要二维的拓扑关系,那么就形成一个“二维平面阵”,更高维度的如“三维栅格阵”等。

![image-20210715083823991](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210715083823991.png)

假设输入空间是D维,输入模型为\(x=\{x_i,i=1,...,D\}\),输出单元i和神经元j之间的计算层的权重为\(w=\{w_{i,j},j=1,...,N, i=1,...,D\}\),其中N是神经元的总数。

  1. 初始化,所有连接权重都用小的随机值进行初始化

  2. 竞争,神经元计算每一个输入模型各自的判别函数值,并宣布具有最小判别函数值的特定神经元为胜利者,其中每个神经元j的判别函数为\(d_j(x)=\underset{i=1}{\overset D \sum}(x_i-w_{ij})^2\)

  3. 合作,获胜神经元\(I(x)\)决定了兴奋神经元拓扑邻域的空间位置,确定激活节点\(I(x)\)之后,我们也希望更新和它临近的节点。更新程度计算如下:

\(T_{j,I(x)}(t)=exp\Big(\frac{s_{j,I(x)}^2}{2\sigma(t)^2}\Big)\),其中\(S_{ij}\)表示竞争层神经元i和j之间的距离,\(\sigma(t)=\sigma_0exp(-t/\tau_\sigma)\)随时间衰减;临近的节点距离越远,更新的程度要打更大的折扣

  1. 适应。适当调整相关兴奋神经元的连接权重,使得获胜的神经元对相似输入模式的后续应用的响应增强:\(\nabla w_{ji}=\eta(t)·T_{j,I(x)}(t)·(x_i-w_{ji})\),其中依赖于时间的学习率定义为\(\eta(t)=\eta_0 exp(-t/\tau_\eta)\)

  2. 迭代,继续回到步骤2),直到特征映射趋于稳定。

迭代结束后,每个样本所激活的神经元就是它对应的类别。

SOM具有保序映射的特点,可以将任意输入模式在输出层映射为一维或者二维图像,并保持拓扑结构不变。这种拓扑映射使得“输出层神经元的空间位置对应于输入空间的特定域或特征”。每个学习权重更新的效果等同于将获胜的神经元及其邻近的全向量\(w_i\)向输入向量x移动,同时对该过程的迭代进行会使得网络的拓扑有序。

在SOM中,获胜的神经元使得相关的各权重向更加有利于它竞争的方向调整,即以获胜神经元为中心,对近邻的神经元表现出兴奋性侧反馈,而对远邻的神经元则表现出抑制性侧反馈,近邻者互相激励,远邻者互相抑制。近邻和近邻均有一定的范围,对更远邻的神经元则表现弱激励的作用。这种交互作用的方式以曲线可视化则类似于“墨西哥帽”

![image-20210715124524591](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210715124524591.png)

SOM与K-means的区别为:

1)K均值算法需要实现定下来类的个数,而SOM则不用。隐藏层中的某些节点可以没有任何输入数据属于它,因此聚类结果的实际簇数可能会小于神经元的个数。

2)K均值算法为每个数据数据找到一个最相思的类后,只更新这个类的参数;SOM则会更新邻近的节点。所以K均值受Noise data的影响比较大,而SOM的准确性可能会比K均值算法低(因为它更新了邻近节点)

3)相比而言,SOM的可视化比较好,而且具有优雅的拓扑关系图

5.3.2 怎样设计SOM并设定网络训练参数

设定输出层神经元的数量
设计输出层节点的排列
初始化权值
设计拓扑结构
设计学习率

5.4 聚类算法的评估

5.4.1 假设没有外部标签数据,如何评估两个聚类算法的优劣

以中心定义的数据簇:倾向于球形分布,通常中心被定义为质心

以密度定义的数据簇:当数据簇不规则或相互盘绕,并且有噪声和离群点时,常常使用基于密度的簇定义

以连通定义的数据簇:整个数据簇表现为图结构

以概念定义的数据簇:集合中的所有数据点具有某种共同性质

聚类评估的任务时估计在数据集上进行聚类的可行性,以及聚类方法产生结果的质量,这一过程又分为三个子任务:

1)估计聚类趋势

这一步骤是检测数据分布中是否存在非随机的簇结构。如果数据是基本随机的,那么聚类的结果也是毫无意义的。可以观察聚类误差是否随聚类类别数量的增加而单调变化,如果数据是基本随机的,即不存在非随机簇结构,那么聚类误差随聚类类别数量增加而变化的幅度应该较不显著,并且也找不到一个合适的K对应数据的真实簇数。

另外,可以应用霍普金斯统计量来判断数据在空间上的随机性。首先从数据中随机找n个点,记为\(p_1,p_2,...,p_n\),对其中的每一个点\(p_i\)都在样本空间中找到一个离它最近的点并计算他们之间的距离\(x_i\),从而得到距离向量\(x_1,x_2,...,x_n\),然后从让本的可能取值范围内随机生成n个点,记为\(q_1,q_2,...,q_n\),对每个随机生成的点,找到一个离它最近的样本点冰计算它们之间的距离,得到\(y_1,y_2,...,y_n\),霍普金斯统计量H可以表示为\(H=\underset{i=1}{\overset n\sum}y_i/(\underset{i=1}{\overset n\sum}x_i+\underset{i=1}{\overset n\sum}y_i)\),如果样本随机分布,那么\(\underset{i=1}{\overset n\sum}x_i\)\(\underset{i=1}{\overset n\sum}y_i\)应该比较接近,此时H接近于0.5;如果趋势比较明显,则随机生成样本点的距离应该远大于实际样本点的距离,此时H接近于1。

2)判定数据簇数

确定聚类趋势之后,需要找到与真实数据分布最为吻合的簇数,据此判定聚类结果的质量。数据簇数的判定方法有很多,如手肘法和Gap Statistic方法。

3)测定聚类质量

通过考察簇的分离情况和簇的紧凑情况来评估聚类的效果。

轮廓系数\(s(p)=\frac{b(p)-a(p)}{max\{a(p), b(p)\}}\),其中\(a(p)\)是点p与簇中的其他点\(p'\)之间的平均距离;\(b(p)\)是点p与另一个簇中的点之间的最小平均距离(如果有n个簇,则只计算和点p最近的一簇中的点与该点的平均距离)。\(a(p)\)反应的是p所属簇的紧凑程度,\(b(p)\)反应的是该簇与其他临近簇的分离程度。显然\(b(p)\)越大,\(a(p)\)是越小,对应的聚类质量越好。

均方根标准差(Root-mean-square standard deviation RMSSTD)

用来衡量聚类结果的同质性,即紧凑程度,定义为\(RMSSTD=\Big\{\frac{\underset{i=1}{\overset {NC} \sum}\underset{x \in C_i}{\sum}||x-c_i||^2}{P \underset{i=1}{\overset {NC} \sum}(n_i-1)}\Big\}^2\)

其中\(C_i\)代表第i个簇,\(c_i\)是该类的簇中心;\(n_i\)是第i个簇的样本个数,P为样本点对一个的向量维数。NC是聚类簇的个数。

R方(R-Square)用来衡量差异度\(RS=\frac{\underset{x \in D}{\sum}||x-c||^2 - \underset{i=1}{\overset {NC} \sum}\underset{x \in C_i}{\sum}||x-c_i||^2}{\underset{x \in D}{\sum}||x-c||^2}\)

其中,D代表整个数据集,c代表数据集D的中心点。R方代表了聚类之后的结果与聚类之前相比,对应的平方误差和指标的改进幅度。

改进的Hubert\(\Gamma\)统计,通过数据对的不一致性来评估聚类的差异

\(\Gamma = \frac{2}{n(n-1)}\underset{x \in D}{\sum}\underset{y \in D}{\sum}d(x,y)d_{x\in C_i,y\in C_j}d(c_i,c_j)\)

\(d_{x\in C_i,y\in C_j}d(c_i,c_j)\)代表x所在的簇中心\(c_i\)与y所在的簇中心\(c_j\)之间的距离。

\(d(x,y)\)越小,对应的\(d_{x\in C_i,y\in C_j}d(c_i,c_j)\)应该越小;相反当当\(d(x,y)\)越大,对应的\(d_{x\in C_i,y\in C_j}d(c_i,c_j)\)应该越大。所以\(\Gamma\)值越大说明聚类的结果与样本的原始距离越吻合,也就是聚类质量越高。

6、概率图学习(116~133)

概率图模型构建了这样一幅图,用观测节点表示观测到的数据,用隐含节点表示潜在的知识,用边来描述知识与数据的相互关系,最后基于这样的关系图获得一个概率分布。

概率图中的节点分为隐含节点和观测节点,边分为有向边和无向边。从概率论的角度,节点对应于随机变量,边对英语随机变量的依赖或相关关系,其中有向边表示单向的依赖,无向边表示相互依赖关系。

概率图模型分为贝叶斯网络和马尔可夫网络两大类。贝叶斯网络可以用一个有向图表示,马尔可夫网络可以表示成一个无向图的网络结构。概率图模型包括了朴素贝叶斯模型、最大熵模型、隐马尔可夫模型、条件随机场、主题模型等。

最大熵模型也是概率图模型吗???

6.1 概率图模型的联合概率分布

| ![image-20210717123138533](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717123138533.png) | \(p(C|A,B)=\frac{P(B,C|A)}{P(B|A)}=\frac{P(B|A)P(C|A)}{P(B|A)}=P(C|A) \\P(D|A,B,C)=\frac{P(A,D|B,C)}{P(A|B,C)}=\frac{P(A|B,C)P(D|B,C)}{P(A|B,C)}=P(D|B,C) \\ \Rightarrow \\P(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|A,B,C)\\=P(A)P(B|A)P(C|A)P(D|B,C)\) |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| ![image-20210717125433489](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717125433489.png) | \(P(A,B,C,D)=\frac{1}{Z}\varphi_1(A,B)\varphi_2(A,C)\varphi_3(B,D)\varphi_4(C,D) \\ \begin{align} H(A,B,C,D) & = \alpha_1AB+\alpha_2AC+\alpha_3BD+\alpha_4CD \\& +\beta_1A +\beta_2B +\beta_3C +\beta_4D\end{align} \\ \Rightarrow \\P(A,B,C,D)=\frac{1}{Z}e^{-H(A,B,C,D)}\) |

在马尔可夫网络中,联合概率分布的定义为\(P(x)=\frac{1}{Z}\underset{Q\in C}\prod \varphi_Q(x_Q)\),其中C为图中最大团所构成的集合。\(Z=\underset{x}\sum\underset{Q\in C}\prod \varphi_Q(x_Q)\)\(\varphi_Q\)时与团Q对应的势函数。势函数时非负的,并且应该在概率较大的变量上取得较大的值,例如指数\(\varphi_Q=e^{-H_Q(x_Q)}\),其中\(-H_Q(x_Q)=\underset{u,v\in Q,u\neq v}\sum \alpha_{u,v}x_ux_v+\underset{v\in}\sum\beta_vx_v\)。从网络结构中可以看出,\((A,B),(A,C),(B,D),(C,D)\)均构成团,且都是最大团

6.2 概率图表示

6.2.1 解释朴素贝叶斯模型的原理,并给出概率图模型表示

朴素贝叶斯模型通过预测指定样本属于特定类别的概率\(P(y_i|x)\)来预测该样本的所属类别,即

\(y=\underset{y_i}{max}P(y_i|x)\),其中\(P(y_i|x)\)可以写成\(P(y_i|x)=\frac{P(x|y_i)P(y_i)}{p(x)}\propto P(x|y_i)P(y_i)=P(x_1|y_i)P(y_i)P(x_2|y_i)P(y_i)···P(x_n|y_i)P(y_i)\)

由于\(p(x)\)时样本的先验概率,不会硬系那个\(P(y_i|x)\)的相对大小,因此在计算中可以被忽略

可以看到后验概率\(P(x_j|y_i)\)的取值决定了分类的结果,并且任意特征\(x_j\)都由\(y_i\)的取值受影响。

![image-20210717140315006](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717140315006.png) 该表示方法为盘式记法,时一种简洁的概率图模型表示方法,如果变量y同时收到\(x_1,...,x_N\)这N个变量的影响,则可以用这种方式表示

6.2.2 解释最大熵模型的原理,并给出概率图模型表示

给定离散随机变量x和y上的条件概率分布\(P(y|x)\),定义在条件概率分布上的条件熵为

\(H(P)=-\underset{x,y}\sum \tilde P(x)P(y|x)logP(y|x)\)

其中\(\tilde P(x)\)时样本在训练集上的经验分布,即x的各个取值在样本中出现的概率统计

最大熵模型时要学习到合适的分布\(P(y|x)\),使得条件熵\(H(P)\)的取值最大。在一无所知的情况下,最大熵模型认为\(P(y|x)\)是符合均匀分布的。当有训练数据集后,需要从中找到一些规律,消除一些不确定性,这时需要用到特征函数\(f(x,y)\)。特征函数\(f\)描述了输入\(x\)和输出\(y\)之间的一个规律。例如当\(x=y\)时,\(f(x,y)\)等于一个比较大的正数。为了使学习到的模型\(P(y|x)\)能够正确捕捉训练数据集中的这一规律,我们加入一个约束,使得特征函数\(f(x,y)\)关于经验分布\(\tilde P(x,y)\)的期望值与关于模型\(P(y|x)\)和经验分布\(\tilde P(x)\)的期望值相等,即\(E_{\tilde P}(f)=E_P(f)\)

其中,特征函数\(f(x,y)\)关于经验分布\(\tilde P(x,y)\)的期望公式为\(E_{\tilde P}(f)=\underset{x,y}\sum \tilde P(x,y)f(x,y)\)

\(f(x,y)\)关于模型\(P(y|x)\)和经验分布\(\tilde P(x)\)的期望公式为\(E_{\tilde P}(f)=\underset{x,y}\sum \tilde P(x)P(y|x)f(x,y)\)

在给定训练数据集\(T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\),以及M个特征函数\(\{f_i(x,y),i=1,2,...,M\}\),最大熵模型的学习等价于约束最优化问题:

\(\underset P {max}H(P)=-\underset{x,y}\sum \tilde P(x)P(y|x)f(x,y) \\s.t. E_{\tilde P}(f_i)=E_P(f_i),\forall i=1,2,...,M; \underset y \sum P(y|x)=1\)

求解之后可以得到最大熵模型的表达形式为\(p_w(y|x)=\frac{1}{Z}exp\Big(\underset{i=1}{\overset M \sum}w_if_i(x,y) \Big)\)

| ![image-20210717153236414](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717153236414.png) | 最大熵模型归结为学习最佳的参数\(w\),使的\(p_w(y|x)\)最大化。从概率图模型的角度理解,可以看到\(p_w(y|x)\)的表达式非常类似于势函数为指数函数的马尔可夫网络,其中变量x和y构成了一个最大团 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |

6.3 生成式模型与判别式模型

常见的概率图模型中,哪些是生成式模型,哪些是判别式模型

假设可观测到的变量集合为X,需要预测的变量集合为Y,其他的变量集合为Z。

生成式模型是对联合概率分布\(P(X,Y,Z)\)进行建模,在给定观测集合X的条件下,通过计算边缘分布来得到对变量集合Y的推断,即\(P(Y|X)=\frac{P(X,Y)}{P(X)}=\frac{\sum_ZP(X,Y,Z)}{\sum_{Y,Z}P(X,Y,Z)}\)

判别式模型是直接对条件概率分布\(P(Y|X)=\sum_ZP(Y,Z|X)\)

常见的概率图模型有朴素贝叶斯模、最大熵模型、贝叶斯网络、隐马尔可夫模型、条件随机场、pLSA、LDA等。最大熵、条件随机场属于判别式模型;朴素贝叶斯、贝叶斯网络、pLSA、LDA和隐马尔可夫模型是生成式模型

6.4 马尔可夫模型

马尔可夫过程是满足无后效性的随机过程,即\(P(x_n|x_1,x_2,...,x_{n-1})=P(x_n|x_{n-1})\)。时间和状态的取值都是离散的马尔可夫过程也称为马尔可夫链

![image-20210717155006616](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717155006616.png)

在马尔可夫模型中,所有状态对于观测者都是可见的,马尔可夫模型仅仅包括状态间的转移概率

在隐马尔可夫模型中,隐状态\(x_i\)对于观测者而言是不可见的,观测者能观测到的只有每个隐状态\(x_i\)对应的输出\(y_i\),而观测状态\(y_i\)的概率分布筋筋取决于隐状态\(x_i\)。在HMM中,参数包括了隐状态间的转移概率,隐状态到观测状态的输出概率、隐状态x的取值空间、观测状态y的取值空间以及初始状态的概率分布

![image-20210717155326546](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717155326546.png)

6.4.1 如何对中文分词问题用HMM进行建模和训练

假设有3个不同的葫芦,每个葫芦里有好药和坏药若干,现在从这3个葫芦中按以下规则倒出药来:

1)随机挑选一个葫芦

2)从葫芦里倒出一颗药,记录是好药还是坏药后将药放回

3)从当前葫芦按照一定的概率转移到下一个葫芦

4)重复2)和3)

隐状态的取值空间为{葫芦1,葫芦2,葫芦3},观测状态的取值空间为{好药,坏药},初始状态的概率分布就是第1)步随机挑选葫芦的概率分布,隐状态间的转移概率就是从当前葫芦转移到下一个葫芦的概率,隐状态到观测状态的输出概率就是每个葫芦里好药和坏药的概率。

HMM包括概率计算问题、预测问题和学习问题三个基本问题。

概率计算问题:已知模型的所有参数,计算观测序列Y出现的概率

预测问题:已知模型所有参数和观测序列Y,计算最可能的隐状态序列X

学习问题:已知观测序列Y,求解是的该观测序列概率最大的模型参数;包括隐状态序列、隐状态间的转移概率分布以及从隐状态到观测状态的概率分布。

HMM通常用来解决序列标注问题,可以将分词问题转化为一个序列标准问题来进行建模。例如对中文句子中的每个字做以下标注,B表示一个词开头的第一个字,E表示一个词结尾的最后一个字,M表示一个词中间的字,S表示一个单字词,则隐状态的取值空间为{B,E,M,S}。同时对隐状态的转移概率可以给出一些先验知识,B和M后看职能是M或者E,S和E后面职能是B或者S。而每个字就是模型中的观测状态,取值空间为预料中的所有中文字。完成建模以后,使用预料进行训练可以分文监督训练和无监督训练。有监督训练即对预料进行标注,相当于根据经验得到了语料的所有隐状态信息,然后就可以用简单的计数来对模型中的概率分布进行极大似然估计。无监督训练可以用上问提到的Baum-Welch算法,同时优化状态序列和模型对应的概率分布。

6.4.2 最大熵马尔可夫模型会产生标注偏置问题,如何解决?

HMM用于解决序列标注问题的模型中,常常对标注进行了独立性假设。以HMM为例介绍标注偏置问题(Label Bias Problem)

在HMM中,假设隐状态\(x_i\)的状态满足马尔可夫过程,即\(P(x_i|x_1,x_2,...,x_{i-1})=P(x_i|x_{i-1})\),同时HMM假设观测序列中各个状态仅取决于它对应的隐状态\(P(y_t|x_1,...,x_n,y_1,y_2,...,y_{t-1},y_{t+1},...)=P(y_t|x_t)\)

实际上,标准问题中隐状态不仅和单个观测状态相关,还和观察序列的长度、上下文等信息相关。例如词性标注问题中,一个词被标注为动词还是名词,不仅与它本身以及它前一个词的标注有关,还依赖于上下文中的其他词,于是引出了最大熵马尔可夫模型(Maximum EntropyMarkov Model:MEMM)。最大熵马尔可夫模型在建模时,去除了HMM中观测状态相互独立的假设,考虑了整个观测序列,因此获得了更强的表达能力。

![image-20210717161911282](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717161911282.png)

HMM是一种对隐状态序列和观测状态序列\(P(x,y)\)进行建模的生成式模型,而MEMM是直接对标注的后验概率\(P(y|x)\)进行建模的判别式模型

MEMM建模为:\(p(x_{1...n}|y_{1...n})=\underset{i=1}{\overset n \prod}p(x_i|x_{i-1},y_{1...n})\)

其中\(p(x_i|x_{i-1},y_{1...n})\)会在局部进行归一化,即枚举\(x_i\)的全部取值进行求和之后计算概率,计算公式为\(p(x_i|x_{i-1},y_{1...n})=\frac{exp(F(x_i,x_{i-1},y_{1...n}))}{Z(x_{i-1},y_{1...n})}\),其中\(Z(x_{i-1},y_{1...n})= \sum_{x_i} exp(F(x_i,x_{i-1},y_{1...n}))\)

\(F(x_i,x_{i-1},y_{1...n})\)\(x_i,x_{i-1},y_{1...n}\)所有特征的线性叠加。

MEMM存在标注偏置问题,如下图所示。可以发现状态1倾向于转移到状态2,状态2倾向于转移到状态2本身。

![image-20210717162825544](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717162825544.png)

但是实际计算得到的最大概率路径是1->1->1->1,状态1并没有转移到状态2。这是因为从状态2转移出去可能的状态包括1、2、3、4、5,概率在可能的状态上分散了,而状态1转移出去的可能状态仅仅为状态1和2,概率更加集中。由于局部归一化的影响,隐状态会倾向于转移到哪些后续状态可能更少的状态上,以提高整体的后验概率。这就是标注偏置问题。

![image-20210717163029123](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717163029123.png)

条件随机场(Conditional Random Field,CRF)在MEMM的基础上,进行了全局归一化,如下图所示:

![image-20210717163141266](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717163141266.png)

条件随机场建模为:\(p(x_{1...n}|y_{1...n})=\frac{1}{Z(y_{1...n})}\underset{i=1}{\overset n \prod}p(x_i|x_{i-1},y_{1...n})\)

其中归一化因子\(Z(y_{1...n})\)是在全局范围内进行归一化,枚举了整个隐状态\(x_{1...n}\)的全部可能,从而解决了局部归一化带来的标注偏置问题。

6.5 主题模型

6.5.1 常见的主题模型有哪些

pLSA是用一个生成模型来建模文章的生成过程。假设有K个主题,M篇文章;对语料库中的任意文章d,假设该文章有N个词,则对于其中的每一个词,首先选择一个主题z,然后在当前主题的基础上生成一个词w

![image-20210717164052569](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717164052569.png)

生成主题z和词w的过程遵照一个确定的概率分布。设在文章d中生成主题z的概率为\(p(z|d)\),在选定主题的条件下生成词w的概率为\(p(w|z)\),则给定文章d,生成词w的概率可以写成:\(p(w|d)=\sum_zp(w|z,d)p(z|d)\)

这里做一个简化,假设给定主题z的条件下,生成词w的概率是与特定的文章无关的,则公式可以简化为\(p(w|d)=\sum_zp(w|z)p(z|d)\)。整个语料库中的文本生成概率可以用似然函数表示为:

\(L=\underset m {\overset M \prod}\underset n {\overset N \prod} p(d_m,w_n)^{c(d_m,w_n)}\)

其中\(p(d_m,w_n)\)是第m篇文档\(d_m\)中,出现单词\(w_n\)的概率,与上下文中的\(p(w|d)\)的含义是相同的,只是换了一种符号表达;\(c(d_m,w_n)\)是在第m篇文章\(d_m\)中,单词\(w_n\)出现的次数,于是Log似然函数可以写成:

\(l=\underset m {\overset M \sum}\underset n {\overset N \sum} {c(d_m,w_n)} \log p(d_m,w_n)=\underset m {\overset M \sum}\underset n {\overset N \sum} {c(d_m,w_n)} \log \underset n {\overset N \sum}p(d_m)p(z_k|d_m)p(w_n|z_k)\)

其中,定义在文章上的主题分布\(p(z_k|d_m)\)和定义在主题上的词分布\(p(w_n|z_k)\)是待估计的参数。由于参数中包含的\(z_k\)是隐变量,因此需要利用最大期望算法来求解。

LDA可以看作pLSA的贝叶斯版本,其文本生成过程与pLSA基本相同,不同的是为主题分布和词分布分别加了两个狄利克雷(Dirichlet)先验。pLSA采用的是频率派思想,将每篇文章对应的主题分布\(p(z_k|d_m)\)和每个主题对应的词分布\(p(w_n|z_k)\)堪称是确定的未知参数,并可以求解出来。而LDA采用的是贝叶斯学派的思想,认为待估计的参数不再是固定的常数,而是服从一定分布的随机变量。这个分布符合一定的先验概率分布(如Dirichlet分布),并且在观察到样本信息后,可以对先验分布进行修正,从而得到后验分布。LDA之所以选择Dirichlet作为先验分布,是因为它为多项式分布的共轭先验概率分布,后验概率依然服从Dirichlet,这样做可以为计算带来便利。

![image-20210717222914230](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210717222914230.png)

其中\(\alpha, \beta\)分别为两个Dirichlet的超参数,为人工设定。

语料库的生成过程:对文本库中每一篇文档d,采用以下操作

  1. 从超参数为\(\alpha\)的Dirichlet中抽样生成文档\(d_i\)的主题分布\(\theta_i\)

  2. 对文档\(d_i\)的每一个词进行以下三个操作:

2.1 从代表主题的多项式分布\(\theta_i\)中抽样生成它所对应的主题\(z_{ij}\)

2.2 从超参数为\(\beta\)的Dirichlet中抽样生成主题\(z_{ij}\)对应的词分布\(\psi_{z_{ij}}\)

2.3 从代表词的多项式分布\(\psi_{z_{ij}}\)中抽样生成词\(w_{ij}\)

我们要求出主题分布\(\theta_i\)以及词分布\(\psi_{z_{ij}}\)的期望,可以用Gibbs采样的方式实现。首先随机给定每个单词的主题,然后在其他变量固定的情况下,根据转移概率抽样生成每个单词的新主题。对于每个单词来说,转移概率可以理解为:给定文章中的所有单词以及除自身以外其他所有单词的主题,在此条件下该单词对应为各个新主题的概率。最后,经过反复迭代,可以根据熟练后的采样结果计算主题分布和词分布的期望。

6.5.2 如何确定LDA模型中的主题个数

困惑度:\(perplexity(D)=exp\Big(\underset{d=1}{\overset M\sum} \log p(w_d)/\underset{d=1}{\overset M\sum}N_d\Big)\)

其中\(M\)为文档的总数,\(w_d\)为文档d中单词所组成的词袋向量,\(p(w_d)\)为模型所预测的文档d的生成概率,\(N_d\)为文档d中单词的数目。

一开始随着主题个数的增多,模型在训练集和验证集上的困惑度呈下降趋势;但是当主题数目足够大的时候,会出现过拟合,导致困惑度指标在训练集上继续下降但是在验证集上反而增长。

另一种方法是在LDA基础上融入分词狄利克雷过程(Hierarchical Dirichlet Process:HDP),构成一种非参数主题模型HDP-LDA。非参数模型的好处是不需要预先指定主题的个数,模型可以随着文档数目的变化而自动对主题个数进行调整;它的缺点是在LDA基础上融入了HDP之后使得整个概率图哦行更加复杂,训练速度叶更加缓慢。

6.5.3 如何用主题模型解决推荐中的冷启动问题

根据用户在FaceBook的评论信息得到用户和物品的主题,然后根据主题计算相似度。

7、优化算法(139~168)

7.1 有监督学习的损失函数

分类:

0-1损失:\(L_{0-1}(f,y)=1_{fy\leq 0}\),0-1损失非凸、非光滑,很难直接对该函数进行优化

0-1损失替代--Hinge损失函数:\(L_{hinge}(f,y)=max\{0,1-fy\}\)

0-1损失替代--Log损失:\(L_{logistic}(f,y)=log_2(1+exp(-fy))\)(对异常点敏感)

交叉熵损失:\(L_{corss \ entropy}(f,y)=-log_2\big(\frac{1+fy}{2}\big)\)

![image-20210712091155396](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712091155396.png)

回归:

平方损失:\(L_{square}(f,y)=(f-y)^2\)

绝对损失:\(L_{absolute}(f,y)=|f-y|\)

Huber损失:\(H_{Huber}(f,y)=\begin{cases} (f-y)^2 & |f-y|\leq \delta \\ 2\delta|f-y|-\delta^2 & |f-y|>\delta \end{cases}\)

![image-20210712091335931](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712091335931.png)

7.2 机器学习中的优化问题

凸函数,对于任意两点\(x,y\)和任意实数\(\lambda\in[0,1]\),有\(L(\lambda x+(1-\lambda)y)\leq\lambda L(x)+(1-\lambda)L(y)\)

![image-20210712092021461](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712092021461.png)

一个常见的凸优化问题为:对于二分类问题\(Y=\{1,-1\}\),假设模型参数为\(\theta\),则逻辑回归的优化问题是:

\(\underset \theta {min} \sum_{i=1}^m \log(1+exp(-y_i\theta^Tx_i))\)

可通过计算目标函数的二阶Hessian矩阵来验证凸性,令\(L_i(\theta) = \log(1+exp(-y_i\theta^Tx_i))\)

\(\nabla L_i(\theta)=\frac{1}{1+exp(-y_i\theta^Tx_i)}exp(-y_i\theta^Tx_i)·(-y_ix_i)=\frac{-y_ix_i}{1+exp(y_i\theta^Tx_i)}\)

继续求导,得到Hessian矩阵\(\nabla^2L_i(\theta)=\frac{y_ix_i·exp(y_i\theta^Tx_i)·y_ix_i^T}{(1+exp(y_i\theta^Tx_i))^2}=\frac{exp(y_i\theta^Tx_i)}{(1+exp(y_i\theta^Tx_i))^2}x_ix_i^T \geq 0\)

因此可得\(L(·)\)是凸函数

常见的非凸优化问题:主成分分析,令\(X=[x_1,...,x_n]\)为数据中心化后的矩阵,主成分分析的优化问题为:\(\underset{VV^T=I_k} {min} L(V)=||X-V^TVX||_F^2\)

\(V^*\)为优化问题的全局极小值,则\(-V^*\)也是该问题的全局极小值,且有:

\(L(\frac{1}{2}V^* + \frac{1}{2}(-V^*))=L(0)=||X||_F^2 > ||X-V^TVX||_F^2=\frac{1}{2}L(V^*) + \frac{1}{2}L(-V^*)\)

显然这个不满足凸函数的定义;但主成分分析是一个特例,可以借助SVD直接得到其全局极小值

非凸优化问题的例子包括低秩模型(如矩阵分解)、深度神经网络模型等。

7.3 经典优化算法

直接法

\(L(\theta)=||X\theta-y||_2^2+\lambda||\theta||_2^2\),其最优解为\(\theta^*=(X^TX+\lambda I)^{-1}X^Ty\)

直接法的两个限制条件:\(L(·)\)是凸函数,上式有闭式解

迭代法:希望求解优化问题\(\delta_t=\underset \delta {argmin}L(\theta_t+\delta)\)来得到更好的估计值\(\theta_{t+1}=\theta_t+\delta_t\)

迭代法可分为一阶法和二阶法

一阶法:\(L(\theta_t+\delta)\approx L(\theta_t)+\nabla L(\theta_t)^T\delta\)

仅在\(\delta_t\)较小时才较准确,一般加\(L_2\)正则项:\(\delta_t=\underset\delta {argmin} \Big[L(\theta_t)+\nabla L(\theta_t)^T\delta + \frac{1}{2\alpha}||\delta||_2^2\Big]=-\alpha\nabla L(\theta_t)\)

由此,一阶法的迭代公式表示为:\(\theta_{t+1}=\theta_t-\alpha\nabla L(\theta_t)\)

二阶法:\(L(\theta_t+\delta)\approx L(\theta_t)+\nabla L(\theta_t)^T\delta+\frac{1}{2}\delta^T\nabla^2L(\theta_t)\delta\)

\(\delta_t=\underset\delta {argmin} \Big[L(\theta_t)+\nabla L(\theta_t)^T\delta + \frac{1}{2\alpha} \delta^T\nabla^2L(\theta_t)\delta\Big]=-\nabla^2L(\theta_t)^{-1}L(\theta_t)\)

由此,二阶法的迭代公式表示为:\(\theta_{t+1}=\theta_t-\nabla^2L(\theta_t)^{-1}L(\theta_t)\)

二阶法也称为牛顿法, Hessian 矩阵就是目标函数的二阶信息 。 二 阶法的收敛速度-般要远快于一阶法,但是在高维情况下, Hessian矩阵求逆的计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点( Saddle Point ) 。

7.4 梯度验证

需要先取一个较小的h值

目标函数的梯度为\(\nabla L(\theta)=\Big[\frac{\partial L(\theta)}{\partial \theta_1},...,\frac{\partial L(\theta)}{\partial \theta_n}\Big]\),其中第i个元素定义为:\(\frac{\partial L(\theta)}{\partial \theta_i}=\underset{h \rightarrow 0}{lim}\frac{L(\theta+he_i)-L(\theta-he_i)}{2h}\)

其中\(e_i\)时单位向量,其维度与\(\theta\)相同,近在第i个位置取值为其,其余取值为0

分别将\(L(\theta+he_i)\)\(L(\theta - he_i)\)\(\theta=0\)处展开可得(令单变量函数\(L(\theta+xe_i)=\tilde L(x)\)):

\(L(\theta+he_i)=\tilde L(h)=\tilde L(0)+\tilde L'(0)h + \frac{1}{2}\tilde L''(0)h^2 + \frac{1}{6}\tilde L^{(3)}(p_i)h^3\),其中\(p_i \in (0,h)\)

\(L(\theta-he_i)=\tilde L(h)=\tilde L(0)-\tilde L'(0)h + \frac{1}{2}\tilde L''(0)h^2 - \frac{1}{6}\tilde L^{(3)}(q_i)h^3\),其中\(q_i \in (0,h)\)

另外,由于\(\tilde L'(0)=\frac{\partial L(\theta)}{\partial \theta_i}\)

所以:\(\frac{L(\theta+he_i)-L(\theta-he_i)}{2h}=\frac{\partial L(\theta)}{\partial \theta_i}+\frac{1}{12}\Big[\tilde L^{(3)}(p_i) + \tilde L^{(3)}(q_i)\Big]h^2\)

\(h\)充分小时,\(p_i, q_i\)都很接近0,可以近似认为\(h^2\)项前面的系数时常数\(M\),因此近似的误差为:

\(| \frac{L(\theta+he_i)-L(\theta-he_i)}{2h}-\frac{\partial L(\theta)}{\partial \theta_i}|=\frac{1}{12}\Big[\tilde L^{(3)}(p_i) + \tilde L^{(3)}(q_i)\Big]h^2 \approx Mh^2\)

\(h\)较小时,\(h\)每减小为原来的\(10^{-1}\),近似误差约减小为原来的\(10^{-2}\),即近似误差时\(h\)的高阶无穷小

在实际应用中,依次验证:\(| \frac{L(\theta+he_i)-L(\theta-he_i)}{2h}-\frac{\partial L(\theta)}{\partial \theta_i}|\leq h\)是否成立,若不成立,则有以下两种可能

1)该下标对应的M过大(固定\(\theta\),减小\(h\)为原来的\(10^{-1}\),若此时的近似误差约为原来的\(10^{-2}\))

2)该梯度分量计算不正确

若符合第一种情况,则只要采用更小的\(h\)重新做一次梯度验证 即可;第二种情况,则应该检查求梯度的代码是否有错误

7.5 随机梯度下降法

SGD和BSGD

7.6 随机梯度下降法的加速

补充到【深度学习优化算法】中

7.7 L1正则化使得模型参数具有稀疏性的原理是什么

7.7.1 解空间形状

![image-20210712105947695](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712105947695.png)

L2正则项约束后的解空间是圆形的,二L1正则项约束的解空间是多边形的。显然,多边形的解空间更容易在尖角处与等高线碰撞出稀疏解

为什么加入正则项就是定义了一个解空间约束?为什么L1和L2的解空间是不同的?

为了约束\(w\)的可能取值空间从而防止过拟合,为该最优化问题加上一个约束,即\(w\)的平方不能大于m:\(\begin{cases} min \sum_{i=1}^N(y_i-w^Tx_i)^2 \\s.t. ||w||_2^2 \leq m\end{cases}\),对应的拉格朗日函数为:

$ \sum_{i=1}N(y_i-wTx_i)^2 + \lambda(||w||_2^2-m)$

\(w^*\)\(\lambda^*\)分别是原问题和对偶问题的最优解,则根据KKT条件,应该满足

\(\begin{cases} 0=\nabla_w\Big(\sum_{i=1}^N(y_i-w^Tx_i)^2 + \lambda^*(||w^*||_2^2 - m)\Big) \\0 \leq \lambda^* \end{cases}\)

从上市中可以看出,L2正则化相当于为参数定义了一个圆形的解空间(因为必须要正L2范数不能大于m),而L1正则化相当于为参数定义了一个菱形的解空间

7.7.2 函数叠加

![image-20210712111502024](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712111502024.png)

假设棕线是原始目标函数\(L(w)\)的曲线图,显然最小值点在蓝点处,且对应的\(w^*\)值非0。

首先考虑加入L2正则化项,目标函数变成\(L(w)+Cw^2\),其函数曲线为黄色。此时最小值点在黄点处,对应的\(w^*\)的绝对值减小了,但任然非0。然后加入L1正则化项,\(L(w)+C|w|\),其函数为绿色,此时对应的最小值点为红点处,对应的\(w\)是0,产生了系数解。

加入 Ll 正则顶后,对带正则的目标函数求导,正则顶部分产生的导数在原点左边部分是\(-C\)在原点右边部分是\(C\)。因此,只要原目标函数的导数绝对值小于 C,那么带正则项的目标函数在原点左边部分始终是递减的,在原点右边部分始终是递增的,最小值点自然在原点处 。

但是 , L2 正则项在原点处的导数是 0,只要原目标函数在原点处的导数不为 0,那么最小值点就不会在原点。 所以 L2 只有减小\(w\)绝对值的作用,对解空间的稀疏性没有贡献。

7.7.3 贝叶斯先验

从贝叶斯的角度来理解 Ll 正则化和L2正则化,简单的解释是:L1正则化相当于对模型参数 w 引入了拉普拉斯先验,L2正则化相当于引入了高斯先验。而拉普拉斯先验使参数为 0 的可能性更大。

高斯分布在极值点( 0 点)处是平滑的,也就是高斯先验分布认为 w 在极值点附近取不同值的可能性是接近的。这就是L2正则化只会让w更接近0点但不会等于0的原因。

![image-20210712112712017](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712112712017.png)

拉普拉斯分布在极值点(0点)处是一个尖峰 , 所以拉普拉斯先验分布中参数 w取值为0的可能性要更高 。

![image-20210712112803037](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712112803037.png)

8、采样(170~194)

8.1 采样的作用

1)采样本质上是对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。

2)采样得到的样本集也可以看作是一种非参数模型,即用较少量的样本点(经验分布)来近似总体分布,并刻画总体分布中的不确定性。

3)利用重采样技术,可以在保持特定的信息下(目标信息不丢失),有意识地改变样本的分布,以更适应后续的模型训练和学习,例如利用重采样来处理分类模型的训练、样本不均衡问题。

4)很多模型由于结构复杂、含有隐变量等原因,导致对应的求解公式比较复杂,没有显式解析解,难以进行精确求解或推理 。

8.2 均匀分布随机数

8.2.1 如何编程实现均匀分布随机数生成器

计算机程序都是确定性的,因此并不能产生真正意义上的完全均匀分布随机数,只能产生伪随机数。伪随机数是指这些数字虽然是通过确定性的程序产生的,但是能通过近似的随机性测试。

一般可采用线性同余法(Linear Congruential Generator)来生成离散均匀分布为随机数,公式为:

\(x_{t+1} = a·x_t + c(mod \ m)\),可以得到\([0,m-1]\)上的随机整数

一个好的线性同余生成器,要让其循环周期尽可能接近m,这就需要精心选择合适的乘法因子\(a\)和模数\(m\),一般设置\(m=2^{31}-1, a=1103515245, c=12345\)

8.3 常见的采样方法

8.3.1 简单采样

抛开那些针对特定分布而精心设计的采样方法,说一些你所知道的通用采样方法或采样策略,简单描述它们的主要思想以及具体操作步骤。

几乎所有的采样方法都是以均匀分布随机数作为基本操作,首先假设已经可以生成\([0,1]\)上的均匀分布随机数。

对于一些简单的分布,可以直接用均匀采样的一些扩展方法来产生样本点,如有限离散分布可以用轮盘赌算法来采样。

然而很多分布一般不好直接进行采样,可以考虑函数变换法。如果随机变量\(x\)\(u\)存在变换关系\(u=\varphi(x)\),则它们的概率密度函数有如下关系:\(p(u)|\varphi'(x)|=p(x)\)

因此,如果从目标函数\(p(x)\)中不好采样\(x\),可以构造一个变换\(u=\varphi(x)\),是的变换后的分布\(p(u)\)中采样\(u\)比较容易,这样可以通过先对\(u\)进行采样,然后通过反函数\(x=\varphi^{-1}(u)\)来间接得到\(x\)。如果是高维空间的随机变量,则\(\varphi'(x)\)对应Jacobian行列式。

8.3.2 逆变换采样

特别的,在函数变换中\(\varphi(·)\)\(x\)的累积分布函数的话,则得到所谓的逆变换采样。假设待采样的目标分布的概率密度函数为\(p(x)\),它的累积分布函数为\(u=\Phi(x)=\int_{-\infty}^x p(t)dt\),则逆变换采样法按如下过程进行采样:

  1. 从均匀分布\(U(0,1)\)产生一个随机数\(u_i\)

  2. 计算\(x_i=\Phi^{-1}(u_i)\)

上述过程得到的\(x_i\)服从\(p(x)\)分布,如下所示:

![image-20210712233352476](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712233352476.png)

如果待采样的目标分布的累积分布函数的逆函数无法求解或者不容易计算,则不适用于逆变换采样法。

8.3.3 参考分布采样方法

构造一个容易采样的参考分布,先对参考分布进行采样,然后对得到的样本进行一定的后处理操作,使得最终的样本服从目标分布。常见的拒绝采样、重要性采样就属于这类采样方法。

拒绝采样,有叫接受/拒绝(Accept-Reject Sampling),对于目标函数\(p(x)\),选取一个容易采样的参考分布\(q(x)\),使得对于任意\(x\)都有\(p(x)\leq M·q(x)\),则可以按照下面进行采样:

  1. 从参考分布\(q(x)\)中随机抽取一个样本\(x_i\)

  2. 从均匀分布\(U(0,1)\)产生一个随机数\(u_i\)

  3. 如果\(u_i<\frac{P(x_i)}{Mq(x_i)}\),则接受样本\(x_i\),否则拒绝;重新进行步骤1~3,直到新产生的样本\(x_i\)被接受

通过简单的推导,可以知道最终得到的\(x_i\)俯冲目标分布\(p(x)\),拒绝采样的关键是为目标分布\(p(x)\)选取一个合适的包络函数\(M·q(x)\)。包络函数越紧,每次采样被接受的概率越大,采样效率越高。在实际应用中,为了维持采样效率,有时很难寻找一个解析形式的\(q(x)\),从而引申出了自适应的拒绝采样(Adaptive Rejection Sampling),在目标函数是是对数凹函数时,用分段线性函数来覆盖目标的对数\(\ln p(x)\)

image-20210712234411645

重要性采样:很多时候,采样的最终目的并不是为了得到样本,而是为了进行一些后续任务,如预测遍历情取值,这通常表现为一个求函数期望的形式。重要性采样就是用于计算函数\(f(x)\)在目标分布\(p(x)\)上的积分,即\(E[f]=\int f(x)p(x)dx\)

首先找一个比较容易抽样的参考分布\(q(x)\),并令\(w(x)=\frac{p(x)}{q(x)}\),则有\(E[f]=\int f(x)w(x)q(x)dx\),这里的\(w(x)\)可以看成是样本\(x\)的重要性权重。由此可先从参考分布\(q(x)\)中抽取N个样本\(\{x_i\}\),然后利用如下公式来估计\(E[f]\)\(E[f]=\tilde E_N[f]=\sum_{i=1}^N f(x_i)w(x_i)\)

如果不需要计算函数积分,只想从目标分布\(p(x)\)中采样处若干样本,则可以用重要性采样,先从参考分布\(q(x)\)中抽取N个样本\(\{x_i\}\),然后按照它们对应的重要性权重\(\{w_i\}\)对这些样本进行重新采样,最终得到的样本俯冲目标分布\(p(x)\)

![image-20210712235313818](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712235313818.png)

在实际应用中,如果是高维空间的随机变量,拒绝采样和重要性重采样经常难以寻找合适的参考分布,采样效率低下,此时可以考虑MCMC方法,常见的有Metropolis-Hastings采样法和Gibbs采样法

8.4 如何对高斯分布进行采样

假设随机变量\(z\)服从标准正态分布\(N(0,1)\),令\(x=\sigma ·z + \mu\),则\(x \sim N(\mu, \sigma)\)

任意高斯分布都可以由标准正态分布通过拉伸和平移得到,因此只要考虑标准正态分布的采样。

常见的采样方法有逆变换法、拒绝采样、重要性采样、MCMC等。

8.4.1 逆变换法

  1. 产生\([0,1]\)上的均匀分布随机数

  2. \(z=\sqrt 2 erf^{-1}(2u-1)\),则\(z\)服从标准正态分布。其中\(erf(·)\)是高斯误差函数,它是标准正态分布的累积分布函数经过简单评议和拉伸变换后的形式,定义如下:

\(erf(x)=\frac{2}{\sqrt \pi}\int_0^xe^{-t^2}dt\)

\(erf(x)\)不是一个初等函数,没有显示解,因此求该函数的拟比较麻烦。为了避免求逆,提出了Box-Muller算法(既然单个高斯分布的累计分布函数不好求逆,那么两个独立的高斯分布的联合分布呢?假设\(x,y\)是两个服从标准正态分布的独立随机变量,它们的联合概率密度为

\(p(x,y)=\frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}\)

考虑\((x,y)\)在圆盘\(\{(x,y)|x^2+y^2\leq R^2\}\)的概率 \(F(R)=\int_{x^2+y^2\leq R^2}\frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}dxdy\)

通过极坐标变换将\((x,y)\)转换为\((r,\theta)\),可以容易求得二重积分,即\(F(R)=1-e^{-\frac{R^2}{2}}\)

这里\(F(R)\)可以堪称是极坐标r的累积分布函数,由于\(F(R)\)计算公式比较简单,逆函数也很容易求得,所以可以利用逆变换法来对r进行采样,对于\(\theta\)\([0,2\pi]\)上进行均匀采样,这样就得到了\((r,\theta)\),经过坐标变换即可得到符合标准正态分布\((x,y)\),具体采样过程如下:

  1. 产生\([0,1]\)上的两个独立的均匀分布随机数\(u_1,u_2\)

  2. \(\begin{cases}x=\sqrt{-2ln(u_1)}cos2\pi u_2 \\ y=\sqrt{-2ln(u_1)}sin2\pi u_2\end{cases}\),则\(x,y\)服从标准正态分布,并且是相互独立的。

Box-Muller算法由于需要计算三角函数,相对来说比较耗时,而Marsaglia polar method则避开了三角函数的计算,因而更快,其具体操作如下:

  1. 在单位圆盘\(\{(x,y)|x^2+y^2\leq 1\}\)上产生均匀分布随机数对\((x,y)\)

  2. \(s^2=x^2+y^2\),则\(x\sqrt{\frac{-2lns}{s}}\),\(y\sqrt{\frac{-2lns}{s}}\)是两个标准正态分布的样本,其中\(x/\sqrt s,y/\sqrt s\)用来代替Box-Muller算法中的cosine和sine操作

8.4.2 拒绝采样法

选择一个比较好计算的累积分布逆函数的参考分布来覆盖当前正态分布,进而转换为对参考分布的采样以及对样本点的拒绝/接收操作。考虑到高斯分布的特性,这里可以用指数分布来作为参考分布。指数分布的累积分布及其逆函数都比较容易求解,具体来说取\(\lambda=1\)的指数分布作为参考分布,其密度函数为\(q(x)=e^{-x}\),对应累积分布函数及其逆函数分别为:

\(F(x)=1-e^{-x}, \ F^{-1}(u)=-log(1-u)\)

利用逆变换法很容易得到指数分布的样本,然后再根据拒绝采样法来决定是否接受该样本,接收的概率为

\(A(x)=\frac{p(x)}{M·q(x)}\)

其中\(p(x)=\frac{2}{\sqrt{2\pi}}e^{\frac{-x^2}{2}}(x\geq 0)\)是标准正态分布压缩到正半轴后的概率密度函数,常数因子M需要满足如下条件:

\(p(x)\leq M·q(x), \forall x>0\)

实际应用时,M需要尽可能小,这样每次的接收概率大,采样效率更高。因此可以取

\(M=\underset{x\geq 0}{sup}\frac{p(x)}{q(x)}\)

  1. 产生\([0,1]\)上的均匀分布随机数\(u_0\),计算\(x=F^{-1}(u_0)\)得到指数分布的样本\(x\)

  2. 产生\([0,1]\)上的均匀分布随机数\(u_1\),若\(u_1<A(x)\),则接收 \(x\),进入下一步;否则拒绝,跳回步骤1重新采样

  3. 最后再产生\([0,1]\)上的均匀分布\(u_2\),若\(u_2<0.5\)则将 \(x\) 转换为\(-x\),否则保持不变;由此最终得到标准正态分布的一个样本。

拒绝采样法的效率取决于接收概率的大小:参考分布与目标分布越接近,则采样效率越高。

Ziggurat算法,是一种特殊的拒绝采样,采用多个阶梯矩形来逼近目标分布,如下图所示:

![image-20210714072130779](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714072130779.png)

8.5 MCMC采样法

在高维空间中,拒绝采样和重要性采样经常难以寻找合适的参考分布,采样效率低下,此时可以考虑MCMC采样法。

8.5.1 MCMC采样法的主要思想

针对待采样的目标分布,构造一个马尔可夫链,使得该马尔可夫链的平稳分布就是目标分布;然后从任何一个状态出发,沿着马尔可夫链进行状态转移,最终得到的状态转移序列会熟练到目标分布,由此可以得到目标分布的一系列样本。核心点事如何构造合适的马尔可夫链,即确定马尔可夫链的状态转移。

8.5.2 简单介绍几种常见的MCMC采样法

Metropolis-Hastings采样法和Gibbs采样法

![image-20210714073111470](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714073111470.png)

Metropolis-Hastings采样法

对于目标分布\(p(x)\),首先选择一个容易采样的参考条件分布\(q(x^*|x)\),并令

\(A(x,x^*)=min\{1, \frac{p(x^*)q(x|x^*)}{p(x)q(x^*|x)}\}\)

然后根据如下过程进行采样:

  1. 随机选一个初始样本\(x^{(0)}\)

  2. for t=1,2,3,...

根据参考条件分布\(q(x^*|x^{(t-1)})\)随机抽取一个样本\(x^*\)

根据均匀分布\(U(0,1)\)产生随机数\(u\)

\(u<A(x^{(t-1)},x^*)\),则令\(x^{(t)}=x^*\),否则令\(x^{(t)}=x^{(t-1)}\)

可以证明,上述过程得到的样本序列\(\{...,x^{(t-1)},x^{(t)},...\}\)最终会收敛到目标分布\(p(x)\)。M-H采样图中,红线表示被拒绝的移动(维持旧样本),绿线表示被接收的移动(采纳新样本)

Gibbs采样

Gibbs采样是M-H采样的一个特例,其核心思想是每次只对样本的一个维度进行采样和更新。对于目标分布\(p(x)\),其中\(x=(x_1,x_2,...,x_d)\)是多维向量,按如下过程进行采样

  1. 随机选择初始状态\(x^{(0)}=(x_1^{(0)},x_2^{(0)},...,x_d^{(0)})\)

  2. For t=1,2,3,...

对于前一步产生的\(x^{(t-1)}=(x_1^{(t-1)},x_2^{(t-1)},...,x_d^{(t-1)})\),依次采样和更新每个维度的值。即依次抽取分量\(x_1^{(t)}\sim p(x_1|x_2^{(t-1)},x_3^{(t-1)},...,x_d^{(t-1)})\), \(x_2^{(t)}\sim p(x_2|x_1^{(t)},x_3^{(t-1)},...,x_d^{(t-1)})\),..., \(x_d^{(t)}\sim p(x_d|x_1^{(t)},x_2^{(t)},...,x_{d-1}^{(t)})\)

形成新的样本\(x^{(t)}=(x_1^{(t)},x_2^{(t)},...,x_d^{(t)})\)

步骤2)中对每个维度的抽样和更新操作,不是必须按下表顺序进行的,可以是随机顺序。

在拒绝采样中,如果在某一步中采样被拒绝,则该步不会产生新样本,需要重新进行采样。但MCMC采样法每一步都会产生一个样本,只是有时候这个样本与之前的样本一样而已,因此实际应用中一般会对得到的样本进行“burn-in”处理,即截除掉序列中最开始的一部分样本,只保留后面的样本。

8.5.3 MCMC采样如何得到相互独立的样本

MCMC采样法得到的样本序列中相邻样本不是独立的,因为后一个样本是由前一个样本根据特定的转移概率得到的,或者有一定大概率就是前一个样本。如果仅仅是采样,并不需要样本之间相互独立。如果确实需要产生独立同分布样本,可以同时运行多条马尔可夫链,这样不同链上的样本是独立的;或者在同一条马尔可夫链上每隔若干个样本才选取一个,这样选取出来的样本也是近似独立的。

8.6 贝叶斯网络的采样

概率图模型经常被用来描述多个随机变量的联合概率分布。贝叶斯网络,又称新年网络或有向无环图模型。它是一种概率图模型,利用有向无环图来刻画一组随机变量之间的条件概率分布关系。下图用来刻画Cloudy、Sprinkler、Rain、WetGrass等变量之间的条件分布关系

![image-20210714080323579](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714080323579.png)

8.6.1 如何对贝叶斯网络进行采样

如果只需要考虑一部分变量的边缘分布,如何采样?

如果网络中含有观测变量,又该如何采样?

对一个没有观测变量的贝叶斯网络进行采样,最简单的方法是祖先采样(Ancestral Sampling),它的核心思想是根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都1⃣️完成采样,才对该节点进行采样。以上图为例,先对Cloudy变量进行采样,然后再对Sprinkler和Rain变量进行采样,最后对WetGrass变量采样(图中绿色表示变量取值为True,红色表示取值为False)。根据贝叶斯犬概率公式\(p(z_1,z_2,...,z_n)=\prod_{i=1}^n p(z_i|pa(z_i))\),可以看出祖先采样得到的样本服从贝叶斯网络的联合概率分布。

![image-20210714080815343](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714080815343.png)

如果只需要对贝叶斯网络中的一部分随机变量的边缘分布进行采样,可以用祖先采样先对全部随机变量进行采样,然后直接忽视哪些不需要的变量的采样值即可。如上图,如果需要对边缘分布\(p(Rain)\)进行采样,先用祖先采样得到全部变量的一个样本,如\((Coludy=T,Sprinkler=F,Rain=T,WetGrass=T)\),然后忽略掉无关变量,直接把这个样本看成是\(Cloudy=T\)即可

接下来考虑含有观测变量的贝叶斯网络的采样,如下图网络中又观测变量\((Sprinkler=T,WetGrass=T)\),最戒指的方法是逻辑采样,还是利用祖先采样得到的所有变量的取值。如果这个样本再观测变量上的采样值与实际观测值相同,则接收,否则拒绝,重新采样。这种方法的缺点是采样效率会非常低,实际中基本不可用。

![image-20210714081253554](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714081253554.png)在实际应用中,可以参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量采样,但是最终得到的样本需要赋一个重要性权值:\(w \propto \underset{z_i \in E}\prod p(z_i|pa(z_i))\),其中E是观测变量集合。

这种方法称作似然加权采样(Likelihood Weighted Sampling),产生的样本权值可以用于后续的积分操作。在观测变量\((Sprinkler=T,WetGrass=T)\)时,可以先对Cloudy进行采样,然后对Rain进行采样,不再对Sprinkler和WetGrass采样,这样得到的样本的重要性权值为:

\(w \propto p(Sprinkler=T|CLoudy=T)·p(WetGrass=T|Sprinkler=T,Rain=T)\\=0.1\times0.00=0.099\)

除此之外还可以使用MCMC采样法,具体来说如果采用M-H采样法的话,只需要在随机变量\((Cloudy,Rain)\)上选择一个概率转移矩阵,然后按照概率转移矩阵不断进行状态转换,每次转移又一定的概率接受或拒绝,最终得到的样本序列会收敛到目标分布。最简单概率转移矩阵时:每次独立的随机选择\((Cloudy,Rain)\)的四种状态之一。

如果采样Gibbs的话,\(p(Cloudy|Rain,Sprinkler,WetGrass)\)根据\(p(Rain|Cloudy,Sprinkler,WetGrass)\)和 ,每次只对\((Cloudy,Rain)\)中的一个变量进行采样,交替进行即可。

![image-20210714082445284](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714082445284.png)

8.7 不均衡样本集的重采样

对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好的训练分类模型

一般可以从两个角度来处理样本嗯不均衡问题。

基于数据的方法

最简单的处理不均衡样本集的方法是随机采样,采样过程一般分为过采样(Over-sampling)和欠采样(Under-Sampling)。

直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练复杂度,同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了这个难题模式的一部分。

对于过采样方法,通常在采样时并不是简单的复制样本,而是采用一些方法生成新的样本,例如SMOTE算法对少数类样本集\(s_{min}\)中的每个样本\(x\),从它在\(S_{min}\)中的K紧邻中随机选一个样本y,然后在\(x,y\)连线上随机选取一点作为新合成的样本,这种合成新样本的过采样方法可以降低过拟合的风险

![image-20210714083153071](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714083153071.png)

SMOTE算法为每个少数类样本合成相同数量的新样本,这可能会增大类间重叠度,并且会产生一些不能提供有益信息的样本。因此后续出现了很多改进的方法。

对于欠采样,可以采用Informed Undersampling来解决由于随机采样带来的数据丢失问题,常见的Informed Undersampling算法有:

1) Easy Ensemble算法,每次从多数类\(S_{maj}\)中随机抽取一个子集\(E(|E|\approx |S_{min}|)\),然后用\(E + S_{min}\)训练一个分类器;重复上述若干次,得到多个分类器,最终的分类结果是这多个分类器结果的融合。

2)Balance Cascade算法。级联结构,在每一级中从多数类\(S_{maj}\)中随机抽取子集\(E(|E|\approx |S_{min}|)\),然后用\(E + S_{min}\)训练一个分类器;然后将\(S_{maj}\)中能够被当前分类器正确判别的样本剔除掉,继续下一级的操作,重复若干次得到级联结构,最终的输出结果也是各级分类器结果的融合。

3)其他诸如NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sided Selection(采用数据清理技术)等算法。

在实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但基本思路很多时候还是一致的 。 例如基于聚类的采样方法,利用数据的类簇信息来指导过采样/欠采样操作,经常用到的数据扩充方法也是一种过采样对少数类样本进行一些噪声扰动~变民(如图像数据集中对图片进行裁剪、翻转、旋转、加光照等)构造出新的样本,而Hard Negative Miniing则是一种欠采样,把比较难的样本抽出来用于迭代分类器。

基于算法的方法

在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数目及其不均衡时,也可以将问题转化问单类学习(one-class learning)、异常检测(anomaly detection)等。

9、前向神经网络(198~233)

9.1 多层感知机与布尔函数

多层感知机表示异或逻辑时最少需要几个隐含层(仅考虑二元输入)?

![image-20210712114154742](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712114154742.png)

逻辑回归公式\(Z=sigmoid(AX+BY+C)\),容易证明采用逻辑回归(即不带隐含层的感知机)无法精确学习出一个输出为异或的模型表示 。

引入一个激活层后(有两个激活单元,具体信息见图)

![image-20210712114028118](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712114028118.png)

![image-20210712114050480](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712114050480.png)

如果只使用一个隐层,需要多少隐节点能够实现包含n元输入的任意布尔函数

考虑多隐层的情况,实现包含n元输入的任意布尔函数最少需要多少个网络节点和网络层?

上面的两个问题实用性不大,暂时略过

9.2 深度神经网络中的激活函数

在每一层线性变换后叠加一个非线性激活函数,以避免多层网络等小雨单层线性函数,从而获得更强大的学习与拟合能力

9.2.1 常用的激活函数

Sigmoid:\(f(x)=\frac{1}{1+exp(-x)}\),其对应的导数为\(f'(x)=f(x)(1-f(x))\)

Tanh:\(f(x)=tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}\),其导数为\(f'(x)=1-(f(x))^2\)

Relu:\(f(x)=max(0,z)\),其导数为\(f(x)=\begin{cases} 1 & x>0 \\0 & x \leq 0\end{cases}\)

9.2.2 为什么Sigmoid和Tanh激活函数会导致梯度消失的现象

Sigmoid激活函数将x映射到区间\((0,1)\),当x很大时,\(f(x)\)趋近于1,当x很小时,\(f(x)\)趋近于0;其梯度\(f'(x)=f(x)(1-f(x))\)在x很大或很小时都会趋近于0,造成梯度消失的现象。

Tanh在z取值很大和很小的时候,其导数\(f'(x)=1-(f(x))^2\)同样会趋于0,造成梯度消失。

Sigmoid和Tanh的联系:\(tanh(x)=2sigmoid(2x)-1\)

![image-20210714104411508](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714104411508.png)

9.2.3 ReLU系列的激活函数相对于Sigmoid和Tanh的优点,有什么局限性?

优点:

1)从计算的角度上,Sigmoid和Tanh激活函数均需要计算指数,复杂度高,而ReLU只需要一个阈值即可得到激活值

2)ReLU的非饱和性可以有效的解决梯度消失的问题,提供相对宽的激活边界

3)ReLU的单侧抑制提供了网络的稀疏表达能力

局限性:

ReLU的局限性在于其训练过程中会导致神经元死亡的问题,这是由于函数\(f(x)=max(0,x)\)导致负梯度在经过核ReLU单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。在实际训练中,如果学习率设置较大,会导致超过一定比例的神经元不可逆的死亡,进而参数梯度无法更新,整个训练过程失败。

为解决这一问题,人们设计了ReLU的变种Leaky ReLU(LReLU),其形式表示为:

\(f(x)=\begin{cases} x & x>0 \\ax & x \leq 0\end{cases}\)

![image-20210714110100223](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714110100223.png)

LReLU一般设置较小的\(a\)值,这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失,但是\(a\)值的选择需要较强的人工先验知识。因此出现了参数化的PReLU(Parametric RELU),将\(a\)值作为网络中的一个可学习参数,与其他参数网络层联合优化。

Random Relu\(a\)作为一个满足某种分布的随机采样,测试时再固定下来,Random ReLU在一定程度上能起到正则化的作用。

ReLU --> LReLU --> (PReLU, RReLU)

9.3 多层感知机的反响传播算法

在网络训练中,前向传播最终产生一个标量损失函数,反向传播算法则将损失函数的信息沿网络层向后传播以计算梯度,达到优化网络参数的目的。

![image-20210714110740197](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714110740197.png)

9.3.1 多层感知机的平方误差和交叉熵损失函数

平方损失:\(J(W,b)=\Big[\frac{1}{m}\underset{i=1}{\overset m \sum} J(W,B;x^{(i)},y^{(i)})\Big] + \frac{\lambda}{2}\underset{l=1}{\overset {N-1} \sum}\underset{i=1}{\overset {s_l} \sum}\underset{j=1}{\overset {s_l+1} \sum}(W_{ij}^{(l)})^2 \\=\Big[\frac{1}{2m}\underset{i=1}{\overset m \sum} ||y^{(i)}-{\cal L}_{w,b}(x^{(i)})||^2\Big] + \frac{\lambda}{2}\underset{l=1}{\overset {N-1} \sum}\underset{i=1}{\overset {s_l} \sum}\underset{j=1}{\overset {s_l+1} \sum}(W_{ij}^{(l)})^2\)

交叉熵损失:\(J(W,b)=-\Big[\frac{1}{m}\underset{i=1}{\overset m \sum} J(W,B;x^{(i)},y^{(i)})\Big] + \frac{\lambda}{2}\underset{l=1}{\overset {N-1} \sum}\underset{i=1}{\overset {s_l} \sum}\underset{j=1}{\overset {s_l+1} \sum}(W_{ij}^{(l)})^2\\=-\Big[\frac{1}{m}\underset{i=1}{\overset m \sum}\{y^{(i)}\ln o^{(i)}+(1-y^{(i)})\ln (1-o^{(i)})\}\Big] + \frac{\lambda}{2}\underset{l=1}{\overset {N-1} \sum}\underset{i=1}{\overset {s_l} \sum}\underset{j=1}{\overset {s_l+1} \sum}(W_{ij}^{(l)})^2 \\=-\Big[\frac{1}{m}\underset{i=1}{\overset m \sum}\underset{k=1}{\overset n \sum} y_k^{(i)} \ln o_k^{(i)}\Big] + \frac{\lambda}{2}\underset{l=1}{\overset {N-1} \sum}\underset{i=1}{\overset {s_l} \sum}\underset{j=1}{\overset {s_l+1} \sum}(W_{ij}^{(l)})^2\)

在多分类的场景中,\(o_k^{(i)}\)代表第i个样本的预测属于类别k的概率\(y_k^{(i)}\)为实际的概率(如果第i个样本的真实类别为k,则\(y_k^{(i)}=1\),否则为0。

9.3.2 根据问题1中定义的损失函数,推导各层参数更新的梯度计算公式

平方损失和交叉熵损失的梯度链式求导

求导过程中,若激活函数时SoftMax激活函数时

9.3.3 平方误差损失函数和交叉熵损失函数分别适合什么场景

一般来说,平方损失函数更适合输出为连续,并且最后一层不含Sigmoid或Softmax激活函数的神经网络,交叉熵损失则更适合二分类或多分类的场景。想正确回答出答案也许并不难, 但是要想给出具有理论依据的合理原因,还需要对上一问的梯度推导熟悉掌握,并具有一定的灵活分析能力。

上一节推导出的平方误差损失函数相对于输出层的导数为\(\delta^{(L)}=-(y-a^{(L)})f'(z^{(L)})\),其中最后一项\(f'(z^{(L)})\)为激活函数的导数。当激活函数为Sigmoid函数时,如果\(z^{(L)}\)的绝对值较大,函数的梯度会趋于饱和,即\(f'(z^{(L)})\)的绝对值非常小,导致\(\delta^{(L)}\)的取值也非常小,使得基于梯度的学习速度非常缓慢。

当使用交叉熵损失函数时,相对于输出层的导数为\(\delta^{(L)}=a_{\tilde k}^{(L)}-1\),此时的导数时线性的,因此不存在学习速率过慢的问题。

9.4 神经网络训练技巧

9.4.1 神经网络训练时是否可以将全部参数初始化为0

在全连接神经网络中,同一层的任意神经元时同构的,它们拥有相同的输入和输出,如果再将参数全部初始化为同样的值,那么无论前向传播韩式反向传播的取值都是完全相同的,学习过程将用户无法打破这种对称性,最终同一网络层中的各个参数仍然是相同的。我们需要随机的初始化神经网络参数的值,以打破这种对称性。可以初始化参数为取值范围\((-1/\sqrt d, 1/\sqrt d)\)的均匀分布,其中d时一个神经元接受的输入维度。偏执可以被简单的设为0,并不会导致参数对称的问题。

9.4.2 为什么Dropout可以抑制过拟合,它的工作原理和实现

Dropout是指在深度网络的训练中,以一定的概率随机的“临时丢弃”一部分神经元节点。每次训练中都与一组随机挑选的不同的神经元集合共同进行优化,这个过程会减弱全体神经元之间的联合适应性,减少过拟合的风险,增强泛化能力。

![image-20210714120612246](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714120612246.png)
![image-20210714120633511](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714120633511.png)

原始网络对应的前向传播公式 应用Dropout后的前向传播公式
\(z_i^{(l+1)}=w_i^{(l+1)}y^{(l)}+b_i^{(l+1)}\) \(r_i^{(l)} \sim Bernoulli(p)\)\(\tilde y^{(l)}=r^{(l)}*y^{(l)}\)
\(y_i^{(l+1)}=f(z_i^{(l+1)})\) \(z_i^{(l+1)}=w_i^{(l+1)}\tilde y^{(l)}+b_i^{(l+1)}\)
\(y_i^{(l+1)}=f(z_i^{(l+1)})\)

9.4.3 批量归一化的基本动机和原理

随着网络训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批训练数据的分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度以及过拟合的风险。

批量归一化方法时针对每一批数据,在网络的每一层输入之前增加归一化处理,将所有的批数据强制在同一的数据分布下,即对该层的任意一个神经元\(\hat x^{(k)}\)采用如下公式

\(\hat x^{(k)}=\frac{ x^{(k)} - E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}\),其中\(E[x^{(k)}\)\(\sqrt{Var[x^{(k)}]}\)分别是这一批数据第k个神经元的均值和标准差

批量归一化可以看作是在每一层输入和上一层输出之间加入了一个新的计算层,对数据的分布进行额外的约束,从而增强模型的泛化能力。但是批归一化同时也降低了模型的拟合能力,归一化后的输入分布呗强制喂0均值和1标准差。以Sigmoid激活函数为例,批量归一化之后数据整体处于函数的非饱和区域,只包含线性变换,破坏了之前学习到的特征分布。为了回复原始数据分布,具体实现中引入了变换重构以及可学习参数\(\gamma\)\(\beta\):

\(y^{(k)} = \gamma^{(k)}\hat x^{(k)}+\beta^{(k)}\)

其中\(\gamma^{(k)},\beta^{(k)}\)分别为输入数据分布的方差和偏差。对于一般的网络,不采用批归一化操作时,这两个参数高度依赖前面网络学习到的链接权重。而在批归一化中,这两个参数成为了可学习参数;仅用两个参数就可以恢复最优的输入数据分布,与之前的网络层的参数解藕,从而更加有利于优化的过程,提高模型的泛化能力。

完整的批归一化过程为:计算样本的均值和方差,对数据进行标准化处理;对标准化后的数据执行\(y^{(k)} = \gamma^{(k)}\hat x^{(k)}+\beta^{(k)}\),恢复数据的表达能力。

9.5 深度卷积神经网络

9.5.1 卷积操作的本质特征包括稀疏交互和参数共享

稀疏交互(Sparse Interaction)

对于全连接网络,任意一对输入与输出神经元之间都产生交互,形成稠密的连接结构,即神经元\(s_i\)与输入的所有神经元\(x_j\)均有连接

![image-20210714140033045](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714140033045.png)

而卷积核尺度远小于输入的维度,这样每个输出神经元仅与前一层特定局部区域内的神经元存在连接去那种,我们称这种特性为稀疏交互

![image-20210714140253686](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714140253686.png)

稀疏交互的物理意义是:通常图像、文本、语音等现实世界中的数据都具有局部的特征结构,我们可以先学习局部的特征,再将局部的特征组合起来形成更复杂和抽象的特征。

参数共享(Parameter Sharing)

参数共享是指在同一个模型的不同模块中使用相同的参数,它是卷积运算的固有属性,全连接网络中,计算每层的输出时,权值参数矩阵中的每个元素只作用于某个输入元素一次;而在卷积神经网络中,卷积核中的每个元素将作用于每一次局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数组合,而不需要针对每个位置的每个参数都进行优化,从而大大降低了模型的存储需求。

参数共享的物理意义是使得卷积层具有平移等变性。当函数\(f(x)\)\(g(x)\)满足\(f(g(x))=g(f(x))\)时,我们称\(f(x)\)关于变换\(g\)具有等变性。将g视为输入的任意平移函数,令\(I\)表示输入图像,平移变换后得到\(I'=g(I)\),例如我们把猫的图像向右移动\(l\)像素,满足\(I'(x,y)=I(x-l,y)\)我们令\(f\)表示卷积函数,根据其性质,容易得到\(g(f(i))=f(I')=f(g(I))\),也就是说在图片上线进行卷积,再向右平移\(l\)像素的输出,与先将图片向右平移\(l\)像素再进行卷积操作的输出结果是相等的。

9.5.2 常用的池化操作有哪些?池化的作用是什么?

均值池化、最大值池化

池化操作除了能显著降低参数量外,还能够保持对平移、伸缩、旋转操作的不变性。平移不变性是指输出结果对输入的小量平移基本保持不变。

9.5.3 卷积神经网络如何用于文本分类任务

对于文本来说,局部特征就是由若干单词组成的滑动窗口,类似于N-gram。卷积神经网络的优势在于能够自动的对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。由于在每次卷积中词啊用了共享权重的机制,因此它的训练速度相对较快,在实际的文本分类任务重去的了非常不错的效果。

![image-20210714143849695](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714143849695.png)

1)输入层是一个\(N \times K\)的矩阵,其中N为文章所对应的单词总数,K是每个词对应的表示向量的维度

2)第二层是卷积层,在输入\(N \times K\)的矩阵上,我们定义不同大小的华东窗口进行卷积操作

\(c_i=f(w·x_{i:i+h-1}+b)\);其中\(x_{i:i+h-1}\)代表由输入矩阵的第i行到第\(i+h-1\)行所组成的一个大小为\(h\times K\)的活动窗口。假设h为3,则每次在\(N-2\)个结果拼接起来得到\(N-2\)维的特征向量。每一次卷积操作相当于一次特征提取,通过定义不同的滑动窗口,就可以提取出不同的特征向量,构成卷积层的输出

3)第三层为池化层,比如图中的网络采用了1-Max池化,即从每个滑动窗口产生的特征向量中筛选出一个最大的特征,然后将这些特征拼接起来构成向量表示。

4)得到文本的向量表示后,后面的网络结构就和具体的任务相关了。

9.6 残差神经网络

9.6.1 ResNet的提出背景和核心理论是什么?

提出背景是解决或缓解深层的神经网络训练中的梯度消失问题。

为了解梯度消失问题是如何产生的,回顾第三节推导出的误差传播公式:

\(\delta_i^{(l)}=\Big(\underset{j=1}{\overset{s_{l+1}}\sum}W_{ij}^{(l)}\delta_j^{(l+1)}\Big)f'(z_i^{(l)})\)

再展开一层可得\(\delta_i^{(l)}=\Big[\underset{j=1}{\overset{s_{l+1}}\sum}W_{ij}^{(l)}\Big(\underset{k=1}{\overset{s_{l+2}}\sum}W_{jk}^{(l+1)}\delta_k^{(l+2)}f'(z_j^{(l+1)})\Big)\Big]f'(z_i^{(l)})\)

![image-20210714150551207](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210714150551207.png)

10、循环神经网络

10.1 RNN和CNN

处理文本数据时,RNN和CNN有什么特点?

CNN对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到

RNN能很好的处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,就爱过你前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好的理解之后的文本。

![image-20210718224320590](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210718224320590.png)

一个长度为\(T\)的序列用RNN建模,展开之后可以看作是一个\(T\)层前馈神经网络,其中第t层的隐含状态\(h_t\)编码了序列中前t个输入的信息,可以通过当前的输入\(x_t\)和上一层神经网络的状态\(h_{t-1}\)计算得到,最后一层的状态\(h_T\)编码了整个序列的信息,因此可以作为整篇文档的压缩表示,以此为基础的结构可以应用于多种具体任务。

\(h_t\)\(y\)的计算公式为:\(net_t=Ux_t+Wh_{t-1}, \ h_t=f(net_t),\ y=g(Vh_T)\)

10.2 RNN的梯度消失问题

RNN为什么会出现梯度消失或梯度爆炸,有哪些改进方案?

RNN的求解可以采用BPTT(Back Propagation Through Time, 基于时间的反向传播)算法实现,BPTT实际上是反向传播算法的简单变种。RNN设计初衷之一是能够捕获长距离输入之间的依赖。从结构上来看,RNN也理应能够做到这一点,然而实践发现,使用BPtt算法学习的RNN并不能捕捉到长距离的依赖关系,这一现象主要源于深度神经网络中的梯度消失。

传统的RNN可以表示成连乘的形式:\(\frac{\partial net_t}{\partial net_1}=\frac{\partial net_t}{\partial net_{t-1}}·\frac{\partial net_{t-1}}{\partial net_{t-1}}···\frac{\partial net_2}{\partial net_1}\)

其中\(\frac{\partial net_t}{\partial net_{t-1}}=\frac{\partial net_t}{\partial h_{t-1}}·\frac{\partial h_{t-1}}{\partial net_{t-1}}=\begin{pmatrix} w_{11}f'(net_{t-1}^1) & \cdots & w_{1n}f'(net_{t-1}^n) \\ \vdots & \ddots & \vdots \\ w_{n1}f'(net_{t-1}^1) & \cdots & w_{nn}f'(net_{t-1}^n) \end{pmatrix}\)

其中n为隐含层\(h_{t-1}\)的维度,\(\frac{\partial net_t}{\partial net_{t-1}}\)为对应的\(n \times n\)维矩阵,又被称为雅可比矩阵

由于预测的误差是沿着神经网络的每一层反向传播的,因此当雅可比矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈现指数增长,导致梯度爆炸;反之雅可比矩阵的最大特征值小于1,梯度的大小会呈现指数缩小,产生梯度消失。

对于普通的前馈神经网络来说,梯度消失意味着无法通过加深网络层次来改善生神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用。这使得RNN很难学习到序列中的长距离依赖关系。

梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比缩放。

10.3 RNN的激活函数

在RNN中能否使用ReLU作为激活函数?

根据前向传播公式向前传递一层,得到\(net_t=Ux_t+Wh_{t-1}=Ux_t+Wf(Ux_{t-1}+Wh_{t-2})\)

若果采用ReLu替代公式中的激活函数\(f\),并且假设ReLu函数已知处于激活趋于,则有\(f(x)=x\),从而可得\(net_t=Ux_t+Wh_{t-1}=Ux_t+W(Ux_{t-1}+Wh_{t-2})\)

将其进行展开,\(net_t\)的表达式中最终包含t个W连乘;如果W不是单位矩阵,最终的结果将会趋于0或者无穷,引发严重的数值问题。

\(\frac{\partial net_t}{\partial net_{t-1}}=W·diag[f'(net_{t-1})]=\begin{pmatrix} w_{11}f'(net_{t-1}^1) & \cdots & w_{1n}f'(net_{t-1}^n) \\ \vdots & \ddots & \vdots \\ w_{n1}f'(net_{t-1}^1) & \cdots & w_{nn}f'(net_{t-1}^n) \end{pmatrix}\)

假设采用ReLu激活函数,且已开始所有的神经元都处于激活中,则\(f'(net_{t-1})\)为单位矩阵,有\(\frac{\partial net_t}{\partial net_{t-1}}=W\)。在梯度传递经历了n层之后,\(\frac{\partial net_t}{\partial net_{1}}=W^n\)。可以看到,即使采用了ReLU,只要W不是单位矩阵,梯度还是会出现消失或者爆炸的现象。

当采用ReLU作为RNN隐含层的激活函数时,只有当W的取值在单位矩阵附近时才能取得比较好的效果,因此需要将W初始化为单位矩阵。实验表明,初始化W为单位矩阵并使用ReLU激活函数在一些应用中取得了与LSTM相似的结果,并且学习速度比LSTM更快。

10.4 LSTM

10.4.1 LSTM时如何实现长短期记忆功能的

![image-20210719000144801](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719000144801.png)

与传统的RNN相比,LSTM仍然是基于\(x_t\)\(h_{t-1}\)来计算\(h_t\),只不过对内部的结构进行了更加精细的设计,加入了输入门\(i_t\)、遗忘门\(f_t\)以及输出门\(o_t\)三个门和一个内部记忆单元\(c_t\)。输入门控制当前计算的新状态以多大程度更新到记忆单元中;遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉;输出门控制当前的输出有多大程度上取决于当前的记忆单元。

第t步的更新计算公式为:

\(i_t=\sigma(W_tx_t + U_ih_{t-1}+b_i), \ f_t=\sigma(W_fx_t + U_fh_{t-1}+b_f), \ o_t=\sigma(W_ox_t + U_oh_{t-1}+b_o)\)

\(\tilde c_t = Tanh(W-cx_t + U_ch_{t-1}), \ c_t = f_t \bigodot c_{t-1} + i_t \bigodot \tilde c_t, \ h_t = o_t \bigodot Tanh(c_t)\)

10.4.2 LSTM里各模块分别使用什么激活函数,可以使用别的激活函数吗?

在LSTM中,输入门、遗忘门和输出门使用Sigmoid作为激活函数;在生成候选记忆时,使用Tanh作为激活函数。这两个函数都是饱和的,也就是说在输入达到一定值的情况下,输出就不会发生明显变化了。如果使用了非饱和的激活函数,如ReLU,那么将难以实现门控的效果。Sigmoid函数的输出在0~1之间,符合门控的物理定义,且昂输入较大或较小时,其输出会非常仅仅1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在-1~1之间,这与大多数场景下特征分布时0中心的吻合。

常见的变种时加入了窥孔机制,让记忆\(c_{t-1}\)也参与到门控的计算中,此时输入门的更新方式变为

\(i_t=\sigma(W_tx_t + U_ih_{t-1}+V_ic_{t-1}+b_i)\)

10.5 Seq2Seq模型

10.5.1 Seq2Seq网络结构

类似于考试;学生的记忆就是编码,考试时对题目的解答就是解码。有的学生学习好,网络结构就比较强大,解码结果比较准确;有的学生学习差,网络结构比较弱,解码结果准确率较差。

![image-20210719080340201](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719080340201.png)

![image-20210719080428728](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719080428728.png)

10.5.2 Seq2Seq在解码时,有哪些常用方法

Seq2Seq最基础的解码方法时贪心法,即选取一种度量标准后,每次都在当前状态下选择最佳的一个结果,直到结束。

集束搜索时常见的改进算法,它是一种启发式算法,该方法会保存beam size(记为b,一般设置为8~12)个当前最佳选择,然后解码时每一步根据保存的选择进行下一步的扩展和排序,接着选择前b个进行保存,循环迭代直到结束时选择最佳的一个作为解码的结果。

![image-20210719080948363](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719080948363.png)

10.6 Attention机制

Seq2Seq模型引入注意力机制时为了解决什么问题,为什么使用了双向的RNN?

传统的Seq2Seq中,随着序列的增长,句子越前面的信息丢失就越严重。试想翻译一个有 l00 个词的句子,在编码阶段将整个句子全部词的语义信息编码在一个向量中,而在解码阶段,目标语言的第一个词大概率是源语言的第一个词相对应的,这就意味着每一步的解码都需要考虑100步之前的信息。

在解码时,当前词对应的源语言词的上下文信息和位置信息在解码过程中丢失了。

Seq2Seq中加入注意力机制就是为了解决上述问题,在Attention中,仍然使用普通的RNN进行编码,得到隐状态\(h_1,h_2,...,h_T\)。但是在解码时,每一个输出词都依赖于前一个隐状态以及输入序列每一个对应的隐状态

\(s_i=f(s_{i-1},y_{i-1},c_i)\)

\(p(y_i|y_1,y_2,...y_{i-1})=g(y_{i-1},s_i,c_i)\)

其中语境向量\(c_i\)是输入序列全部隐状态\(h_1,h_2,...,h_T\)的一个加权和:\(c_i=\underset{j=1}{\overset T \sum}\alpha_{ij}h_j\)

其中注意力参数是通过另一个神经网络计算得到的\(\alpha_{ij}=\frac{exp(e_{ij})}{\underset{k=1}{\overset T \sum}\exp(e_{ik})}\)\(e_{ij}=a(s_{i-1},h_j)\)

神经网络\(a\)将上一个输出序列隐状态\(s_{i-1}\)和输入序列隐状态\(h_j\)作为输入,计算出一个\(x_j,y_i\)对齐的值\(e_{ij}\),再归一化得到权重\(\alpha_{ij}\)

在生成一个输出词时,会考虑每一个输入词和当前输出词的对齐关系,对齐越好的词,会有越大的权重,对生成当前词的影响也就越大。

在机器翻译这样一个典型的Seq2Seq模型里,生成一个输出词\(y_j\),会用到第i个输入词对应的隐状态\(h_i\)以及对应的注意力权重\(\alpha_{ij}\),如果只使用一个方向的RNN来计算隐状态,那么\(h_i\)值包含了\(x_0\)\(x_i\)的信息,相当于在\(\alpha_{ij}\)这里丢失了\(x_i\)后面的词的信息。而使用双向的RNN进行建模,第i个输入词对应的隐状态包含了\(\overset \rightarrow h_i\)\(\overset \leftarrow h_i\),前者编码了\(x_0\)\(x_i\)的信息,后者编码了\(x_i\)\(x_0\)的信息。防止了前后文信息的丢失。

![image-20210719083345455](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719083345455.png)

11、强化学习

广义上说,大部分涉及动态系统的决策学习过程都可以看作是一种强化学习。

![image-20210719084836431](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719084836431.png)

11.1 强化学习基础

11.1.1 强化学习中有哪些基本概念,在马里奥寻找宝藏中如何定义这些概念

![image-20210719084314280](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719084314280.png) 强化学习主要有环境(Environment)、机器人(Agent)、状态(State)、动作(Action)、奖励(Reward)等基本概念构成。

一个机器人在环境中会作出各种动作,环境会接收动作,引起自身状态的变迁,同时给机器人以奖励。机器人的目标就是使用一些策略,做合适的动作,最大化自身的收益。

整个场景一般可以描述为一个马尔可夫决策过程(Markov Decision Process, MDP),MDP是马尔可夫过程与确定性动态规划结合的产物,指决策者周期的或连续的观察具有马尔可夫性的随机动态系统,序贯的作出决策的过程。这个过程包括以下几个要素:

动作:所有可能作出的动作的集合,记为A(可能是无限的)。对于本题,\(A=\{上、下、左、右\}\)

状态:所有状态的集合,记为\(S\),在这里指棋盘中每个单元格的位置坐标\(\{(x,y);x=1,2,3,y=1,2,3\}\)

奖励:机器人可能收到的奖励,一般是一个实数,记为\(r\)。这里如果马里奥每一栋一步,定义\(r=-1\),如果得到宝藏,定义\(r=0\),游戏结束。

时间:在每个时间点t,机器人会发出一个动作\(a_t\),收到环境给出的收益\(r_t\),同时环境进入到一个新的状态\(s_t\)

状态转移:\(S\times A \rightarrow S\)满足\(P_a(s_t|s_{t-1},a_t)=P_a(s_t|s_{t-1},a_t,s_{t-2},a_{t-1}...)\),也就是说从当前状态到下一状态的转移,只与当前状态以及当前所采取的动作有关。这就是所谓的马尔可夫性

累积收益:从当前时刻0开始累积收益的计算方法是\(R=E(\underset{t=0}{\overset T \sum}\gamma^tr_t|s_0=s)\),在很多时候我们可以取\(T=\infty\)

强化学习的核心任务是:学习一个状态空间S到动作空间A的映射,最大化累积收益。

11.1.2 从价值迭代来考虑,如何找到一条最优路径

![image-20210719091024070](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719091024070.png)

首先初始化所有状态的价值\(V(s)=0\),然后在每一轮迭代中,对每个状态\(s\)依次执行以下步骤:

逐一尝试{上、下、左、右}四个动作a,记录到达状态\(s'\)和奖励\(r\)

计算每个动作的价值\(q(s,a)=r+V(s')\)

从四个动作中选择最优的动作\(\underset a {max}\{q(s,a)\}\)

更新\(s\)状态价值\(V(s)=\underset a {max}\{q(s,a)\}\)

在第一轮迭代中,由于初始状态\(V(s)\)均为0,因此对除宝藏所在位置外的状态\(s\)均有\(V(s)=r+V(s')=-1+0=-1\),即从当前位置出发走一步获得的奖励\(r=-1\)

在第二轮迭代中,对于和宝藏位置相邻的状态,最优动作一步到达\(V(s')=0\)的状态,即宝藏所在的格子。因此\(V(s)\)更新为-1,其余只能一步到达\(V(s')=-1\)的状态,\(V(s)\)更新为-2

在第三轮和第四轮迭代如法炮制,可以发现在第四轮迭代中\(V(s)\)更新前后都没有任何变化,价值迭代已经找到了最优策略。最终只需要从马里奥所在位置开始,每一步选择最优动作,即可最快找到宝藏。

上看的迭代过程实际上运用了贝尔曼方程(Bellman Equation)来对每个位置的价值进行更新

\(V_*(s)=\underset{a} {max}\underset{s',r} \sum p(s',r|s,a)[r+\gamma V_*(s')]\)

贝尔曼方程中状态\(s\)的价值\(V(s)\)由两部分组成:

  1. 采取动作\(a\)后带来的奖励\(r\)

  2. 采取动作后到达新状态的价值\(V(s')\)

11.1.3 从策略迭代来考虑,如何找到一条最优路径

策略就是根据当前状态决定该采取什么动作,使用策略评估衡量策略的好坏。给定一个策略\(\pi\),可以计算出每个状态的期望价值\(V(s)\),具体步骤如下:

  1. 初始化:随机选择一个策略作为初始值,比如“不管什么状态,一律朝下走”,即\(P(A=down|S_t=s)=1, P(A=other|S_t=s)=0\)

  2. 进行策略评估:根据当前的策略计算\(V_\pi(s)=E_\pi(r+\gamma V_\pi(s')|S_t=s)\)

  3. 进行策略提升:计算当前状态的最优动作\(\underset a {max}\{q_\pi(s,a\}\),更新策略\(\pi(s)=\underset a {max}\{q_\pi(s,a\}=\underset a {max}\{q_\pi(s,a\}=\underset{a} {max}\underset{s',r} \sum p(s',r|s,a)[r+\gamma V_\pi(s')]\)(这里\(V_\pi\)和价值更新中的\(V_*\)有所区别,其他步骤类似)

  4. 不停的重复策略评估和策略提升,直到策略不再变化为止。

![image-20210719094250336](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719094250336.png) 初始策略为:不论处于哪个状态,一律朝下走。只有宝藏正上方的状态可以到达宝藏,期望价值为宝藏的距离(-2,-1,0),其余状态不能通过当前策略到达宝藏,期望价值为负无穷
![image-20210719094229286](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719094229286.png) 梯度提升策略:对于宝藏正上方的状态,策略已经最优,保持不变;对于不在宝藏正上方的状态,根据策略更新公式\(\pi(s)=\underset a {max}\{q_\pi(s,a\}\),最优策略为横向移动一步

对于所有的状态,当前策略已经最优,维持不变,终止策略提升过程。只需从初始状态开始,按照当前位置的最优策略进行行动,即向右行动一步,然后一直向下行动,即可最快找到宝藏。

11.2 视频游戏里的强化学习

什么是深度强化学习,它与传统的强化学习有什么不同

2013年DeepMind提出的深度强化学习仍然使用经典的Q-learning框架。Q-learning的本质是:当前状态\(s_j\)、回馈\(a_j\)、奖励\(r_j\)以及Q函数之间存在关系\(Q(s_j,a_j)=E_{s_{j+1}}y_j\),其中\(y_j=r_j+\gamma·\underset a{max}Q(S_{j+1},a)\)。如果\(s_{j+1}\)是最终态,则\(y_j=r_j\),在传统的Q-learning中,考虑状态序列是无限的,所以并没有终态。根据这个关系,可以对Q函数的取值做迭代改进。所以我们有一个四元组\((s_j,a_j,r_j,s_{j+1})\),可以用随机梯度下降法的思想对Q函数迭代前后的平方差\((y_j-Q(s_j,a_j))^2\)做一次梯度下降。

传统Q-learning算法如下:

  1. 初始化\(Q \leftarrow Q_0\)

  2. 令迭代次数E=1,...,M:

2.1) 构建初始状态\(s_1\)

2.2) 令t=1,...,T:

2.2.1) \(a_t\leftarrow\)基于现有从Q函数而来的策略选择一个动作

2.2.2) 执行\(a_t\)

2.2.3) \(r_t \leftarrow\)获得当前的收益

2.2.4) \(s_{t+1} \leftarrow\)采样获得下一个状态

2.2.5) 更新Q函数:\(Q(S_{t},a_t) \leftarrow Q(S_t,a_t) + \alpha[r_t+\gamma·\underset {a' \in A}{max}Q(S_{j+1},a')-Q(S_t,a_t)]\)

Deep Q-learning的算法如下:

  1. 令迭代次数E=1,...,M:

1.1) 构建初始状态\(s_1\)

1.2) \(D \leftarrow \{\}\)

1.3) 令t=1,...,T:

1.3.1) \(a_t=\begin{cases} \text{随机选择的状态,以概率}\epsilon \\ \underset a{max} Q(s_t,a;\theta) \text{,以概率1-} \epsilon \end{cases}\)(探索与利用)

1.3.2) 执行\(a_t\)

1.3.3) \(r_t \leftarrow\)获得当前的收益

1.3.4) \(s_{t+1} \leftarrow\)采样并加以处理获得下一个状态

1.3.5) \(D \leftarrow D+\{s_t,a_t,r_t,s_{t+1}\}\)

1.3.6) \((s_t,a_t,r_t,s_{t+1}) \leftarrow\)从D中采样

1.3.7) \(y_j=\begin{cases} r_j & \text{若果\)s_{j+1}\(是终点} \\ r_j + \gamma \underset a{max} Q(s_{t+1},a;\theta) &\text{如果\)s_{j+1}\(不是终点}\end{cases}\)

1.3.6) 对\((y_j-Q(s_j,a_j;\theta))^2\)进行一次梯度下降

Q-learning和Deep Q-learning的基本步骤都是一致的:1)根据当前的Q函数执行一次行动\(a_t\);2)获得本次收益\(r_t\)及下一个状态\(s_{t+1}\);3)以某种方式获得一个四元组\((s_j,a_j,r_j,s_{j+1})\);4)计算\(y_j\);5)对\((y_j-Q(s_j,a_j;\theta))^2\)进行一次梯度下降,完成梯度更新。

11.3 策略梯度

什么是策略梯度,它和传统Q-learning有什么不同,相对于Q-learning来说有什么优势

在策略梯度中,我们考虑前后两个状态之间的关系为\(s_{t+1} \sim p(s_{t+1}|s_t,a_t)\),其中\(s_t,s_{t+1}\)是相继的两个状态,\(a_t\)是t步时所采取的行动,\(p\)时环境所决定的下个时刻状态分布。而动作\(a_t\)的生成模型(策略)为\(a_t=\pi_\theta(a_t|s_t)\),其中\(\pi_\theta\)时以\(\theta\)为参变量的一个分布,\(a_t\)从这个分布进行采样。这样在同一个环境下,强化学习的总收益函数\(R(\theta)=E(\sum_0^Tz_tr_t)\),完全由\(\theta\)决定。策略梯度的基本思想就是:直接用梯度方法来优化\(R(\theta)\)。可以看出,和Q-learning不同的是,策略梯度并不估算Q函数本身,而是利用当前状态直接生成动作\(a_t\),这有效避免了在连续空间上最大化Q函数的困难。同时直接用梯度的方法优化\(R(\theta)\)可以保证至少是局部收敛的。

要是用梯度法,首先要知道如何计算\(R(\theta)\)的导数,设\(\tau\)为某一次0到\(T\)时间所有状态及行动的集合(称作一条轨迹),则\(R(\theta)=E(r(\tau))\),其中\(r\)计算了轨迹\(\tau\)的得分,我们有

\(R(\theta)=E(r(\tau))=\int p_\theta(\tau)r(\tau)d\tau\)

所以\(\nabla_\theta R(\theta)=\nabla_\theta\int p_\theta(\tau)r(\tau)d\tau=\int p_\theta(\tau)(\nabla_\theta\log(p_\theta(\tau)))r(\tau)d\tau=E(\nabla_\theta\log(p_\theta(\tau))r(\tau))\\=E(\nabla_\theta\log(p(s_0)·\pi_\theta(a_0|s_0)·p(s_1|a_0,s_0)·p(a_1|s_1)·...·\pi_\theta(a_T|s_T))r(\tau)) \\=E(\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k)·r(\tau))\)

注意最后一步是因为\(p(s_{k+1}|a_k,s_k)\)由环境决定,从而与\(\theta\)无关,因此\(\nabla_\theta p(s_{k+1}|a_k,s_k)=0\),每个轨迹\(\tau\)对应的梯度为:\(g(\tau)=\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k)·r(\tau)\)

其中\(s_k,a_k\)为轨迹\(\tau\)上每一步的状态和动作。这样,给定一个策略\(\pi_\theta\),我们可以通过模拟获得一些轨迹,对于每条轨迹,可以获得其收益\(r(\tau)\)以及每一步的<状态、行动>对,从而可以通过上面的两个公式获得当前参数下对梯度的估计。算法描述如下:

  1. \(\theta \leftarrow \theta_0\) //初始化\(\theta\)

  2. 重复以下步骤(E=1,2,3,...)直至收敛:

2.1 基于当前的\(\theta\),进行若干次独立试验,获得轨迹\(\tau_1,\tau_2,...,\tau_n\)

2.2 根据前面的式子获得\(g(\tau_1),g(\tau_2),...,g(\tau_n)\),从而获得对\(\nabla_\theta R(\theta)\)的一个估计:\(\nabla_\theta R(\theta)\approx \big(\sum_{i=1}^n g(\tau_i)\big)/n\)

2.3 \(\theta \leftarrow \theta + \alpha_E \nabla_\theta R(\theta)\),更新\(\theta\)\(\alpha_E\)是第E次学习的学习速率

注意到\(\nabla_\theta R(\theta)\)实际上是一个随机变量\(g(\tau)\)的期望,我们贵\(g(\tau)\)进行若干次采样,可以获得对其期望的一个估计。如果能在不改变期望的前提下减少\(g(\tau)\)的方差,则能有效提高对其期望估计的效率。由于\(\int p_\theta(\tau)·d\tau =1\),所以有\(E(\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k))=\int \nabla p(\tau)·d\tau=\nabla \int p_\theta(\tau)=0\)。对于任一个常量b,我们定义一个强化梯度\(g_b'(\tau)=\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k))(r(\tau)-b)\),易知\(E(g(\tau))=E(g_b'(\tau))\),选取合适的b,可以获得一个方差更小的\(g_b'(\tau)\),而维持期望不变。经过计算可以得到最优的b为:

\(b_{optimal}=\frac{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2r(\tau))}{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2)}\),于是得到一个改良的算法

  1. \(\theta \leftarrow \theta_0\) //初始化\(\theta\)

  2. 重复以下步骤(E=1,2,3,...)直至收敛:

2.1 基于当前的\(\theta\),进行若干次独立试验,获得轨迹\(\tau_1,\tau_2,...,\tau_n\)

2.2 \(b_{optimal}=\frac{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2r(\tau))}{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2)}\)

2.3 根据上式获得的对应的强化梯度,\(g_b'(\tau_1),g_b'(\tau_2),...,g_b'(\tau_n)\),从而获得对\(\nabla_\theta R(\theta)\)的一个估计:\(\nabla_\theta R(\theta)\approx \big(\sum_{i=1}^n g_b'(\tau_i)\big)/n\)

\(\theta \leftarrow \theta + \alpha_E \nabla_\theta R(\theta)\),更新\(\theta\)\(\alpha_E\)是第E次学习的学习速率

在上述策略梯度算法中,通过估算一个新的强化梯度可以有效所见原来梯度的方差,从而提高梯度估算的效率,那么如何推出最优的b值呢?

\(g_b'(\tau)=\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k))(r(\tau)-b)\),令\(A=\sum_{k=0}^T \nabla_\theta \log \pi_\theta(a_k|s_k))\)\(B=r(\tau)\),可以得到\(E(A)=0\),这样问题变为,在\(E(A)=0\)的前提下,寻找最优的敞亮b,是的\(var(A(B-b))\)最小

\(argmin(var(A(B-b)))=argmin(E((A(B-b)-E(AB))^2))=argmin(E((AB-E(AB)-b·A)^2))\\=argmin(b^2E(A^2)-2bE(A^2B)+E((AB)-E(AB))^2))=\frac{E(A^2B)}{E(A^2)}\\=\frac{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2r(\tau))}{E(\sum_{k=0}^T (\nabla_\theta \log \pi_\theta(a_k|s_k))^2)}\)

11.5 探索与利用

探索阶段:通过多次观测推断出一道菜做得好吃的概率。如果一道菜已经推荐了k遍,就可以算出菜做的好吃的概率\(\tilde p=\frac{1}{k}\sum_{i=1}^kReward_i\),如果推荐的次数足够多,k足够大,那么\(\tilde p\)会趋近于真实的菜做的好吃的概率\(p\)

利用阶段:若果每道菜都被推荐了很多遍,就可以计算出每道菜做的好吃的概率\(\{\tilde p_1, \tilde p_2, ..., \tilde p_N\}\),只需要推荐\(\tilde p\)最大的那道菜

探索和利用的平衡是一个经久不衰的问题。一是探索的代价是要不停的拿客户试菜,影响用户体验,但有助于更加准确的估计每道菜好吃的概率;二是利用会基于目前的估计拿出“最好的”菜来服务客户,但目前的估计可能是不准的。

可以使用\(\epsilon-greedy\)算法,即每当客人到来时,以\(\epsilon\)的概率选择探索,以\(1-\epsilon\)的概率选择利用。\(\epsilon-greedy\)算法村子的问题:1)有一道菜持续得到好吃的反馈,另一道菜持续得到难吃的反馈,但在\(\epsilon-greedy\)算法中它们的探索概率是一样的;2)在估计的成功率相同的情况下,试吃次数多和试吃次数少的菜得到的概率是一样的(即第一道菜的试吃概率为60%=30/50,而第二道菜的试吃概率是60%=3/5)。虽然两道菜的成功概率都是60%,但是反馈的人越多,概率估计的越准。再探索时,应该把重心放在试吃次数少的菜上。

探索与利用,如何引出UCB

观测1: 如果一道菜已经被推荐了k遍,同时获取了k次反馈,就可以算出菜做的好吃的概率\(\tilde p=\frac{1}{k}\sum_{i=1}^kReward_i\),当k趋于无穷时,\(\tilde p\)会趋近于真实的概率\(p\)

观测2: 现实当中一道菜被试吃的次数k不可能无穷大,因此估计出的概率\(\tilde p\)与真实的概率\(p\)总会存在一个差值\(\Delta\),即\(\tilde p - \Delta \leq p \leq \tilde p + \Delta\)

基于上面的两个观测,我们可以定义一个心的策略:每次推荐时,总是乐观的认为每道菜能够获得回报是\(\tilde p + \Delta\),这便是区间上界算法(Upper Confidence Bound UCB)。主要问题是如何计算差值\(\Delta\)

介绍Chernoff-Hoeffding Bound:假设\(Reward_1,...,Reward_n\)是在[0,1]之间取值的独立同分布随机变量,用\(\tilde p=\frac{1}{n}\sum_i Reward_i\)表示样本均值,用\(p\)表示分布的均值,那么有

\(P\{|\tilde p - p| \leq \Delta\} \geq 1- 2e^{-2n\Delta^2}\)

\(\Delta\)取值为\(\sqrt{2lnT/n}\)时,其中T表示有T个客人,n表示菜被吃过的次数,于是有

\(P\{|\tilde p - p| \leq \sqrt{2lnT/n}\} \geq 1- 2/T^4\)

也就是说\(\tilde p - \sqrt{2lnT/n} \leq p \leq \tilde p + \sqrt{2lnT/n}\)是以概率\(1- 2/T^4\)的概率成立的:

当T=2时,成立的概率时0.875;当T=3时,成立的概率时0.975;当T=4时,成立的概率时0.992

可以看到,当\(\Delta\)取值为\(\sqrt{2lnT/n}\)时,回报的均值距离真实回报的差距\(\Delta\)已经非常接近1了,因此\(\Delta\)的取值是一个非常合适的“置信区间上界”。我们乐观的认为每道菜能够获得回报是\(\tilde p + \Delta\),既利用了当前回报的信息,也适用“置信区间上界”进行了探索。

12、集成学习(276~295)

12.1 集成学习分成哪几种

boosting(Adaboost、GBDT等)

bagging(random forest)

stacking(GBDT+LR)

12.2 集成学习的步骤和例子

集成学习 一般可分为以下 3 个步骤:

1)找到误差E相独立的基分类器

2)训练基分类器

3)合并基分类器的结果 。

12.3 基分类器

可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么?

随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样bagging才能有用武之地。线性分类器或者K紧邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器适应bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为bagging的采样,二导致它们在训练中更难收敛,从而增大了集成分类器的偏差。

12.4 偏差与方差

Bagging能够提升弱分类器性能的原因是降低了方差;Boosting能够提升弱分类器性能的原因是降低了偏差。

Bagging降低方差

单个模型的方差记为:\(\sigma^2\)

n个模型取平均后的方差为\(\sigma^2/n\)

Boosting降低偏差

在训练好 一个弱分类器后,我们需要计算弱分类器的错误或者残差,作为下一个 分类器的输入。这个过程本身就是在不断减小损失函数,来使模型不断逼近真实值,使模型偏差不断减小。但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使各弱学习器之间是强相关的,缺乏独立性,所以并不会有降低方差的作用。

![image-20210712121612840](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712121612840.png)

12.5 梯度提升决策树的基本原理

不断拟合负梯度

梯度提升和梯度下降的联系和区别

相同点:梯度提升和梯度下降都是在每一轮迭代中利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新

不同点:在梯度下降中模型是以参数化形式表示,从而模型的更新等价于参数的重新 。 而在梯度提升中,模型并不需要进行参数化表示,而是直接走义在函数空间中,从而大大扩展了可以使用的模型种类 。

![image-20210712122140365](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210712122140365.png)

12.6 XGBoost与GBDT的联系和区别

13、生成对抗网络

13.1 初识GANs的秘密

13.1.1 简述GANs的基本思想和训练过程

GANs包括生成器(Generator)和判别器(Discirminator)两个部分。生成器从先验分布中采得随机信号,经过神经网络的变换,得到模拟样本;判别起接收来自生成器的模拟样本,也接收来自实际数据集的真实样本,判断哪些是生成的,哪些是真实样本。对抗不是目的,在对抗中让双方能力各有所长菜时目的。理想情况下,生成器和判别起最终能达到一种平衡,双方都臻于完美,彼此都没有更进一步的空间。

![image-20210720080538339](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720080538339.png)

1)训练判别器时,先固定生成器G(·),然后利用生成器模拟产生样本G(z)作为负样本,并从真实数据集中采样获得正样本X;将这些正负样本输入到判别起D(·)中,根据判别起的输出和样本标签来计算误差,最后利用误差反向传播算法来更新判别起D(·)的参数

![image-20210720080853113](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720080853113.png)

在训练生成器时,先固定判别器D(·),然后利用当前生成器G(·)随机模拟产生样本G(z),并输入到判别器D(·)中,根据判别器的输出D(G(z))和样本标签来计算误差,最后利用误差反向传播算法来更新生成器G(·)的参数

![image-20210720083829015](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720083829015.png)

13.1.2 GANs的值函数

因为判别器D试图识别实际数据为真实样本,识别生成器生成的数据为模拟样本,所以这是一个二分类问题,损失函数Negative Log-Likelihood,也称 Categorical Cross-Entropy Loss,即:

\({\cal L}(D)=-\int p(x)[p(data|x)log D(x)+p(g|x)log(1-D(x))]\)

其中\(D(x)\)表示判别器预测x为真实样本的概率,\(p(data|x)\)\(p(g|x)\)表示x分属真实数据集和生成器这两类的概率。样本x的来源一半是实际数据,一半是生成器\(p_{src}(data)=p_{src}(g)=0.5\)。我们用\(p_{data}(x)\doteq p(x|data)\)表示从实际数据集得到x的概率,\(p_g(x) \doteq p(x|g)\)表示从生成器得到的x的概率,有x的总概率\(p(x)=p_{src}(data)p(x|data) + p_{src}(g)p(x|g)\),带入损失函数可得:

\({\cal L}(D)=-\frac{1}{2} \Big(E_{x \sim p_{data}(x)}[log D(x)]+ E_{x \sim P_g(x)}[log(1-D(x))]\Big)\)

在此基础上得到值函数:\(V(G,D)=E_{x \sim p_{data}(x)}[log D(x)]+ E_{x \sim P_g(x)}[log(1-D(x))]\)

判别器D最大化上述值函数,生成器G则最小化它,整个MiniMax游戏可以表示为:\(\underset{G}{min}\underset D{max}V(G,D)\)

训练中,给定生成器G,寻找当下最优判别器\(D_G^*\),对于单个样本,最大化

\(\underset D {max}[p_{data}log D(x)+p_g(x)log(1-D(x))]\)的解为\(\hat D(x)=p_{data}(x)/[p_{data}(x)+p_g(x)]\),解由单点编程一个函数解\(D_G^*=p_{data}/[p_{data}+p_g]\)

此时\(\underset G {min}V(G,D_G^*)=\underset G {min}\{-log4 + 2·JSD(p_{data}||p_g)\}\),其中\(JSD(·)\)是JS距离,由此看出生成器G实际是在最小化生成样本与真实样本分布的JS距离。最终得到的均衡电视\(JSD(p_{data}||p_g)\)的最小值点,即\(p_g=p_{data}\)时,\(JSD(p_{data}||p_g)\)取到零,最优解\(G^*(z)=x\sim p_{data}(x)\)\(D^*(x)\equiv \frac{1}{2}\),值函数\(V(G^*,D^*)=-log4\)

进一步的,训练时如果给定D求解最优G,可以得到什么?不妨假设\(G'\)表示前一步的生成器,D时\(G'\)下的最优判别器\(D_{G'}^*\),那么求解最优G的过程为

\(\underset G {argmin}V(G,D_{G'}^*)=\underset G {argmin}KL\Big(p_g||\frac{p_{data}+p_{g'}}{2} \Big)-KL(p_g||p_{g'})\)

由此可以得出以下两点结论:

1)优化G的过程时让G远离前一步的\(G'\),同时接近分布\((p_{data}+p_{g'})/2\)

2)达到均衡点时\(p_{g'}=p_{data}\),有\(\underset G {argmin}V(G,D_{G'}^*)=\underset G {argmin} 0\),如果用这是的判别器取训练一个全新的生成器\(G_{new}\),理论上可能啥也训练不出来

13.1.3 GANs如何避开大量概率推断计算

传统的概率生成模型要定义一个概率分布表达式\(P(X)\),通常是一个多变量概率分布的概率密度函数\(p(X_1,X_2,...,X_N)\),并基于此做最大似然估计。这过程少不了概率推断计算,比如计算边缘概率\(P(X_i)\)、条件概率\(P(X_i|X_j)\)以及作坟墓的Partition Function等。当随机变量很多时,概率模型会变得十分复杂,概率计算变得非常困难,即使作近似计算,效果常不尽人意。GANs在刻画概率生成模型时,并不对概率密度函数\(P(X)\)直接建模,而是通过制造样本x,间接体现出分布\(P(X)\),就是说我们看不到\(P(X)\)的一个表达式。

如果随机变量Z和X之间满足某种映射关系\(X=f(Z)\),那么它们的概率分布\(p_X(X)\)\(p_Z(Z)\)也存在某种映射关系。当\(Z,X \in \R\)都是一维随机变量时,\(p_X=\frac{df(Z)}{dX}p_Z\),当\(Z,X\)是高维随机变量时,导致编程雅可比矩阵,即\(p_X=Jp_Z\)。因此已知Z的分布,我们对随机变量间的转换函数f直接建模,就唯一确定了X的分布。

这样不仅避开大量复杂的概率计算,而且给f更大的发挥空间,我们可以用神经网络来训练f。

13.1.4 GANs在实际训练中会遇到什么问题

在实际训练中,早起阶段生成器G很差,生成的模拟样本很容易被判别器D识别,使得D会传给G的梯度及其小,达不到训练目的,这个现象称为优化饱和。我们将D的Sigmoid输出层的前一层记为o,那么\(D(X)\)可表示成\(D(x)=Sigmoid(o(x))\),此时有

\(\nabla D(x) =\nabla Sigmod(o(x))=D(x)(1-D(x))\nabla o(x)\)

因此训练G的梯度为

\(\nabla log(1-D(G(z;\theta_g)))=-D(G(x;\theta_g))\nabla o(G(z;\theta_g))\)

当D很容易认出模拟样本时,意味着认错模拟样本的概率几乎为零,即\(D(G(z;\theta_g)) \rightarrow 0\),假定

\(|\nabla o(G(z;\theta_g))|<C\),C为一个常量,则可推出

\(\underset{D(G(z;\theta_g)) \rightarrow 0}{lim}\nabla log(1-D(G(z;\theta_g)))=-\underset{D(G(z;\theta_g)) \rightarrow 0}{lim}D(G(x;\theta_g))\nabla o(G(z;\theta_g))=0\)

故G获得的梯度基本为零,这说明D强大后对G的帮助反而微乎其微。

解决方法时将\(log(1-D(G(z;\theta_g)))\)变为\(log(D(G(z;\theta_g)))\),形式上有一个负号的差别,故让后者最大等效于让前者最小,二者在最优时解相同,此时的梯度变为:

\(\nabla log(D(G(z;\theta_g)))=(1-D(G(x;\theta_g)))\nabla o(G(z;\theta_g))\)

\(\underset{D(G(z;\theta_g)) \rightarrow 0}{lim}\nabla log(D(G(z;\theta_g)))=\nabla o(G(z;\theta_g))\)

即使\(D(G(x;\theta_g))\)趋于零,\(\nabla log (D(G(x;\theta_g)))\)也不会消失,仍能给生成器提供有效的梯度。

13.2 WGAN:抓住低维的幽灵

13.2.1 GANs的陷阱:原GANs中存在哪些问题制约模型训练效果

训练好生成器时一件很困难的事,生成器很不容定,常出现模式坍塌。

问题出在JS距离上,即两个KL距离的平均:

\(JS(P_r||P_g)=\frac{1}{2}\Big(KL\big(P_r||(P_r+p_g)/2\big)+KL\big(P_g||(P_r+p_g)/2\big)\Big)\)

初始的生成器,由于参数随机初始化,与其说是一个样本生成器,不如说时高维空间点的生成器,点广泛分布在高维空间中。打个比方,生成器将一张大网布满整个空间,“兵力”有限,网布的越大,每个点附近的兵力越少。想象一下这张网穿过低维子空间时,可看见的“兵”几乎为零,这片子空间成了一个“盲区”,如果真实数据全都分布在这,它们就对生成器“隐身”了,成了“漏网之鱼”

回到公式,看第一个KL距离:\(KL\big(P_r||(P_r+p_g)/2\big)=\int log\Big(\frac{p_r(x)}{(p_r(x)+p_g(x))/2}\Big)p_g(x)d\mu(x)\)

高维空间绝大部分地方见不到真实数据,\(p_r(x)\)处处为零,对KL距离的贡献为零;即使在真实数据蜷缩的低维空间,高维空间会忽略低维空间的体积,概率上讲测度为零。KL距离就变成了

\(\int log2·p_g(x)d\mu(x)=log2\)

再看第二个KL距离,同样可以推出距离为\(log2\),因此\(JS(P_r||P_g)=\frac{1}{2}(log2+log2)=log2\),是一个常量。无论生成器怎么“布网”,怎么训练,JS距离不变,对生成器的梯度为零。训练神经网络是基于梯度下降的,用梯度一次次更新模型参数。但是这里的梯度总是零,无法进行正常训练。

13.2.2 破解武器:WGAN针对前面的问题作了哪些改进,什么是Wasserstein距离

处在高维空间,对抗隐秘的低维空间,不能再用粗暴简陋的方法,需要有特殊武器,这就是Wasserstein距离,也称推土机距离(Earth Mover distance)

| ![image-20210720143311996](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720143311996.png) | \(W(P_r,P_g)=\underset{y \sim \prod(P_r,P_g)}{inf}E_{(x,y)\sim \gamma}[||x-y||]\) |
| ------------------------------------------------------------ | ------------------------------------------------------------ |

公式的理解:想象有一个院子,院子里有几处坑坑洼洼需要填平,四个墙角都有一堆沙子,沙子总量正好填平所有坑。搬运沙子很费力,你想知道有没有一种方案,使得花的力气最少。直觉上每个坑都需要选择最近的沙堆,搬运的距离最短。但是存在一些问题,如果最近的沙堆用完了,或者填完坑后近处还剩好多沙子,或者坑道几个沙坑的距离一样,该怎么办?所以需要设计一个系统的方案,通盘考虑这些问题,最佳方案是上面目标函数的最优解。可以看到,当沙子分布和坑分布给定时,我们只关心搬运沙子的整体损耗,而不关心每粒沙子的拒币摆放,在损耗不变的情况下,沙子摆放可能有很多选择,对应式13.16,当你选择一堆\((x,y)\)时,表示把x处的一些沙子搬到y处的坑,可能搬部分沙子,也可能搬全部沙子,可能只把坑填一部分,也可能填满了。x处沙子总量为\(P_r(x)\),y处坑的大小为\(P_g(x)\),从x到y的沙子量为\(\gamma(x,y)\),整体上满足等式:

\(\underset x \sum \gamma(x,y)=P_g(y) (3.16)\)

\(\underset y \sum \gamma(x,y)=P_r(x) (3.16)\)

为什么Wasserstein距离能克服JS距离解决不了的问题,理论上解释很复杂,需要证明当生成器分布随参数\(\theta\)变化而连续变化时,生成器分布于真实分布的Wasserstein距离也随\(\theta\)变化而连续变化,并且几乎处处可导,而JS距离不保证随\(\theta\)变化而连续变化。

通俗的解释,现在生成器不再“布网”,改成“定位追踪”了,不管真实分布藏在哪个低维子空间里,生成器都能感知它在哪,因为生成器只要将自身分布稍作变化,就会改变它到真实分布的推土机距离;而JS距离时不敏感的,无论生成器怎么变化,JS距离都是一个常数。因此使用推土机距离,能有效锁定低维子空间中的真实数据分布。

13.2.3 WGAN之道:怎么具体应用Wasserstein距离实现WGAN算法

Wasserstein距离的公式太难求解,幸运的是它有一个孪生兄弟,和它有相同的值,这就是Wasserstein距离的对偶式:

\(W(P_r,P_g)=\underset{f_L \leq 1}{sup}E_{x \sim P_r}[f(x)]-E_{x \sim P_g}[f(x)]=\underset{w \in W}{max}E_{x \sim P_r}[f_w(x)]-E_{x \sim p(z)}[f_w(g_\theta(z))]\)

对偶大大的降低了Wasserstein距离的求解难度,计算过程变为找到一个函数\(f\),使得它最大化目标函数\(E_{x \sim P_r}[f_w(x)]-E_{x \sim p(z)}[f_w(g_\theta(z))]\),这个式子与原GANs的\(E_{x \sim p_{data}(x)}[log D(x)]+ E_{x \sim P_g(x)}[log(1-D(x))]\),只是去掉了log,所以制作微小改动就能使用原GANs的框架。

这里\(f\)\(D\)不同,前者要求满足\(||f||_L \leq 1\),即1-Lipschitz函数,后者是一个Sigmoid函数作输出层的神经网络。它们都要求在寻找最优函数时,一定要考虑界的限制。如果没有限制,函数值会无限大或无限小。Sigmoid函数的值天然的有界,而1-Lipschitz不是限制函数值的界,而是限制函数导数的界,使得函数在每点上的变化率不能无限大。神经网络如何体现1-Lipschitz或K-Lipschitz呢?WGAN的思路很巧妙,在一个前向神经网络里,输入经过多次线性变换和非线性激活函数得到输出,输出对输入的梯度,绝大部分都是由线性操作所乘的权重矩阵贡献的,因此约束每个权重矩阵的大小,可以约束网络输出对输入的梯度大小。

判别器在这里换了一个名字,叫评分起(Critic),目标函数由“区分样本来源”变成“为样本大粉”:越像真实样本分数越高,否则月底。优点类似支持向量里margin的概念。训练评分起就是计算生成器分布于真实分布的Wasserstein距离;给定评分起,训练生成器就是缩小这个距离,算法中要计算Wasserstein距离对生成器参数\(\theta\)的梯度,\(\nabla_\theta W(P_r,P_g)=-E_{z\sim p(z)}[\nabla_\theta f_w(g_\theta(z))]\),再通过梯度下降法更新参数,让Wasserstein距离变小。

![image-20210720150312823](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720150312823.png)

13.3 DCGAN:当GANs遇上卷积

在生成器和判别器中应该怎样设计深层卷积结构?

为了生成高分辨率的优质图片,我们准备在GANs框架内嵌入多层卷积。为了充分发挥GANs中卷积网络的威力,需要搞清楚两件事情:1)生成器到底做了什么?2)判别器到底做了什么?

生成器

生成器生成图片,可以堪称图片分类的一个逆过程。图片分类器的输入是一张图片,输出是一个类别,图片生成器输出的是一张图片,但它的输入通常是一个随机向量,如高斯分布产生的100维随机向量。这个随机向量在深度网络的黑盒子里我们无从知道。但是我们可以确定这100维随机向量对比一张128*128小图片是一个极低维的向量。

从低维向量得到高维图片,想高分辨率,这怎么可能?例如,从一个类别到一张图片,信息由少到多,不仅不能压缩或丢失,还要补充信息,任务难度必然增大。用随机向量的每维刻画不同的细节,然后生成一张图片。随机向量不含像素级别的位置信息,但是对于图片,每个像素都有它的位置,点构成了线,线构成了面,进而描绘出物体的形状。如果这些位置信息不是从随机向量中产生,那么就应出自生成器的特殊网络结构。

从随机向量造出图片,要在造的过程中产生位置信息。这个生成过程需符合以下两点原则:

1)保证信息在逐层计算中逐渐增多。

2)不丢失位置信息,并不断产生更细节的位置信息

具体做法维:

1)去掉一些会丢掉位置信息的结构,如池化层。

池化层是在邻近区域最大或取平均,会丢失这一区域的位置信息:无论怎么布局,最大值和平均值都是不变的。位置不变性是应对图片分类的一个优良性质,但是对于图片生成来说是一个糟糕的性质,因为这是一个降采样的过程,通过丢失细节信息来保留高级语义。

2)使用分数步进卷积层

模型要做的不是抽象而是具象,计算时升采样的过程,逐步提供更多细节。将100维随机向量经过一层,变换成一个4x4x1024的张量,宽度和高度都是4,虽然大小有限,但是暗示了位置的存在,接着经过层层变换,高度和宽度不断扩大,深度不断减小,直至输出一个由宽度、高度及RGB三通道的64x64x3图片。

传统卷积层智能缩小或保持前一层的高度和宽度,对于扩大宽度无能为力,我们需要采用特殊的卷积层来实现增加高宽的升采样计算,即分数步进卷积层。

![image-20210720230230937](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720230230937.png)

分数步卷积层只是象征性的保证输入2x2图输出5x5图,同时仍满足卷积操作的定义。不仅边缘处填零,像素点间也填零。我们将2x2图扩为5x5图,再经过核3x3步长1x1的卷积层,就可以得到一个5性图。这个逆过程只是图分辨率的逆,而非数学意义上的球逆

![image-20210720230558198](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720230558198.png)

3)去掉最后的全连接层

通常CNN最后接全连接层,时为了综合各维度做非线性变换,应对图片分类的目标。这里的任务是生成图片,用全连接层不仅没必要,还会打乱多层卷积建立的空间结构。越靠近图片输出端,越要精心呵护宽高二维平面上的位置信息,反而在输入端可以增加一个全连接层,将100维随机向量经过矩阵乘法转换成4x4x1024的张量。

4)批量归一化和ReLU激活函数

生成模型越深,越需要Batchnorm层,否则训练不充分,极易出现模型坍塌问题。总生成相同的的图片样本。另外,为了避免梯度饱和,让学习更稳定,内部使用ReLU激活函数,只在图片输出层用Tanh激活函数。

判别器

判别器鉴别生成图片和实际图片,是一个典型的图片分类任务,但是又不同于一般的图片分类。真品和赝品的区别,往往是细节上的差异,而不是宏观层面的语义差异。判别器的多层卷积网络,依然抛弃池化层,将它替换为步长大于1的卷积层,虽然也是一个降采样的过程,但是没有池化层那样粗放。判别器最后一层不接全连接层,扁平化处理后直接送给Sigmoid输出层,最大限度的留住位置细节。另外,判别器内部激活函数使用LReLU,也是要最大限度的留住前层信息,判别器也用到Batchnorm层

13.4 ALI:包揽推断业务

生成网络建立从隐空间到数据空间的映射,推断网络建立从数据空间到隐空间的映射。数据空间的信息看得见,称为明码;隐空间的信息看不见,称为暗码,因此生成网络是一个解码器,推断网络是一个编码器。

ALI(Adversarially Learned Inference)模型将生成网络和推断网络一起放到GANs框架下,进而联合训练生成模型和推断模型,取得不错的效果。

生成网络和推断网络的融合

如何把一个生成网络和一个推断网络融合在GANs框架下,借助来自判别器的指导,不仅让模拟样本的分布尽量逼近真实分布,而且让模拟样本的隐空间表示于真实样本的隐空间表示在分布上也尽量接近。

任何一个观察数据x,背后都有一个隐空间表示z,从x到z有一条转换路径,从z到x也有一条转换路径;前者对应一个编码过程,后者对应一个解码过程。从概率的角度看,编码是一个推断过程,先从真实数据集采样一个样本x,再由x推断z,有给定x下z的条件概率\(q(z|x)\);解码时一个生成过程,先从一个固定分布(如高斯分布\(N(0,I)\))出发,采样一个随机信号\(\epsilon\),经过简单变换称为z,再由z经过一系列复杂非线性变换生成x,有给定z下x的条件概率\(p(x|z)\)。一般的,隐空间表示z比观察数据x更抽象更精炼,客户z的维度应远小于x,从随机信号\(\epsilon\)到z只做简单变化,有时直接拿\(\epsilon\)作z,表明隐空间的信息被压缩很赶紧,任何冗余都被榨干,任何相关维度都被整合到一起,使得隐空间各维度相互独立,因此隐空间的随机点时有含义的。

将观察数据和其隐空间表示一起考虑\((x,z)\)写出联合概率分布。从推断的角度看,联合概率\(q(x,z)=q(x)q(z|x)\),其中\(q(x)\)是真实数据集上的经验数据分布,可认为已知;条件概率\(q(z|x)\)则要通过推断网络来表达;从生成的角度看\(q(x,z)=q(z)q(x|z)\),其中\(p(z)\)是事先给定的,如\(z\sim N(0,1)\),条件概率\(p(x|z)\)则通过生成网络来表达。然后我们让这两个概率分布\(q(x,z)\)\(p(x,z)\)相互拟合。当两者趋于一致时,可以确定对应的边缘概率都相等\(q(x)=p(x),q(z)=p(z)\),对应的条件概率也都相等\(q(z|x)=p(z|x), q(x|z)=p(x|z)\)。最重要的是,得到的生成往哪里过和推断网络是一对互逆的网络。

值得注意的是,这种互逆特性不同于自动编码器这种通过最小化重建误差学出的网络,后者是完全一等一的重建,而前者是具有相同隐空间分布(如风格、主题)的再创造。

除了生成网络和推断网络,还有一个判别网络。它的目标是区分来自生成网络的\((\hat x = G_{decoder}(z),z)\)和来自推断网络的\((x,\hat z = G_encoder(x))\),在GANs框架下,判别网络与生成和推断网络共享一个目标函数

\(V(D_\phi,G_{\theta_{dec}},G_{\theta_{enc}})=E_{x \sim q(x)}[log D_\phi(x,G_{\theta_{enc}}(x))]+_{z \sim p(z)}[log(1- D_\phi(G_{\theta_{dec}}(z),z))]\\=\int \int q(x)q(z|x;\theta_{enc})logD_\phi(x,z)dxdz + \int\int p(z)p(x|z;\theta_{dec})log(1-D_\phi(x,z))dxdz\)

![image-20210720234214211](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210720234214211.png)

进行的也是一场MiniMax游戏 \(\underset{\theta=(\theta_{dec},\theta_{end})}{min}\underset \phi {max}V(D_\phi, G_{\theta_{dec}},G_{\theta_{enc}})\)

实际中为了克服训练初期生成和推断网络从判别网络获取梯度不足的为题,我们采用一个梯度增强版的优化目标,将原目标函数中的\(log(1-D(G(·)))\)改成\(-log(D(G(·)))\)

13.5 IRGANA:生成离散样本

随机负采样的结果往往太简单,对模型构不成难度。我们想尽量制造易混清的例子,才能让模型的学习能力达到一个新水平 。 因此,我们不能在全集做负采样,必须在与查询词含义接近或貌似接近的地带负采样。一个新问题是,这种有偏采样下采到正样本的概率大大增加 ,我们不能简单地认为随机采样结果都是负样本 。怎么 办呢? 2017 牢的一篇论文提出了解决办法称之为 IRGAN

用GAN产生负样本

借助GANs解决上面的问题,设计一种制造负样本的生成器,词啊样一些迷惑性强的负样本,增大对判别模型的挑战。

我们把全集上随机选负样本的方法,堪称是一种低级的生成器,该生成器始终是固定的,没有学习能力。我们想设计一个更好的有学习能力的生成器,可以不断学习,生成高质量的负样本去迷惑判别器。

在信息检索场景下,我们遵循GANs的MiniMax游戏框架,设计一个生成式检索模型\(p_\theta(d|q)\)和一个判别式检索模型\(f_\phi(q,d)\),给定q,生成模型会在整个文档集中按照概率分布\(p_\theta(d|q)\)挑选出文档\(d_\theta\),它们的目标是逼近真实数据的概率分布\(p_{true}(d|q)\),进而迷惑判别器;同时,判别模型是图将生成器伪造的\((q,d_\theta)\)从过年真实的\((q,d_{true})\)中区分出来。原本的判别模型是用来鉴别与Query相关或不想管的文档,而在GAN框架下判别模型的目标发生了微妙变化,区分的是来自真实数据的相关文档和模拟产生的潜在相关文档。当然,最终的判别模型仍可鉴别与Query相关或不想管的文档。我们用一个MiniMax目标函数来统一生成模型和判别模型。

\(J^{G^*,D^*}=\underset \theta {min} \underset \phi{max} \underset{n=1}{\overset N \sum}\Big(E_{d \sim p_{true}(d|q_n)}[logD_\phi(d|q_n)] + E_{d \sim p_\theta(d|q_n)}[log(1-D_\phi(d|q_n))]\Big)\)

其中\(D_\phi(d|q_n)=Sigmoid(f_\phi(q,d))\)

这是一个交替优化的过程,固定判别器,对生成器的优化简化为:

\(\theta^* = \underset \theta {argmax} \underset{n=1}{\overset N \sum}E_{d \sim p_\theta(d|q_n)}[log(1+exp(f_\phi(q_n,d)))]\)

问题来了,如果d连续,我们沿用原GANs的套路没问题,对每个\(q_n\)生成K个文档\(\{d_k\}_{k=1}^K\),用\(\sum_{k=1}^K log(1+exp(f_\phi(q_n,d_k)))\)近似估计每个\(q_n\)下的损失函数\(E_{d \sim p_\theta(d|q_n)}[log(1+exp(f_\phi(q_n,d)))]\),损失函数对d是没有梯度的,我们拿什么传给生成器呢?

强化学习中的策略梯度方法解释了期望下损失函数的梯度的另一种形式,我们用\(J^G(q_n)\)表示给定\(q_n\)下损失函数的期望,即:\(J^G(q_n) := E_{d \sim p_\theta(d|q_n)}[log(1+exp(f_\phi(q_n,d)))]\)

我们暂不用蒙特卡洛采样去近似期望,而是直接对期望求梯度。

\(\nabla_\theta J^G(q_n) = E_{d \sim p_\theta(d|q_n)}[log(1+exp(f_\phi(q_n,d)))\nabla_\theta log p_\theta(d|q_n)]\)

梯度仍是期望的形式,是对数概率\(\log p_\theta(d|q_n)\)\(\theta\)的梯度带上权重\(log(1+exp(f_\phi(q_n,d)))\)的期望,我们再用蒙特卡洛法采样去近似它:

\(\nabla_\theta J^G(q_n) \approx \frac{1}{K} \sum_{k=1}^K log(1+exp(f_\phi(q_n,d_k)))\nabla_\theta \log p_\theta(d_k|q_n)\)

其中K维采样个数。此时我们就能估计目标函数对生成器参数\(\theta\)的梯度,因为梯度求解建立在对概率分布函数\(p_\theta(d_k|q_n)\)(强化学习中称策略函数)求梯度的基础上,所以称为策略梯度。

要得到策略梯度,我们必须显示表达\(p_\theta(d_k|q_n)\),这与原GANs的生成器不同。原GANs不需要显式给出概率分布函数的表达式,而是使用了种参数化技巧,通过对噪声信号的变换直接给出样本,好处是让生成过程变得简单,坏处是得不到概率表达式,不适用这里的生成器。这里直接输出的不是离散样本,而是每个离散样本的概率。一方面生成器的输入端不需要引入噪声信号,我们不想让概率分布函数也变成随机变量;另一方面,生成器的输出端需要增加抽样操作,依据所得概率分布生成K个样本。

13.6 SeqGAN:生成文本序列

13.6.1 如何构建生成器,生成文字组成的序列来表示句子

假定生成器产生一个定长(记T)的句子,即文字序列\(Y_{1:T}=(y_1,...,y_T),y_i \in y\),其中\(y_i\)表示一个词,y表示词库。一般的,序列模型菜哟昂RNN框架,具体单元可以是LSTM或GRU,甚至带上注意力机制。

![image-20210721104422830](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210721104422830.png)

13.6.2 训练序列生成器的优化目标通常是什么,GANs框架下又何不同?

GANs框架下又一个生成器\(G_\theta\)和一个判别器\(D_\phi\)。丢与本问题,生成器的目标是生成文字序列,高度模仿真实句子;判别器的目标是区分哪些是生成器给的句子,哪些是真实数据集中挑的句子。判别器的优化目标为:

\(\underset \phi{max}E_{Y \sim P_{data}}[\log D_\phi(Y)]+E_{Y\sim G_\theta}[log(1-D_\phi(Y))]\)

如果没有GANs,生成器是一个普通的序列生成器,通常会采取什么样的优化目标来训练?熟悉语言模型的人,会想到最大似然估计,即:

\(\underset \theta {max} \sum_{i=1}^n \log p(Y_{1:T}^{(i)};\theta)\)

这需要有一份真实数据集,\(Y_{1:T}^{(i)}=(y_1^{(i)},...,y_T^{(i)})\)表示第i个句子,生成器要最大化生成它们的总概率。从数据集到句子,可假设句子独立同分布,但是从句子到词,词与词在一句话内有强依赖性,不能假定他们相互独立,必须依链式法则做概率分解,最终得到

\(\underset \theta {max} \sum_{i=1}^n \log p(y_1^{(i)};\theta) + ... + \log p(y_T^{(i)}|y_1^{(i)},...,y_{T-1}^{(i)};\theta)\)

转变为最大化一个个对数条件概率之和。

GANS框架下,生成器的优化目标不再是一个可拆解的联合概率,在与判别器的博弈中,以假乱真欺骗判别器才是生成器的目标。判别器的评判针对一个完整句子,生成器欲知判别器的大粉,必须送上整句话,不能在生成一半时就拿到判别器打分,故不能像最大似然估计那样拆解目标式,转为每个词的优化。而且训练生成器时,也要训练判别器,对二者的训练交替进行。固定判别器,生成器的优化目标为:

\(\underset \theta {min} E_{Y \sim G_\theta}[log(1-D_\phi(Y))]\)

表面上看,这与原GANs中生成器的优化目标一样,问题在于生成器输出的事离散样本,一个由离散词组成的离散句子,不像原GANs中生成图片,每个像素都是一个连续值。原GANs用重参数化技巧构造生成器,直接对采样过程建模,不去显式刻画样本概率分布。

上一节的IRGAN,生成器生成文档序号d这类离散数据,不能用原GANs的重参数化技巧。离散数据的特性,让我们无法求解目标函数对d、d对生成器参数\(\theta\)的梯度。而且期望\(E_{d \sim G_\theta}\)的下脚标里包含参数\(\theta\),需对期望求梯度\(\nabla_\theta E_{d \sim G_\theta}[·]\),不得不显式写出概率函数\(p(d|q;\theta)\).

在SeqGAN中,生成器生成的文本序列更离散,序列每个元素都是离散的。联想强化学习理论,可把生成序列的过程看成是一连串动作,每个动作是挑选一个词,即动作\(a_t=y_t\),每步状态为已挑选词组成的序列前缀,即状态\(s_t=(y_1,...,y_{t-1})\),最后一步动作后得到整个序列\((y_1,...,y_T)\),接着,判别器收到一个完整句子,判断是真是假并打分,这个分数就是生成器的奖励。训练生成器就是要最大化奖励期望,优化目标为:

\(\underset \theta {max} E_{Y_{1:T} \sim G_\theta}[-log(1-D_\phi(Y_{1:T}))]\)

或梯度增强版:\(\underset \theta {max} E_{Y_{1:T} \sim G_\theta}[\log D_\phi(Y_{1:T})]\)

其中\(\log D_\phi(Y_{1:T})\)就是生成器的奖励

强化学习有两个重要概念,策略和动作值函数。前者记\(G_\theta(a|s)=p(a|s;\theta)\),表示状态s下选择动作a的概率,体现模型根据状态做决策的能力;后者记\(Q^\theta(s,a)\),表示状态s下做动作a后,根据策略\(G_\theta\)完成后续动作获得的总奖励期望。集合本例,前T-1个词已选的状态下选第T个词的\(Q^\theta(s,a)\)

\(Q^\theta(s=Y_{1:T-1},a=y_T)=log D_\phi(Y_{1:T})\)

总奖励期望为:\(E_{Y_{1:T} \sim G_\theta}[Q(Y_{1:T},Y_T)]=\underset {y_1}\sum G_\theta(y_1|s_0)...\underset {y_T}\sum G_\theta(y_T|Y_{1:T-1})Q^\theta(Y_{1:T-1},y_T)\)

上市包含了各序列前缀的状态下策略,以及一个最终的奖励。如果对此式做优化,序列每增加一个长度,计算复杂度将呈指数上升。我们不这么干,利用前后转台下动作值函数的递归关系:

\(Q^\theta(Y_{1:t-1},y_t) = \underset {y_{t+1}}\sum G_\theta(y_{t+1}|Y_{1:T})Q^\theta(Y_{1:T},y_{t+1})\)

将序列末端的\(Q^\theta(Y_{1:T},y_{t+1})\)转换为序列初端的\(Q^\theta(s_0,y_1)\),得到一个简化的生成器优化目标

\(J(\theta)= \underset {y_1 \in {\cal Y}}\sum G_\theta(y_1|s_0)Q^\theta(s_0,y_1)\)

该优化目标的含义是,在初始状态\(s_0\)下根据策略选择第一个词\(y_1\),并在之后依旧根据这个策略选词,总体可得奖励的期望。此时序列末端的奖励成了序列初端的长期奖励

![image-20210721113741301](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210721113741301.png)

13.6.3 有了生成器的优化目标,怎么求解它对生成器参数的梯度?

我们已有目标函数\(J(\theta)\),现在对它求梯度\(\nabla_\theta J(\theta)\),此优化目标是一个求和,里面包含两项:策略\(G_\theta\)和动作值函数\(Q^\theta\),它们都含参数\(\theta\),根据求导法则\((uv)'=u'v+uv'\),免不了求\(\nabla_\theta Q^\theta(s_0,y_1)\)\(\nabla_\theta G_\theta(y_1|s_0)\)。与IRGAN不同,IRGAN中也有两项,策略和即时奖励,但它没有长期奖励,不用计算动作值函数,而且即使奖励不依赖于策略,也就与参数\(\theta\)无关,只需求策略对\(\theta\)的梯度。但是在SeqGAN里,策略对\(\theta\)的梯度和动作值函数对\(\theta\)的梯度都要求。这里$ G_\theta(y_1|s_0)\(是一个概率函数,计算\)\nabla_\theta G_\theta(y_1|s_0)\(不难,但是如何计算\)\nabla_\theta Q^\theta(s_0,y_1)$呢?

前面已给出\(Q^\theta\)的递推公式:\(Q^\theta(Y_{1:t-1},y_t) = \underset {y_{t+1}}\sum G_\theta(y_{t+1}|Y_{1:T})Q^\theta(Y_{1:T},y_{t+1})\)

现在我们推导:

\(\nabla_\theta J(\theta)= \underset {y_1 \in {\cal Y}}\sum \Big(\nabla_\theta G_\theta(y_1|s_0)Q^\theta(s_0,y_1) + G_\theta(y_1|s_0)\nabla_\theta Q^\theta(s_0,y_1) \Big) \\=\underset {y_1 \in {\cal Y}}\sum \Big(\nabla_\theta G_\theta(y_1|s_0)Q^\theta(s_0,y_1) + G_\theta(y_1|s_0)\nabla_\theta \Big(\underset {y_1 \in {\cal Y}}\sum G_\theta(y_2|Y_{1:1})Q^\theta(Y_{1:1},y_2)\Big) \Big)\)

像上面,依次用后面的动作值\(Q^\theta(Y_{1:t},y_{t+1})\)替换前面的动作值\(Q^\theta(Y_{1:t-1},y_t)\),最终可得

\(\nabla_\theta J(\theta)= \underset{t=1} {\overset T \sum} E_{Y_{1:t-1}\sim G_\theta}\Big(\underset {y_1 \in {\cal Y}}\sum \nabla_\theta G_\theta(Y_t|Y_{1:t-1})·Q^theta(Y_{1:t-1},y_t)\Big)\)

其中记\(Y_{1:0}:=s_0\)

14、人工智能的热门应用

14.1 计算广告

![image-20210719124633582](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719124633582.png)

14.2 游戏中的人工智能

14.3 AI在自动驾驶中的应用

![image-20210719124954288](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719124954288.png)

![image-20210719125058934](/Users/jinyongliu/Library/Application Support/typora-user-images/image-20210719125058934.png)

posted @ 2021-11-10 14:08  liujy1  阅读(197)  评论(0编辑  收藏  举报