一个甲子的峥嵘岁月,铸就了不平凡的你,吾等新生,与有荣焉。凡是过往,皆成序章。庆祝母校60周年生日快乐。今天见了高大威武,帅气的王院长,时隔两年再次同框。黄老师说有缘偶遇吧,可是并没有见到黄老师。
上一篇我们讲了神经网络基本结构以及如何识别一个手写的阿拉伯数字的原理,接下来再跟大家讲一个梯度下降算法,是在整个Deep Learning和Neural Networks的过程中最重要的一个算法——梯度下降算法。给大家介绍一下一个MNIST DATADASE图像库:http://yann.lecun.com/exdb/mnist/
它是由神经网络学专家杨乐坤收集的一个数据库,里面一共有70000张图片,其中60000张图片作为训练集,然后10000张图片作为测试集。里面每一张图片都是28*28的黑白的灰度图。那么梯度下降算法是如何结合神经网络算法来识别这些手写数字的呢?
那我们来看下如何来训练,输入层x,也就是我之前给大家介绍的方程里面的x可以是个向量,我们说了每一张图片都是28*28的黑白灰度图,那么输入层x:28*28=784d向量,每个值代表一个灰度图中的一个像素值。我们定义一下输出值y=y(x),上一篇我们介绍了神经网络结构里面的输出值有0~9十个数,那我们自然而然的可以把y=y(x)理解成一个10d的向量。
那我们假设一下,在这个神经网络里面如何来对应这个输出和识别出图片的现实意义,假设某图片的数字是6,那么我们理想的输出是y(x)=(0,0,0,0,0,0,1,0,0,0)T,就是通过计算之后,输出的这个向量,大家学过线性代数的都知道,其中T代表的是矩阵的转置。我们还记得这里的每一位对应着一个数字的可能性,比如说第一位对应的输出就是个0,第二位对应的数字可能是1,第三位可能是2、3、4、5、6。
按照理想的输出,我们刚好就在第六个神经元的值为1,在别的神经元上为0,这样就是我们一个理想的输出,那我们就来具体的看下,如何计算出最优的权重。我们的目标是在神经网络中,以我们目前已有的知识,像素值也就是输入值x,那我们的目标是通过计算以后,它能够输出一个正确的分类输出值。对于训练集来说,真实的y我们是知道每一张图片代表的数字是几,那我们其实是要算出权重w和偏向b,因为神经网络它是有这个w权重和b偏向决定的,上面的每一条边都对应着一个权重和偏向,所以我们的最终目的是要在这个神经网络的学习过程中,学习出最优的权重和偏向。那我们来看下是如何用一个梯度下降算法来算出这个权重和偏向。
首先我们要来设定一个目标函数,也就是说我们的目的是要来计算出最大和最小值,用数学的模型来概括神经网络。
其中Cost fuction也叫(lose function损失函数或者objective function目标函数),各项参数分别代表:
C:cost
w:weight 权重(每一个神经元都有一个对应的权重)
b:bias 偏向
n:训练数据集实例个数(n=60000)
x:输入值(像素值)
a:输出值(当x是输入时)
y(x):真实的输出值
||v||:向量的length function
我们的目前是C(w,b)越小越好,输出的预测值和真实值差别越小。我们要经过神经网络算法计算出w和b的最小值。 接下来就跟大家分析一下如何使用梯度下降算法计算出C(w,b)。
假设C(w,b)有两个变量V1,V2,我们可以画出图像:
大家可以看到我们画出来的图片是一个曲面我们的目的是最小化C,也就是说我们要找到这个曲面上的最低点,然后时这个C值很小。虽然我们现在假设的只是的有两个变量,但在实际的神经网络中更为复杂。对于两个变量的,我们可以用微积分解决,但是如果C包含的变量多,那么就没办法用微积分来解决,我们可以使用梯度下降算法来解决。下面来解释一下梯度下降算法:
假如只有一个变量的情况下,就是我们初中学的y=f(x) ,它只有一个自变量,假如是一个二次函数,像上图一样。那梯度下降是怎样来找到最小值的?其实是一个求微分的过程。 其实大家都知道导数其实就是对应切点的斜率,也就是说切线的斜率就等于它的导数,相信大家都还会求斜率吧?现在情况复杂一点,也就是说变量不在是一个,而是两个变量时,那么就会有多种情况出现。
假如说变量θ0和θ1,J(θ0,θ1)代表代价。一般来说图片超过三维的话人脑都不好想象,所以这里取两个变量。假设我们在曲面上任意取一个点,那我们的目标就是要在这个曲面上取出最小的J,跟二元函数不一样的是,多元的3D图像类似一座山,要往山下走的容易一点那么得找一个角度,在数学上其实就是在这一点上的偏导数,我们求出来的导数之后减去一个学习率乘以该点的偏导数,对于学习率的取值,后面会深入讲到。直接给公式了。
偏导数不会求的,可以回去回顾一下高等数学里面的内容。
———————————————
困了困了,对于学习率,让我们来看看如果 α 太小或 α 太大会出现什么情况:如果 α 太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果 α 太小的话,可能会很慢因为它会一点点挪动,它会需要很多步才能到达全局最低点。如果 α 太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果 α 太大,它会导致无法收敛,甚至发散。
春去秋来,一边记录,一边成长。
——《凡人周郎》
领取专属 10元无门槛券
私享最新 技术干货