- 浏览: 691133 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 9521本文参考自官方的cifar10 ... -
神经网络的初始误差估计-采用cross-entropy误差时
2016-09-28 10:14 1576初始状态下,由于网络的权重时随机初始化的,任意一个样本被分配到 ... -
tensorflow杂记
2016-09-18 12:04 11615本文记录使用tensorflow AP ... -
Keras切换backend : theano --> tensorflow
2016-09-07 10:57 67071、切换backend 修改~/.keras/keras.js ... -
Ubuntu16.04 源码安装GPU版tensorflow
2016-08-07 16:18 56522017年2月16日更新: tenso ... -
神经网络计算加法---tensorflow中的变量的embedding表示
2016-07-28 10:53 10098将category变量输入到神经网络中时需要进行embeddi ... -
tensorflow 之tensorboard
2016-07-12 11:15 01、端口被占用 开启第二个tensorboard时会出现此种情 ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8586上回说到编译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 17582MXnet (mix net)类似Caffe,Tensorfl ... -
Convex Optimization 相关资源汇总
2015-09-26 21:02 36681、Stephen P. Boyd主页 http://stan ... -
MatConvNet的excise 3改为网络配置文件形式
2015-06-30 11:28 2965MatConvNet为vlFeat作者写的matlab下的卷积 ... -
优化算法L-BFGS资源索引
2014-09-29 15:40 1941非常赞的一组介绍L-BFGS的博文:http://blog.c ... -
sigmoid 函数
2014-09-14 17:28 4694神经网络里常常见到sigmoid函数(又称logistic函数 ... -
概率图(Probabilistic Graphical Models )笔记--Week1,贝叶斯网络
2013-04-22 11:44 0这一周是有向图,也就是节点之间有因果关系的图。(causal ... -
SVM笔记--要点
2013-04-15 20:32 24780、心得 很多问题能在FAQ中找到:http://www.c ... -
矩阵微分笔记
2013-01-08 09:27 11247自己学习矩阵微分的笔记,包含了迹函数、行列式函数以及逆矩阵的求 ... -
【转载】endnote导致word的cpu占用率高,很卡的解决办法
2012-10-23 10:40 4165以下内容来自:http://hi.baidu.com/clay ... -
论文标记及命名规范(自己用,慢慢完善)
2011-11-30 19:55 19621、定义 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. **受众定位准确**:节目瞄准的是对新鲜事物接受度...