第五篇:神奇的神经网络(2)

上一期,神奇的神经网络说的是:

神经网络是多个神经元按照一定规则连接起来的网络。它之所以神奇,是因为它可以用激励函数不断逼近我们想要“拟合”的目标。

神经元表达式:

假设我们有一个目标target,要使得输出Output=Target,我们可以:

1、更改激励函数F ;

2、更改权重w ;

3,更改输入x;

4、更改偏差b

其实,只有权重w,和偏差b可以不断更新,其他都在建立模型时候就确定好了。我们假设只更新权重w,b=0。

那么,权重w应该怎样更新,来满足输出的要求呢?

我们先来抛个砖:随机更新。权重w的值随机生成,假设随机100次,这100次更新中,我们选择输出Output最接近目标Target的一次就好了。

但是这个方法太不机智,浪费计算量,而且找到的不一定就是最优的。我们应该找到一个方法,朝着最优的权重w值不断更新,使我们的Output = Target。也就是我们今天的主题——误差反向传播 Back Propagation

WHAT:什么是误差反向传播(Back Propagation)?

1、反向传播算法的发展目标:找到一种训练多层神经网络的方法,于是呢,它可以学习合适的表达,使得目标Target与输出Output不断接近。这个“不断接近”,可以量化为:

2、以上就是更新权重的目标方程式。我们要使得Loss 损失降到最小得到想要的输出。那么,现在问题变成:如何找一个方程式的最小值——梯度下降法 (Gradient Descent)。

3、什么是梯度下降法(Gradient Descent)?

如下图,假设初始权重就是我们的小黑球, 目标函数为 J(w), 我们的任务是找到目标函数最小值 Global cost minimum。小黑球可以去到曲线上的任何一个位置,我们应该给它怎样一个指令,让它一步步的走向最低点呢?

我们可以告诉它,朝着斜率变小的方向走!斜率就是此时的梯度,而这个方法就是梯度下降法。当梯度变得足够小的时候,我们就认为已经找到了最低点。

值得注意的是,我们也需要限小黑球的步长,因为如果步长太小,小黑球要花很多的时间找到最低点;如果步长太大,它可能错过最低点。

4、同理,权重w的更新,利用梯度下降法,可以表达如下。

其中,ŋ是学习率(即步长),是损失函数Loss Function对于w的偏微分。随着权重w的更新,损失函数沿着其偏微分相反方向逐渐变小。

HOW: 误差反向传播是怎样实现的

贴心的部分来了,看下面的图解。

5、图中,每一个节点,都包含两个值:该节点的输出值和梯度值。输出值有正向传播计算得到,梯度值由反向传播计算得到。

6、绿色部分就是正向传播,数值从左往右进行计算。

首先,从左往右,x,y,z初始赋值分别为-2,5,-4

然后,计算公式 f(x, y, z) = (x + y)*z

结果, q = z +y => 3, f = q*z => -12。

7、正向传播结束后,反向传播会从后往前依次计算出各个节点的梯度值。然后,根据梯度下降法则一步步,重复的更新的权重值,最终达到误差函数的最小值。

8、红色的部分就是反向传播,数值反向,从右往左进行计算

公式f(x, y, z) = (x + y)*z ,我们可以用链式原则,把公式拆分开来。

首先 q = x + y,分别对x,y的偏导是:

然后 f = q*z,分别对q,z的偏导是:

最后链接到一起,x的偏导是。对y,z的偏导同理。

初始值为1,那么,计算q和z的偏导,分别是-4,3。对x,y对z的偏导分别是-4,-4,3。

9、权重的更新

(真的勇士,敢于直面惨淡的计算!来吧,勇士,过了这关,后面就平坦多了)

假设此时学习率η=0.1,仅对一个输入点进行采样,且目标输出为Target=-10,那么此时的误差Loss应该为:

x对于Loss Function的偏导为:

x根据梯度下降法,更新为:

同理,也可用来更新y和z。

WHAT'S MORE:

反向传播会重复n次, 不断更新权重w,直到输出值的误差收敛到足够小。下图反映了两种方法的收敛结果。

两条曲线的总体趋势都是随着反向传播的次数增加,权重的不断更新,误差越来越小,直到趋近于0,达到收敛

批量训练Batch Training是一次选取一定量的多个训练样本,这些样本我们称为一个Batch。然后将一个Batch作为训练数据,计算一个Batch的输出与目标之间的误差,求它们的平均值,并用这个平均误差来计算梯度。这样的误差收敛会更加平稳,如红色折线所示。

随机训练Stochastic Training是仅仅随机输入一个训练样本,也就是Batch Training 的Batch为1 的时候,计算该训练样本的输出Output与目标Target的差值。这样的误差收敛过程可能不平稳,如蓝线所示。

好的,神奇的神经网络介绍结束啦~~

下期我们聊聊Word2Vec吧~

那下次见~~

————————The End————————

停了两周没有更新,感觉很愧疚。。。上上周是五一,我疲于旅游,本来还想要不要更新一篇游记,然后,泰国网很差就是发不出去。气,不发了。

上周,就开始写back propagation了,真的好难写啊。。。写写改改的。。。总觉得没说清楚。。。back propagation应该算得上神经网络最难啃的部分了。。。过了这part,后面应该会顺畅很多吧。。。

关于这个公众号的一些小事情

公众号叫做OOOCaptain,致敬死亡诗社。同时感谢我成长的路上,那些像船长一样引导着我的人~ O Captain! My Captain!

我接下来的每一篇文章,都是我的成长(主要是在Deep learning的路上)。希望,它们也能变成你的成长~!

少年,要记得以梦为马,要记得抖腿吃瓜,要记得关注我哦~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180516G1Z4Z200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券