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

主旨

本文通过电子表格展示如何基于具体数据计算神经网络的输出值和如何根据BP算法计算损失函数对每个参数的梯度,实现网络训练功能。

索引

本文是本系列第四篇,本系列介绍见Python实现神经网络Part 1: 实现forward和BP算法的神经元

动机

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

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

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

和前一篇一样,本文中BP算法参考斯坦福大学的BP算法教材。文中每一步计算都对应于教材中描述的步骤,可以互相参照。

实现方法

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

2. 前向计算
我们假定输入数据为(1,2),而训练目标是一个线性分类器,即 x1>=

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值