- Deep Learning
- Backpropagation
- Tips for Deep Learning
八、Deep Learning
历史:
- 1958:Perceptron(linear model)(感知器)
- 1969:Perceptron has limitation
- 1980:Multi-layer perceptron(多层感知器)(与今天的DNN没有显著差异)
- 1986:Backpropagation(反向传播)(通常超过3个隐藏层就train不出好的结果)
- 1989:1 hidden layer is “good enough”
- 2006:RBM initialization(breakthrough)(受限玻尔兹曼机的初始训练)
- 2009:GPU
- 2011:Deep Learning被引入到语音辨识中
- 2012:Deep Learning 赢得ILSVRC image比赛
Three Steps for Deep Learning:
- 第一步
其中,第一步定义一个function,这个function就是一个Neural Network:
用不同的方法连接Neural Network就会得到不同的structure;Network的参数 θ \theta θ:所有neuron的weight和bias的集合。
连接Neuron的方式(自己手动设置):
Fully Connect Feedforward Network(最常见)(全连接前馈网络):
把Neuron拍成一排一排,每一组Neuron都有一组weight和bias(weight和bias是根据training data找出):
假设上面蓝色Neuron,w=1,-2;b=1;下面蓝色Neuron,w=-1,1;b=0;
假设现在的input是 [ 1 − 1 ] \begin{bmatrix} 1\\ -1 \end{bmatrix} [1−1],计算上面蓝色的Output为0.98
( 1 ∗ 1 + ( − 1 ) ∗ ( − 2 ) + 1 = 4 1*1+(-1)*(-2)+1=4 1∗1+(−1)∗(−2)+1=4再通过sigmoid function得到0.98,sigmoid function如下)
假设这个structure中的每一个weight和bias都已知,就可以反复进行以上运算,如下图:
假设input是 [ 0 0 ] \begin{bmatrix} 0\\ 0 \end{bmatrix} [00],得到的结果如下:
决定了一个Neural Network的structure就是决定了一个function set。
大体上,neuron有很多layer,layer和layer之间所有的Neuron两两相接,整个Network需要一组input(vector),对Layer1的每一个Neuron来说,它的input就是input layer 的每一个dimension:
其中,input layer不由neuron组成。
Deep = Many hidden layers,那么Deep Learning到底可以有几层hidden layer?
- AlexNet(2012):8 layers,错误率为16.4%
- VGG(2014):19 layers,错误率为7.3%
- GoogleNet(2014):22 layers,错误率为6.7%
- Residual Net(2015):152 layers,错误率为3.57%
network的运作常常把它用Matrix Operation(矩阵运算)来表示,举例:
假设第一个layer的两个neuron,它们的weight分别是1,-2,-1,1,即可排成一个matrix: [ 1 − 2 − 1 1 ] \begin{bmatrix} 1 &-2 \\ -1 & 1 \end{bmatrix} [1−1−21],假设input为 [ 1 − 1 ] \begin{bmatrix} 1\\ -1 \end{bmatrix} [1−1],bias为 [ 1 0 ] \begin{bmatrix} 1\\ 0 \end{bmatrix} [10],再通过sigmoid function得到结果,那么整个运算为:
在整个neural network文件中,sigmoid function被称为activation function(激活函数),但是不一定激活函数就是sigmoid function。
总体来说,一个neural network,假设第一个layer的weight全部集合起来成为一个矩阵 W 1 W^1 W1,bias全部集合起来当作一个向量 b 1 b^1 b1;同理,layer2的weight矩阵为 W 2 W^2 W2,bias向量为 b 2 b^2 b2…layerL的weight矩阵为 W L W^L WL,bias向量为 b L b^L bL,那么由input x得到output y的整个过程如下:
那么x和y的关系为:
写成矩阵运算的好处是:可以用GPU加速。
hidden layers可以看作feature extractor(特征提取器),代替了手工的feature engineering;
Output layer = Multi-Class Classifier,因此最后一layer会加上Softmax:
举例:识别手写数字
Input是一张图像,对机器来说,一张image就是一个vector(向量),假设这是一个解析度为16*16的image,那么它有256个pixel(像素),那么这个image就是一个256维的vector,每一个pixel对应其中一个dimension(维),涂黑的地方标记为1,没有涂黑的地方标记为0;
Output(这里是10维)看作是对应到每一个数字的几率,几率最大的数字为最终结果;
整个过程为:
接下来就是要使用Gradient Descent找一组参数,挑一个最适合用来实现手写数字辨别的function,在这个步骤里面需要做一些design(要求只有input256维,output 10维,需要设计几个hidden layer,每个hidden layer要有多少neuron)。
决定一个好的function set取决于这个network的structure。
Q:How many layers ?How many neurons for each layer?
Trial and Error + Intuition(直觉)
Q:Can the structure be automatically determined?
e.g. Evolutionary Artificial Neural Networks
Q:Can we design the network structure?
e.g. Convolutional Neural Network(CNN)
2.第二步
如何定义一个function的好坏?
假设做手写数字辨识,给定一组参数,现有一张image和它的label,通过label1得知target为一个10维的vector,第一维对应到数字1,其它维都对应到0;Input这张image的pixel,然后通过neural network得到一个Output,Output称之为 y y y,target称之为 y ^ \hat{y} y^,接下来计算这个 y y y和