我对BPNN的一些浅见
来源:互联网 发布:mac虚拟机免费版下载 编辑:程序博客网 时间:2024/05/16 17:58
我们知道,在任何机器学习模型中,都会有一个代价函数的概念。当训练样本一定时,这个代价函数实际上是一个自变量为模型参数,因变量为代价大小的函数。那么我们训练一个机器学习模型的目的就是,通过改变模型参数,来最小化模型的代价。那么问题来了,以什么样的方式来改变模型参数?一个很直观的方法是令模型的参数在其梯度方向上改变(关于梯度与函数大小的关系大家可以参考高等数学相应章节)。所以切入点是要求每个参数的偏导数。
那么,我们这里依照梯度改变的思想,对BPNN的参数优化过程做一个推导。在做推导之前,先明确一个规定,一层是指本层神经元和由本层神经元所辐射出的连接权重:
假设我们在这里要求代价函数J相对于第l-1层中的参数Wij的偏导数(第l-1层的第i个神经元与第l层的第j个神经元连接权重)。很显然,有下式。其中,我们把等号右边的第一项称为神经元j的“残差”(这个残差的作用实际上是衡量了它对于输入连接的敏感程度,大家知道,偏导数一般是衡量自变量中的分量对与函数因变量影响的大小程度)。因此可以看出,其实我们需要求得l层中第j个神经元的残差,和该神经元的输入相对于欲求得连接权重的导数。
对于上式中右边第一项,很容易求得(假设神经元激活函数为sigmoid函数)为l-1层第i个神经元的激活值:
而对于右边项,我们这里需要引入链式求导法则,从最后一层的输出层,一直往前进行求导。,假设总的层数为nl层。举例来讲,我们这里要求nl-2层中第i个神经元处的残差,然后再依次看它与第nl-1层和nl层中的残差有什么关系:
显然,如果我们把上面第三个式子写成残差的表达形式的话,可以得到下式:
当我们把上式的表达代入第nl-1层中时,可以得到nl-1层中第p个神经元输入的残差可以表达为:
再将其代入第nl-2层,可以得到
通过三个式子的关系,我们可以知道,一个特定层中的神经元的残差都可以从最后一层开始求得,而在逐层求取残差时,可以依照下式进行计算:
很显然,只要我们能够知道当前层欲求得权重所连接的本层的激活值和后一层的残差,就可以求得偏导数。
很显然,要求得指定层总某一神经元i与后一层第j个神经元连接权重的偏导数,只需要求得本层中神经元激活值和后一层中被连接神经元的残差即可。
今天推导到这里,后续还会有新的内容。
0 0
- 我对BPNN的一些浅见
- 我对基金的浅见
- 总结一下我对NOC的浅见
- 个人对编程语言发展的一些浅见
- 我对编程之道的一点浅见
- 关于adaboost的一些浅见
- 关于adaboost的一些浅见
- Apache Spark 的一些浅见。
- 关于Callback的一些浅见
- 我对c#委托的浅见 使用情景- 两个窗体间的调用操作
- 用来提醒自己的一些总结性浅见
- 笔记本电脑选购个人的一些浅见
- 对编程和设计的一点浅见
- 对Oracle认证的一点浅见
- 对Oracle认证的一点浅见
- BPNN
- 我的一点浅见——关于机器的理解
- 对我的资源的一些声明
- POI实现EXCEL单元格合并及边框样式
- Objective-c - block作为方法的参数
- webSocket获取httpSession
- vue1x、vue-router 0.7x 迁移到 vue2 vue-router2 vueX的坑
- JS阻止事件冒泡
- 我对BPNN的一些浅见
- 吐个槽 Spring Data Elasticsearch 3.0M1还不支持Elasticsearch 5.X
- VMWare安装黑苹果
- Service入门(一)——startService、stopService
- spring MVC maven等整合
- nexus批量更新jar包
- String类常用
- 前端日记 #1 - 开发工具及基本概念
- 节点