深度学习(一)


蛮不错的深度学习入门贴
1 吴岸城
神经网络与深度学习
2 AndrewNG
http://deeplearning.stanford.edu/wiki/index.php/Neural_Networks
3 zouxy
http://blog.csdn.net/zouxy09/article/details/8775360

(下面做了一些简单摘录)

1 AndrewNG
http://deeplearning.stanford.edu/wiki/index.php/Neural_Networks

认识了解简单的神经网络
要将参数进行随机初始化,而不是全部置为0。
如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数

简单的自编码神经网络
通常可以学习出一个跟主元分析(PCA)结果非常相似的输入数据的低维表示

exercise
In this problem set, you will implement the sparse autoencoder algorithm, and show how it discovers that edges are a good representation for natural images.

Step 1: Generate training set
sampleIMAGES.m


矢量化编程是提高算法速度的一种有效方法。为了提升特定数值运算操作(如矩阵相乘、矩阵相加、矩阵-向量乘法等)的速度,数值计算和并行计算的研究人员已经努力了几十年。
矢量化编程的思想就是尽量使用这些被高度优化的数值运算操作来实现我们的学习算法。

一个编写Matlab/Octave程序的诀窍是:
代码中尽可能避免显式的for循环

当使用学习算法时,一段更快的代码通常意味着项目进展更快。例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能“尝试”3个新主意。但是假如你的程序需要20个小时来运行,这意味着你一天只能“尝试”一个新主意。

2 zouxy
zouxy09@qq.com

特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度。

多层的好处是可以用较少的参数表示复杂的函数

区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。

传统神经网络中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)

06年之后提出深度神经网络,方法改进:
1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。

补充说明,RBM,brief network
http://blog.csdn.net/mytestmy/article/details/9150213


卷积神经网络
图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。

卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

S:sample C:convolution
之后的卷积层有选择性地组合前面卷积层得到的Feature Map
C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。

在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习。

深度学习中文社区
http://www.caffecn.cn/

原文地址:https://www.cnblogs.com/ceo1207/p/7137041.html