随机初始化

  在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为0向量,有时会习惯性的将神经网络中的权重全部初始化为0,然而这在神经网络中并不适用。

  以简单的三层神经网络为例,将全部权重都设置为0,如下图所示:

  假设仅有一个训练数据,使用梯度下降,在第一次迭代时:

  可以看到,第一次迭代的结果是:隐藏层的权重和激活值全部相等,输入层的权重相当于所有输入项放缩了相同的倍数。

  在第二次迭代时:

  此时,隐藏层的激活值又一次全部相等。继续迭代也会得到相同的结果,即a(2)的所有激活值和权重都一样,这显然不是我们期待的结果。

  为了应对上述问题,我们使用一种被称为“随机初始化”的方法去初始化神经网络的权值,具体来说,就是将所有权值在一个范围内赋予随机值,通常这个范围取[-1, 1]。下面是代码示例:

Octave:

init_epsilon = 1;
Theta1 = rand(10, 15) * (init_epsilon * 2) - init_epsilon;
Theta2 = rand(1, 10) * (init_epsilon * 2) - init_epsilon;

Python:

 import numpy as np

 init_epsilon = 1
theta1 = np.random.random((15,10)) * (init_epsilon * 2) - init_epsilon
theta2 = np.random.random((10,1)) * (init_epsilon * 2) - init_epsilon

梯度检验

  反向传播算法很高效,但对梯度的求解异常繁琐,实际上,即使某处代码计算出错误的梯度,仍然会得到一个模型,尽管这个模型的J(Θ)很小,但对新数据的拟合非常差,此时不得不重新审视所有代码。

  是否可以从一开始就知道梯度是否正确呢?答案是肯定的,这就是梯度检验法。

  梯度检验法是通过一种简单的方法取得近似的梯度,将这个近似的梯度与真正的梯度对比,如果很接近,则认为梯度正确,否则认为梯度有误。

  将J(θ)和θ放入直角坐标系,下图所示是θ取定值时J(θ)的导数:

  ε 是一个很小的值:

  如上图所示:

  当ε→0时,这趋近于导数的定义:

  我们也不希望ε太小,通常取ε = 10-4较为合适。

  假设J(θ) = θ3,θ = 1,ε = 0.01,则:

  如果J(θ) = J(θ1, θ2, …, θn),则θj 的偏导:

  需要注意的是,梯度检验是数值计算,其代价远远高出能够使用向量矩阵计算的反向传播,所以一旦确认算法无误,就应当关闭梯度检验。

数据拟合

  隐藏层节点越多,层数越多,神经网络的规模越大。在数据拟合上,神经网络的规模越大,拟合效果越好。

  上图的三个神经网络解决的是同样的二分类问题,后两个的规模要大于第一个。需要注意的是,随着神经网络规模的增大,计算量也大大提高,同时更容易出现过拟合。在出现过拟合问题时,可以尝试调整正则化系数。关于正则化,可参考《ML(附录3)——过拟合与欠拟合


  作者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

  扫描二维码关注公众号“我是8位的”

  

最新文章

  1. spring设置全局异常处理器
  2. Mac OS 快捷键
  3. 记录一些容易忘记的属性 -- UIImageView
  4. Client Dependency学习
  5. Android如何调用第三方SO库
  6. cf202-div 1-B - Apple Tree:搜索,数论,树的遍历
  7. Angular企业级开发(8)-控制器的作用域
  8. mysql 分析5语句的优化--索引添加删除
  9. Lesser known purrr tricks
  10. chromedriver禁用图片,禁用js,切换UA
  11. Mysql SQL Mode详解
  12. python 之 初识模块
  13. 2019-04-26-day041-数据库的索引
  14. mysql数据权限的分配
  15. Vue在线客服系统【开源项目】
  16. Linux学习8-CentOS部署自己本地的django项目
  17. NFS常见问题
  18. 九度OJ1036-空缺数字计算-暴力破解
  19. 计算字符串最后一个单词的长度,单词以空格隔开。 java算法
  20. Windows下sklearn源码安装

热门文章

  1. JSP组件Telerik UI for JSP发布R1 2019 SP1|附下载
  2. python中的import,reload,以及__import__
  3. MySQL存储过程错误No data - zero rows fetched, selected, or processed
  4. redis 五大数据类型之set篇
  5. AssetBundle打包详解
  6. Java语法基础学习DayNine(Java集合)
  7. Python中读取文件中的json串,并将其写入到Excel表格中
  8. python scrapy 数据处理时间格式转换
  9. 2019-03-06-day005-字典操作
  10. C++---String类小结