训练神经网络,其中一个加速训练的方法就是归一化输入。

假设我们有一个训练集,它有两个输入特征,所以输入特征x是二维的,如图是数据集的散点图,归一化输入需要两个步骤,第一步是零均值化,计算公式为μ=1m∑i=1mx[i]\mu=\frac{1}{m}\sum_{i=1}^mx^{[i]}μ=m1​i=1∑m​x[i]x:=x−μx:=x-\mux:=x−μ通过移动训练集,完成零均值化,如下图所示。

第二步是归一化方差,注意,特征x1x_1x1​的方差比特征x2x_2x2​的方差要大得多,我们要做的是给σ\sigmaσ赋值,其计算公式为σ2=1m∑i=1m(x[i])2\sigma^2=\frac{1}{m}\sum_{i=1}^m(x^{[i]})^2σ2=m1​i=1∑m​(x[i])2σ2\sigma^2σ2是一个向量,它的每个特征都有方差。注意我们已经完成零均值化,我们把所有训练数据除于σ2\sigma^2σ2,图片最后变成下图

x1x_1x1​和x2x_2x2​的方差都等于1,提示一下,如果你用它来调整训练数据,那么用同样的μ\muμ和σ2\sigma^2σ2来归一化测试集,尤其是你不希望训练集和测试集的归一化有所不同。不论μ\muμ的值是什么,也不论σ2\sigma^2σ2的值是什么,这两个公式中都会用到它们,所以得用同样的方法调整测试集,而不是在训练集和测试集上分别预估μ\muμ和σ2\sigma^2σ2。因为我们希望不论是训练数据还是测试数据都是通过相同μ\muμ和σ2\sigma^2σ2定义的相同数据转换,其中μ\muμ和σ2\sigma^2σ2是由训练集数据计算得来的。

为什么我们要这么做呢?为什么我们想归一化特征?回想一下代价函数J(w,b)=1m∑i=1mL(y^[i],y[i])J(w,b)=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{[i]},y^{[i]})J(w,b)=m1​i=1∑m​L(y^​[i],y[i]),如果使用非归一化的输入特征,代价函数就会像下图一样,这是一个非常细长狭窄的代价函数,如果特征值在不同的范围内,假如x1x_1x1​的取值范围从1到1000,特征x2x_2x2​的取值范围是0-1,结果是参数w1w_1w1​和w2w_2w2​的范围或者比率将会非常不同,图中的数据轴应该是w1w_1w1​和w2w_2w2​,但直观理解,标记为www和bbb,代价函数有点像狭长的碗一样。

如果画出该函数的部分轮廓,如上图,是一个狭长的函数。

然而如果你归一化特征,代价函数看起来更对称,如果在狭长的代价函数上运行梯度下降法,必须使用一个非常小的学习比率,因为如果是在图中的这个位置,梯度下降法可能需要多次迭代过程,直到最后找到最小值。


但如果函数是一个更圆的球形轮廓,那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,可以在梯度下降法中使用较大步长,而不是像在狭长函数中反复执行。

当然,实际上w是一个高维向量,因此使用二维绘制w并不能正确地传达直观理解。但总的直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是例如1到1000,0到1的范围。而是在-1到1范围内或相似偏差,这使得代价函数J优化起来更简单更快速。

实际上如果假设特征x1x_1x1​的范围在0-1之间,x2x_2x2​的范围在-1到1之间。x3x_3x3​的范围在1-2之间,它们是相似范围,所以会表现得很好。当它们在非常不同的取值范围内,如其中一个从1到1000,另一个是从0到1,这对优化算法非常不利。但是仅将它们设置为均化零值,假设方差为1,确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。

所以如果输入特征处于不同范围内,归一化特征值就非常重要了,如果特征值处于相似范围内,那么归一化就不是很重要了。

深度学习的实用层面 —— 1.9 正则化输入相关推荐

  1. 深度学习的实用层面 —— 1.4 正则化

    如果你怀疑神经网络过度拟合了数据,即存在高方差问题,那么最先想到的方法可能就是正则化,另一个解决高方差的方法就是准备更多的数据,这也是非常可靠的办法,但你可能无法时时准备足够多的训练数据,或者获取更多 ...

  2. 吴恩达深度学习笔记5-Course2-Week1【深度学习的实用层面】

    改善深层神经网络:超参数调试.正则化以及优化 深度学习的实用层面 一.训练.验证.测试集 样本数据分成以下三个部分: 训练集(train set): 用于对模型进行训练. 验证集(hold-out c ...

  3. 3.深度学习的实用层面

    第一周:深度学习的实用层面 项目进展得一个关键性得因素就是划分高质量得训练集,验证集,测试集.这有助于提高循环迭代得效率.验证集也称为development set 也称为dev set. 验证集主要 ...

  4. 吴恩达【优化深度神经网络】笔记01——深度学习的实用层面

    文章目录 引言 一.训练集/验证集/测试集(Train/Dev/Test sets) 1. 数据集选择 2. 补充:交叉验证(cross validation) 二.偏差和方差(Bias/Varian ...

  5. 吴恩达《优化深度神经网络》精炼笔记(1)-- 深度学习的实用层面

    AI有道 不可错过的AI技术公众号 关注 吴恩达的深度学习专项课程的第一门课<神经网络与深度学习>的所有精炼笔记我已经整理完毕.迷路的小伙伴请见文章末尾的推荐阅读: 在接下来的几次笔记中, ...

  6. Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面

    红色石头的个人网站:redstonewill.com Andrew Ng的深度学习专项课程的第一门课<Neural Networks and Deep Learning>的5份笔记我已经整 ...

  7. 深度学习的实用层面 —— 1.3 机器学习基础

    初始化模型之后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练集或者训练数据的性能,如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是选择一个新网络,比如含有更多隐层或者隐藏单元的网络,或 ...

  8. 吴恩达深度学习笔记 course 2 1.1~1.14 深度学习的实用层面

    1.1 Train/dev/test sets 在构建一个神经网络的时候我们往往需要设计很多参数,如:layers,learning rates ,acivation functions,hidden ...

  9. 深度学习的实用层面 —— 1.1 训练/开发/测试集

    在配置训练.验证和测试数据集的过程中做出正确决策会在很大程度上帮助大家创建高效的神经网络. 在训练神经网络时,我们需要做出很多决策,例如神经网络分多少层,每层含有多少个隐藏单元,学习速率是多少,各层采 ...

最新文章

  1. 笔记——数据可视化02
  2. Python【每日一问】08
  3. ZigBee网络架构详解
  4. php 上传多个txt文件上传,一个多文件上传的例子(原创)
  5. MNIST数据集手写数字识别(二)
  6. 道路里程桩号标注_划重点!我区国、省道交通标志及里程桩“变脸”了,今后开车更享受~...
  7. shell变量、函数和数组以及字符串的截取
  8. 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
  9. SpringBoot动漫弹幕网站 cartoon.liuyanzhao.com
  10. 【预测模型】基于贝叶斯优化的LSTM模型实现数据预测matlab源码
  11. 【C语言程序】带你用17行代码编译一个C语言数字雨
  12. 计算机考研复试之软件工程
  13. 光照度传感器之RS485 通信与 Modbus 协议
  14. win server 2008r2 相关设置
  15. Windows里面比较好用的在线读书笔记软件
  16. Scikit-learn API:train_test_split函数 将数据分割为训练集和测试集
  17. Microsoft SQL Server 2008 MDX Step by Step中关于MDX Step-by-Step.abf损坏文件的处理
  18. Python 全局变量、局部变量、静态变量 详解
  19. Android 检测辅助功能是否开启,并调整设置页面
  20. Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建

热门文章

  1. PearProject 安装指南
  2. vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
  3. 容器编排技术 -- Kubernetes kubectl create role 命令详解
  4. MySQL面试 - 读写分离
  5. 更新mac系统中homebrew的源,更改为清华大学的源
  6. 04737 c++ 自学考试2019版 第五章程序设计题 1
  7. NodeJS获取命令行后面的参数
  8. Windows11 安装Docker,安装至D盘(其他非C盘皆可)
  9. 【C语言】用C语言输出“心形”图案
  10. mysql innodb的索引基本入门