前面我们已经了解到神经网络进行预测的过程,但是仍然留下许多疑问,比如权重值如何获得,如何训练神经网络等,这些问题我们将在本文展开。
权重值如何得到
权重值也就是前文所提到的小蜘蛛的道具,没有看过的朋友可以先看看我的上一个博客。
权重值该如何获得呢?
我们以最简单的三个神经元的神经网络举例子:
最左边的神经元是起点,最右边的是终点,只有中间的神经元有权重值。
我们先来离散的获得一部分点:
我们可以隐约地看到这些点大约分布在一条直线附近, 我们把这条直线画出来
那我们如何通过这几个点来获得这条红色的线呢?
先来明确一个问题:获得红色的线有什么用?
- 获得红色线后,我们可以提供一个x的值,然后预测y的值,虽然这个值不一定准确,但是也在一个大概的范围内。
这十个已知的点分别是什么?
第一列表示x轴的坐标,第二列表示y轴的坐标
其实思路就是用最小二乘法,先假设随便画一条线
我画了一条y=0.1x+0.1的线如图所示
y = wx + b
我令w=0.1, b=0.1
随机给w和b赋值,不用在以是多少,先画出来,有可能一次就能画出红色的线!
显然我们画的线差距很大,此时使用最小二乘法,就是每个点到直线的距离加起来,再用梯度下降法来优化!
好的,如果我这么说,肯定和每说一样,那么我一步一步来
第一个点的坐标是(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等于 0.1 - (-0.0326) x 0.2 = 1.00652
更新后的b等于 0.1 - (-0.326) x 0.2 = 1.0652
我们已经更新了w和b的值,只要重复这个步骤足够多的次数,那么就可以得到很接近红色的线。
其实,这就是神经网络的训练过程。
过程总结
先把我们已经有的值传入网络,网络一开始的权重值是随机的,传入网络得到一个预测值,这个预测值会和真实值有一定的差距,那么我们优化这个差距,让这个差距变小,其实这就是一个反向传播的过程,我们用数学计算来更新了w和b的值,那么下一次传入网络得到的预测值与真实值之间的距离就会减小,周而复始,这个距离不断减小,我们就可以得到一个预测能力比较好的w和b,也就是拟合能力比较强的网络,就可以对未知的数据得到较为准确的结果。