归一化输入

训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:

  1. 零均值

  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)的更多相关文章

  1. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  2. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  3. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  4. StreamingContext详解,输入DStream和Reveiver详解

    StreamingContext详解,输入DStream和Reveiver详解 一.StreamingContext详解 1.1两种创建StreamingContext的方式 1.2SteamingC ...

  5. 小甲鱼PE详解之输入表(导出表)详解(PE详解09)

    小甲鱼PE详解之输出表(导出表)详解(PE详解09) 当PE 文件被执行的时候,Windows 加载器将文件装入内存并将导入表(Export Table) 登记的动态链接库(一般是DLL 格式)文件一 ...

  6. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  7. 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)

    在此之前,我们已经对这个输入表进行了一些实践和理解,这有助于大家对这个概念更进一步的加深认识.小甲鱼觉得,越是复杂的问题我们应该越是去动手操作它,认识它,这样才容易熟悉它! 在上一节课我们像小鹿一样的 ...

  8. 小甲鱼PE详解之输入表(导入表)详解(PE详解07)

    捷径并不是把弯路改直了,而是帮你把岔道堵上! 走得弯路跟成长的速度是成正比的!不要害怕走上弯路,弯路会让你懂得更多,最终还是会在终点交汇! 岔路会将你引入万劫不复的深渊,并越走越深…… 在开始讲解输入 ...

  9. java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

  10. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

随机推荐

  1. 产品代码都给你看了,可别再说不会DDD(六):聚合根与资源库

    这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...

  2. Solution -「THUPC 2019」Duckchess

    Description Link. 大模拟是不可能给你概括题意的. Solution (据说鸭棋题解用这个标题很吉利)(这里是被点名批评的 长度 19k 的打法)(先说好代码里 Chinglish 满 ...

  3. Go语言常用标准库——fmt

    文章目录 fmt 向外输出 Print Fprint Sprint Errorf 格式化占位符 通用占位符 布尔型 整型 浮点数与复数 字符串和[]byte 指针 宽度标识符 其他falg 获取输入 ...

  4. pta2023年9月7日 第五期

    5月23日   11月14日   有效期3年: 更新方式待定:  双方认证合作CCF编程培训师资认证(PTA)中国计算机学会https://pta.ccf.org.cn/中国科教工作者协会(原:中国青 ...

  5. HexConversion 二进制 八进制 十六进制 十进制

    public class HexConversion { // TODO Auto-generated method stub /** * TODO 进制转换. * * @param cc * htt ...

  6. GeoServer发布影像WMTS服务

    WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案. WMTS: 切片地图web服务(OpenGIS Web Map Tile Service) 使用GeoServer发布WMTS服 ...

  7. 浅谈关于LCA

    prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显. main body 倍增法 先讨论倍增法,倍增法求 lc ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (110)-- 算法导论10.2 1题

    一.用go语言,单链表上的动态集合操作 INSERT 能否在 O(1)时间内实现?DELETE 操作呢? 文心一言: 在单链表中,INSERT 和 DELETE 操作的时间复杂度通常是 O(n),其中 ...

  9. Qt信号槽与事件循环学习笔记

    事件与事件循环 信号槽机制 事件与事件循环 在Qt中,事件(event)被封装为QEvent类/子类对象,用来表示应用内部或外部发生的各种事情.事件可以被任何QObject子类的对象接收并处理. 根据 ...

  10. Python如何在日志中隐藏明文密码

    Python如何在日志中隐藏明文密码 前言 在项目开发中,有的时候会遇到一些安全需求,用以提升程序整体的安全性,提高外来非法攻击的门槛,而在日志中隐藏明文密码打印便是最典型的安全需求之一. 在Pyth ...