用于分类的深度信念网络的Matlab示例代码

Matlab example code for deep belief network for classification

我有一个包含 40 个特征向量的数据集,分为 4 个类别。有人可以在 Matlab 中给出示例代码如何应用深度信念网络进行分类(并解释参数)吗?任意library/tooblox都可以,但在matlab中要有

例如 shogun 工具箱 (http://www.shogun-toolbox.org/), DeeBNet toolbox (http://ceit.aut.ac.ir/~keyvanrad/DeeBNet%20Toolbox.html) or the deep learning toolbox (http://www.mathworks.com/matlabcentral/fileexchange/38310-deep-learning-toolbox),但不幸的是,它们都没有很好的文档记录,而且因为我对深度学习/神经网络完全陌生,所以对我来说真的很难。

编辑:我应该为以下参数选择什么或者我应该搜索什么范围?

nn.activation_function              = 'tanh_opt';   %  Activation functions of hidden layers: 'sigm' (sigmoid) or 'tanh_opt' (optimal tanh).
nn.learningRate                     = 2;            %  learning rate Note: typically needs to be lower when using 'sigm' activation function and non-normalized inputs.
nn.momentum                         = 0.5;          %  Momentum
nn.scaling_learningRate             = 1;            %  Scaling factor for the learning rate (each epoch)
nn.weightPenaltyL2                  = 0;            %  L2 regularization
nn.nonSparsityPenalty               = 0;            %  Non sparsity penalty
nn.sparsityTarget                   = 0.05;         %  Sparsity target
nn.inputZeroMaskedFraction          = 0;            %  Used for Denoising AutoEncoders
nn.dropoutFraction                  = 0;            %  Dropout level (http://www.cs.toronto.edu/~hinton/absps/dropout.pdf)
nn.testing                          = 0;            %  Internal variable. nntest sets this to one.
nn.output                           = 'sigm';       %  output unit 'sigm' (=logistic), 'softmax' and 'linear'

opts.numepochs =   1;
opts.batchsize = 100;
opts.momentum  =   0;
opts.alpha     =   1;

所以 DBN 非常复杂,我花了几个月的时间才真正了解它们。这是一个快速概述 -

神经网络的工作原理是拥有某种特征并将它们置于 "all or nothing activations" 层中。这些激活有权重,这就是 NN 试图 "learn"。神经网络在 80-90 年代有点消亡,因为系统无法正确找到这些权重。直到令人敬畏的 2006 paper of Geoff Hinton - 他想用受限的 boltzman 机器对网络进行预训练,以获得正确的球场重量。

这取决于你的目标,但如果你的目标是了解它们是如何工作的,我会从 Hinton 的原始论文开始并将其重写为具有函数而不是论文中的静态 3 层网络。这将使您对正在学习的权重和激活方面发生的事情有一个很好的直觉。

现在回答你的第二个问题——有一些争论——但根据我的经验,最关键的因素是系统的架构,这些变量如下:

  • 层数
  • 可见数量
  • nodes 每层隐藏节点数

您可以控制的其他变量是我将归类为优化变量的变量。它们是:

  • 激活函数- tanh、sigmoid、relu
  • 所学变量的学习率

不过我要警告您,不要指望出色的结果——并准备好拥有一个需要很长时间训练的系统。

您可以采用的第二条途径是尝试其他一些系统,例如 Caffe,这可能会给您带来更多可用的结果。

无论如何,祝你好运:)

ps,对于如此小的数据,您可能会考虑改用 SVM。