最近在实现Gaussian-ReLU RBM的过程中总是遇到学习到的权重为NaN的情况,学习算法为CD方法。后来发现,这个问题主要是由于学习速率设置过大而导致的,以下是根据一些文献和自己的尝试给出的相关RBM训练参数的设置意见:
(1)对于Gaussian-ReLU RBM:学习速率不应设置过大,一般在0.001或低于这个水平,否则会出现训练梯度爆炸的情况,在实际应用中表现出的是训练误差在几次迭代下降后迅速放大,直至Inf或NaN。(reference: Vinod Nair and Geoffrey Hinton. 2010)
(2)对于ReLU-ReLU RBM:学习速率应该设置的更小,具体多小需要做实验进行尝试,我自己设置的大概的0.00001或低于这个水平。(Geoffrey Hinton, 2010, A Practical Guide to Training Restricted Boltzmann Machines----特别说一下祖师爷在文章中特别说过对于这种情况需要much smaller learning rate,自己采坑了来回看了好几次也没注意到这个细节,可见我对文章细节的把握还是不够呀)
(3)如果是多层的RBM叠加的DBN,通过实验观测,对学习速率的设置最好是逐层递减的。