㈠ 神经网络的训练,究竟在训练什么
前面我们已经了解到神经网络进行预测的过程,但是仍然留下许多疑问,比如权重值如何获得,如何训练神经网络等,这些问题我们将在本文展开。
权重值也就是前文所提到的小蜘蛛的道具,没有看过的朋友可以先看看我的上一个博客。
权重值该如何获得呢?
我们以最简单的三个神经元的神经网络举例子:
最左边的神经元是起点,最右边的是终点,只有中间的神经元有权重值。
我们先来 离散 的获得一部分点:
我们可以隐约地看到这些点大约分布在一条直线附近, 我们把这条直线画出来
那我们如何通过这几个点来获得这条红色的线呢?
这十个已知的点分别是什么?
第一列表示x轴的坐标,第二列表示y轴的坐标
其实思路就是用最小二乘法,先假设随便画一条线
我画了一条 y=0.1x+0.1 的线如图所示
显然我们画的线差距很大,此时使用最小二乘法,就是每个点到直线的距离加起来,再用梯度下降法来优化!
好的,如果我这么说,肯定和每说一样,那么我 一步一步 来
第一个点的坐标是(1, 0.16375502570787515),我们把x=1带入y=0.1x+0.1这个函数,得到y=0.2
显然我们正确的y应该是0.163,那么正确的y,和我们在y=0.1x+0.1得到的y值差距是多大呢?差距是:(0.163-0.2)^2
我们要想办法减小这个差距
差距是怎么得到的? 预测值减去真实值再平方 ,用数学语言就是(0.1*1+0.1-0.2)^2 ==> (wx+b-2)^2
就是说我们要对函数 (y - wx+b)^2 获得的值最小,也就是求这个函数的 最小值 ,高中数学就讲到求函数最小值的方法就是 求导 ,这是二元函数,就是高考最喜欢做的题目!!!求导之后画出导数函数的图像,然后与0相交的点就是极小值点!大家应该很熟悉这个步骤。
不过
这个函数有w和b两个未知数,我们的思路是正确的,只是不能通过这种方式获得最小值,所以这里我们求的是对w和对b的偏导数,( 这里需要微积分学历 )对w的偏导数就是 2w(wx+b-y) 。对b的偏导数就是 2(wx+b-y) 。
此时我们把第一个点的数据代入 x=1, y=0.163, w=0.1, b=0.1
对w的偏导数等于 0.0326
对b的偏导数等于 0.326
此时,我们设定一个步长,也叫学习率,假设等于0.2吧,
那么,
我们已经更新了w和b的值,只要重复这个步骤足够多的次数,那么就可以得到很接近红色的线。
其实,这就是神经网络的训练过程。
先把我们已经有的值传入网络,网络一开始的权重值是随机的,传入网络得到一个预测值,这个预测值会和真实值有一定的差距,那么我们优化这个差距,让这个差距变小,其实这就是一个反向传播的过程,我们用数学计算来更新了w和b的值,那么下一次传入网络得到的预测值与真实值之间的距离就会减小,周而复始,这个距离不断减小,我们就可以得到一个预测能力比较好的w和b,也就是拟合能力比较强的网络,就可以对未知的数据得到较为准确的结果。
㈡ 用最简单的神经网络做数据分类,展示神经网络训练过程
本文用简单的神经网络做数据分类,展示神经网络训练过程,伏薯方便理解缺锋者
神经网络模型:Y = w1 x1 + w2 x2 + b
第一步 :生成训练数据与标签
第二步 :合并数据并将数据打乱,然后将数据转换为Paddle框架基知所需要的数据类型
第三步 ,基于Paddle,构建神经网络、定义损失函数和优化器:Y = w1 x1 + w2 x2 + b
第四步 ,构建训练过程
最后一步 ,绘制训练结果
㈢ 深度神经网络是如何训练的
Coursera的Ng机器学习,UFLDL都看过。没记错的话Ng的机器学习里是直接给出公式了,虽然你可能知道如何求解,但是即使不知道完成作业也不是问题,只要照着公式写就行。反正我当时看的时候心里并没能比较清楚的明白。我觉得想了解深度学习UFLDL教程 - Ufldl是不错的。有习题,做完的话确实会对深度学习有更加深刻的理解,但是总还不是很清晰。后来看了Li FeiFei的Stanford University CS231n: Convolutional Neural Networks for Visual Recognition,我的感觉是对CNN的理解有了很大的提升。沉下心来推推公式,多思考,明白了反向传播本质上是链式法则(虽然之前也知道,但是当时还是理解的迷迷糊糊的)。所有的梯度其实都是对最终的loss进行求导得到的,也就是标量对矩阵or向量的求导。当然同时也学到了许多其他的关于cnn的。并且建议你不仅要完成练习,最好能自己也写一个cnn,这个过程可能会让你学习到许多更加细节和可能忽略的东西。这样的网络可以使用中间层构建出多层的抽象,正如我们在布尔线路中做的那样。例如,如果我们在进行视觉模式识别,那么在第一层的神经元可能学会识别边,在第二层的神经元可以在边的基础上学会识别出更加复杂的形状,例如三角形或者矩形。第三层将能够识别更加复杂的形状。依此类推。这些多层的抽象看起来能够赋予深度网络一种学习解决复杂模式识别问题的能力。然后,正如线路的示例中看到的那样,存在着理论上的研究结果告诉我们深度网络在本质上比浅层网络更加强大。