ML(5)——神经网络3(随机初始化与梯度检验)
随机初始化
在线性回归和逻辑回归中,使用梯度下降法之前,将θ设置为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位的”

ML(5)——神经网络3(随机初始化与梯度检验)的更多相关文章
- ubuntu之路——day7.4 梯度爆炸和梯度消失、初始化权重、梯度的数值逼近和梯度检验
梯度爆炸和梯度消失: W[i] > 1:梯度爆炸(呈指数级增长) W[i] < 1:梯度消失(呈指数级衰减) *.注意此时的1指单位矩阵,W也是系数矩阵 初始化权重: np.random. ...
- 机器学习算法的调试---梯度检验(Gradient Checking)
梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确. 1. 数学原理 考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的 ...
- 贝叶斯分类器,随机森林,梯度下载森林,神经网络相关参数的意义和data leakage
构建的每一颗树的数据都是有放回的随机抽取的(也叫bootstrap),n_estimators参数是你想设置多少颗树,还有就是在进行树的结点分裂的时候,是随机选取一个特征子集,然后找到最佳的分裂标准.
- [AI]神经网络章2 神经网络中反向传播与梯度下降的基本概念
反向传播和梯度下降这两个词,第一眼看上去似懂非懂,不明觉厉.这两个概念是整个神经网络中的重要组成部分,是和误差函数/损失函数的概念分不开的. 神经网络训练的最基本的思想就是:先“蒙”一个结果,我们叫预 ...
- 改善深层神经网络_优化算法_mini-batch梯度下降、指数加权平均、动量梯度下降、RMSprop、Adam优化、学习率衰减
1.mini-batch梯度下降 在前面学习向量化时,知道了可以将训练样本横向堆叠,形成一个输入矩阵和对应的输出矩阵: 当数据量不是太大时,这样做当然会充分利用向量化的优点,一次训练中就可以将所有训练 ...
- 神经网络权值初始化方法-Xavier
https://blog.csdn.net/u011534057/article/details/51673458 https://blog.csdn.net/qq_34784753/article/ ...
- Coursera ML笔记 - 神经网络(Representation)
前言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew N ...
- TensorFlow中权重的随机初始化
一开始没看懂stddev是什么参数,找了一下,在tensorflow/python/ops里有random_ops,其中是这么写的: def random_normal(shape, mean=0.0 ...
- OpenCV 2.x/3.x 随机初始化矩阵
简介 在测试算法的时候,或者某些算法需要使用随机数,本文介绍如何使用OpenCV的随机数相关功能. 主要内容: 1. cv::RNG类 -- random number generator 2. cv ...
随机推荐
- Android开发 ---基本UI组件3:单选按钮、多选按钮、下拉列表、提交按钮、重置按钮、取消按钮
Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个用户注册按钮 <?xml version="1.0" encoding=&q ...
- SharePoint Framework 企业向导(十)
博客地址:http://blog.csdn.net/FoxDave 接上一讲 SharePoint Framework部署范围 对于SharePoint Framework解决方案,只有一个部署范围: ...
- 10个HTML5美化版复选框和单选框
单选框Radiobox和复选框checkbox在网页中也十分常见,虽然它没有按钮的交互性强,但是如果能把它们像按钮那样美化一下,那也是非常不错的.本文收集了10个相对比较漂亮的美化版单选框和复选框,希 ...
- 1.Python爬虫入门一之综述
要学习Python爬虫,我们要学习的共有以下几点: Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy Python爬虫 ...
- Web API 跨域访问(CORS)
1.在web.config里把“ <remove name="OPTIONSVerbHandler" /> ”删掉. 2. 到nuget上装一个包: ht ...
- MySQL:基础知识
基础知识 一.软件的生命周期 软件定义 软件开发 软件使用与维护 二.数据(Data) 1.定义 描述客观事物特征或性质的某种符号,经过数字化处理存储在计算机 2.数据独立性 物理独立性:指用户的应用 ...
- python scrapy 把cookie并转化为字典的形式
在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...
- Eclipse 通过JPA自动生成注解实体
hibernate是JPA最常用的实现之一,而且hiberante自身也对注释语法进行了支持.现在再不用去看那一堆堆的XML映射了.而且eclipse还提供了从数据库直接生成Entity Class的 ...
- ERROR: gnu-config-native-20150728+gitAUTOINC+b576fa87c1-r0 do_unpack: Function failed: Fetcher failure: Fetch command failed with exit code 128, output: fatal: the '--set-upstream' option is no longer
/********************************************************************** * ERROR: gnu-config-native-2 ...
- python 中os的常用方法
1.更改当前的路径 import os os.chdir( "D:/java") 注意python中表示文件路径,文件夹之间用/或者\\不能使用\