Numpy编写BP传播过程全解
引言
BP反向传播矩阵推导图示详解一文中在矩阵视角下对 BP 的原理进行了详细的介绍,神经网络中权重的梯度由前一层前向传播值与后一层的误差值整合计算得到。该文中也对吴恩达的斯坦福机器学习的讲义中的相关部分进行了证明。
BP 的矩阵形式的推导的好处在于它的矩阵表示形式对编程非常有指导意义,当前有很多的热门的深度学习框架,例如 Pytorch 和 Tensorflow,像这种深度学习框架集成性很高,神经网络中 BP 更新参数的过程几行代码就搞定,这对于从代码中理解其原理造成了一定的困难。
▲ 图1.神经网络前向计算过程
根据 BP 反向传播矩阵推导图示详解中 Section 6 的推导过程可得到各层网络的权重梯度计算示意图(示意图中各字母代表的含义查阅 BP 反向传播矩阵推导图示详解的 Section 6)。
▲ 图2.神经网络BP原理
▲ 图3.神经网络BP原理(吴)
代码详解
本文的代码结构非常简单如下图所示一共三个文件。data 文件夹下是 mnist 手写体数字集的压缩包 mnist.pkl.gz;mnist_loader.py 是用于加载 mnist 数据集的;BP_Numpy.py 是 BP 训练神经网络的程序,也是本文重点要讲的程序。
▲ 图4.Sigmoid函数及其导数
图 5 是类 NerualNetwork 的初始化,进而构建一个神经网络,分别对神经网络的尺寸(有几层,每一层的单元数是多少),每一层的权重和偏置进行初始化。
▲ 图5.类初始化
▲ 图6.前向计算过程
▲ 图7. BP反向传播
▲ 图8.权重和偏置更新
▲ 图9.权重和偏置更新
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。