前置知识

梯度下降法

\[
设损失函数为F(\vec{w})
\\
则F(\vec{w}+\Delta{\vec{w}})-F(\vec{w}) = \nabla{F(\vec{w})} \cdot \Delta{\vec{w}}\\
其中\nabla{F(\vec{w})} 是 F(\vec{w})的梯度\\
所以当\Delta{\vec{w}} = -\eta \nabla F(\vec{w}),(\eta>0)时,下降速率最快\\
即\Delta{w_i} = -\eta \frac{\partial{F}}{\partial{w_i}}
\]

激活函数

\[
设当前激活函数为f(x) = 1/(1+\exp(-x))\\
有f'(x) = \exp(-x)/(1+\exp(-x))^2=f(x)*(1-f(x))
\]

多元复合函数求偏导的相关知识

正向计算

符号定义

  1. 节点 \(i\)的输入为\(net_i\),输出为\(O_i\)
  2. \(v_{ij},w_{jk}是节点i到节点j,节点j到节点k的权值\)
  3. 误差为\(E\),是个多元函数

输入层

输入层不使用激活函数,\(O_i = x_i\)

隐含层

隐含层输入为 \(net_j = \Sigma_{i=0}^{I-1} v_{ij}*O_i\)
输出为 \(O_j = f(net_j)\)

输出层

输入为\(net_k = \Sigma_{j=0}^{J-1}w_{jk}*O_j\)
输出为 \(O_k = f(net_k)\)

误差函数

\(E=\frac{1}{2}\Sigma_{k=0}^{K-1}(d_k-O_k)^2, d_k为期望输出\)

反向传播

使用梯度下降法调整节点间连接的权值,使得E获得极小值

输出层与隐含层之间的权值调整

\[
把E视为是关于\vec{w}, \vec{v}的函数\\
由前置知识得,\Delta{w_{jk}} = -\eta\frac{\partial E }{\partial w_{jk} }=-\eta\frac{\partial E}{\partial net_k}\cdot \frac{\partial net_k}{\partial w_{jk}}\\
即 \Delta{w_{jk}} = \eta(-\frac{\partial{E}}{\partial{net_k}})O_j\\
设\delta_k = -\frac{\partial{E}}{\partial{net_k}} = -\frac{\partial{E}}{\partial{O_k}} \cdot \frac{dO_k}{dnet_k}\\
即 \delta_k = (d_k-O_k)f'(net_k), \Delta{w_{jk}} = \eta\delta_kO_j
\]

隐含层与输入层之间权值的调整

\[
同理\Delta{v_{ij}} = -\eta\frac{\partial E }{\partial v_{ij} }=\eta(-\frac{\partial E}{\partial net_j}) \frac{\partial net_j}{\partial w_{ij}}\\
即 \Delta{v_{ij}} = \eta(-\frac{\partial{E}}{\partial{net_j}})O_i\\
设\delta_j = -\frac{\partial{E}}{\partial{net_j}} = -\frac{\partial{E}}{\partial{O_j}} \cdot \frac{dO_j}{dnet_j}=-\frac{\partial E}{\partial net_j}f'(net_j)\\
-\frac{\partial E }{\partial O_j} = -\Sigma_{k=0}^{K-1}\frac{\partial E}{\partial net_k}\frac{\partial net_k}{\partial O_j}=\Sigma_{k=0}^{K-1}\delta_kw_{jk}\\
所以\Delta v_{ij} = \eta O_if'(net_j)\Sigma_{k=0}^{K-1}\delta_kw_{jk}
\]

计算步骤

  1. 假设经过正向计算得到\(O_i, O_j,O_k\),且已知\(v_{ij},w_{jk},d_k\)

  2. 计算\(f'(net_k), f'(net_j)\),对于我选用的激活函数来说,
    \[
    f'(net_k)=O_k(1-O_k)\\
    f'(net_j)=O_j(1-O_j)
    \]
    有可能选择其他激活函数,所以把此步骤单独分开

  3. 计算\(\delta_k=(d_k-O_k)f'(net_k)\)

  4. 计算\(\Delta w_{jk}=\eta\delta_kO_j\)

  5. 计算\(\Delta v_{ij}=\eta O_i f'(net_j)\Sigma_{i=0}^{K-1}\delta_k w_{jk}\)

  6. \(v_{ij}+=\Delta v_{ij}, w_{jk} += \Delta w_{jk}\)

BP神经网络算法推导的更多相关文章

  1. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

  2. 二、单层感知器和BP神经网络算法

    一.单层感知器 1958年[仅仅60年前]美国心理学家FrankRosenblant剔除一种具有单层计算单元的神经网络,称为Perceptron,即感知器.感知器研究中首次提出了自组织.自学习的思想, ...

  3. Andrew BP 神经网络详细推导

    Lec 4 BP神经网络详细推导 本篇博客主要记录一下Coursera上Andrew机器学习BP神经网络的前向传播算法和反向传播算法的具体过程及其详细推导.方便后面手撸一个BP神经网络. 目录 Lec ...

  4. bp神经网络算法

    对于BP神经网络算法,由于之前一直没有应用到项目中,今日偶然之时 进行了学习, 这个算法的基本思路是这样的:不断地迭代优化网络权值,使得输入与输出之间的映射关系与所期望的映射关系一致,利用梯度下降的方 ...

  5. BP神经网络算法预测销量高低

    理论以前写过:https://www.cnblogs.com/fangxiaoqi/p/11306545.html,这里根据天气.是否周末.有无促销的情况,来预测销量情况. function [ ma ...

  6. BP神经网络算法学习

    BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...

  7. 机器学习入门学习笔记:(一)BP神经网络原理推导及程序实现

    机器学习中,神经网络算法可以说是当下使用的最广泛的算法.神经网络的结构模仿自生物神经网络,生物神经网络中的每个神经元与其他神经元相连,当它“兴奋”时,想下一级相连的神经元发送化学物质,改变这些神经元的 ...

  8. JAVA实现BP神经网络算法

    工作中需要预测一个过程的时间,就想到了使用BP神经网络来进行预测. 简介 BP神经网络(Back Propagation Neural Network)是一种基于BP算法的人工神经网络,其使用BP算法 ...

  9. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

随机推荐

  1. [luogu3943] 星空

    题面 ​ 这个题目大意上是这样的:给定一个长度为n的01串, 其中只有k个0, 每次操作时, 从给定的m种长度中选择一种, 选择序列上长度为这种的进行反转操作, 求至少需要多少次操作使得整个串全变为1 ...

  2. React 入门学习笔记2

    摘自阮一峰:React入门实例教程,转载请注明出处. 一.获取真实的DOM节点 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM).只有当它 ...

  3. Qt在线/离线安装包下载网址和说明

    截至到2018年3月27日,Qt最新版本的安装需要使用在线安装工具:qt-unified-windows-x86-3.0.2-online.exe,该安装个工具的下载地址为: http://downl ...

  4. 【转】如何在VMware上安装macOS Sierra 10.12

    本文主要介绍目前网络上比较流行的使用预安装镜像安装macOS 10.12的方法,并以9月20号发布的最新GM版本16A323为例. 安装方案 破解VMware 创建虚拟机,加载预安装镜像 初始化mac ...

  5. 关于jquery的click()方法

    昨天,有个同事研究了以下jqury的click()方法,代码如下: <!DOCTYPE html> <html> <head> <meta charset=& ...

  6. 使用XWAF框架(2)——上传文件

    XWAF提供了上传文件的HttpFileUploader工具类,具备强大的多文件上传.文件类型过滤.文件大小限制.存储目录设置.文件名称更改等功能,简化了Web应用开发的编程工作. 它能同时解析表单参 ...

  7. 基于Babylon.js编写简单的骨骼动画生成器

    使用骨骼动画技术可以将网格的顶点分配给若干骨头,通过给骨头设定关键帧和父子关系,可以赋予网格高度动态并具有传递性的变形 效果.这里结合之前的相关研究在网页端使用JavaScript实现了一个简单的骨骼 ...

  8. HBase基础概念

    定义 非关系型分布式列式数据库,支持大数据量查询(百万,上亿行) 概要 数据存储:HDFS 数据计算:MapReduce/Spark 服务协调:Zookeeper 特征 列式存储(列只有一种类型byt ...

  9. 常用模块 - openpyxl模块

    一.简介 xlrd/xlwt 主要是针对Office 2003或更早版本的XLS文件格式 缺点:不支持XLSX文件格式 OpenPyXL 能读能写能修改 缺点:不支持XLS Microsoft Exc ...

  10. 为eclipse添加源代码

    看到这个页面,直接点击 红色区域 attach source 关联源代码,进入到如下页面: 点击第二个选择外部的路径,点击导入文件夹,也就是解压出来的src文件夹(不建议直接导整个jar包,虽然也可以 ...