Outline

前向计算

反向传播

很多事情不是需要聪明一点,而是需要耐心一点,踏下心来认真看真的很简单的。

假设有这样一个网络层:

第一层是输入层,包含两个神经元i1 i2和截距b1;

第二层是隐含层,包含两个神经元h1 h2和截距b2,

第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数默认为sigmoid函数。

赋初值为:

输入数据  i1=0.05,i2=0.10;

输出数据  o1=0.01, o2=0.99;

初始权重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

      w5=0.40,w6=0.45,w7=0.50,w8=0.55

目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

Step 1 前向计算

1. 输入层—>隐含层:

计算神经元h1的输入加权和:

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

同理,可计算出神经元h2的输出o2:

2. 隐含层—>输出层:

计算输出层神经元o1的值:

同理,计算o2:

前向计算过程结束,得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差很远,对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

1. 计算总误差

总误差:(square error)

分别计算o1和o2的误差,总误差为两者之和:

2. 输出层—>隐含层的权值更新

以权重参数w5为例,如果想知道w5对整体误差产生了多少影响,用整体误差对w5求偏导求出:(链式法则)

如图所示:

现在分别计算每个式子的值:  loss--Sigmoid--weight

计算

计算下一步之前,先来看一下Sigmoid函数求导:

根据倒数法则从f(x)开始推导得出:

有以上两个式子可推出:

计算

计算

最后三者相乘:

这样我们就计算出整体误差E(total)对w5的偏导值。

综合以上四步计算过程可得:

为了表达方便,用来表示输出层的误差:

因此,整体误差E(total)对w5的偏导公式可以写成:

如果输出层误差计为负的话,也可以写成:

最后,更新w5的值,是学习速率,这里设为0.5:

同理,可更新w6,w7,w8:

3. 隐含层—>输入层的权值更新

上一部分传播过程为:out(o1)—>net(o1)—>w5;

此处:out(h1)—>net(h1)—>w1,注意out(h1)会接受E(o1)和E(o2)两个地方传来的误差,两个都要计算

计算

先计算

同理,计算出:

两者相加得到总值:

再计算

再计算

最后,三者相乘:

为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

最后,更新w1的权值:

同理,额可更新w2,w3,w4的权值:

一次误差的反向传播完成,之后再把更新的权值重新计算,得到新的误差,该例中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99])。

BP原理 - 前向计算与反向传播实例的更多相关文章

  1. 实现属于自己的TensorFlow(二) - 梯度计算与反向传播

    前言 上一篇中介绍了计算图以及前向传播的实现,本文中将主要介绍对于模型优化非常重要的反向传播算法以及反向传播算法中梯度计算的实现.因为在计算梯度的时候需要涉及到矩阵梯度的计算,本文针对几种常用操作的梯 ...

  2. pytorch中的前项计算和反向传播

    前项计算1 import torch # (3*(x+2)^2)/4 #grad_fn 保留计算的过程 x = torch.ones([2,2],requires_grad=True) print(x ...

  3. [图解tensorflow源码] MatMul 矩阵乘积运算 (前向计算,反向梯度计算)

  4. [tensorflow源码分析] Conv2d卷积运算 (前向计算,反向梯度计算)

  5. 深度学习与CV教程(4) | 神经网络与反向传播

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  6. BP(back propagation)反向传播

    转自:http://www.zhihu.com/question/27239198/answer/89853077 机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定 ...

  7. 再谈反向传播(Back Propagation)

    此前写过一篇<BP算法基本原理推导----<机器学习>笔记>,但是感觉满纸公式,而且没有讲到BP算法的精妙之处,所以找了一些资料,加上自己的理解,再来谈一下BP.如有什么疏漏或 ...

  8. cs231n(三) 误差反向传播

    摘要 本节将对反向传播进行直观的理解.反向传播是利用链式法则递归计算表达式的梯度的方法.理解反向传播过程及其精妙之处,对于理解.实现.设计和调试神经网络非常关键.反向求导的核心问题是:给定函数 $f( ...

  9. CS231n课程笔记翻译5:反向传播笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和巩子嘉进行校对修改.译文含公式和代码, ...

随机推荐

  1. 题解 【POI2008】KUP-Plot purchase

    题面 先把题目意思讲一下吧: 给一个 \(n*n\) 的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于\([k,2k]\). 那么首先,可以想到,如果\(a[i][j]\)(格子的价格,下 ...

  2. 《剑指offer》算法题第五天

    今日题目: 反转链表 合并两个排序的链表 树的子结构 二叉树的镜像 对称二叉树 今日重点是1反转链表,3树的子结构,以及5对称二叉树. 1. 反转链表 题目描述: 输入一个链表,反转链表后,输出链表的 ...

  3. SpringMVC——返回值类型

    1.void作为返回值类型 如果你的方法写成了Void就跟原来Servlet含义是差不多的 @RequestMapping("/index*") public void first ...

  4. Java线程之ThreadLocal

    翻译:https://www.journaldev.com/1076/java-threadlocal-example?utm_source=website&utm_medium=sideba ...

  5. Vue_(组件)实例属性

    Vue实例属性与方法中文文档 传送门   Vue实例属性:vue实例直接调用的属性 Learn 一.vm.$data:获取属性 二.vm.$el:获取实例挂载的元素 三.vm.$options:获取自 ...

  6. DOM对象属性

    事件  onmouseover 鼠标以上事件  onmouseout    鼠标离开事件  onclock 鼠标点击事件  onfocus 获取焦点 onblur 失去焦点 oninput  输入事件 ...

  7. 「CTSC 2008」祭祀

    题目链接 戳我 \(Solution\) 第一问 这道题要知道一个叫做\(Dilworth\)的定理 最长反链\(=\)最小链覆盖 证明(\(from\ r\_64\)): 所以我们只要求一个最小链覆 ...

  8. 05.用两个栈实现队列 Java

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 进栈: 直接进stack1 出栈: 若stack2不为空,则出栈. 否则,当stack1不为空时, ...

  9. Python学习笔记—条件判断和循环

    条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...

  10. 操作系统-Windows:UWP(Universal Windows Platform)

    ylbtech-操作系统-Windows:UWP(Universal Windows Platform) 1.返回顶部 1. UWP即Windows 10中的Universal Windows Pla ...