up and downs of Deep Learning

1958年发明了感知机,perceptron,也就是linear model。

1969年mit发布了论文发表对于deep learning而言是有极限的,因为毕竟还是线性方程组合模型。

在这个期间也有很多关于深度学习的应用,比如图像识别晴天阴天,但是后来发现此时的识别度并不高,更多是由于亮度值而参考。并没有真正的捕捉到特征。

于是在1980年代, multi-layer perception的技术已经比较深入了,和现在的deep learning并没有显著的差别。

1986年出现了backpropagation,当时的问题是超过三个以上的hidden layter不够有效

但是在1989年的时候,却发现只要一个hidden layter就可以是function,就够强了,所以根本没必要弄那么多的layer,因此这个方法就短时间不够有效,大家更多把精力集中在svm。

2006年rmb initialization的提出使深度学习的技术有了突破。现在的深度学习和1980年的感知机有何不同?不同在于梯度下降的方式不同,虽然这个模型非常复杂,但是实际上效果却不好,因此目前已经没有人用这种方法。

2009年的时候可以使用gpu加速,使训练变得非常快

11年的时候开始将dl使用在语音识别上

12年的时候使用dl在图像竞赛中获得了名次,因此在图像处理中dl也变得重要。

three steps for Deep Learning

其实dl和ml一样也只有三个步骤

Neural Network

神经网络就是用不同的连接方式把不同的神经元连接在一起

每个logistic regression,也就是$\theta$, 都有不同的$w$和$b$。
将这些神经网络如何连接起来,常用的有以下几种

Fully Connect Feedforward Network

最常见的连接方式是全连接,每一个神经元都有一组bias,一组weight

calculation

假设输入是1,-1,w1,w2为1,-1,bias为1,0,那么输出就是:
$$
y_{1} = 1 * 1 +-2 * - 1 +1 = 4\qquad \sigma {1}=\frac{1}{1+e^{-4}}=0.98
\y
{2} = 1 * -1 + 1 * - 1 +0 = -2\qquad \sigma _{2}=\frac{1}{1+e^{2}}=0.12
$$
也就是说这个w以及b是根据input,也就是tranning input而变化的。同样的计算可以得到之后的参数

但如果输入是0,0的话,得到的激活a的值是完全不同的

layer more than 3

把所有可能的input的值组合起来,就可以得到function set,linear regression的function set相对来说比较简单,但是在全连接里可以做的function就比较复杂,但是原理是一样的。

以上的图是三层的全连接层,但是实际上可以有很多层的全连接层。

每层之间的neuron都是两两连接的。layer1连接的是input,layer l连接的是output

我们实际上也可以把input,output 看成layer。

那么中间的这部分就被称为hidden layer

Matrix Operation

主要是可以简化计算,使用gpu,因为这些w的值全部可以写成矩阵的方式

input就可以写成X,第一层的W就可以写成W1,b,激活a同样。那么整个神经网络的计算就是一整串的matrix的operation(矩阵计算)。只是activation function会一层层套,如果写成式子就是这样的。

因为矩阵运算可以使用gpu,因此计算会相当的快。

Feature extractor

中间隐藏层做的就是feature extractor(特征提取),替代了以前的feature engineering(特征工程)

对于输出层,我们是从这些隐藏层里找到最好的一组特征,因此它被称为multi-class classfier,当然它还是要做softmax的。

假设有一张16*16像素的数字2的图,因为图是数字图像,因此实际上是一个$16 * 16$的矩阵,因此就是256个x,每一个x对应一个概率。

假设我们是对数字0到9做概率预测,那么最后预测得到的概率是10个数字,然后取概率最高的,即可判断成这个数字是几。那么可以得到这个outpu是10维的,那么我们要做的就是设计神经网络把256维的input通过转化最终变为10维的output。

how many layers? How many neuros?

实际上对于如何设定这个函数是不知道的,大多数情况都是通过直觉和多方常识找到合适的函数。

跟以前的时代相比较,我们的问题从如何抽取更好的feature转化为如何desgin network structure。

Loss for an Example

对于手写识别,也就是数字识别,因为只有10个数字,因此做的是cross entropy。这个也是loss,因此是越小越好。

对于每个数字都有一个y和y head,还有cross entropy,也就是c。
让这些c的和最小就是我们要找的参数,通过参数也就确定了function set。

Gradient Descent

实际还是跟以前一样,计算积分然后再乘以learning rate,去更新参数。

目前已经不需要自己手动实现如何计算梯度下降了,已经有了非常多的toolkit,比如Backpropagation

Deeper is Better?

那么是否真的越多层效果越好呢?根据一个计算word error rate的计算,的确越多层概率下降了。

但是按照逻辑去思考的话,参数越多function set越大,的确模型效果会更好。

Universality Theorem

对于一个连续型函数f,$R^{N}\rightarrow R^{M}$

也就是说只要神经元足够多,最终都可以用一层layer的function表示。

既然一层可以表示,我们为什么一定要用deep learning?请思考