文章目录
摘要
本章首先是通过逻辑回归的限制,引入了深度学习的概念;其次介绍了深度学习的发展与广泛的应用领域;以及Deep learning 的三个Step,一是定义一个函数集,也就是神经网络(neural network),二是定义一个函数的好坏(找到合适的参数),三是选一个最好的函数;在step1中用Matrix Operation矩阵运算去表示netural神经元的运作;在step2中去调整netural神经元的参数,用交叉熵函数作为损失函数,去使交叉熵的值越小越好;在step3中仍然是应用梯度下降Gradient Descent的方法,但由于神经网络(函数)一般较为复杂,所以通常应用(Backpropagation)反向传播算法去算微分;以及讲到了为什么要Deep ,而不是fat ;其中就是应用模组化的方法使模型变简单;后面主要讲到神经网络Backpropagation反向传播算法的推导过程。
一、Deep Learning的3个step
step 1:define a set of function(定义一个函数集)
- function(函数)就是一个neural network,不同的netural用不同的方法连接起来,构成不同的网络结构;也就是将逻辑回归按不同的方式进行连接,得到不同的结构,其中逻辑回归的w和b就是神经网络中的参数。
常见方式:Fully Connect Feedforward Network(全连接前馈神经网络)
相邻层之间的神经元两两之间都有连接,所以称为是全连接层;
- 假设给定了网络结构并给定了参数,那网络就是一个函数,要注意输入输出都是向量
- 深度学习的深度指的是包含很多隐藏层的网络
- 用Matrix Operation来表示netural的运算
如上图中蓝色的两个netural的weights排成一个Matrix 矩阵,然后和输入加bias做矩阵乘法运算(Wx+b)得到一个矩阵,就是结果蓝色netural的output一个矩阵,再通过比如用sigmoid function去处理得到结果;然后继续一层一层的算下去,就是一连串的Matrix Operation。
如何看待整个神经网络:将从input layer 到 output layer 之前的部分视作hidden layers,看作是一个特征提取替代了之前提到的特征工程,而output layer j就相当于一个多分类器,其中又通过softmax函数去分类。
3.举个应用例子——手写数字问题:
所使用的神经网络的输入是256维,输出是10维,之间的hidden layer层数时没有限定的,到底有多少个,决定了你用的什么function set。如果你自己去连接每一层,就变成CNN(卷积神经网络)。
step 2:goodness of function(定义一个function的好坏)
继续用手写数字辨识的例子,还是256维输入nerual network,output(softmax):10维的输出,target只有两种0或者1,算一下cross Entropy,调整network的参数,让cross Entropy 越小越好。
step 3 :pick the best function
把多组数据的crossEntropy算出来,然后Total Loss;从function set 里找到一个funtion 来最小化L,再找到最小化的参数。下面就是用到Gradient Descent方法:与之前的处理是一样的,只是Deep Learning 中的Function 变复杂了。
- Backpropagation:在神经网络中一个非常有效的算微分的方式
- 引出了一个hidden layer 的netural 只要够多,就可以表示成任何的function,所以deep意义很大?还是越fat越好?
二、why deep?
why deep而不是why shallow?
给出两组实验
第一组就是:越深的神经网络,其参数越多,模型也就越复杂,当然能够拟合更为复杂的函数
第二组表明:单增加netural的数目,不增加layer时没办法提高准确率的。
其中两侧对比:
- 使用参数相等时,构建多层Neurals比一层Neural准确率更高
- 左侧红框内的参数比右侧是要少的,但其error rate却更低点,准确率更高
这是why?
引入Modularization模组化的概念:
注意:Deep -> Modularization,在Deep Learning中怎么去做模组化,是机器会自动构建模组化的函数。模组化的好处是使模型变得简单了,这样training data就不需要那么多。而且实际上做Deep Learning 的data是比较少的,如果有很多的话,那直接查表就行。
三、Backpropagation算法的推导
1.Why Backpropagation
用gradient descent来train一个neural network:
开始时参数是特别多,选一个初始的参数,计算初始参数的微分,然后不断更新参数,在神经网络中的梯度下降算法和之前求线性回归方程等中用的没有太多的差别,都是不断的计算微分,然后更新参数,最终找到一个最优解。但是在神经网络中,却是拥有着大量的可能多达上百万个的参数,是一个百万维的向量,传统的求微分方法行不通,这样就需要应用Backpropagation去有效的计算出微分。
2.Chain Rule(链式求导法则)
其实就是高数中的求导法则:
3.Forward pass与 Backward pass
每一个神经网络都需要定义一个 Loss Function,定义实际输出
y
n
y^n
yn与预期输出
y
n
y^n
yn_之间的误差
C
n
C^n
Cn,要使上式的值最小。用 Gradient descent 来做的话就是这个式子对权值 w 求偏导,由此我们知道只需要求每个
C
n
C^n
Cn对 w 的偏导,然后全部加起来就可以。
那怎么算∂C/∂w?
如下图中分为Forward pass与 Backward pass,求∂Z/∂w的过程为Forward pass,求∂C/∂z的过程称为 Backward pass。
3.1 Forward pass
举个实际例子求∂Z/∂w如下图:
3.2 Backward pass
计算 ∂C/∂z的过程:
如果假设两个?已知,又可得到这样的:
从另一个角度看该过程:
- 这个反向过程与之前的sigmoid函数并不一样
那又怎么算最后两项?呢?
case1: 当output是最后的output layer时
- 可直接先计算出后面的两个,再通过反向求出 ∂C/∂z
case2 :当output不是最后的output layer时
整个神经网络进行Backward pass如下图,从右到左分别求出每一层的C对Z的导数:
summary:
计算
∂
C
/
∂
w
=
∂
z
/
∂
w
∗
∂
C
/
∂
z
.
∂C/∂w= ∂z/∂w*∂C/∂z.
∂C/∂w=∂z/∂w∗∂C/∂z.
用Forward pass求出每一层的 ∂z/∂w,用Backward pass求出每一层的∂C/∂z,然后相乘就可以算得每一层的∂C/∂w。
展望
本章主要学习了Deep Learning 的三个step ,以及梯度下降过程中,对反向传播算法去计算微分的推导;接下来我们将会继续对Tips for Training DNN的学习,对深度学习将会有更进一步的理解与掌握。