实现神经 络番外:利用Excel实现神经 络和BP算法

主旨

索引

动机

在自己编程实现神经 络的过程中,最大的困难在于如何检查实现结果是否正确。单纯的Code Review显然无法有效发现所有Bug,从 上也没有查到公开的测试用例,因此只能自己想办法。

从软件工程的角度,测试用例需要清晰的定义出程序的输入和预期输出。进一步,为了方便Debug,仅仅知道输入和预期输出还不够,还需要运算中重要中间结果量,以便程序输出结果与预期不符时,通过检查不同阶段的中间变量定位出问题的Root Cause。

基于上述考虑,我想到了通过电子表格计算出神经 络前向和反向的每一步结果,一方面可以作为自己写的神经 络程序的单元测试例;另一方面也在计算的过程中更加形象的理解神经 络。

实现方法

1. 络结构
我们定义一个包含一个输入层、一个输出层,一个隐层的神经 络,每一层包含2个节点, 络结构为全连接 络,激活函数为sigmoid函数。
在Excel中我用如下格式描述这个 络,表格里src表示源节点,dst表示目标节点,src和dst交叉位置的系数就是这条边的权重,bias节点与dst节点的交叉位置表示dst节点的bias偏置量

3. 计算Loss
根据前述教材,选用如下函数作为损失函数

J(w,b;x,y)=12∥hW,b(x)−y∥2” role=”presentation” style=”text-align: center; position: relative;”>J(w,b;x,y)=12hW,b(x)/mo>y2

表格中计算公式如下

基于逐点误差,可以进一步算出梯度表格

Excel文件下载地址

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34263 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年2月23日
下一篇 2017年2月23日

相关推荐