神经网络优化篇:详解归一化输入(Normalizing inputs)
归一化输入
训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:
零均值
归一化方差;
希望无论是训练集和测试集都是通过相同的\(μ\)和\(σ^2\)定义的数据转换,这两个是由训练集得出来的。

第一步是零均值化,\(\mu = \frac{1}{m}\sum_{i =1}^{m}x^{(i)}\),它是一个向量,\(x\)等于每个训练数据 \(x\)减去\(\mu\),意思是移动训练集,直到它完成零均值化。

第二步是归一化方差,注意特征\(x_{1}\)的方差比特征\(x_{2}\)的方差要大得多,要做的是给\(\sigma\)赋值,\(\sigma^{2}= \frac{1}{m}\sum_{i =1}^{m}{({x^{(i)})}^{2}}\),这是节点\(y\) 的平方,\(\sigma^{2}\)是一个向量,它的每个特征都有方差,注意,已经完成零值均化,\(({x^{(i)})}^{2}\)元素\(y^{2}\)就是方差,把所有数据除以向量\(\sigma^{2}\),最后变成上图形式。
\(x_{1}\)和\(x_{2}\)的方差都等于1。提示一下,如果用它来调整训练数据,那么用相同的 \(μ\) 和 \(\sigma^{2}\)来归一化测试集。尤其是,不希望训练集和测试集的归一化有所不同,不论\(μ\)的值是什么,也不论\(\sigma^{2}\)的值是什么,这两个公式中都会用到它们。所以要用同样的方法调整测试集,而不是在训练集和测试集上分别预估\(μ\) 和 \(\sigma^{2}\)。因为希望不论是训练数据还是测试数据,都是通过相同μ和\(\sigma^{2}\)定义的相同数据转换,其中\(μ\)和\(\sigma^{2}\)是由训练集数据计算得来的。
为什么要这么做呢?为什么想要归一化输入特征,回想一下右上角所定义的代价函数。
\(J(w,b)=\frac{1}{m}\sum\limits_{i=1}^{m}{L({{{\hat{y}}}^{(i)}},{{y}^{(i)}})}\)
如果使用非归一化的输入特征,代价函数会像这样:

这是一个非常细长狭窄的代价函数,要找的最小值应该在这里。但如果特征值在不同范围,假如\(x_{1}\)取值范围从1到1000,特征\(x_{2}\)的取值范围从0到1,结果是参数\(w_{1}\)和\(w_{2}\)值的范围或比率将会非常不同,这些数据轴应该是\(w_{1}\)和\(w_{2}\),但直观理解,标记为\(w\)和\(b\),代价函数就有点像狭长的碗一样,如果能画出该函数的部分轮廓,它会是这样一个狭长的函数。
然而如果归一化特征,代价函数平均起来看更对称,如果在上图这样的代价函数上运行梯度下降法,必须使用一个非常小的学习率。因为如果是在这个位置,梯度下降法可能需要多次迭代过程,直到最后找到最小值。但如果函数是一个更圆的球形轮廓,那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,可以在梯度下降法中使用较大步长,而不需要像在左图中那样反复执行。
当然,实际上\(w\)是一个高维向量,因此用二维绘制\(w\)并不能正确地传达并直观理解,但总地直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是从1到1000,0到1的范围,而是在-1到1范围内或相似偏差,这使得代价函数\(J\)优化起来更简单快速。

实际上如果假设特征\(x_{1}\)范围在0-1之间,\(x_{2}\)的范围在-1到1之间,\(x_{3}\)范围在1-2之间,它们是相似范围,所以会表现得很好。
当它们在非常不同的取值范围内,如其中一个从1到1000,另一个从0到1,这对优化算法非常不利。但是仅将它们设置为均化零值,假设方差为1,就像设定的那样,确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。
所以如果输入特征处于不同范围内,可能有些特征值从0到1,有些从1到1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,通常会做归一化处理,虽然不确定它能否提高训练或算法速度。
这就是归一化特征输入。
神经网络优化篇:详解归一化输入(Normalizing inputs)的更多相关文章
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- StreamingContext详解,输入DStream和Reveiver详解
StreamingContext详解,输入DStream和Reveiver详解 一.StreamingContext详解 1.1两种创建StreamingContext的方式 1.2SteamingC ...
- 小甲鱼PE详解之输入表(导出表)详解(PE详解09)
小甲鱼PE详解之输出表(导出表)详解(PE详解09) 当PE 文件被执行的时候,Windows 加载器将文件装入内存并将导入表(Export Table) 登记的动态链接库(一般是DLL 格式)文件一 ...
- CentOS 7 下编译安装lnmp之nginx篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168 ...
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
在此之前,我们已经对这个输入表进行了一些实践和理解,这有助于大家对这个概念更进一步的加深认识.小甲鱼觉得,越是复杂的问题我们应该越是去动手操作它,认识它,这样才容易熟悉它! 在上一节课我们像小鹿一样的 ...
- 小甲鱼PE详解之输入表(导入表)详解(PE详解07)
捷径并不是把弯路改直了,而是帮你把岔道堵上! 走得弯路跟成长的速度是成正比的!不要害怕走上弯路,弯路会让你懂得更多,最终还是会在终点交汇! 岔路会将你引入万劫不复的深渊,并越走越深…… 在开始讲解输入 ...
- java提高篇-----详解java的四舍五入与保留位
转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...
- CentOS 7 下编译安装lnmp之PHP篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...
随机推荐
- 图解 LeetCode 算法汇总——回溯
本文首发公众号:小码A梦 回溯算法是一种常见的算法,常见用于解决排列组合.排列问题.搜索问题等算法,在一个搜索空间中寻找所有的可能的解.通过向分支不断尝试获取所有的解,然后找到合适的解,找完一个分支后 ...
- day02 数据类型转换 运算符 方法
数据类型转换 自动类型转换 强制类型转换 1. 自动类型转换:就是范围小的向范围大的转换 将取值范围小刀的类型自动提升为取值范围大的类型. 转换规则 byte.short.char int--- ...
- Linux下安装MySQL问题及报错解决
前言: 在Linux环境下,安装MySQL服务 环境: 虚拟机CentOS7 \-----------------------------------------------\ 流程: 确保mysql ...
- 第七单元《中国传统文化与管理》单元测试 mooc
第七单元<中国传统文化与管理>单元测试 返回 本次得分为:8.00/10.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 ...
- 轻松掌握组件启动之Redis单机、主从、哨兵、集群配置
单机配置启动 Redis安装 下载地址:http://redis.io/download 安装步骤: 1: 安装gcc编译器:yum install gcc 2: 将下载好的redis‐5.0.3.t ...
- Maximum Diameter 题解
Maximum Diameter 题目大意 定义长度为 \(n\) 的序列 \(a\) 的权值为: 所有的 \(n\) 个点的第 \(i\) 个点的度数为 \(a_i\) 的树的直径最大值,如果不存在 ...
- 下载kubernetes
前言 页面介绍了k8s的组件下载的方法 二进制文件 二进制文件的下载链接在CHANGELOG文件中,这里有一个技巧是直接下载Server Binaries,这个是包含了所有的二进制文件.下载后记得比对 ...
- Maven 项目工程
maven打包java --jar1.安装jdk2.安装maven --安装非常简单 网上教程很多,此步骤忽略-- 3.配置jdk/maven环境变量 # java_jdk export JAVA ...
- WebSocket connection to 'ws://127.0.0.1:8089/websocket/0,1,10,admin' failed:
WebSocket连接失败 背景: 相同项目数据库从mysql变更到sqlite,代码层面基本没有变更,但是WebSocket连接失败,查找多方原因,未找到问题,最后发现新项目JDK为OpenJDK, ...
- 搓一个Pythonic list
总所周知,Python语言当中的list是可以存储不同类型的元素的,对应到现代C++当中,可以用std::variant或者std::any实现类似的功能.而Python官方的实现当中用到了二级指 ...