BP算法很难调试,一般情况下会隐隐存在一些小问题,比如(off-by-one error),即只有部分层的权重得到训练,或者忘记计算bais unit,这虽然会得到一个正确的结果,但效果差于准确BP得到的结果。

有了cost function,目标是求出一组参数W,b,这里以表示,cost function 暂且记做。假设 ,则 ,即一维情况下的Gradient Descent:

根据6.2中对单个参数单个样本的求导公式:

可以得到每个参数的偏导数,对所有样本累计求和,可以得到所有训练数据对参数  的偏导数记做  , 是靠BP算法求得的,为了验证其正确性,看下图回忆导数公式:

可见有:那么对于任意  值,我们都可以对等式左边的导数用:

来近似。

给定一个被认为能计算  的函数,可以用下面的数值检验公式

应用时,通常把设置为一个很小的常量,比如在 数量级,最好不要太小了,会造成数值的舍入误差。上式两端值的接近程度取决于  的具体形式。假定 的情况下,上式左右两端至少有4位有效数字是一样的(通常会更多)。

是一个n维向量而不是实数时,且 ,在 Neorons Network 中,J(W,b)可以想象为 W,b 组合扩展而成的一个长向量 ,现在又一个计算 的函数 ,如何检验能否输出到正确结果呢,用的取值来检验,对于向量的偏导数:

根据上图,对 求导时,只需要在向量的第i维上进行加减操作,然后求值即可,定义 ,其中

 和  几乎相同,除了第  行元素增加了 ,类似地, 得到的第  行减小了 ,然后求导并与比较:

中的参数对应的是参数向量中一个分量的细微变化,损失函数J 在不同情况下会有不同的值(比如三层NN 或者 三层autoencoder(需加上稀疏项)),上式中左边为BP算法的结果,右边为真正的梯度,只要两者很接近,说明BP算法是在正确工作,对于梯度下降中的参数是按照如下方式进行更新的:

即有  分别为:

最后只需总体损失函数J(W,b)的偏导数与上述 的值比较即可。

除了梯度下降外,其他的常见的优化算法:1) 自适应的步长,2) BFGS L-BFGS,3) SGD,4) 共轭梯度算法,以后涉及到再看。

最新文章

  1. wamp出现You don’t have permission to access/on this server提示的解决方法
  2. iOS开发网络篇—NSURLConnection基本使用(二)
  3. tortoisegit教程
  4. 走过路过不要错过~教你用java抓取网页中你想要的东东~~
  5. 为什么要用VisualSVN Server,而不用Subversion?
  6. break 和 continue
  7. BT5下安装Metasploit4.5方法
  8. DDD的好文章
  9. Java基础语法<九> 接口与内部类
  10. bzoj 2724 蒲公英 分块
  11. mybatis从mapper接口跳转到相应的xml文件的eclipse插件
  12. 使用Nginx实现服务器反向代理和负载均衡
  13. mxonline 总结
  14. FineReport新增多项目甘特图示例及操作
  15. [转]SPFA算法的玄学方法
  16. 【转载】CSS + DIV 实现整理布局
  17. MySQL(27):行锁、表锁、乐观锁、悲观锁
  18. 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
  19. 10 款非常棒的CSS代码格式化工具推荐
  20. c++ 判断list是否为空(empty)

热门文章

  1. C#修改注册表设置默认浏览器
  2. node操作MongoDB数据库之插入
  3. Java常用类库
  4. webmatrix
  5. lintcode:恢复IP地址
  6. lintcode:最长公共子序列
  7. WordPress插件:幻灯片Meta Slider
  8. photoshop:找不到增效工具入口点
  9. DP 子序列问题
  10. CentOS 加载/挂载 U盘