首页 > 其他分享 >神经网络优化篇:详解归一化输入(Normalizing inputs)

神经网络优化篇:详解归一化输入(Normalizing inputs)

时间:2023-12-28 10:33:57浏览次数:22  
标签:inputs 函数 训练 方差 特征 Normalizing 归一化 sigma

归一化输入

训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为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,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,通常会做归一化处理,虽然不确定它能否提高训练或算法速度。

这就是归一化特征输入。

标签:inputs,函数,训练,方差,特征,Normalizing,归一化,sigma
From: https://www.cnblogs.com/oten/p/17932170.html

相关文章

  • 归一化方法-Z-score
    归一化方法-Z-scoreZ-score定义z-score精确测量偏离数据点均值的标准差数。公式如下:\(z=\frac{data\point-mean}{standard\deviation}\),标准数学公式为:\(z=\frac{x-\mu}{\sigma}\)几个z-score相关的重要性质:z-score如果是正值,说明数据点高于均值;z-score如果是......
  • 【Python&RS】基于Python对栅格数据进行归一化(统一量纲至0~1)
            有段时间没有更新Python处理栅格、矢量数据了,一部分是因为之前基本上已经把如何使用Python处理地理数据的方法覆盖完了,另一部分是因为最近有其他方面的知识需要学习和巩固。也是赶巧,最近有个项目需要构建模型对影像进行反演需要用到归一化,所以就编了一段代码,今......
  • 深度学习原理与实战:批量归一化(Batch Normalization)的理解
    1.背景介绍深度学习是近年来最热门的人工智能领域之一,它是一种通过多层神经网络来处理大量数据并从中学习模式的技术。深度学习的一个主要挑战是训练深层网络的难度,这是因为深层网络容易受到梯度消失或梯度爆炸的影响。在深度学习中,神经网络的输入通常是从数据集中抽取的特征,这些特......
  • java.io.FileInputStream#read(byte[]) 阻塞导致没办法继续执行的问题处理
    在对设备节点进行操作的时候,发现读的时候进入阻塞状态(可能是设备节点异常),导致没办法继续执行后面的代码 查看了一下,文件的方式读,是没办法配置超时的自动报异常的设计了一段代码,针对读阻塞做异常处理 publicstaticStringsendCmdToFile(StringfromFile,Stringcmd......
  • LayerNorm 等其他归一化
    LayerNorm等其他归一化目录LayerNorm等其他归一化总览BatchNormLayerNorm计算过程LN优缺点用法上的差异transformer为什么使用layernormInstanceNorma,INGroupNorma,GNBNLNINGN的区别参考资料:总览BatchNorm:沿batch方向上,对(N、H、W)做归一化,保留通道C的维度......
  • 机器学习-线性回归-样本归一化处理-05
    目录1.为什么要对样本进行归一化2.归一化的方式一最大最小值3.归一化的方式二标准归一化1.为什么要对样本进行归一化样本之间的数量级是千差万别有量纲的例如:theta1>>theta2数值小的theta2反而能快速的收敛数值大的theta1收敛较慢出现theta2等待theta......
  • Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和
    本文根据文章:https://blog.csdn.net/wjp0000/article/details/117771752进行修改一、Java读取和存储文件数据流Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程这里面涉及到两个类:InputStreamReader和OutputStreamWriterInputStreamReader:将字节流转换成字......
  • 无涯教程-批处理 - Batch Files – Inputs函数
    运行批处理文件时,它使您可以选择传递命令行参数,然后可以在程序中读取它们以进行进一步处理,可以使用%运算符以及参数的数字位置从程序中调用批处理文件参数,以下是定义命令行参数的方式。%0是所调用的程序名称。%1是第一个命令行参数。%2是第二个命令行参数。等到%9。让无涯教程看......
  • Java - InputStream流Http客户端文件上传
    场景:两个系统文件服务不同,需从另外一个系统中下载文件并上传到另外一个系统中。代码实现//远程服务下载文件Responseresponse=fileCenterService.downloadFile(fileId);InputStreaminputStream=response.body().asInputStream();//调用接口上传到文件服务HttpClienth......
  • Java基础 FileInputStream 字节输入流的细节
    1.创建字节输入流对象:FileInputStreamfis=newFileInputStream("E:\\Java基础资料\\a.txt");细节:如果文件不存在,就直接报错 2.读取数据(read方法负责读取数据,会一个一个地读,如果读不到了,就会返回-1)细节①:一次读取一个字节,读出来的是数据在ASCII码表上对应的数字细节......