- 浏览: 694746 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
在斯坦福的神经网络课件的反向传播算法一节(http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm),对于权重更新,有着以下的公式,记为公式(1):
其中,m为样本个数。
首先,这组公式肯定是正确的,而且是很直观。今天重看时还被其直观性所折服!
这种做法也给了我做事儿的一种思路:先针对一个样本的情况,进行公式的推导,得到初步的结果;在对多个样本再取平均,得到直观的结果~最后,再用严谨的数学推导进行证明,得到简化后的公式。
那么,为什么还要吐槽呢?因为UFLDL课件缺少了最后一步——数学证明,及公式的简化!
下面从公式(1)的直观性——也就是其优点说起:
这组公式啥意思呢?对于一个神经网络(参数为各层的权重矩阵W和偏置向量b),给定一个输入样本x(向量),该网络会产生一个输出y(向量),对应有一个误差J:
那么,如果该网络只有一个输入,我们可以对W、b求导。也就是上面公式中的Delta W部分。
如果有m个样本呢,很自然的一种想法就是对导数求平均,这也就是公式中的Delta W要除以m的意义所在!很直观,很容易理解。
对应的总体误差函数如下(另外,还多了个weight decay项):
问题定义清楚了,接下来涉及编程实现了,槽点也就来了:
程序该怎么写?是不是直观的写法就是最好的?
答案显然是否定的,否则课件中也就不会讲什么Vectorization了!
这一部分我没有细看,课件中还是按直观的方法来讲的“你看,我们没Vectorization前使用这个循环写的,balabala,嘿,这个循环正好是矩阵相乘!于是我们可以这么写。。。。”
但是,,但是,,其实我们可以有更为严谨的做法——按照求导的链式法则进行公式的推导(只需要针对一层网络进行推导就可以了,剩下的完全一样)。
采用这种做法,我们得到的结果自然就是矢量化的,而且,,直接根据J(W,b)来求导,我们会得到和直观的公式(1)稍有不同的公式:
假设最后一层的输出为Y,误差函数J(W,b)对其导数为 dJ_dY,
则,我们再通过dJ_dY进行反向传播,后续的公式中是不会出现样本个数m的!
下面用公式来说明(抱歉,误差J的符号改为E,样本个数m之后用N来代替):
也就是说,只要在输出层对网络输出Y求导时除以了样本个数N,之后各层求导时,就不用再除以N了。而在Andrew Ng的课件中,由于在输出层没有除以N(这样一来,其保留了误差的原始意义,也就各个样本的误差),之后的每一层才需要除以N。也就是我们之前所说的对于各个样本产生的误差(的导数)求平均。
后续的求导公式和课件中给的相同:http://ufldl.stanford.edu/wiki/index.php/Neural_Network_Vectorization
如果想自己用矩阵求导进行推导的话,可以看一下我之前的笔记(建议还是看张贤达老师的书吧,感觉自己写的不够清楚):http://cherishlc.iteye.com/blog/1765932
其中,m为样本个数。
首先,这组公式肯定是正确的,而且是很直观。今天重看时还被其直观性所折服!
这种做法也给了我做事儿的一种思路:先针对一个样本的情况,进行公式的推导,得到初步的结果;在对多个样本再取平均,得到直观的结果~最后,再用严谨的数学推导进行证明,得到简化后的公式。
那么,为什么还要吐槽呢?因为UFLDL课件缺少了最后一步——数学证明,及公式的简化!
下面从公式(1)的直观性——也就是其优点说起:
这组公式啥意思呢?对于一个神经网络(参数为各层的权重矩阵W和偏置向量b),给定一个输入样本x(向量),该网络会产生一个输出y(向量),对应有一个误差J:
那么,如果该网络只有一个输入,我们可以对W、b求导。也就是上面公式中的Delta W部分。
如果有m个样本呢,很自然的一种想法就是对导数求平均,这也就是公式中的Delta W要除以m的意义所在!很直观,很容易理解。
对应的总体误差函数如下(另外,还多了个weight decay项):
问题定义清楚了,接下来涉及编程实现了,槽点也就来了:
程序该怎么写?是不是直观的写法就是最好的?
答案显然是否定的,否则课件中也就不会讲什么Vectorization了!
这一部分我没有细看,课件中还是按直观的方法来讲的“你看,我们没Vectorization前使用这个循环写的,balabala,嘿,这个循环正好是矩阵相乘!于是我们可以这么写。。。。”
但是,,但是,,其实我们可以有更为严谨的做法——按照求导的链式法则进行公式的推导(只需要针对一层网络进行推导就可以了,剩下的完全一样)。
采用这种做法,我们得到的结果自然就是矢量化的,而且,,直接根据J(W,b)来求导,我们会得到和直观的公式(1)稍有不同的公式:
假设最后一层的输出为Y,误差函数J(W,b)对其导数为 dJ_dY,
则,我们再通过dJ_dY进行反向传播,后续的公式中是不会出现样本个数m的!
下面用公式来说明(抱歉,误差J的符号改为E,样本个数m之后用N来代替):
也就是说,只要在输出层对网络输出Y求导时除以了样本个数N,之后各层求导时,就不用再除以N了。而在Andrew Ng的课件中,由于在输出层没有除以N(这样一来,其保留了误差的原始意义,也就各个样本的误差),之后的每一层才需要除以N。也就是我们之前所说的对于各个样本产生的误差(的导数)求平均。
后续的求导公式和课件中给的相同:http://ufldl.stanford.edu/wiki/index.php/Neural_Network_Vectorization
如果想自己用矩阵求导进行推导的话,可以看一下我之前的笔记(建议还是看张贤达老师的书吧,感觉自己写的不够清楚):http://cherishlc.iteye.com/blog/1765932
发表评论
-
tensorflow 单机多卡示例--数据并行
2017-01-05 14:44 9534本文参考自官方的cifar10 ... -
神经网络的初始误差估计-采用cross-entropy误差时
2016-09-28 10:14 1584初始状态下,由于网络的权重时随机初始化的,任意一个样本被分配到 ... -
tensorflow杂记
2016-09-18 12:04 11632本文记录使用tensorflow AP ... -
Keras切换backend : theano --> tensorflow
2016-09-07 10:57 67171、切换backend 修改~/.keras/keras.js ... -
Ubuntu16.04 源码安装GPU版tensorflow
2016-08-07 16:18 56562017年2月16日更新: tenso ... -
神经网络计算加法---tensorflow中的变量的embedding表示
2016-07-28 10:53 10112将category变量输入到神经网络中时需要进行embeddi ... -
tensorflow 之tensorboard
2016-07-12 11:15 01、端口被占用 开启第二个tensorboard时会出现此种情 ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8599上回说到编译CPU版的MXNet: http://cheris ... -
cs231n 笔记
2016-05-26 23:36 01、python3中 cifar10数据库的读取 cs231n ... -
mxnet资料汇总
2016-05-23 23:13 0MXNet设计和实现简介(中文版):http://mxnet. ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17619MXnet (mix net)类似Caffe,Tensorfl ... -
Convex Optimization 相关资源汇总
2015-09-26 21:02 36761、Stephen P. Boyd主页 http://stan ... -
MatConvNet的excise 3改为网络配置文件形式
2015-06-30 11:28 2979MatConvNet为vlFeat作者写的matlab下的卷积 ... -
优化算法L-BFGS资源索引
2014-09-29 15:40 1951非常赞的一组介绍L-BFGS的博文:http://blog.c ... -
sigmoid 函数
2014-09-14 17:28 4712神经网络里常常见到sigmoid函数(又称logistic函数 ... -
概率图(Probabilistic Graphical Models )笔记--Week1,贝叶斯网络
2013-04-22 11:44 0这一周是有向图,也就是节点之间有因果关系的图。(causal ... -
SVM笔记--要点
2013-04-15 20:32 24890、心得 很多问题能在FAQ中找到:http://www.c ... -
矩阵微分笔记
2013-01-08 09:27 11265自己学习矩阵微分的笔记,包含了迹函数、行列式函数以及逆矩阵的求 ... -
【转载】endnote导致word的cpu占用率高,很卡的解决办法
2012-10-23 10:40 4203以下内容来自:http://hi.baidu.com/clay ... -
论文标记及命名规范(自己用,慢慢完善)
2011-11-30 19:55 19971、定义 2、假设、结论等
相关推荐
BP神经网络是一种多层前馈神经网络,通过反向传播算法进行训练,可以学习和存储大量的数据,并对其进行处理和分析。 二、基于神经网络PID算法的电镀槽液温度控制系统设计 电镀槽液温度控制系统是指通过控制电镀槽...
.NET 三层架构是一种...综上所述,".NET 三层架构制作吐槽网"是一个涵盖了前端交互、业务逻辑处理和数据管理等多个层面的项目。通过合理的架构设计和良好的编码实践,可以构建出稳定、高效且易于维护的社交网络应用。
一个留言类型的网站,适合新手。吐槽网站。特别适合新手进行学习。也可以直接使用。
这种单向传播的多层结构使得神经网络能够处理复杂的非线性问题,非常适合用于氯碱电解槽的优化。 遗传算法则是受到生物进化机制启发的全局搜索算法,具备优秀的宏观搜索能力和寻优性能。它通过模拟自然选择和遗传...
基于PHP的消息果留言板(吐槽版) PHP源码.zip
基于神经网络和遗传算法的锭子弹性管性能优化,正是在这样的背景下应运而生的研究课题,旨在通过先进的数据建模和优化技术提升纺织机械性能。 首先,要进行性能优化,必须深入了解锭子弹性管的物理特性及其在实际...
权重是连接各层神经元的关键参数,通过反向传播算法调整这些权重,以最小化网络的预测误差,达到训练目的。 在BPNNDemoQt项目中,我们可以预期以下几个关键知识点: 1. **C++与Qt集成**:项目会展示如何在C++代码...
神经网络采用的是经典的反向传播(BP)算法,这是一种有监督学习的前馈型网络。输入层接收特征数据,经过非线性转换,在隐含层进行计算,然后通过输出层得到网络预测结果。通过比较预测与实际类别之间的误差,网络会...
“BP神经网络在PM2.5的模型实现.docx”文档聚焦于反向传播(BP)神经网络在预测空气质量指标PM2.5浓度的应用。BP神经网络是一种常见的多层前馈网络,通过反向传播误差来调整权重,从而学习输入与输出之间的复杂关系...
工作中那些不得不吐槽的Chinglish
【无力吐槽】这一网络用语源自中文互联网,主要在年轻人和网络社交群体中流行。它表达了一种面对某种情况或言论时,感到无言以对、无法进行批评或反驳的状态,通常带有无奈、搞笑或者轻微的讽刺意味。当一个人说...
采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...
传统的feedforward神经网络可能无法捕捉上下文信息,而RNN由于其内在的记忆机制,能更好地解决这个问题。 【1-of-N编码】 在表示单词时,1-of-N编码是一种常用方法,每个单词由一个长度等于词汇表大小的向量表示,...
一个快速高效的端口扫描工具,制定IP段扫描端口,还可以对部分路由器读取路由器相关用户信息。支持路由器或服务器型号:XM-3300N- ASUS- D-Link- LevelOne- Netis- Pozitron- TP-LINK支持端口:8080,80,8888,8081...
web登录页面
关于“吐槽弹幕”,这可能是指在播放视频时,用户可以发送即时评论,这些评论会以滚动或漂浮的方式显示在视频画面上,常见于二次元文化中的视频平台。在Android应用中,实现这一功能通常需要集成弹幕库,如...
BP神经网络是一种常用的机器学习算法,它可以对复杂的非线性关系进行建模和预测。在霜冻天气预报中,BP神经网络可以对气象观测资料和陆表温度资料进行处理,并对霜冻天气的发生进行预测。 研究表明,霜冻天气前期...
3. **神经网络理论**:理解BP神经网络的工作原理,包括前向传播、反向传播算法、权重更新规则等。 4. **矩阵运算**:因为神经网络的计算涉及大量的矩阵运算,所以需要掌握线性代数的基础知识。 5. **优化算法**:...
5. **网络平台的助推**:《吐槽大会》主要在互联网平台上播出,充分利用了新媒体的优势,如弹幕互动、二次传播等,使得节目能够迅速扩散,吸引更多的年轻观众。 6. **受众定位准确**:节目瞄准的是对新鲜事物接受度...