判别模型的玻尔兹曼机论文源码解读
Posted 风翼冰舟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判别模型的玻尔兹曼机论文源码解读相关的知识,希望对你有一定的参考价值。
前言
三号要去参加CAD/CG会议,投了一篇关于使用生成模型和判别模型的RBM做运动捕捉数据风格识别的论文。这段时间一直搞卷积RBM了,差点把原来的实验内容都忘记了,这里复习一下判别式玻尔兹曼机的训练流程。
国际惯例,贴几个链接:
论文1——Energy Based Learning Classification task using Restricted Boltzmann Machines
链接:http://pan.baidu.com/s/1i5foeEx 密码:flq7
论文2——Classification using Discriminative Restricted Boltzmann Machines
链接:http://pan.baidu.com/s/1qYGT9z2 密码:hebj
代码——RBM-on-Classification
github:https://github.com/atzenigor/RBM-on-Classification
链接:http://pan.baidu.com/s/1gf41MKz 密码:z3jq
数据——mnist手写数字数据库
链接:http://pan.baidu.com/s/1boGxPxX 密码:0l25
本文主要是结合论文1及其代码对判别式限制玻尔兹曼机进行解读,代码主要使用在手写数字识别mnist数据库中。
先画一下代码对应的模型结构图
第一步
从主函数入手:trainingClassRBM.m
首先是一系列的初始化,就不说了,主要包含学习率、动量项、权重衰减、分批大小、训练次数,随机初始化权重和偏置等。这里主要关注两行程序:
discrim = 1; % 1 to activate the discriminative learning, 0 otherwise
freeenerg = 1; % if discrim is zero but one want to compute the free energy
对于这两句话,可以翻开论文1的第五章(第11页)说过这样一句话:
大概意思就是,为了解决特定的分类问题,我们可以简单地定义一个目标函数去进行最小化,进而得到RBM的模型参数。而目标函数可以选择三种:
1、生成模型的训练目标函数
2、判别模型的训练目标函数
3、混合模型的训练目标函数
显然,根据代码,可以发现程序使用了变量discrim来控制是否使用第三种方法,如果discrim=1则使用第三种目标函数,如果discrim=0则使用第一种目标函数。
此后也进行了数据的分批处理和验证集的选取
data_valid = data(end - valid_size + 1 : end, : );
label_valid = labels(end - valid_size + 1 : end, : );
%convert y in the notetion one out of number of classes
lab = boolean(set_y(labels(1:end - valid_size,:), num_class));
%convert the dataset in batches
[batch_data, batch_labels , batch_size] = ...
createBatches(data(1:end - valid_size,:), lab, num_batch);
第二步
正式进入第一层for循环,用于控制训练次数,每次训练完毕都会输出相应的几个信息,包含重构误差,验证集误差,自由能变化。
sum_rec_error = 0;
sum_class_error = 0;
sum_tot_free_energ = 0;
下一句就是在进行第五次迭代时候,将动量项改变
if i_epoch == 5
momentum = final_momentum;
end;
并且使用模拟退火(simulated annealing)算法降低学习率
%simulated annealing
gamma = (init_gamma) / (1 + (i_epoch - 1) / tau);
第三步
正式进入内层循环对数据的分配处理,每次只取一批数据,大小为100(最后一批大小根据情况而定)
x = batch_data{iBatch}';
y = batch_labels{iBatch}';
batch_size=size(x,2);
进入生成模型的计算,即计算第一步提到的第一个目标函数对应的模型参数更新。
首先计算隐藏层的激活概率值P(h|x,y),这就是在RBM中常说的positive phase根据文章可以得到
以上是关于判别模型的玻尔兹曼机论文源码解读的主要内容,如果未能解决你的问题,请参考以下文章