万能的BP神经网络,从计算一道小学题开始

艾克上课打瞌睡,突然感觉脑袋上被砸了一下,然后听见一声咆哮:“艾克!!!还没睡够?!这道题怎么做?答不上来就站出去。”
黑板上写着:
一个苹果换3个梨,2个苹果换6个梨,3个苹果换9个梨,请问4个苹果换几个梨?
艾克睡意昏沉,根本反应不上来,对了,不是有老顽童爷爷的知识芯片吗?
他只好拜托老顽童,老顽童一看,这还不简单?答案几乎脱口而出。但一想,刚刚看了BP神经网络的论文,都说它是万能的,看能不能解决这个嘞。
老顽童想,简单点吧,只用一个神经元,一个输入一个输出。

1. 初始化

苹果是x,梨是y,我假设他们的函数是
y = w x + b y=wx+b y=wx+b
先设置w初始值是1,b的初始值设为0吧。
哈哈,我的训练数据在哪里? x = 1 x=1 x=1时,理想的结果 y ^ = 2 \hat y=2 y^=2.
ok,先看看我的神经网络的输出吧, y = 1 ∗ x + 0 , y = 1 y=1*x+0,y=1 y=1x+0y=1和我的理想输出不相符,误差是多少呢?
这里用最小二乘法计算误差 E = 1 2 ( y ^ − y ) 2 E=\frac{1}{2}(\hat y-y)^2 E=21(y^y)2
计算得: E = 1 2 ( 2 − 1 ) 2 = 0.5 E=\frac{1}{2}(2-1)^2=0.5 E=21(21)2=0.5

2. 推导误差反向传递

现在是在训练神经网络,出了错没关系,关键在于怎么来修正,珍惜这个宝贵的误差哟。
现在用误差来修正权重w,我希望w能变化一下,变化后使得误差趋近0。这好办了,求导,沿着负梯度方向更新w就能实现E趋近0咯。
开干,先求误差对权重的导数:
∂ E ∂ w = ∂ E ∂ y ∂ y ∂ w \frac{\partial E}{\partial w} =\frac{\partial E}{\partial y}\frac{\partial y}{\partial w} wE=yEwy
这是个复合函数求导。先算第一项:
∂ E ∂ y = − ( y ^ − y ) \frac{\partial E}{\partial y}=-(\hat y-y) yE=(y^y)
再算第二项:
∂ y ∂ w = x \frac{\partial y}{\partial w}= x wy=x
合并到一起是多少:
∇ E = ∂ E ∂ w = − ( y ^ − y ) ∗ x \nabla E=\frac{\partial E}{\partial w} = -(\hat y-y)* x E=wE=(y^y)x
怎么来更新我的权重呢?
先根据梯度的变化计算我的权重变化量,负梯度方向变化一个 η \eta η步长。
Δ w = − ∇ E ∗ η \Delta w=-\nabla E*\eta Δw=Eη
新的权重 w ∗ = w + Δ w w^*=w+\Delta w w=w+Δw

3.第一轮训练

代入之前推导的结果:
w ∗ = w + Δ w = w − ∇ E ∗ η = w − η ∗ [ − ( y ^ − y ) ∗ x ] w^*=w+\Delta w\\ =w-\nabla E*\eta\\=w-\eta*[-(\hat y-y)* x] w=w+Δw=wEη=wη[(y^y)x]
搞定了,假设步长等于0.2
我的新的权重 w ∗ = 1 − 0.2 ∗ [ − ( 2 − 1 ) ∗ 1 ] = 1.8 w^*=1-0.2*[-(2-1)*1]=1.8 w=10.2[(21)1]=1.8

Nice,第一轮结束,好像很接近正确答案了。

4.第二轮训练

开始第二轮:
y 2 = w x + b = 1.8 ∗ 2 + 0 = 3.6 y_2=wx+b=1.8*2+0=3.6 y2=wx+b=1.82+0=3.6
理想的输出 y 2 ∗ = 4 y_2^*=4 y2=4
计算权重的更新值
w ∗ = 1.8 − 0.2 ∗ [ − ( 4 − 3.6 ) ∗ 2 ] = 3.4 w^*=1.8-0.2*[-(4-3.6)*2]\\=3.4 w=1.80.2[(43.6)2]=3.4
我靠,怎么变这么大。

4 再训练第三轮:

y 3 = w x + b = 3.4 ∗ 3 + 0 = 10.2 y_3=wx+b=3.4*3+0=10.2 y3=wx+b=3.43+0=10.2
理想的输出 y 3 ∗ = 6 y_3^*=6 y3=6,误差变大了。更新一下权重。
计算权重的更新值
w ∗ = 3.4 + 0.2 ∗ [ − ( 6 − 10.2 ) ∗ 3 ] = 0.88 w^*=3.4+0.2*[-(6-10.2)*3]\\=0.88 w=3.4+0.2[(610.2)3]=0.88

5 调整步长

妈的,咋变这么小。估计是步长太大了。
如果把步长减小一点点。设为0.1。再计算一轮就好了。

6

正算着呢,老顽童听到艾克的哭泣,“不用算了,我已经被罚站了。”
老顽童说:“啊,这人工智障啊。”
“艾克,艾克,正确答案是8,你给我的样本太小了,我的步子迈的太大了”
艾克: “啥玩意啊”

你可能感兴趣的:(深度学习)