机器学习之四(读书笔记)

  • Deep Learning
  • Backpropagation
  • Tips for Deep Learning

八、Deep Learning

历史:

  1. 1958:Perceptron(linear model)(感知器)
  2. 1969:Perceptron has limitation
  3. 1980:Multi-layer perceptron(多层感知器)(与今天的DNN没有显著差异)
  4. 1986:Backpropagation(反向传播)(通常超过3个隐藏层就train不出好的结果)
  5. 1989:1 hidden layer is “good enough”
  6. 2006:RBM initialization(breakthrough)(受限玻尔兹曼机的初始训练)
  7. 2009:GPU
  8. 2011:Deep Learning被引入到语音辨识中
  9. 2012:Deep Learning 赢得ILSVRC image比赛

Three Steps for Deep Learning:
在这里插入图片描述

  1. 第一步

其中,第一步定义一个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} [11],计算上面蓝色的Output为0.98
1 ∗ 1 + ( − 1 ) ∗ ( − 2 ) + 1 = 4 1*1+(-1)*(-2)+1=4 11+(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} [1121],假设input为 [ 1 − 1 ] \begin{bmatrix} 1\\ -1 \end{bmatrix} [11],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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值