deeplearning学习

首先几个库:

SymPy:用于python中符号计算,如泰勒展开,不定积分,定积分等。

Theano:可以对数学表达式求值,如根据模型进行训练,进行深度神经网络的学习。模型的优化等Theano会自动处理。

同时也会自动检测并稳定深度学习中许多常见的数值不稳定的表达式。

(Theano的一个介绍网址:http://geek.csdn.net/news/detail/131362)

——————————————————————————————————————————————————————

病态条件:

在对矩阵的逆操作时,如果原矩阵最大特征值与最小特征值的模的比很大,那么矩阵求逆对输入的误差特别敏感。

——————————————————————————————————————————————————————

理解梯度下降法:

函数的梯度可以理解为对向量求导的导数。沿着梯度的反方向变化变量即可。

常用矩阵:

雅可比矩阵与海森矩阵。

——————————————————————————————————————————————————————

对正则化添加二范数约束可以将结果更加偏向于零点。而添加二范数约束的正则化的本质是在梯度下降时加快。即:

不仅仅对使用梯度对变量x加减,而是先对乘以一个倍数后再加减。

另外,为了保证对测试集的泛化能力而采取的提前终止策略,其实质也与添加二范数约束一样。

——————————————————————————————————————————————————————

Dropout是在CNN中根据一定的概率随机暂时丢弃节点训练网络的方式,因为每次的网络模型不一样,因此相当于每次都在

训练不同的网络。最终的结果相当于将所有网络进行了一定的拟合。但对其为什么表现这么好至今没有理论证明。

——————————————————————————————————————————————————————

卷积神经网络:

一个经典的说明与例子:http://blog.csdn.net/u010555688/article/details/24848367

卷积神经网络主要用于处理网格化数据的结构,如图像;

循环神经网络主要用于处理序列化数据。

循环神经网络的主要特点在于:在序列的不同部分共享参数。当两个语句颠倒过来表达同一个意思时,

这样的共享参数就能保证颠倒后的语句与颠倒之前意思一样。

卷积神经网络采用theano的一个例子:

http://blog.csdn.net/hjimce/article/details/46806923

里面关于四维张量的卷积与dimsuffle有点儿难以理解:

设A为x1*y1*z1*z1,B为x2*y2*z2*z2,将A与B进行卷积:前提是y1等于y2(A为上一层,B为当前层)

二者卷积的结果为x1*x2*(z1-z2+1)*(z1-z2+1)

这里的x1表示一次输入的图像索引,y1表示每个输入的图像包括的特征图像索引,z1*z1则表示一个特征图像;

x2表示对每个图像,想要得到的特征图像数,z2*z2为卷积核。

至于卷积的过程,即每个图像原来有y1个特征图像,卷积后则有y2个图像,这怎么来的?

看这个图理解:

deeplearning学习

而dimsuffle函数则只是将张量结构进行了转换,至于将这个结构转换后的张量与其它张量相加,则需要自动进行一个broadcast容量扩充的操作。

——————————————————————————————————————————————————————

受限玻尔兹曼机:(RBM)

通常的神经网络为通过输出与输入的关系进行反向传播来训练,受限玻尔兹曼机则是通过利用了热力学中的思想,

以将系统定义的能量最低为目标拟合输入与输出的关系。问题转化为似然函数最大的问题。

训练RBM的过程是求一个最能产生训练样本的概率分布。也就是要求一个分布,在这个分布里,训练样本的概率最大,

而这个分布由W决定,因此训练的目的就是寻找最佳的权值。

受限玻尔兹曼机简介:https://wenku.baidu.com/view/62b506c925c52cc58ad6be6c.html

受限玻尔兹曼机笔记:http://blog.csdn.net/itplus/article/details/19168989/

受限玻尔兹曼机能量模型:http://blog.csdn.net/oMengLiShuiXiang1234/article/details/49532667

RBM的目标:对训练数据的分布进行建模。(基于能量稳定的联合概率分布的情况下)

在算法中,需要用Gibbs采样获取样本来估计梯度下降中需要的数据。

其评估算法也用训练数据与基于训练数据的Gibbs采样的二范数来评估。

显然,玻尔兹曼机可以作为一个生成模型,即根据当前的训练数据,并利用得到的网络结构,生成更多的样本数据。

由于它是对称的结构,通过显层可以得到隐层输出,同样根据隐层也可得到显层输出,因此隐层显然能够代表显层,

但是其表示方式更加简单,只用0、1表示了。

在参数更新方法中,对于用到的概率,直接将输出进行sigmod后对应的0到1中间的值作为概率值即可。

DBN深度信念网络的一个C++代码:http://download.csdn.net/detail/junxian_chen999/8722819

(代码结构很清晰,包含RBM的训练细节,采用CD算法)

————————————————————————————————————————————————————