背影
DBN神经网络的原理
DBN神经网络的定义
受限玻尔兹曼机(RBM)
支持向量机SVM的原理
DBN+SVM的分类预测
基本结构
主要参数
MATALB代码
结果图
展望
DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,本文用DBN提取特征,用SVM分类,实现二者长处互补
深度信念网络,DBN,Deep Belief Nets,神经网络的一种。既可以用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器来使用。
从非监督学习来讲,其目的是尽可能地保留原始特征的特点,同时降低特征的维度。从监督学习来讲,其目的在于使得分类错误率尽可能地小。而不论是监督学习还是非监督学习,DBN的本质都是Feature Learning的过程,即如何得到更好的特征表达。
作为神经网络,神经元自然是其必不可少的组成部分。DBN由若干层神经元构成,组成元件是受限玻尔兹曼机(RBM)。
RBM是一种神经感知器,由一个显层和一个隐层构成,显层与隐层的神经元之间为双向全连接,在RBM中,任意两个相连的神经元之间有一个权值w表示其连接强度,每个神经元自身有一个偏置系数b(对显层神经元)和c(对隐层神经元)来表示其自身权重。
这样,就可以用下面函数表示一个RBM的能量:
在一个RBM中,隐层神经元 被激活的概率:
p(v/h) = sum(p(vi/h))
由于是双向连接,显层神经元同样能被隐层神经元激活:
其中, 为 Sigmoid 函数,也可以设定为其他函数。
值得注意的是,当 为线性函数时,DBN和PCA(主成分分析)是等价的。
同一层神经元之间具有独立性,所以概率密度亦然满足独立性,故得到下式:
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
(1)支持向量机(Support Vector Machine, SVM)是一种对数据进行二分类的广义线性分类器,其分类边界是对学习样本求解的最大间隔超平面。
(2)SVM使用铰链损失函数计算经验风险并在求解系统中加入了正则化项以优化结构风险,是一个具有稀疏性和稳健性的分类器 。
(3)SVM可以通过引入核函数进行非线性分类。
1,线性可分性
3,核函数
创建经典的三层的DBN神经网络提取特征,SVM分类输出
maxepoch=1000;%训练rbm的次数
numhid=130; numpen=200; numpen2=10;%dbn隐含层的节点数
disp(‘构建一个3层的深度置信网络DBN用于特征提取’);
tic;%计时开始
%% 本程序用于煤炭产能预测,所属回归预测类
clear all
close all
clc
format compact
%% 加载数据
load maydata.mat
[input,inputps]=mapminmax(num1’,0,1);
[output,outputns]=mapminmax(num2’,0,1);
input=input’;
output=output’;
%% 划分数据集
%打乱样本 随机抽取1000组作为训练样本,剩下200组作为测试样本
nn= randperm(3120);
% n = 1:400;
num2 = num2(nn);
P=input(nn,:);
% T_test=output((1:400);
clear data m n input output
%% 训练样本构造,分块,批量
numcases=3120;%每块数据集的样本个数
numdims=size(P,2);%单个样本的大小
numbatches=1;%将100组训练样本,分成5批,每一批200组
% 训练数据
for i=1:numbatches
train=P((i-1)numcases+1:inumcases,:);
batchdata(:,:,i)=train;
end%将分好的10组数据都放在batchdata中
%% 2.训练RBM
%% rbm参数
maxepoch=2000;%训练rbm的次数
numhid=30; numpen=20; numpen2=9;%dbn隐含层的节点数
disp(‘构建一个3层的深度置信网络DBN用于特征提取’);
%% 无监督预训练
fprintf(1,'Pretraining Layer 1 with RBM: %d-%d ',numdims,numhid);
restart=1;
rbm1;%使用cd-k训练rbm,注意此rbm的可视层不是二值的,而隐含层是二值的
vishid1=vishid;
hidrecbiases=hidbiases;
fprintf(1,'\nPretraining Layer 2 with RBM: %d-%d ',numhid,numpen);
batchdata=batchposhidprobs;%将第一个RBM的隐含层的输出作为第二个RBM 的输入
numhid=numpen;%将numpen的值赋给numhid,作为第二个rbm隐含层的节点数
restart=1;
rbm1;
hidpen=vishid;
penrecbiases=hidbiases;
hidgenbiases=visbiases;
fprintf(1,'\nPretraining Layer 3 with RBM: %d-%d\n ',numpen,numpen2);%200-100
batchdata=batchposhidprobs;%显然,将第二个RBM的输出作为第三个RBM的输入
numhid=numpen2;%第三个隐含层的节点数
restart=1;
rbm1;
hidpen2=vishid;
penrecbiases2=hidbiases;
hidgenbiases2=visbiases;
%%%% 将预训练好的RBM用于初始化DBN权重%%%%%%%%%
w1=[vishid1; hidrecbiases]; %
w2=[hidpen; penrecbiases]; %
w3=[hidpen2; penrecbiases2];%
%% 有监督回归层训练
%=训练过程===========%
%DBN无监督用于提取特征,需要加上有监督的回归层========%
%由于含有偏执,所以实际数据应该包含一列全为1的数,即w0x0+w1x1+…+wnxn 其中x0为1的向量 w0为偏置b
N1 = size(P,1);
digitdata = [P ones(N1,1)];
w1probs = 1./(1 + exp(-digitdataw1));
w1probs = [w1probs ones(N1,1)];
w2probs = 1./(1 + exp(-w1probsw2));
w2probs = [w2probs ones(N1,1)];
w3probs = 1./(1 + exp(-w2probs*w3‘’));
numdbn = w3probs;
% save maydataDBN1.mat numdbn
[jingduz,fen] = dbnfun(numdbn,num2);
% sum(num1’)
function [jingduz mat] = dbnfun( input,output)
% rand(‘seed’,0)
[m1 n]=sort(rand(1,size(input,1)));
m=floor(size(input,1)*0.8);
train_wine=input(n(1:m);
train_wine_labels=output(n(1:m);
test_wine=input(n(m+1:end);
test_wine_labels=output(n(m+1:end);
%% 建立svm
% t = templateSVM(‘Standardize’,1);
% model=fitcecoc(train_wine,train_wine_labels,‘Learners’,t);
% pred=predict(model,test_wine);
bestc=50;bestg=1.8; %确定的最佳参数
cmd = ['-s 1 -t 2 ‘,’-c ‘, num2str(bestc), ’ -g ‘, num2str(bestg) , ’ -p 0.001’];
% bestc=1.5;%参数C
% bestg=1.3484;%参数G
% cmd = [’-c ‘,num2str(bestc),’ -g ',num2str(bestg)];%训练参数
model = svmtrain(train_wine_labels,train_wine,cmd);
[pred,acc]= svmpredict(test_wine_labels,test_wine,model);
disp(‘总的分类精度’)
jingduz = sum(pred==test_wine_labels)/length(test_wine_labels)
figure
stem(pred)
hold on
plot(test_wine_labels,‘*’)
legend(‘预测’,‘实际’)
mat = confusionmat(pred,test_wine_labels);
% 各类精度
for i=1:2
disp([‘第’,num2str(i),‘类精度为’,num2str(mat(i,i)/sum(mat(i,:)))])
end
从效果图上看,深度信念网络DBN+svm分类效果准确率高,效果很好
DBN是一种深度信念网络,优点在可以处理大输入数据,能训练中自动降维,训练的过程就是降维的过程,缺点是拟合逼近能力不强,收敛面比较平滑,基于这些,可以和其他拟合能力强的神经网络结合,比如极限学习机,RBF等,结合后的神经网络,即可处理大输入数据,又具有无限逼近的能力,有需要扩展的欢迎扫描文章下面的二维码