赞
踩
本文通过电子表格展示如何基于具体数据计算神经网络的输出值和如何根据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),而训练目标是一个线性分类器,即
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。