【Deep Learning学习笔记】Modeling Documents with a Deep Boltzmann Machine_Hinton_uai2013

本文介绍Hinton提出的使用深层玻尔兹曼机改进文本建模的方法。通过在复制Softmax模型基础上增加一个隐含层(top layer),但不增加额外参数,提升了模型性能。文章对比了此模型与RSM和LDA模型的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:Modeling Documents with a Deep Boltzmann Machine

作者:HInton

发表于:UAI 2013


主要内容:

这篇文章写用神经网络来对文本(文章)进行建模的。在Replicated Softmax model的基础上,增加了一个隐含层,但是并不增加参数,用来提升模型性能。与标准RSM和LDA模型相比较,作者这个模型性能更好。


1. Replicated Softmax model

实质上是一个RBM(玻尔兹曼机)模型。两层网络,如图:


左图施展开模型,两层神经网络,输入层各个节点代表词语(如果词语是用向量表示的,则每个节点代表一个向量),中间隐含层的节点是0-1随机变量,表示文本topic。整体上,沿用RBM的模型,训练算法也用CD-k算法。不过,与标准RBM有两点不同:1. 输入层的节点个数不确定——节点个数由一篇文章的词数决定,而文章长度不确定,词数也不确定;2. 也是为了解决1所带来的问题——输入层都不确定,网络权重是由输入层和隐含层共同决定的,网络权重个数也不确定,那还怎么训练?!所以作者要求,网络权重仅仅由隐含层决定,所有输入层节点与某一个隐含层节点的关联权重都相同。作者在文中称为每一篇文本建立一个RBM,有点言过其实了——就是每个文章的长度不同、输入节点数目不同,网络结构显得不同罢了。

右图是另一种解释方式,即只有一个输入节点,与各个隐含节点相关联。这个输入节点表示一个随机变量,该随机变量sample N次(N是文本长度)。注意,如果每个词语用向量表示,则输入层(单个词语)与隐含层的节点还是用二维矩阵表示。

根据右图,我们也能了解该模型的训练方法。初步的,文本中每个词语相当于右图输入节点sample的结果,这些词语sample的结果(如N个词语表示向量)共同作用于隐含层,此时再套用CD-k算法,就可以训练了。

记得朴素贝叶斯用于文本分类在实现中也有两种模型,一种是标准模型,又称为多项式模型;另一种是专门处理变长文本的,叫做贝努利模型,实际操作也就是随机变量sample N次(N是文本长度),由每一次sample的结果来决定文本的分类。


2. Over-Replicated Softmax Model

作者在Replicated Softmax Model的基础上提出的一种模型,在隐含层基础上增加了一个top layer(实际上也是一个隐含层)。但是隐含层和top layer之间的权重沿用隐含层和输入层之间的权重,所以总体参数个数并没有增加。如图:


很奇葩的模型。隐含层和输入层之间也用RBM逻辑,隐含层和top layer之间也是RBM逻辑,都是auto-encoder。top layer的节点个数严格等于隐含层的节点个数,权重也都一样。思路就是用top layer的auto-encoder来修正隐含层和输入层的训练结果。三层网络,两个auto-encoder,算是stack auto-encoder了,正常应该用两个CD-k分别训练。不过文章中对网络权重的限制,使得用一个CD-k就能解决。

总有疑问就是作者为什么这么做(增加了一个隐含层)?如果这么做效果好的话,为什么不多增加几个隐含层?


3. 实验

在文本perplexity和信息检索上做的实验。没细看,怎么把topic转成词语ngram的概率,且计算perplexity的。


由于神经网络输入输出的形式,用来表示文本还是不常见的。不过最近Deep Learning这么火,自然连Hinton这样的牛人都要去尝试。这篇文章的思路还是auto-encoder的思路。


4. 再说两句

关于Replicated Softmax model的原始文章是Hinton在2009年在NIPS会议上的一个文章,标题为“Replicated Softmax: an Undirected Topic Model”。基本思路就上上面说的那样。不过当时Hinton没有用CD-k训练算法,而是用了一种基于蒙塔卡罗抽样(其实CD-k也是一种简化的蒙塔卡罗抽样算法)的AIS算法。AIS是把Replicated Softmax model看成了一种产生式模型。



### 关于DeepFace模块中`build_model`属性缺失的解决方案 在处理 `deepface` 模块中的 `AttributeError: module 'deepface' has no attribute 'build_model'` 错误时,通常是因为以下几个原因之一: 1. **版本不匹配**:当前安装的 `deepface` 版本可能较旧或者未更新至支持该功能的最新版[^4]。 2. **API变更**:如果开发者更改了 API 或者重构了内部实现,则可能导致某些函数名被替换或移除[^5]。 #### 解决方案一:升级 deepface 到最新版本 确保已安装的是最新的稳定版本。可以通过以下命令完成: ```bash pip install --upgrade deepface ``` 此操作会自动下载并安装最高版本号的 deepface 库。之后重新运行脚本来验证问题是否解决[^6]。 #### 解决方案二:手动调用替代方法构建模型 假如即使更新后仍然遇到相同错误,那么可能是由于官方文档尚未同步更新所致。此时可以尝试直接加载预定义好的模型之一,例如 FaceNet, VGG-Face 等。下面是一个示例代码片段用于演示如何实例化特定类型的识别模型而不依赖于不存在的方法: ```python from deepface import DeepFace model_name = "VggFace" model = DeepFace.build_model(model_name=model_name) print(f"{model_name} model was built successfully.") ``` 注意这里使用的正是 `DeepFace.build_model()` 函数而非单独访问某个子模块下的同名成员变量[^7]。 #### 解决方案三:自定义导入路径 当常规手段均失效时还可以考虑采用更激进的方式——即自行克隆项目源码仓库到本地后再做适当修改满足需求前再编译成.whl文件发布回环境中去使用;不过这种方式一般仅适用于高级用户并且只有在确认无法通过正常渠道获取修复补丁的前提下才推荐这么做[^8]。 --- ### 注意事项 - 如果以上任何一种办法都不能奏效的话,请仔细检查 Python 脚本开头处是否存在拼写错误或者其他形式上的失误导致最终定位不到目标对象的情况发生。 - 同时也建议查看项目的 GitHub Issues 页面寻找是否有其他人报告过相似的问题以及相应的讨论记录可供参考[^9]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值