deep learning的热度增长非常快。
下面看看deep learning的历史。
最开始出现的是1958年的单层感知机,1969年发现单层感知机有限制,到了1980年代出现多层感知机(这和今天的深度学习已经没有太大的区别),1986年又出现了反向传播算法(通常超过3层就对出好的结果没有什么帮助)。
1986年有人提出了反向传播算法。
1989年有人提出只要有一层隐藏层就可以建立一个model用来模拟任何的function。
2006年有人提出受限玻尔兹曼机(Restricted Boltzmann Machine,简称RBM),实际上这与之前的多层感知机几乎一样,只是改了个名字。主要的区别就是找初始值的方式不一样,其他都一样。如果我们用RBM方式找初值,那么就是deep learning;如果不是用RBM方式找初值,那么就是多层感知机。
但是这种RBM寻找初值的方式其实对实际效果的帮助并不大,现在已经很少有人用了。
2009年时我们发现GPU可以加速神经网络的训练过程。这大大提升了神经网络的计算速度。
2011年时有人开始将深度学习用于语音识别,2012年有人开始将深度学习用于图像识别。
Deep learning也一样是3个step:
step1里面我们必须定义一个function,这个function就是一个neural network。
neural network中的每一个neuron其实就是一个logistic regression。
不同的连接方式构成了不同的network结构。
有各种不同的连接方式,如Fully Connect Feedforward Network(全连接前馈网络)的结构:
如上图,1X1+(-1)X(-2)+1(bias)=4,然后经过sigmoid函数,值为0.98。0.12的输出值也类似。
类似地,我们可以得到后面几层神经元的输出值。
如果输入是0和0的话,则各层的神经元的值如下:
一个neural network就可以把它看成是一个function。
我们可以把上面的神经网络表示成下面的形式:
因为每一层的每个神经元都会与下一层的所有神经元都有连接,所以叫全连接。
所谓的Deep就是有很多Hidden Layers。
如下面几种著名的deep neural network结构:
neural network每层之间的运算我们经常用矩阵运算来表示。
如上图输入层与下一层的运算可以表示成图上所示的矩阵。
我们把每层用的所有w和b按层形成矩阵w1,w2...wl和b1,b2...bl。
所以我们的神经网络模型代表的function y=f(x)可以表示为:
一般情况下我们用GPU来进行矩阵运算。
我们可以把所有隐藏层看成一个teature extracter,把输出层看成一个Multi-class Classifier。
举一个例子:
如下图,一张灰度图片有256个像素,就看成一个256维的vector,可以看成有颜色的地方像素值是1,否则是0;输出层是一个10个类的分类器(一个10维的vector)。
中间的function可以有很多种,有些比较好,有些比较差。
你需要对你当前的网络结构找到一个好的function。
怎么找一个好的function呢?经验+直觉。
事实上,对于神经网络,我们决定一个好的network结构更容易,也更重要。
就目前来说,深度学习在语音和图像识别上进步很大,但在NLP方面的进步不太明显。
step2:定义一个好的function。
举例:
根据一组输入数据,计算function的loss值(cross_entropy值)。
然后我们要一种方法来调整function的各个权重,使得loss值越小越好。
我们输入的样本往往是一组数据,我们可以得到一个total loss。
挑选最佳function,还是用梯度下降方法。
多次训练,持续更新w和b参数。
就可以找到一个好的function。
这就是deep learning。
反向传播算法用在计算梯度并用梯度更新参数。
为什么要用deep learning?
早年的一个研究数据:可以看到隐藏层越多,error值越小。
有一个理论是这样说的:
任何一个连续函数,N维输入,M维输出,都可以用一个network实现。