多层网络和反向传播笔记
2016-04-17 21:25
411 查看
在我之前的博客中讲到了感知器(感知器),它是用于线性可分模式分类的最简单的神经网络模型,单个感知器只能表示线性的决策面,而反向传播算法所学习的多层网络能够表示种类繁多的非线性曲面。
对于多层网络,如果使用线性单元的话,多个线性单元的连接仍然是线性函数,所以还不能表征非线性函数。使用感知器单元,但是它不连续所以也就不可微,不适合梯度下降算法。我们需要这么一种单元,它的输出是输入的非线性函数,而且输出是输入的可微函数。那么可以使用sigmoid单元,它非常类似于感知器单元,而且基于一个平滑的可微阈值函数,It looked like this:
sigmoid函数公式如下:σ(y)=11+e −y \sigma (y)=\frac{1}{1+e^{-y}} 它的输出范围为[0,1],随输入单调递增,这个函数把非常大的输入值映射到一个小范围的输出,它经常被称为sigmoid单元的挤压函数(squashing function)。sigmoid函数的导数很容易以它的输出表示,即dσ(y)dy =σ(y)⋅(1−σ(y)) \frac{d\sigma (y)}{dy}=\sigma (y)·(1-\sigma (y)) 有时候可以使用其他容易计算导数的可微函数代替,比如sigmoid函数中的e −y e^{-y} 有时候被替换为e −ky e^{-ky} 其中k k 是个正常数,用来决定函数的陡峭性。双曲正切函数也可用来代替sigmoid函数 。
对于由一系列确定的单元相互连接形成的多层网络,反向传播算法可以用来学习这个网络的权值,它使用梯度下降方法来最小化网络输出值和目标值之间的误差平方。
在这里我们要考虑网络中多个输出单元,而不是一个单元,所以可以看到下面的误差公式中要计算两次和:E(w ⃗ )≡12 ∑ d∈D ∑ k∈outputs (t kd −o kd ) 2 E(\vec{w}) \equiv \frac{1}{2} \sum_{d\in D} \sum_{k\in outputs}(t_{kd}-o_{kd})^2 其中outputs outputs 是网络输出单元的集合,t kd t_{kd} 和o kd o_{kd} 是与训练样例d d 和第k k 个输出单元相关的输出值。
反向传播算法需要解决的问题是搜索一个巨大的假设空间,这个空间由网络中所有单元的所有可能权值定义,此时可以用一个误差曲面来形象表示。在和训练单个单元的情况一样,梯度下降可以用来寻找使E E 最小化的一个假设。
多层网络的一个主要不同是它的误差曲面可能有多个局部最小值,那么这就会带来一个问题,使用梯度下降的时候不能保证一定能收敛到全局最小值。不过在实践中反向传播都产生了出色的结果。
反向传播首先把输入x ⃗ \vec{x} 沿网络前向传播,然后计算每个单元u u 的输出o u o_u ,然后是误差沿网络反向传播(反向传播算法名字应该就是这么得来的吧),对于网络的每个输出单元k k ,计算它的误差项δ k \delta_k :δ k ←o k (1−o k )(t k −o k ) \delta_k \gets o_k(1-o_k)(t_k-o_k) 对于网络的每个隐藏单元h h 计算它的误差项δ h \delta_h : δ h ←o h (1−o h )∑w kh δ k \delta_h \gets o_h(1-o_h) \sum w_{kh}\delta_k 更新每个网络的权值w ji w_{ji} : w ji ←w ji +Δw ji w_{ji} \gets w_{ji}+\Delta w_{ji} 其中Δw ji =ηδ j x ji \Delta w_{ji} = \eta \delta_jx_{ji} 反向传播已经开发除了许多变种,最常见的是修改权值更新法则,使第n n 次迭代的权值更新部分依赖于第n−1 n-1 次迭代时的更新,即Δw ji (n)=ηδ j x ji +αΔw ji (n−1) \Delta w_{ji}(n) = \eta\delta_jx_{ji} + \alpha\Delta w_{ji}(n-1) 其中α∈[0,1) \alpha \in [0,1) ,一个冲量常数,上式右边第二项叫做冲量项。
对于多层网络,如果使用线性单元的话,多个线性单元的连接仍然是线性函数,所以还不能表征非线性函数。使用感知器单元,但是它不连续所以也就不可微,不适合梯度下降算法。我们需要这么一种单元,它的输出是输入的非线性函数,而且输出是输入的可微函数。那么可以使用sigmoid单元,它非常类似于感知器单元,而且基于一个平滑的可微阈值函数,It looked like this:
sigmoid函数公式如下:σ(y)=11+e −y \sigma (y)=\frac{1}{1+e^{-y}} 它的输出范围为[0,1],随输入单调递增,这个函数把非常大的输入值映射到一个小范围的输出,它经常被称为sigmoid单元的挤压函数(squashing function)。sigmoid函数的导数很容易以它的输出表示,即dσ(y)dy =σ(y)⋅(1−σ(y)) \frac{d\sigma (y)}{dy}=\sigma (y)·(1-\sigma (y)) 有时候可以使用其他容易计算导数的可微函数代替,比如sigmoid函数中的e −y e^{-y} 有时候被替换为e −ky e^{-ky} 其中k k 是个正常数,用来决定函数的陡峭性。双曲正切函数也可用来代替sigmoid函数 。
对于由一系列确定的单元相互连接形成的多层网络,反向传播算法可以用来学习这个网络的权值,它使用梯度下降方法来最小化网络输出值和目标值之间的误差平方。
在这里我们要考虑网络中多个输出单元,而不是一个单元,所以可以看到下面的误差公式中要计算两次和:E(w ⃗ )≡12 ∑ d∈D ∑ k∈outputs (t kd −o kd ) 2 E(\vec{w}) \equiv \frac{1}{2} \sum_{d\in D} \sum_{k\in outputs}(t_{kd}-o_{kd})^2 其中outputs outputs 是网络输出单元的集合,t kd t_{kd} 和o kd o_{kd} 是与训练样例d d 和第k k 个输出单元相关的输出值。
反向传播算法需要解决的问题是搜索一个巨大的假设空间,这个空间由网络中所有单元的所有可能权值定义,此时可以用一个误差曲面来形象表示。在和训练单个单元的情况一样,梯度下降可以用来寻找使E E 最小化的一个假设。
多层网络的一个主要不同是它的误差曲面可能有多个局部最小值,那么这就会带来一个问题,使用梯度下降的时候不能保证一定能收敛到全局最小值。不过在实践中反向传播都产生了出色的结果。
反向传播首先把输入x ⃗ \vec{x} 沿网络前向传播,然后计算每个单元u u 的输出o u o_u ,然后是误差沿网络反向传播(反向传播算法名字应该就是这么得来的吧),对于网络的每个输出单元k k ,计算它的误差项δ k \delta_k :δ k ←o k (1−o k )(t k −o k ) \delta_k \gets o_k(1-o_k)(t_k-o_k) 对于网络的每个隐藏单元h h 计算它的误差项δ h \delta_h : δ h ←o h (1−o h )∑w kh δ k \delta_h \gets o_h(1-o_h) \sum w_{kh}\delta_k 更新每个网络的权值w ji w_{ji} : w ji ←w ji +Δw ji w_{ji} \gets w_{ji}+\Delta w_{ji} 其中Δw ji =ηδ j x ji \Delta w_{ji} = \eta \delta_jx_{ji} 反向传播已经开发除了许多变种,最常见的是修改权值更新法则,使第n n 次迭代的权值更新部分依赖于第n−1 n-1 次迭代时的更新,即Δw ji (n)=ηδ j x ji +αΔw ji (n−1) \Delta w_{ji}(n) = \eta\delta_jx_{ji} + \alpha\Delta w_{ji}(n-1) 其中α∈[0,1) \alpha \in [0,1) ,一个冲量常数,上式右边第二项叫做冲量项。
相关文章推荐
- 计算机网络中的TCP/UDP协议到底是怎么回事(二)
- 广东工业大学网络赛F题, 容斥原理+DFS
- HTTP实现长连接(TTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持Connection: keep-alive)
- 20159320《网络攻防实践》第7周学习总结
- 20159320《网络攻防实践》第7周视频总结
- 20159320《网络攻防实践》第7周教材总结
- 广东工业大学网络赛E题 思维题
- 一次完整的HTTP请求所经历的7个步骤(前三步是浏览器工作,后四步是服务器工作)
- CentOS 7.0系统安装配置步骤及网络开启配置详解
- HTTP数据包头解析(简单清楚)
- Http请求工具实例编写(超长,比较清楚)
- 学习信息资源管理和计算机网络有感
- 计算机网络中的一些概念
- 《Deep Learning》译文 第一章 前言(中) 神经网络的变迁与称谓的更迭
- 关于Android:http.conn.httpHostconnectException错误
- 各个网络协议汇总(01)
- Linux网络协议栈之TCP send/recv
- android studio 网络定位城市名称
- 常用的HTTP状态代码
- Jersey(1.19.1) - Client API, Security with Http(s)URLConnection