目录
3)选择最优函数 Pick the best function
一、深度学习简介
1、深度学习发展趋势
回顾一下deep learning的历史:
-
1958: Perceptron (linear model)
-
1969: Perceptron has limitation
-
1980s: Multi-layer perceptron
Do not have significant difference from DNN today
-
1986: Backpropagation
Usually more than 3 hidden layers is not helpful
-
1989: 1 hidden layer is “good enough”, why deep?
-
2006: RBM initialization (breakthrough)
-
2009: GPU
-
2011: Start to be popular in speech recognition
-
2012: win ILSVRC image competition
-
2012: win ILSVRC image competition 感知机(Perceptron)非常像我们的逻辑回归(Logistics Regression)只不过是没有
sigmoid
激活函数。09年的GPU的发展是很关键的,使用GPU矩阵运算节省了很多的时间。
2、深度学习三步骤
之前笔记中说过机器学习有三个步骤,分别是在function set中找function、对function进行评估、选择出最好的function,其实深度学习也是这三个步骤,下面详细介绍。
1)神经网络 Neural Network
1>完全连接前馈神经网络
概念:前馈(feed forward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。
我们可以把输入看作神经网络的输入和输出都看作是向量,下图当输入为1,-1和0,0时最终输出的结果时不一样的,尽管中间的结构是一样的。当我们给上面的结构的参数设置不同的值,就是不同的函数,这些可能的函数结合起来就是一个函数集function set,函数集会非常大。
多少层才算是深层呢?Deep = Many hidden layer。下面是几个经典的例子。
随着网络深度的增加,网络训练的错误率降低,运算量也会增加,通常这些运算都是超亿万次的运算,当一个一个进行计算的时候,使用循环loop会导致训练效率降低。所以我们要对矩阵计算Matrix operation会提高运算效率。
2>矩阵计算 Matrix operation
当有很多层,计算量会大大增加,我们可以通过观察,发现每一层之间其实是有规律可循的,
整个神经网络运算就是一连串的矩阵运算。如下图所示。
从结构上看,每一层计算都是这样,我们就可以用计算机进行并行运算,进而使用GPU加速。
这样的本质是:通过隐藏层进行特征转换。
把隐藏层通过特征提取来替代原来的特征工程,这样在最后一个隐藏层输出的就是一组新的特征(相当于黑箱操作)而对于输出层,其实是把前面的隐藏层的输出当做输入(经过特征提取得到的一组最好的特征)然后通过一个多分类器(可以是softmax函数)得到最后的输出y。
2)模型评估 Goodness of function
1>损失实例
对于模型的评估,我们一般采用损失函数来反应模型的好差,所以对于神经网络来说,我们采用交叉熵(cross entropy)函数来对和
的损失进行计算,接下来我们就是调整参数,让交叉熵越小越好。
2>总体损失
损失不是单层看的,而是总体的损失统计,把所有损失的数据加起来才是总体损失L,然后找出最小的损失L,或者找出一组神经网络的参数来最小化总体损失L。
3)选择最优函数 Pick the best function
寻找最优函数的方法就是梯度下降。
1>反向传播
在神经网络中计算损失最好的方法就是反向传播。
二、反向传播算法 Back Propagation
1、梯度下降
之前也讲过梯度下降,这里就不详细说了,感兴趣的可以去翻翻前面的笔记哦。
这里表示一组参数,计算偏微分,然后不断地更新
当然,我们会遇到下面两种情况,前一层的输出会影响到下一层的输入,连锁影响,数学中的链式法则Chain Rule,反向传播用的就是链式法则Chain Rule。下图中,可以看出x会影响y,y会影响z;当z对s求偏导时,对x和y都有影响。
2、反向传播
-
损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的,用L表示。
-
代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
-
总体损失函数(Total loss function)是定义在整个训练集上面的,也就是所有样本的误差的总和。也就是平时我们反向传播需要最小化的值。