Neural Network(Basic Ideas)

目录

A layer of Neuron

Limitation of Single Layer

What is the model?

公式字母统一

Relations between Layer Outputs

What is the “best” function?

How to pick the “best” function?

Gradient Descent的研究

Practical Issues for neural network

Parameter Initialization

Learning Rate

Stochastic gradient descent and Mini-batch

Recipe for Learning


链接:http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/DNN%20(v4).pdf

在这一课中,我们需要研究三个问题:1. What is the model (function hypothesis set)? 2. What is the “best” function? 3. How to pick the “best” function? 这三个问题也是第一课中遗留下来需要解决的问题。接下来,我们就围绕这三个问题进行研究。

在这一课中,我们主要是以分类问题为主。这里的分类有二分类和多分类。二分类一般可以应用于垃圾邮箱的识别,推荐系统,恶意软件的检测,股票涨跌的预测。多分类问题一般有手写数字的识别(0,1,2,…,9),图像识别(dog, cat, book,…)。语音识别是一个比多分类问题更复杂的问题,以后我们再进行更详细的讨论。

A layer of Neuron

这里,我们以手写数字识别来作为研究。假设,输入的x和y都是固定等长度,即每个输入x都是相同且相等的。这里,x是一个N维的vector,y是一个M维的vector。这里我们需要对y进行one-hot处理,而不是用1,2,3,…去表示。

这里,每一个神经元的激活函数是sigmoid,这个函数很有意思,当z>0的时候,输出的区域绝大部分映射到靠近1的地方。当z<0的时候,输出的区域绝大部分映射到靠近0的区域。单个神经元可以解决二分类问题,但是对于多分类问题,单个神经元是无法解决的,所以需要用多个神经元才能解决,有多少类就需要用多少个神经元,即对应的多少输出。这里输出的神经元有很多,每个y表示是某个数还是不是某个数,取max(yi)的最大的角标i位置对应的结果。

Limitation of Single Layer

单个隐含层不能够解决非线性问题,这也是为啥1960s后神经网络进入冷淡期的原因。

由上图,我们可以看到,无论怎么分,都不能将红蓝两色的点分开。该怎么办?怎么办呢?我们可以借用XNOR gate的原理,将多个门并在一起。请看下图:

在第一个图中,使用了两个神经元进行划分,虽然没有将红蓝两色的点进行分开。但是我们这个结果作为输入,feed到另外一个神经元中,在feed之前,我们惊奇地发现,现在数据变得线性可分了。所以自然,第三个神经元就将其分开了。Oops~

What is the model?

公式字母统一

公式一表示第l层中第i个神经元的输出值

公式二表示第l层中的输出向量

公式三表示在第l层中第i个神经元的激活函数输入值

公式四表示在第l层中的激活函数输入向量

公式五表示从第l-1层的第j个神经元到第l层的第i个神经元的权值

公式六表示从第l-1层到第l层的神经元权值矩阵

公式七表示在第l层的第i个神经元偏置

公式八表示在第l层的神经元偏置向量

 

Relations between Layer Outputs

最终,我们把上一个神经网络层的输出作为输入,代入激活函数中得到新的输出,这样构成了一个function set。在正常的编程中,其实并不会这么算,而是把偏置加入权值矩阵中,在输入的矩阵的前面加入一个1向量,进行矩阵的乘法,同样可以得到以上的效果。

What is the “best” function?

从paramaters set里面选择最适应验证集的W, b。那么怎么去衡量这个function的好坏呢?我们可以用损失函数去衡量这个函数到底有多差,通常我们希望这个值越小越好,常用的损失函数有均方误差、交叉熵。与之相反的是目标函数,我们希望越大越好,越大则越接近这个目标。

 

How to pick the “best” function?

通常参数的选择,我们一般使用梯度下降法。首先对参数进行随机初始值,然后求损失函数关于参数的偏导,最后将偏导后的结果与原来的参数值进行更新。依次重复…这里,求某个参数的偏导,即求斜率,当斜率<0的时候,如图向右移动,当斜率>0的时候,向左移动。梯度下降法是求一个局部最优(下面会继续展开讨论)。

 

Gradient Descent的研究

假设只有两个参数,随机初始化参数值,在“可视范围”内,向损失值最小的地方移动,到了新的点,再在“可视范围”内,向损失值更小的地方移动,以此类推。

对于损失函数,可以由泰勒公式展开,假设这个红色的“可视区域”最够小,小到只剩一个点,我们可以消去后面的二次项。最后求偏导整理后,可以发现损失函数其实是与参数成一次关系。即上一个损失函数到下一个损失函数的关系就是线性地加减。这也解释了为啥求偏导,以及为啥更新公式长这样。在实际中,这样计算参数计算量会特别大,所以我们一般采用反向传播。

思考:这里,我们消去了二次项,但是加上二次项,可能对结果会更有帮助,但是这样会增加计算量。这是一个待解决的问题。

因为梯度下降法是求局部最优解,而SVM是求全局最优解,它是一个convex function,这也是为啥SVM火了一段时间的原因。梯度下降法的权值无论从何地起始,都可能到最后会卡在local minima。但是后面人们研究发现,local minima并没有想象的那么多,主要的问题还是saddle point(鞍点),所以现在我们主要解决的是怎么跳出鞍点

Practical Issues for neural network

Parameter Initialization

不要让所有的参数都相等,因为在下次更新的时候还可能在一个地方。所以随机初始化参数。这很重要。

Learning Rate

对于学习率的设置,一直是一个叩待解决的问题。当学习率太大的时候,参数更新每一步都特别大,从而导致损失值一直都进入不了局部最优的区域。于是,我们将学习率调小,发现损失值一直在峰谷口徘徊,不能进去。所以,我们还需要继续调小学习值。总的来说,学习值的调试也需要随之迭代次数而不断地减少。

Stochastic gradient descent and Mini-batch

训练数据一共有r个。Gradient Descent是将其全部代入训练,因为计算矩阵变大,所以需要花费更多的时间。Stochastic Gradient Descent是每次去一个样本去更新权值,这样效果比较快。Mini-batch是将size(Mini-batch)个数全部绑定在一个去更新权值,它是Gradient Descent和Stochastic Gradient Descent的一种折中方法。虽然计算量和Stochastic Gradient Descent差不多,但是效果却有很大多的差别。

从实验结果图可以看出,Gradient Descent将数据全部参数训练和迭代更新,不但耗时多,而且效果低。Stochastic Gradient Descent每次代入一个数据更新,虽然时间上式提高了,但是一次性处理一个样本,在数据量比较多多的情况下,耗时就会增加,不过正确率还是比较好的。Mini-batch效果最好,不但耗时低,而且正确率也很高。

Recipe for Learning

首先对数据集分成训练集,验证集(知道真实标签),测试集(直到deadline才知道真实标签)。然后,我们需要确保训练集上效果比较好的情况下,才去看验证集的效果(往往验证集的效果低于训练集的效果)。如果训练集上效果不好,可能是由以下几点原因造成:程序有bug;激活函数不好(局部最小,鞍点问题,改变训练策略);模型本身就不好(function set假设得不好,需要一个更大的网络)。当训练集效果比较好的时候,我们再看验证集。如果效果好,我们可以done。如果不好,可能是他由于过拟合造成的。造成过拟合的原始是训练集和测试集的分布往往不同,比如在手写识别的例子中,“2”在训练集中没有圈,而在测试集中有圈。解决过拟合的原因一般是研究和寻找解决过拟合的算法和方法,比如加正则项。但是最简单的是寻找更多的训练数据集。

 

猜你喜欢

转载自blog.csdn.net/qq_18124075/article/details/81098206