2019年2月12日星期二

why-what-how方式的机器学习总结之四

玻尔兹曼机


why


1.之前看到的神经网络基本都可以表示成有向图的形式,那必然也有无向图的模型,这个就是玻尔兹曼机了。









2.神经网络在做梯度下降的时候有一定概率陷入局部极小值,而玻尔兹曼机训练的时候采用一种叫模拟退火的方法可以避免这种情况。详情可见随机神经网络之玻尔兹曼机

3.对玻尔兹曼机加上一些限制后的受限玻尔兹曼机广泛的应用于降维,特征提取,自编码器以及深度信念网络等等。

what


1.玻尔兹曼分布,(1)BM 网络处于某一状态(P(x=α))下的概率主要取决于此状态下的能量 Eα,能量越低,出现的概率越大。(2)BM 网络处于某一状态的概率还取决于温度参数 T,温度越高,不同状态出现的概率越接近,网络能量也较易跳出局部最小而搜索全局最小,温度低的时候相反。详情见熵的理解(玻尔兹曼分布)

2.玻尔兹曼机(BM)又称作随机神经网络

(1)BM的神经元只有两种输出状态0和1

(2)BM的节点可以分为输入节点,输出节点和隐藏节点,但是这些节点之间是全连接的而且没有没有明显的层次,连接形式可以如下图。








(3)BM神经元输入和输出的关系类似于逻辑回归,其中netj是输入,






但是受温度T的影响较大,下图可以看出对同一输入,温度高的时候输出0和1的概率差距较小也就是随机性大,温度低的时候相反









(4)能量函数如下图







当第j个神经元变更状态能量变化如下




(5)模拟退火机制,根据随机神经网络之玻尔兹曼机里面的讨论无论输入大于0还是小于0,ΔE都是大概率减少的,但是比如输入大于0时也有可能状态为0如果原来状态为1就可能ΔE>0,网络就有可能往能量升高的方向走,而且系统能量越高的时候这样的概率越大,这就是模拟退火机制。

(6)BM当然是符合玻尔兹曼分布的,任意两个状态出现的概率与之对应能量之间的关系,




(7)根据节点是否能同时是输入和输出节点,BM又分为自联想型和异联想型。

(8)BM的典型应用场景还没有找到相关资料,先存疑。

3.受限玻尔兹曼机(RBM)

(1)受限体现在RBM是二分图,层内无连接,可参考受限玻尔兹曼机(Restricted Boltzmann Machine)分析











(2)RBM的网络结构,如下图分为隐藏层和可见层,详情可参考受限玻尔兹曼机(RBM)学习笔记系列文章以及深度学习之受限玻尔兹曼机










(3)RBM的能量函数,





这个能量函数实际上是表示v和h的一种亲密关系(见从逻辑回归到玻尔兹曼机)

(4)v和h的联合概率分布,其中Z被称作配分函数,比较难计算




这里我比较疑惑是怎么从能量函数到概率分布的,感觉用熵和状态数应该能推导出来。

我们训练RBM的时候拿到的数据集合是




所以我们需要知道观察数据v的概率分布,这是个边缘分布




还可以得到可见层上所有节点状态已知的时候,隐藏层某个节点被激活(状态为1)的概率




(5)接下来是损失函数和梯度下降法






求偏导数有,












上面的式子中对P(v)的求和计算复杂度是指数级的所以不能直接算,如果使用吉布斯采样来做近似计算采样计算量也相当大,所以就引出了对比散度算法(CD)。


(6)对比散度算法

对比散度算法的基本思路是让MCMC以训练数据的状态作为起点,这样只需要很少的跳转就能抵达RBM的分布了。细节见受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法


(7)RBM应用于推荐系统,输入到可见层的是打分信息通过RBM把隐含的特征输出到隐藏层,再把隐含特征解码到可见层以达到推荐的效果。有两个问题,RBM的节点应该都是0-1变量,用户的评分一般很稀疏怎么处理确实评分。解决办法是修改RBM的模型,可见层使用Softmax神经元,对于没有评分的项使用特殊神经元,如下图(更多细节看基于深度学习的推荐系统之受限玻尔兹曼机)。













(8)RBM如果只能是0-1的总感觉使用会很不方便,所以有实数值的RBM,0-1RBM节点的值相当于一个伯努利分布而实数值RBM节点的值相当于一个高斯分布。从能量函数的定义能看出来,





更详细的推导就不写了,可以参考受限玻尔兹曼机(RBM)的非二值情况的推导二值RBM与实值RBM理论及代码解读

(9)深度玻尔兹曼机(DBM)加深RBM的层次就变成了DBM,结构如下













DBM训练的方法有两种,一种就是直接对整个分布求导,求导的过程中用到了变分贝叶斯+gibbs采样,第二种是逐层贪婪无监督学习算法。

(10)深度置信网络(DBN)把DBM稍加改变靠近可见层的地方变成有向图就变成了著名的DBN了。










DBN的应用可以看看这篇DBN【深度置信网络】【受限玻尔兹曼机深层】详解

变分法


why


经典的case是最速降线问题,高点a和低点b之间有任意多种线连接,可以是直线也可以是弧线,那每条线都可以看成一个函数,有一个小球靠着重力加速度从a运动到b,问沿着怎样的弧线最快?

上面的问题公式化一下就是求下式的极值,





上面的函数中y是一个函数,要求这样的极值就引出了泛函和变分法。抽象一点说变分问题在数学上的定义通俗地可以理解为泛函的极值问题(参考最速降线的数学模型—变分法)。


what


1.泛函的概念,设对于(某一函数集合内的)任意一个函数y(x),有另一个数J[y]与之对应,则称J[y]为y(x)的泛函。泛函可以看成是函数概念的推广。 这里的函数集合,即泛函的定义域,通常要求y(x) 满足一定的边界条件,并且具有连续的二阶导数.这样的y(x)称为可取函数。

2.注意不要把泛函和函数复合g=g(f(x))弄混,函数复合g还是和x对应的,而泛函g只和f发生关系。

3.泛函极值的概念,当变量函数为y(x)时,泛函J[y]取极大值,对于极值函数y(x)及其“附近”的变量函数y(x)+δy(x),恒有J[y+δy]≤J[y]; 这里自变量是y,δy(x) 称为函数y(x)的变分。

4.泛函求极值和普通函数求极值类似,也是求导等于零,泛函J[y]取到极大值的必要条件是一级变分δJ[y]为0,其微分形式一般为二阶常微分方程,即Euler-Largange方程。





how


1.这里记录一个变分法令我感觉很神奇的应用,来自变分法和变分贝叶斯推断

首先给出一个概率质量分布函数f(x),定义该分布下的信息熵为:




由于f(x)是个概率所以有




概率分布总有期望和方差,给出定义






使用拉格朗日乘子法求极值,并引入变分法推导(过程省略),可以得到






因此可以得出当概率质量分布f(x)为正态分布时,信息熵最大,大自然偏爱正态分布,是不是很神奇?!

2.变分贝叶斯推断

(1)要解决的问题和吉布斯采样以及EM算法比较类似,也是求隐变量的方法。吉布斯采样有一定随机性而对比较复杂的后验概率形式EM算法计算复杂度会太高。

(2)计算过程有三个要素,用KL散度对原始分布求近似,用独立场假设化简,用变分法求极值(但实际用了kl散度等于0)。详细内容可看变分贝叶斯算法理解与推导

变分自编码器(VAE)


why


普通自编码器做特征提取以及数据重构是ok的,但是想做数据生成,比如用提取到的特征去生成新的数据比如生成音乐,生成图片等等却往往做的不好。主要的原因是普通自编码器提取的特征是不连续的,而VAE的隐含空间被设计成连续的,所以VAE就比较擅长做图片生成音乐生成这些工作(较详细的可以看是什么让变分自编码器成为如此成功的多媒体生成工具呢?以及论文最爱的变分自编码器,不了解一下?)。


what



1.VAE希望通过隐变量z分解描述数据X的分布





2.模型大致的过程











和一些简单自编码器模型直接把z看做一个确定的隐变量不一样,VAE把z看成一个高斯分布从而提高了解码时候的鲁棒性。

3.更详细的过程
















模型认为一个训练样本和隐变量的关系是这样的,先得到一套独立的均值和方差参数,再用这两个参数对应的高斯分布生成隐变量z。模型的一个基本假设是p(z|x)是正态分布。

这里均值和方差都是未知变量,所以两个神经网络来拟合




VAE还让所有的p(Z|X)都向标准正态分布看齐,这样就防止了噪声为零,同时保证了模型具有生成能力。




做法就是加入了额外的损失项,




4.重参数化技巧,主要是在模型的计算过程中需要用p(z|x)采样出一个z来,而做优化的过程中需要求导,采样的动作又不可导但采样的结果是可导的,所以就做了变换。



5.损失函数计算(参考变分自编码器),生成模型中有一个难点是我不知道样本数据的真是分布,所以我也没法判断训练分布和真实分布之间的相似度。我们先假设p(x)已经存在了。
那我们要优化的对数最大似然函数是






我们需要最小化训练模型q和真实模型p的kl散度,经过变换我们转过来求对数似然函数的变分下界,






然后用蒙特卡洛+minibatch来做估算,






上面的式子还有不少未知变量,我们再把先验知识加入进来








最后有





6.VAE感觉牛逼的地方是并没有直接假设数据的分布,只是对数据做了一些相关假设,真正有泛函的感觉。

生成式对抗网络(GAN)


why


GAN的用途和VAE比较类似,也是可以学习特征然后进行以假乱真的图片生成,音乐生成等等,GAN生成图片的时候没有VAE可能会碰到的模糊问题。

GAN有一个较大的优势是不用计算配分函数,不用做采样这些特别麻烦的事情。

GAN要解决的最大的问题和VAE一样,不知道目标分布该是什么,所以也不知道该怎么写损失函数。GAN的思路是不知道没关系,就把未知的东东当成一个神经网络,慢慢训练就知道了。GAN网络和它的名字“干”一样,主要思路就是搞一个生成网络G和一个判别网络D然后让两个网络干起来,最后干不动了,就意味着模型训练好了。

what



1.主要结构如下图,











左下的神经网络G是生成网络用于生成假样本集,右边的神经网络D是判别网络用来判断样本是否为真,训练过程就是反复生成和判别的过程,生成过程尽量让D(G(z))接近1,判别的时候尽量让D(G(z))接近0,直到两个网络都饱和输出0.5的概率。

2.形式化定义就是轮换D和G,D的时候最大化G的时候最小化下式





自然语言处理相关的一些杂记


Word Embedding


1.表示文字最简单自然的方式是one hot(来自词向量与Embedding究竟是怎么回事?)








2.Word Embedding简化运算是因为把one hot的矩阵运算简化成了查表操作。








Word2vec


1.目的是把单词转化成向量,比如cat和kitten是近义词而dog不是,经过Word2vec处理,希望能得到cat+dog-kitten近似等于puppy的结论。在word2vec模型中会通过,embedding进行空间映射,得到最终的embedded vector(详细可看一文详解 Word2vec 之 Skip-Gram 模型(结构篇))。

2.常见模型有两种Skip-Gram和CBOW,这里也仅说说Skip-Gram

3.word2vec有一个基本假设是如果两个词有相似的上下文,那这两个词的embedding vector也会比较相似,比如Kitty climbed the tree和Cat climbed the tree。

4.在上下文假设中我们也不能把所有的上下文全拿来训练,所以有类似skip_window=2这样的参数,window内的单词对被拿来作为输入













5.神经网络结构如下,输入层是词one-hot方式的表达,中间的隐藏层是词向量查找矩阵也是我们模型训练的真正目标,输出层是一个softmax代表输入词相邻词的概率













6.所以说Skip-Gram模型是在用input-word来预测上下文,如下图













情感分析


1.本质上是输入一串词之后的一个分类问题。

2.大致步骤是先做doc2vec,然后把串词放入一个lstm,最后输出softmax(比如正面,负面,中性,未提及)。详细过程看自然语言处理6 -- 情感分析

注意力机制


1.场景,句子翻译Tom chase Jerry,要翻译Jerry的时候没有注意力机制每个词的共享是相同的,而有了注意力机制就有了权重(Tom,0.3)(Chase,0.2) (Jerry,0.5)。

2.注意力机制对目标的每个不同位置用一个不同的中间表示ci,ci用原来的中间表示再加权求和生成。









3.本质上可以把注意力机制看成一种模糊查询,对一个查询所有的key都会有贡献,但权重不一样。

4.lstm也能记录序列状态信息,但是序列太长的时候依然会丢失状态,注意力机制就不会有这样的问题,而突出强关联。

5.详细介绍请看深度学习中的注意力机制

6.如果计算权重的时候关注的是序列和自身的关系就是自注意力机制,Transformer 一篇就够了(一):Self-attenstion。不同的attention捕捉不同的关系称作multi head self attention

7.Transformer,其基本结构是Transformer Block的n次堆叠,而Block是由self attention layer+normalization layer+feed forward layer组成Transformer 一篇就够了(三): Transformer 的实现

淘宝标签词的实现


1.首先要做词性标注,然后提取出名词短语和多个形容词组成的短语。

2.用word2vec把这些短语向量化,然后再用聚类方式生成主题。


一点点强化学习



why


很多机器学习算法都是先准备好训练数据再进行训练得出模型,但是在自动驾驶这样的场景里需要智能体(Agent)以“试错”的方式进行学习,通过与环境进行交互获得的奖赏指导行为,需要只能体在环境中获得知识改进行动方案以适应环境。

what


1.基本思路是设计一个路径相关的回报函数,智能体需要找到一条回报最大的路径。是个优化问题。

2.一种较简单的模型叫马尔科夫决策过程(MDP),其简单在于马尔科夫性即系统的下一个状态仅与系统当前的状态以及采取的动作相关,和之前的状态和动作均无关。

3.MDP由一个五元组构成 S代表系统状态集,A代表一组动作,P代表采取动作后的转移概率,γ是阻尼系数,R是回报函数。MDP的动态过程如下图,




how



1.回报函数的递推式,其中π代表策略,是S->A的函数



2.我们求V的目的就是想找到一个当前状态s下,最优的行动策略π,定义最优的V*如下





对应最优的π*如下





3.求解上面最优化问题的方法可以用策略迭代法或者值迭代法,下图是值迭代









4.还有一个问题是之前讨论的算法是Psa,R(s)已知的情况,但实际应用中可能需要从数据总估算这些参数(S,A,γ通常能知道)。

Psa一般通过大量采样的方式得到,分子是从s状态执行动作a后到达s’的次数,分母是在状态s时,执行a的次数。两者相除就是在s状态下执行a后,会转移到s’的概率






同样,如果回报函数未知,那么我们认为R(s)为在s状态下已经观测到的回报均值。

参考资料


《机器学习》 周志华
《深度学习》 Ian Goodfellow
《统计学习方法》 李航
蒙特卡洛(Monte Carlo)法求定积分
逆采样(Inverse Sampling)和拒绝采样(Reject Sampling)原理详解
随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
LSA,pLSA原理及其代码实现
神经网络--反向传播详细推导过程
深度学习:神经网络中的前向传播和反向传播算法推导
神经网络浅讲:从神经元到深度学习
深度学习究竟是个啥?
浅谈深度学习分布式表示以及不同结构
Batch Normalization导读
tf.clip_by_global_norm理解
第四门课 卷积神经网络
如何通俗易懂地解释卷积?
如何通俗易懂地解释卷积?
循环神经网络(RNN)原理通俗解释
循环神经网络(RNN)模型与前向反向传播算法
LSTM理论推导总结
深度学习笔记(八)LSTM长短期记忆网络
随机神经网络之玻尔兹曼机
受限玻尔兹曼机(Restricted Boltzmann Machine)分析
受限玻尔兹曼机(RBM)学习笔记(二)网络结构
深度学习之受限玻尔兹曼机
受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法
基于深度学习的推荐系统之受限玻尔兹曼机
关于机器学习中的受限玻尔兹曼机(RBM)的非二值情况的推导
二值RBM与实值RBM理论及代码解读
DBN【深度置信网络】【受限玻尔兹曼机深层】详解
最速降线的数学模型—变分法
变分贝叶斯算法理解与推导
变分法和变分贝叶斯推断
是什么让变分自编码器成为如此成功的多媒体生成工具呢?
论文最爱的变分自编码器,不了解一下?
变分自编码器(一):原来是这么一回事
变分自编码器的原理和程序解析
变分自编码器(VAEs)
GAN(生成对抗网络)学习笔记
词向量与Embedding究竟是怎么回事?
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
自然语言处理6 -- 情感分析
深度学习中的注意力机制
【机器学习-斯坦福】学习笔记21——增强学习