在上一篇文章中,小夕讲述了逻辑回归为了抗衡贝叶斯网,也开始了自己的进化。然而令我们没有想到的是,逻辑回归最终竟然进化成了一个生成式模型——受限玻尔兹曼机(RBM),也就是变成了敌方(生成式模型)的武器。
意外得到RBM的朴素贝叶斯万分惊喜,并且燃起了将它自己做的贝叶斯网与敌方送的RBM融合的冲动!
那么朴素贝叶斯的疯狂想法能不能实现呢?
![v2-7429becd51ead3c3c4fa0fdf00756795_b.png](https://i-blog.csdnimg.cn/blog_migrate/bd1623bfea328b91f6c3d7f61c8cfe63.png)
![v2-27c2f2b98754751d4e48e439de5bdc27_b.png](https://i-blog.csdnimg.cn/blog_migrate/5118c09e88aadc410df8efc0e5b5464a.png)
朴素贝叶斯看到自己的肖像后,深感自己的朴(弱)素(鸡),于是进行了进化——抛弃自己的条件独立性假设,建模特征向量X内部各个维度的条件依赖关系。于是,朴素贝叶斯进化出了下图的贝叶斯网:
![v2-82779aa2b66bf0647cb4d473a6607ec3_b.png](https://i-blog.csdnimg.cn/blog_migrate/26a7ccbaf5375c995e3de0df9b08a4aa.png)
在上一篇文章《逻辑回归到受限玻尔兹曼机》中,RBM相比逻辑回归有了非常大的进步,可以更加合理的计算每个样本与每个类别的“亲密度”,也就是与之关联的概率图模型中能量函数E(v1,v2)的大小。
RBM看起来这么复杂,那么灵魂画师夕小瑶能不能像对贝叶斯一样,给RBM画一个肖像呢?
![v2-7429becd51ead3c3c4fa0fdf00756795_b.png](https://i-blog.csdnimg.cn/blog_migrate/bd1623bfea328b91f6c3d7f61c8cfe63.png)
RBM的肖像?
当然可以啦~从上一篇文章对能量函数E(v1,v2)的定义来看,这个函数计算向量v1和v2的“亲密度”时是没有方向的,也就是说E(v1,v2)一定等于E(v2,v1)的。所以对于图中的任意两个点来说,他们之间的边是没有方向的(注意区分朴素贝叶斯和贝叶斯网中的有向边哦)。所以对于RBM中有连接的两个点:
![v2-c23cb3d31deaecac4c503d33e58e3c6f_b.png](https://i-blog.csdnimg.cn/blog_migrate/a9b5b63dbe1c80be27d99ebb45a367e0.png)
边是无向的,并且用一个蓝色小方块表示用能量函数连接。
按照上一篇文章的表述,RBM中的一个参数——矩阵W连接了特征向量X中的每个维度与类别向量Y的每个维度,因此RBM应该是下面这个样子的:
![v2-833b058257c141e3139e34ace1fb6a5d_b.png](https://i-blog.csdnimg.cn/blog_migrate/5d1117e4026fcfd84838108042fc59f4.png)
诶?有没有觉得。。。还不够乱!(好丧心病狂的想法
回想一下,从朴素贝叶斯到贝叶斯网就是经历了将X内部的各个维度(各个随机变量)之间的关系也建模了!而RBM则是跟朴素贝叶斯一样的,对X内部(更一般化的说还包括Y内部)的随机变量是有独立性假设的。而在《朴素贝叶斯到贝叶斯网》中已经详细叙述了这个独立性假设在很多情况下是非常致命的!
所以,才不要什么人为的假设呢~解开玻尔兹曼机身上的枷锁吧~让X内部以及Y内部的随机变量也可以随意的交流(即,使模型具备描述X和Y内部各随机变量之间条件依赖性关系的能力,只不过这里直接描述了双向的条件依赖性关系)。所以从图中看是这样子的:
![v2-31fcef2a0b3902d6129d1d3b7a23edec_b.png](https://i-blog.csdnimg.cn/blog_migrate/f542ba0aebc5b497761db45f46bf88a0.png)
玻尔兹曼机:喵喵喵~最喜欢自由的感觉啦~
那么在数学上怎么描述呢?当然可以直接照搬RBM中的做法啦。
RBM的假设函数中的能量函数:
![E(v1,v2)=-(b^Tv1+c^Tv2+v1^T\cdot W\cdot v2)](https://i-blog.csdnimg.cn/blog_migrate/1dc060f5942fc9819ab32b2950270756.png)
用一个矩阵W连接了X所有维度与Y的所有维度。因此要连接X内部所有维度和Y内部所有维度的话,只需要:
![v2-d1bd6fdc102fff33317086ce5600040b_b.png](https://i-blog.csdnimg.cn/blog_migrate/9621cdf5f094f0e28f79b5edffaeee04.png)
相信聪明的你很轻松就看懂啦,这里用两个与W同理的矩阵R、S来分别连接v1内部的各维度以及v2内部的各维度。
所以玻尔兹曼机(BM)的假设函数跟RBM的形式一样,都是
![v2-2fbb89787e10085fdf32f28ac0e417f2_b.png](https://i-blog.csdnimg.cn/blog_migrate/b78876c1a42526ccd90b558aa84ed09d.png)
其中配分函数Z:
![v2-e86b538be2f7e73b20e5e2186d585830_b.png](https://i-blog.csdnimg.cn/blog_migrate/4889cbea4be9650313faf579d0bdee56.png)
只是将里面的能量函数换成上面的更丧心病狂的形式了而已~
![v2-7429becd51ead3c3c4fa0fdf00756795_b.png](https://i-blog.csdnimg.cn/blog_migrate/bd1623bfea328b91f6c3d7f61c8cfe63.png)
而根据《一般化机器学习》,我们已经理解了玻尔兹曼机(BM)的假设函数,那么还需要探索如何训练这个自由而强大的模型。而如何训练,即寻找或设计一个合适的损失函数,然后选择合适的最优化算法来最小化损失函数从而得到model。
然而,自由而随意所带来的代价就是:
非!常!难!以!训!练!
设想一下,假如损失函数我们就用最通用的似然函数(诶诶?是不是还缺一篇写损失函数的文章?没事没事,还好在《EM算法》中有讲似然函数),那么任何主流的最优化算法都会计算量爆炸(想象一下对玻尔兹曼机的假设函数求导,尤其是对配分函数这个恐怖大分母!),哪怕是最简单的梯度下降法(当然这里最大化似然函数就是梯度上升啦),都会使得工程上训练BM很不现实。
那么怎么办呢?
一个主流的解决办法是使用一种改良的梯度上升法——MCMC算法来最大化似然函数。
这个算法的由来就是一个纯数学过程了,需要一篇很长很崩溃的堆砌公式的文章才能讲清楚,所以。。。详情可以参考《Deep Learning》(中文版链接exacity/deeplearningbook-chinese)的第18章啦( ̄∇ ̄),数学不太好的慎入哦(小夕诚实的讲,小夕也没有很清晰的理解透...所以现在讲的肯定不如书上好~)
![v2-7429becd51ead3c3c4fa0fdf00756795_b.png](https://i-blog.csdnimg.cn/blog_migrate/bd1623bfea328b91f6c3d7f61c8cfe63.png)
诶诶?爱思考的小夕又有疑问惹:
首先,这就是玻尔兹曼机的全部潜力了吗?怎么看着能量函数有点眼熟呢。。。有点像,神经张量网络(NTN)?诶?会不会跟神经网络有关系呢?会不会。。。会不会跟深度学习碰撞出火花?叫做深度玻尔兹曼机?
而且,既然贝叶斯网络是用有方向的边去描述的,玻尔兹曼机是用无方向的边去描述的,而且这两者看起来都很自由~那这两个。。。哪个更好呢?
就让小夕站在概率图的高度来描述一场新的战争吧~