第十节梯度下降之归一化的各种方式和必要性(5)

上一节中我们讲解了梯度下降的函数最优化算法和梯度下降代码过程,了解了梯度下降的代码实现过程,本节的话我们讲解一个梯度下降之前必要的数据准备,归一化。

先看一个例子,假如你收集到一个数据集,一列是年龄,一列是身高(厘米)。比如体重的数据都是60,65。身高的数据是180,185,你发现它的量纲远远大于age,这样会导致什么?比如身高是W2,体重是W1,假如要根据这些数据预测寿命,比如结果是这样的:

因为最后它们相乘相加等于你预测的年龄,那么对数据本身来说量纲比较小的数字,它会乘的W比较大一些。因为体重乘上比较小的数字w1+身高乘以比较大的数字w2,才能等于最后的年龄。这么想好像没什么问题,相当于程序给我们把数据自动修正了,身高数据大,我就自动W小点,预测也不会出问题,虽然看起来没问题,但它在梯度下降的效率上会导致一定的问题。会导致一个什么问题呢? 比如W2小,它越小,是不是越灵敏相当,那么W2动一点就会怎么样?我们先看下上面数据训练模型时如果不做归一化的损失函数的等高线如图:

等高线里面,每一个圆的损失函数是一样的。在这个例子里面,你觉得θ1(即w1)和θ2(即w2),谁是age谁是height?实际上θ2是height,θ1是age,为什么?因为W2是不是小,你动一点点,损失函数会变化的很多,所以图中θ2一点点变化,损失函数就会从一个圆变到另一个圆,所以θ2对应着身高前面的参数。那么这会导致什么问题?我们看下图中的θ1(即w1)和θ2(即w2)的更新参数:

无论对于W1来说还是W2来说,前边部分有区别吗? 没区别吧?那么体现在更新W1和W2的更新的不同,是Xj不同。在θ2的方向上,因为X2比较大,所以θ2方向每次加的都很大,而θ1方向每次加的又比较小,假如最开始在初始点那块,θ2距离自己的终点也就是最后的最优解的点其实很近,而θ1距离自己的终点很远,按理说θ1应该赶紧紧跑两步对不对?而现在变成了θ2在反复的震荡,而θ1在不着急得一步一步走,这样的话会导致你的计算效率变得特别慢。梯度下降的过程中,你想让W2是不是每一步更新更加细致一点,更微小一点,更精准一点,让W1每一步更大刀阔斧一点?所以如果量纲不一致,会导致本来需要一步一步慢慢走的这个维度W2,反倒震荡的特别厉害。W1想让它变化快一点,但X1比较小,会导致它下降的速度反倒慢了,适得其反。讲到这里,有的人会说我调控每一步下降的中的α,也就是我们的λ,是不是可以控制下每次减的幅度?这里想让大家想一个问题,λ是只有一个数还是说每个维度各有一个λ?如果每个维度各有一个λ就没这问题了,你自己单独的给它们调一下就行了,但是调参又变得复杂了,你有一千个维度,难道你还要手工设一千个λ,还要细致地调吗?不现实。这数根源就是因为只有一个λ管着我所有的W,那么需要大的反倒小了,小的反倒大了。 所以我们怎么办?

我们就需要对数据进行一个归一化。比如我原来原始数据身高是180,170,160,150,我做一个最大最小值归一化,最大最小值归一化公式是:

我用X减去最小的X,除以(最大的X,减去最小的X),假设这四个数,180,170,160,150。那么此时180会变成什么?你们根据这算一下。180变成1了,150变成什么了?0了,中间是0到1的一些数相当于就把所有列,如果你都执行这么一遍的话,是不是就变成了所有数都在0到1之间了。这样他们的量纲就一样了。这样我们的损失函数就会从一个椭圆特别椭的圆变成一个比较圆的圆。如下面一样:

因为各个维度的数值通过最大最小值归一化之后会让它两边的步伐速度是一致的,不会存在谁等谁的情况,所以损失函数等高线的图就近似一个相对比较圆的圆。这样会带来更快的收敛步数和更快的收敛速度。除此之外,归一化还有什么好处?对one-hot编码来说,有的维度转变成one-hot编码,比如性别转成one-hot之后男的是0-1 女的是1-0两个维度标识性别,这样相对公平,不至于男的性别是1 ,女的性别是0,这样会给机器学习一种错误的输入,男的比女的大的错误信息,因此需要转成one-hot编码。但假如有的没转成one-hot编码,比如身高,没转one_hot编码的这些维度如果经过最大最小值归一化都给它缩放到零和一之间后,这样跟经过one-hot编码的那些维度的量纲也都一致了,在训练模型的时候,经过处理过的训练集就是一堆你看不懂的数了,比如身高它就不再代表实际物理意义上的高度有多高了,但它是一个高度的评分,越近越1越代表你在这里边越高。例如170和160,经过最大值最小值归一化之后,肯定170更接近数值1。

那么当预测一条新数据的时候,怎么预测? 你还能把原始数据直接丢进去算吗?你是不是需要对新的数据要做最大最小值归一化,用谁的最大值?谁的最小值?用你的训练集中的最大值和训练集中的最小值做归一化,我们称它为经验最大值和经验最小值。好在这些事情不需要你来手工处理,只要你把normalize=true,就可以了。

                      lin_reg = LinearRegression(normalize=True)

这一切的一切底层就帮你做好了。它做的不光是最大最小值归一化,它还要做零均值化,它要把每一个X都减去这一列的平均值。为什么要这么做?比如看下面的例子:

假如你随机到图中这个点了,再接着往下,θ1需要增大减小?增大,对吧?θ2需要增大还是减小?减小。所以θ1需要增大,θ2需要减小,但θ1和θ2怎么算的?咱们看随机梯度下降,对于θ1也好,θ2也好,这一项都一样,能影响它到底增大还是减小,是不是取决于它Xj? 所以对于θ1就把X1带进去,对于θ2就把X2代进去。通常训练集里的数据是不是都是正数?如果你不做零均值化的话,所有X都是正数,是不是所有的θ要增都增要减都减。对于这个例子,要想走到最优解,应该这样走,如图:

如果不去处理归一化的话,这会只能θ1也增θ2也增,第一步θ2先少增一点,尽量等一下θ1,θ1多走点, 甚至走过θ1的最优值,然后,θ1减,θ2也减才能走到最后最优解的那个点,它不具备同时一个参数增另一个参数减的这么一个功能。但假如你对它做一个零均值化,比如第二列X2,1.8米,1.7米,1.6米,1.5米,都减去均值后,这就变成了+1.5,+0.5,-0.5,-1.5,这会X是不是就有正有负了?有正有负了之后,是不是它就有可能进行这种有的增有的减的这种下降?所以说normalize里面至少会同时做最大最小值归一化来保证量纲一样和零均值化让所有的维度数值有大有小,这样才能获得更好的梯度下降效率。 如果你不做这些也能得到最优解,就是人家走10步你可能走15步这么一个概念,它效率更低,做了这个能够帮助你下降的更快,更好的找到这个结果。那么来一条新数据,是不是也得减去平均值,减谁的平均值?减你训练集里边的算出来平均值,能理解吗?这个也叫经验平均值。 经验平均值这个东西在深度学习里面一样要这么处理。只要用到梯度下降,就都需要这么处理。只要有梯度下降,均值归一化是必须的,没有均值归一化的话,它下降速率一定会慢好多,因为它老要走曲折的弯路。

对于有些算法,还会使用方差均值标准化来调整数据使模型训练拥有更好的性能。即:

所以归一化方式是进行模型训练前的必要步骤,也是数据处理的关键步骤。聊了这么多梯度下降的逻辑和过程,有没有对其底层原理感兴趣,所以下一节我们将讲解梯度下降的底层原理。

转载于:https://www.cnblogs.com/LHWorldBlog/p/10694479.html

大白话5分钟带你走进人工智能-第十节梯度下降之归一化的各种方式和必要性(5)...相关推荐

  1. 大白话5分钟带你走进人工智能-第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6)...

                                第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6) 我们回忆一下,之前咱们讲什么了?梯度下降,那么梯度下降是一种什么算法呢?函数最优化 ...

  2. 大白话5分钟带你走进人工智能-第七节梯度下降之梯度概念和梯度迭代过程(2)

    第七节梯度下降之梯度概念和梯度迭代过程(2) 上一节中针对一元函数,找到了一个看起来还不错的一种寻求数值上的最小值的这种方式.大致是这么一个流程,F(w)和F'(w),上来先瞎蒙出来一组w,然后带到这 ...

  3. 大白话5分钟带你走进人工智能-第七节梯度下降之梯度概念和梯度迭代过程(2)...

    第七节梯度下降之梯度概念和梯度迭代过程(2) 上一节中针对一元函数,找到了一个看起来还不错的一种寻求数值上的最小值的这种方式.大致是这么一个流程,F(w)和F`(w),上来先瞎蒙出来一组w,然后带到这 ...

  4. c语言编程sinx泰勒公式_大白话5分钟带你走进人工智能-第12节梯度下降之原理泰勒公式(7)...

    第十二节梯度下降之背后的原理之泰勒公式(7) 我们接下来给大家深化一下,梯度下降背后到底是什么原理?谈到这个,我们要谈到一个叫泰勒展开的这么一个数学定理,泰勒发现任何一个函数不用管它有多复杂,不管它什 ...

  5. 大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)

                                                        大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5) 上一节中,我们讲 ...

  6. 梯度下降的超参数大于等于2什么意思_大白话5分钟带你走进人工智能-第七节梯度概念和梯度迭代过程(2)...

    第七节梯度下降之梯度概念和梯度迭代过程(2) 上一节中针对一元函数,找到了一个看起来还不错的一种寻求数值上的最小值的这种方式.大致是这么一个流程,F(w)和F`(w),上来先瞎蒙出来一组w,然后带到这 ...

  7. 大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2)

              大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out  of  bag  data及代码(2) 上一节中我们讲解了随机森林的基本概念,本节的话我们讲解随机森 ...

  8. 大白话5分钟带你走进人工智能-第34节神经网络之多神经网络概念(2)

    目录 1.回顾: 2.常见的激活函数都有哪些? 3.多层神经网络里面故事: 4.如何训练神经网络? 1.回顾: 回顾下之前学习的内容.人工神经网络里面有重要的三条内容,一个是加和,加function, ...

  9. 大白话5分钟带你走进人工智能-第31节集成学习之最通俗理解GBDT原理和过程

    目录 1.前述 2.向量空间的梯度下降: 3.函数空间的梯度下降: 4.梯度下降的流程: 5.在向量空间的梯度下降和在函数空间的梯度下降有什么区别呢? 6.我们看下GBDT的流程图解: 7.我们看一个 ...

最新文章

  1. NVIDIA Turing Architecture架构设计(下)
  2. DC / OS中具有Java和数据库应用程序的服务发现
  3. php拼接xml特殊字符不显示,使用PHP的XML特殊字符
  4. 我是如何从双非本科到拿到微软校招offer的?
  5. 自由在博客里插入广告,有钱你不赚吗???
  6. 弹性屋顶涂料行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. 9ztu.com 就找图商品图片商品条码搜索引擎
  8. 共享该文件当前不能用户此计算机,局域网共享常见问题解决汇集
  9. Excel在指定范围内匹配/查找文本(MATCH)
  10. 博途IEC TIME数据类型_基于博途V15 西门子S7-1200数据处理指令应用-移动操作
  11. 今天脚被蜈蚣“啃”了
  12. 写在最后——如何做好一个语音助手
  13. 代码风格自动化(二)——husky + lint-staged
  14. qq离线linux,QQ For Linux 我哭了,官方版
  15. 利用java计算长方形的面积
  16. mongodb中地理位置信息的存储和查询
  17. 用频谱仪测量晶体频率的方法
  18. java日志切割工具_JavaSwing版本的日志文件分割器
  19. C++11新特性(69)- sizeof...运算符
  20. php彩蛋屏蔽,PHP彩蛋篇——意想不到的惊喜

热门文章

  1. Handler-接受子线程数据更新UI主线程;非主线程通信--HandlerThread
  2. 如何使用XML作为小型数据库
  3. Android在初始化时弹出popwindow的方法
  4. Java中的Set集合类
  5. Nginx-06:Nginx配置实例之负载均衡
  6. 中断服务子程序(ISR)
  7. 关于STM32驱动DS1302实时时钟的一点思考
  8. redis的string类型和bitmap
  9. 剑指offer三:从尾到头打印链表
  10. python五十二:__setattr__,__delattr__,__getattr__方法