反向传播算法(Back propagation)

目的及思想

我们现在有一堆输入,我们希望能有一个网络,使得通过这个网络的构成的映射关系满足我们的期待。也就是说,我们在解决这个问题之前先假设,这种映射可以用网络的模型来比较好的描述。为什么是网络而不是什么别的形式呢?不懂了。。

这个网络到底是个怎样的形式呢?如下图所示,\(i1,i2\)是输入,\(o1,o2\)是输出,其中\(w1...w8, b1, b2\)是这个网络中的参数。对于一个结点来说,它的所有输出都等于它的每个输入,对于对应\(w\)的加权求和带入激活函数的结果。

而现在\(w1...w8, b1, b2\)这些参数都是未知的,我们希望能通过一些方法逼近这些参数的真实结果。

我们将\(w1...w8, b1, b2\)这些参数,考虑成一个高维空间中的点,与三维还有二维的情况类似的,我们贪心的朝着周围都走一小步,找到那个能获得相对最优解的方向,并接受这次移动,这是经典的梯度下降的思想。于是,我们引入了损失函数,使用它来描述这个点的优秀程度。\(w1...w8, b1, b2\)是这个函数的输入,通过调整这些输入,我们希望能获得一个使得损失函数获得最值的位置,然而实际上,我们获得的显然是一个极值,并不一定是最值,除非能证明这个损失函数关于这些参数是凸的。但是,作为一个比较优秀的解,这样做还是有价值的。

后半部分的思想过程顺理成章,感觉整套方法最有价值和启发意义的就是这个网络模型。

具体算法

  1. 设定输入量\(i_1,i_2...i_n\),以及\(w_1...w_{n*n*2}, b_1, b_2\),如果可能尽量设定在离真实解较近的位置,最好在一个坑里?
  2. 激活函数选取经典的sigmoid函数 \(f(x) = \frac{1}{1+e^{-x}}\)
  3. 损失函数取 \(L(w_1...w_{n*n*2}, b_1, b_2) = \frac{1}{2} \sum_{i=1}^n (target_j - o_j)^2\), 我们定义\(i_j\)对应的目标输出为\(target_j\)
  4. 对于当前网络带入\(i_1,i_2...i_n\),求出对应的\(o_1,o_2,...,o_n\). 这个过程显然就是在一张dag上按照拓扑序递推更它的后继节点即可,每到一个点计算它的激活函数的输出,然后更新它的后继节点
  5. 更新完之后,我们就获得了\(o_1,o_2,...,o_n\). 现在需要求解 L 关于这每个参数的在当前输入情况下的偏导。容易利用链式法则解决(懒得写了)这里有超详细推导
    一文弄懂神经网络中的反向传播法——BackPropagation
  6. 返回操作 4,直到获得令人满意的精度

代码

c++写了个实现。太丑了不发了。。最麻烦的部分就是链式求导算梯度的几个式子推导,有了式子之后还是挺好写的。非常有意思的是,一开始的写法,没有加入参数 b1,b2,因此迭代 500000 次左右才能使L达到 1e-22 的精度,但是当我们,补上 b1 和 b2 时,只用迭代 200000 次即可达到,一个式子形式的设计或者说网络结构的设计,对于算法的效果影响还是很巨大的。

转载于:https://www.cnblogs.com/RRRR-wys/p/10873130.html

反向传播算法学习笔记相关推荐

  1. 随时间反向传播算法(BPTT)笔记

    随时间反向传播算法(BPTT)笔记 1.反向传播算法(BP) 以表达式f(w,x)=11+e−(w0x0+w1x1+w2)f(w,x)=\frac{1}{1+e^{-(w_0x_0+w_1x_1+w_ ...

  2. 神经网络反向传播算法原理笔记

    神经网络是一种是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型.该模型以并行分布的处理能力. ...

  3. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  4. 【 反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10)】

    反向传播算法 Back-Propagation 数学推导以及源码详解 深度学习 Pytorch笔记 B站刘二大人(3/10) 数学推导 BP算法 BP神经网络可以说机器学习的最基础网络.对于普通的简单 ...

  5. July深度学习笔记之神经网络与反向传播算法

    July深度学习笔记之神经网络与反向传播算法 一.神经网络 神经网络的大致结构如下: 大致可以分为输入层.隐藏层与输出层. 而我们可以单独拿出来一个结点,可以发现,其实它就是类似一个逻辑回归(LR), ...

  6. 深度学习中反向传播算法简单推导笔记

    反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...

  7. 《TensorFlow 2.0深度学习算法实战教材》学习笔记(六、反向传播算法)

    反向传播算法和梯度下降算法是神经网络的核心算法. 导数与梯度 导数本身是标量,没有方向,但是导数表征了函数值在某个方向Δ

  8. 【深度学习】神经网络基础:反向传播算法

    作者:Simona Ivanova AI/ML  专家 就职于 Science 杂志   导读 反向传播(Backpropagation,简称 BP)是目前用来训练人工神经网络(Artificial ...

  9. 【Stanford CNN课程笔记】4. 反向传播算法

    本课程笔记是基于今年斯坦福大学Feifei Li, Andrej Karpathy & Justin Johnson联合开设的Convolutional Neural Networks for ...

最新文章

  1. 你真的以为了解java.io吗 呕心沥血 绝对干货 别把我移出首页了
  2. 走过19年,每年千万下载量,科学计算开源库SciPy的前世今生
  3. drools规则中调用其它规则_简化机器学习中的关联规则
  4. 数字证书及在WCF中的应用
  5. 可覆写的函数与创建节点
  6. hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))
  7. 基因大数据:一面是科技,一面是责任
  8. 32位mips运算器logisim_很多网友问32位低功耗MCU设计
  9. 2019自考00018计算机应用基础,全国2019年4月自考00018《计算机应用基础》试题及答案...
  10. 爆料人透露苹果正开发可折叠iPhone:两块独立屏幕连接 无刘海
  11. Java基础学习总结(36)——Java注释模板
  12. 提高网站第一次加载速度
  13. tkinter 实现简单登录窗
  14. 敏感词屏蔽工具(DFA算法)
  15. 2021年华为OD面试流程
  16. [工作必备]pandas数据分析处理52个常用技巧
  17. JS 利用CNZZ进行站长统计
  18. Microsoft Teams管理(一)
  19. 开源自主导航小车MickX4(一)ROS底盘硬件
  20. c++getline函数的使用

热门文章

  1. linux truncate文件,linux系统编程:用truncate调整文件大小
  2. 计算机专业的吸引力,计算机专业文献翻译-面向对象编程具有多方面的吸引力.doc...
  3. 关于导入c3p0-0.9.5.5.jar包引发NoClassDefFoundError、ClassNotFoundException
  4. Java当中TreeMap用法
  5. [mybatis]Getting Started
  6. [汇编语言]实验一:查看CPU和内存,用机器指令和汇编指令编程。
  7. [PAT乙级]1009 说反话
  8. [Java基础]Date类基础
  9. Just a Hook HDU - 1698(查询区间求和+最基础模板)
  10. 计算机博士两篇一区两篇会议,本科博士联手!西电陈渤团队两篇论文被顶级会议录用...