精华内容
下载资源
问答
  • 梯度下降及具体计算方式

    千次阅读 2018-12-25 18:38:11
    1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD 4. 总结  在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。其实,常用的梯度下降法还具体包含有三种不同的形式,...

    阅读目录

      在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点。

      下面我们以线性回归算法来对三种梯度下降法进行比较。

      一般线性回归函数的假设函数为:

     

      对应的能量函数(损失函数)形式为:

     

      下图为一个二维参数(和)组对应能量函数的可视化图:

    回到顶部

    1. 批量梯度下降法BGD

       批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,其数学形式如下:

      (1) 对上述的能量函数求偏导:

      (2) 由于是最小化风险函数,所以按照每个参数的梯度负方向来更新每个:

      具体的伪代码形式为:

      repeat{    

          

            (for every j=0, ... , n)

      }

      从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果样本数目很大,那么可想而知这种方法的迭代速度!所以,这就引入了另外一种方法,随机梯度下降。

      优点:全局最优解;易于并行实现;

      缺点:当样本数目很多时,训练过程会很慢。

      从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

    回到顶部

    2. 随机梯度下降法SGD

      由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。

      将上面的能量函数写为如下形式:

      利用每个样本的损失函数对求偏导得到对应的梯度,来更新:

      具体的伪代码形式为:

      1. Randomly shuffle dataset;

      2. repeat{

        for i=1, ... , {

          

           (for j=0, ... , )

        }

      }

      随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

      优点:训练速度快;

      缺点:准确度下降,并不是全局最优;不易于并行实现。

      从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。其迭代的收敛曲线示意图可以表示如下:

    回到顶部

    3. 小批量梯度下降法MBGD

      有上述的两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?即,算法的训练过程比较快,而且也要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。

      MBGD在每次更新参数时使用b个样本(b一般为10),其具体的伪代码形式为:

      Say b=10, m=1000.

      Repeat{

        for i=1, 11, 21, 31, ... , 991{

        

        (for every j=0, ... , )

        }

      }

    4.具体实现描述

     

    (1)线性回归的定义

    (2)单变量线性回归

    (3)cost function:评价线性回归是否拟合训练集的方法

    (4)梯度下降:解决线性回归的方法之一

    (5)feature scaling:加快梯度下降执行速度的方法

    (6)多变量线性回归

    Linear Regression

     

    注意一句话:多变量线性回归之前必须要Feature Scaling!

     

    方法:线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集数据),挑选出最好的函数(cost function最小)即可;

    注意:

    (1)因为是线性回归,所以学习到的函数为线性函数,即直线函数;

    (2)因为是单变量,因此只有一个x;

     

    我们能够给出单变量线性回归的模型:

     

     

    我们常称x为feature,h(x)为hypothesis;

     

    从上面“方法”中,我们肯定有一个疑问,怎么样能够看出线性函数拟合的好不好呢?

    我们需要使用到Cost Function(代价函数),代价函数越小,说明线性回归地越好(和训练集拟合地越好),当然最小就是0,即完全拟合;

     

    举个实际的例子:

    我们想要根据房子的大小,预测房子的价格,给定如下数据集:

     

     

    根据以上的数据集画在图上,如下图所示:

     

    我们需要根据这些点拟合出一条直线,使得cost Function最小;

     

     

    虽然我们现在还不知道Cost Function内部到底是什么样的,但是我们的目标是:给定输入向量x,输出向量y,theta向量,输出Cost值;

     

    以上我们对单变量线性回归的大致过程进行了描述;

     

     

    Cost Function

     

     

    Cost Function的用途:对假设的函数进行评价,cost function越小的函数,说明拟合训练数据拟合的越好;

    下图详细说明了当cost function为黑盒的时候,cost function 的作用;

     

    但是我们肯定想知道cost Function的内部构造是什么?因此我们下面给出公式:

     

    其中:

    表示向量x中的第i个元素;

    表示向量y中的第i个元素;

    表示已知的假设函数;

    m为训练集的数量;

     

    比如给定数据集(1,1)、(2,2)、(3,3)
    则x = [1;2;3],y = [1;2;3]     (此处的语法为Octave语言的语法,表示3*1的矩阵)
    如果我们预测theta0 = 0,theta1 = 1,则h(x) = x,则cost function:
    J(0,1) = 1/(2*3) * [(h(1)-1)^2+(h(2)-2)^2+(h(3)-3)^2] = 0;
    如果我们预测theta0 = 0,theta1 = 0.5,则h(x) = 0.5x,则cost function:
    J(0,0.5) = 1/(2*3) * [(h(1)-1)^2+(h(2)-2)^2+(h(3)-3)^2] = 0.58;

     

    如果theta0 一直为 0, 则theta1与J的函数为:

     

    如果有theta0与theta1都不固定,则theta0、theta1、J 的函数为:

     

    当然我们也能够用二维的图来表示,即等高线图;

     

     

    注意:如果是线性回归,则costfunctionJ与的函数一定是碗状的,即只有一个最小点;

     

    以上我们讲解了cost function 的定义、公式;

     

     

    Gradient Descent(梯度下降)

     

     

    但是又一个问题引出了,虽然给定一个函数,我们能够根据cost function知道这个函数拟合的好不好,但是毕竟函数有这么多,总不可能一个一个试吧?

    因此我们引出了梯度下降:能够找出cost function函数的最小值;

    梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;

     

    当然解决问题的方法有很多,梯度下降只是其中一个,还有一种方法叫Normal Equation;

     

    方法:

    (1)先确定向下一步的步伐大小,我们称为Learning rate;

    (2)任意给定一个初始值:

    (3)确定一个向下的方向,并向下走预先规定的步伐,并更新

    (4)当下降的高度小于某个定义的值,则停止下降;

     

    算法:

     

     

     

    特点:

    (1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;

    (2)越接近最小值时,下降速度越慢;

     

    问题:如果初始值就在local minimum的位置,则会如何变化?

    答:因为已经在local minimum位置,所以derivative 肯定是0,因此不会变化;

     

    如果取到一个正确的值,则cost function应该越来越小;

    问题:怎么取值?

    答:随时观察值,如果cost function变小了,则ok,反之,则再取一个更小的值;

     

    下图就详细的说明了梯度下降的过程:

     

     

    从上面的图可以看出:初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;

     

    注意:下降的步伐大小非常重要,因为如果太小,则找到函数最小值的速度就很慢,如果太大,则可能会出现overshoot the minimum的现象;

     

    下图就是overshoot minimum现象:


     

    如果Learning rate取值后发现J function 增长了,则需要减小Learning rate的值;

     

     

    Integrating with Gradient Descent & Linear Regression

     

     

    梯度下降能够求出一个函数的最小值;

    线性回归需要求出,使得cost function的最小;

     

    因此我们能够对cost function运用梯度下降,即将梯度下降和线性回归进行整合,如下图所示:

     

     

    梯度下降是通过不停的迭代,而我们比较关注迭代的次数,因为这关系到梯度下降的执行速度,为了减少迭代次数,因此引入了Feature Scaling;

     

     

    Feature Scaling

     

     

    此种方法应用于梯度下降,为了加快梯度下降的执行速度

    思想:将各个feature的值标准化,使得取值范围大致都在-1<=x<=1之间;

     

    常用的方法是Mean Normalization,即

     

    或者:

    [X-mean(X)]/std(X);

     

    举个实际的例子,

    有两个Feature:

    (1)size,取值范围0~2000;

    (2)#bedroom,取值范围0~5;

    则通过feature scaling后,

        

     

     

    练习题

     

    我们想要通过期中开始成绩预测期末考试成绩,我们希望得到的方程为:

    给定以下训练集:

     

    midterm exam (midterm exam) final exam
    89 7921 96
    72 5184 74
    94 8836 87
    69 4761 78

    我们想对(midterm exam)^2进行feature scaling,则经过feature scaling后的值为多少?

     

    max = 8836,min=4761,mean=6675.5,则x=(4761-6675.5)/(8836-4761) = -0.47;

     

     

    多变量线性回归

     

     

    前面我们只介绍了单变量的线性回归,即只有一个输入变量,现实世界不可能这么简单,因此此处我们要介绍多变量的线性回归;

     

    举个例子:

    房价其实由很多因素决定,比如size、number of bedrooms、number of floors、age of home等,这里我们假设房价由4个因素决定,如下图所示:

     


     

    我们前面定义过单变量线性回归的模型:

     


     

    这里我们可以定义出多变量线性回归的模型:

     

     

     

    Cost function如下:

     

     

    如果我们要用梯度下降解决多变量的线性回归,则我们还是可以用传统的梯度下降算法进行计算:

     

     

     

    总练习题:

    1.我们想要根据一个学生第一年的成绩预测第二年的成绩,x为第一年得到A的数量,y为第二年得到A的数量,给定以下数据集:

     

    x y
    3 4
    2 1
    4 3
    0 1

    (1)训练集的个数是多少?  4个;

    (2)J(0,1)的结果是多少?

    J(0,1) = 1/(2*4)*[(3-4)^2+(2-1)^2+(4-3)^2+(0-1)^2] = 1/8*(1+1+1+1) = 1/2 = 0.5;

     

    我们也可以通过vectorization的方法快速算出J(0,1):

     

    展开全文
  • 计算图 可以说,一个神经网络的计算都是按照前向或者反向传播过程来实现的,首先计算出神经网络的输出,紧接着一个反向传播的操作。后者,我们用来计算出对应的梯度或者导数。这个流程图解释了为什么用这样的方式来...

    计算图

    可以说,一个神经网络的计算都是按照前向或者反向传播过程来实现的,首先计算出神经网络的输出,紧接着一个反向传播的操作。后者,我们用来计算出对应的梯度或者导数。这个流程图解释了为什么用这样的方式来实现。

    我们举一个更为简单的函数为例,如何计算该函数。具体流程如下:

    这里写图片描述

    流程图是用蓝色箭头画出来的,从左到右的计算过程。那么红色箭头是从右到左的导数计算过程。

    计算图的导数计算

    反向传播算法的实质实际上就是用微积分的链式法则求导的过程。

    这里写图片描述

    比如说我们算dJ/da的大小,就用链式法则反过来算一下。

    logistic回归的梯度下降法

    这一部分将介绍如何用导数流程图来计算梯度。

    我们回忆一下逻辑回归公式,注意这里的a是预测值的意思等于y(i)

    这里写图片描述

    整个计算流程如图

    这里写图片描述

    想要计算损失函数L的导数,要逐步返回计算前面各项的导数。

    这里写图片描述

    如图所示,我们先用反向传播方法求出各个导数值(对于单个变量的就是这么算),然后使用梯度算法,更新

    w=wαdw1

    我们从这个公式可以看出,dw1是我们用反向传播求出来的,这是只是增加了一个学习率α

    m个样本的梯度下降

    之前我们介绍了如何将梯度回归应用到Logistic回归的一个训练样本上,现在我们想要把他们应用到m个训练样本上。

    首先,我们要明确成本函数J(w,b),期望使得成本函数达到最小的值。

    这里写图片描述

    如图所示,我们这里要做的就是使用之前的链式法则求出相应的导数值,做差,然后求平均。这就是Logistic回归和梯度下降算法。

    整个计算的编程流程如下:

    这里写图片描述

    完成左侧的迭代计算之后,我们使用梯度算法对w进行一次学习更新(写在右侧),即w1减去学习率乘以dw1。然后不断重复这些步骤,即迭代完成之后进行更新

    注意这里我们每一个xi都会计算出一个dw,而我们希望得到的是dw的平均值,所以最后除以m。当我们用向量化进行计算也是一样的,对于所有的X也就是X向量,除以m取一个平均值。

    展开全文
  • 大数据系列 -- 用户流失率计算

    千次阅读 2019-09-24 23:03:04
    用户流失的数据可以算,可算出来以后呢?只看数据似乎完全看不出什么流失原因,只知道用户已经X个月没有来了,也不知道看到这个能干啥。今天系统解答一下。 用户流失分析常见错误 ☆错误1:试图挽留每一位...

    有同学问:用户流失该怎么分析?用户流失率的数据可以算,可算出来以后呢?只看数据似乎完全看不出什么流失原因,只知道用户已经X个月没有来了,也不知道看到这个能干啥。今天系统解答一下。

     

    用户流失分析常见错误

     

    ☆错误1试图挽留每一位用户。这是运营最常见的错误,很多新人都会踩这个坑。不购物了就发券,不登录了摇转盘。结果空烧经费,养出来一帮无利不起早的羊毛客。实际上,用户流失是不可避免的,天下没有100%的留存。每种业务都要关注自己的核心用户。在谈及用户流失的时候,我们真正要做的是:把流失率关在笼子里,控制在一个可以接受的水平上。

     

    错误2试图搞懂每一个流失原因。这是分析最常见的错误,很多新人都会踩这个坑。用户不喜欢?我们没做好?对手太厉害?用户没钱了?——总之想给每个人一个理由。可压根没数据,于是大眼瞪小眼。实际上,我们没必要、也没能力穷举所有原因。同上一条,我们只要控制可控因素,减少明显错误即可。

     

    ☆错误3只盯流失不看活跃,事后诸葛。这是另一个常见错误。在流失率实际增高以后才开始分析。结果木已成舟,用户都跑了,分析了也没啥用。流失率是个相对滞后的指标。在数据上“流失”以前,用户可能已经跑掉了,早前几个月就没活跃了。所以,流失率要和活跃率结合起来看。对于影响用户活跃的事件要尽早关注,对于核心用户活跃率要紧密跟踪,避免事后做无用功。

     

    用户流失分析基本思路

     

    用户流失分析的目标是把流失率关在笼子里,因此在数据上,我们首先关注的是流失率走势,尤其关注三类问题(如下图所示)。

     

    1、事件型问题。由一次/多次事件引发的短期流失率波动。

    2、系统型问题。公司整体流失率高于同行/经验水平,并且居高不下。

    3、持续型问题。流失率从某时间开始持续增高,未见好转迹象。

     

    流失率是一个和活跃率相对的概念。虽然我们习惯上会给一个:用户X月不登录/不购货即为流失用户的定义,但当用户已经不活跃的时候,真实的流失可能已经发生了。为了更好的发现流失问题,往往自然周期和生命周期两种方式,结合活跃率一起看。自然周期往往指向事件型问题(因为事件是按自然日期发生的),生命周期往往指向系统型问题(业务做得不好,用户生命周期短or存在断点)。

     

    事件型问题分析方法

     

    负面的事件会引发用户流失。比如缺货、涨价、系统BUG、用户投诉、对手大促销(我们还恰好没做)等等。这一类事件最容易被识别到。体现在数据上,受事件影响的用户群体活跃率,会在事件发生后应声而落,之后N个月,流失率开始增长。

     

    在分析时,需要

    1、收集并密切注意相关事件。

    2、做好事件归类(内部/外部、系统/价格/商品…)。

    3、锁定受影响用户群体(打好标签备观察)。

    4、关注受影响用户活跃变化。

    5、观察事件对整体流失影响。

     

    这样就事论事,更容易看出结果。在设计挽留方法时,也更容易对症下药。找到真正让用户不爽的原因,比单纯的塞优惠券更能保留用户。

     

    需注意:正面事件也会提升流失率。特别是用户拉新、促活、留存、唤醒等等。单纯的刺激非消费类软指标,最容易引发虚假繁荣。客观上:只要有优惠活动,就会吸引套利的羊毛客,这类用户天生流失率就高。主观上讲:运营方为了制造好看的数据,也会减少限制,留下套利空间。两下作用,使得正面活动的效果往往会打折。比如新用户注册,由拉新活动产生的用户生命周期流失率很容易明显高于正常新用户的(如下图),之后N个月,这一批用户流失率势必高。

     

    因此,在做活动的时候,就得提前考虑相关后果。正面事件不同于负面,该做还得做,我们全面评估它就好了。虽然最后的结果,可能是策划、运营不想面对的,这里实际考察的是大家的节操值。

     

    系统型问题分析方法

     

    如果发生系统型问题,只说明一点:我们的业务做得比对手差。此时,诊断业务问题,改善业务表现才是核心。诊断方法,可以参照用户生命周期理论。

    用户在进入期、成长期、成熟期的流失原因有所不同,分析的侧重点也有不同,为了节省篇幅,这里简单总结如下图。有兴趣的同学可以在文末点个在看,数量超过20个再看我们专门分享噢。

     

    在应对系统型问题时,不同阶段考虑的重点不同。一般在进入期,会无差别改善。在进入期,用户实际上还没有体验到我们提供的核心卖点,因此需要无差别改善流程,让用户尽可能体验到核心卖点再说。在互联网行业往往关注黑色一分钟(下载到注册的一分钟)关注新手教程的过程。在传统行业,往往强调迎客话术,尽快让用户做一次体验,试用一下产品。

     

    进入成长期后,需要分类对待。进入成长期后,边缘用户、羊毛用户会被淘汰,用户价值也开始分化。非核心用户,就该让他流失掉,一味挽留只是空浪费经费,还会因为打折频繁让品牌贬值。这时要特别关注的是核心用户的流失,核心用户的活跃率下降,生命周期缩短,新进用户中核心用户占比下降,都是大问题,需要细致梳理和解决。有可能没有等到流失率真的涨上来,就已经开始行动了。

     

    系统型问题可能不是一步解决的,而是持续迭代的过程。有可能我们能诊断出问题,但解决方案并不好使唤,并不能改善数据。因此如果发现存在系统型问题,需要:

     

    1、选好参照标杆,找准差距

    2、设计解决方案,投入测试

    3、记录测试结果,观察数据变化

    4、积累经验,保留有效方法

     

    最终,我们看到的是我们的用户留存曲线越来越接近竞争对手,流失率持续下降,这时候可以说:系统型流失问题已得到解决。这中间可能要很多次试验、尝试,因此需要做好观察和记录,打持久战。

     

    持续型问题分析方法

     

    持续型问题往往最难解决。因为实际上流失率、活跃率、留存率等数据,经常出现不规则小幅度波动,而不是大幅度持续增长。这就是真正的鸡肋问题:放着不管、领导总问。想管一管,没有头绪。甚至还有流失率涨了几天,分析报告还没写出来丫就跌回来了,真是尴尬。

     

    处理的顺序,事件型》系统型》持续型。因为单次的重大事件最容易被识别到,容易通过数据看清楚。同时,往往一系列事件是导致系统型、持续型问题的根源,能识别具体事件对处理其他问题也有帮助。系统型问题,在业务方经验丰富的情况下,能找到合适的标杆,因此相对容易处理。

     

    最难的事持续型问题,往往流失率变化不会持续到特别严重,而是小范围反复波动(如下图),在缺少经验、数据积累的情况下,很难完全识别这些小波动,所以最后解决。如果真解决不了,就设立观察指标,先追踪起来。等到有一定程度,可能可以找到线索。 

     

    不同业务类型流失处理差异

     

    因为流失问题和业务高度相关,因此不同业务流失分析方向也不同。从大类上看,有两个最重要的区分维度。

     

    贵重低频产品VS便宜的快消品。越贵的产品(车、房、大件家居、婚庆……),用户决策流程越长,越倾向于事前判断,不存在复购一说。此类业务用户决策有明显的窗口期,越往deadline接近,用户最后下判断可能越大。所以,此类业务用户流失是个倒计时沙漏,在接触到用户的第一时间要搞清楚用户状态:用户需求是什么、对比了哪些竞品、是否已经开始议价,这样可以大概判断:留给我们的时间还有多少。从而更好抓住成交机会,赶紧跟进。而不是傻傻不分需求,按部就班介绍、跟进,黄花菜都凉了。

     

    快消品,或者购买频次高的消费类产品(比如衣服、鞋、手机)用户天生忠诚度低,很容易被流行趋势、促销活动改变态度。完全可以采用无差距挽留的策略。反正用户这一次不买,过一段时间也会回来买。因此处理此类产品,互联网企业往往区分平台流失与产品流失两个流失留存。只要用户还停留在平台上,就持续做唤醒。传统企业往往利用换季、新品上市、周期庆、节日活动等手段,多频次激活用户。总之,只要用户价值足够大,就不抛弃、不放弃。

     

    ☆传统行业VS互联网行业。两者在用户生命周期上积累的数据量不一样。互联网行业数据较多,往往可以记录用户从点击推广链接-落地页-注册-浏览-下单全过程,因此常采用漏斗分析法,看流失用户会卡在哪些步骤,锁定问题点做改进。特别是新人注册阶段,往往是无差别优化。

     

    传统行业往往只有消费数据,因此只能用消费频次、消费间隔来衡量用户。一般用户在消费n次以后,不喜欢的会流失,喜欢的会持续买,这就是所谓的魔法数字。通过魔法数字的大小对比,可以知道自己与对手的差距。至于用户到店-迎客-体验-服务-评价等行为层面,完全没有数据,需要通过市场调查等手段补齐。

     

    这里主要是提醒,业务间差异很大,虽然流失的定义可以定成XX月不登录/不购买。但是实际流失场景可能早就发生了,制止流失的关键动作也有可能没有数据记录。多结合具体业务思考办法,比机械码数字管用。 

     

    小结

     

    很多同学觉得用户流失问题很难处理。从明面上看,是因为用户流失的数据少,我们不知道用户心理怎么想的。可从本质上看,是因为会导致用户流失的原因,与用户生命周期、用户分群、用户决策流程、用户成长路径、新用户转化流程、用户体验、用户MOT、竞品影响等众多因素有关。这里随便一个主题拿出来都能单独摆一篇文章。整明白了这些,基本就搞懂了整个用户运营的流程。本质上,用户流失分析难,难在:做分析的同学们很少懂用户运营的业务。

     

    拉一个做分析的同学出来问:

    • 生命周期该是多长?

    • 行业性留存率是多少?

    • 核心用户是什么群体?

    • 核心卖点是什么体验?

    • 竞争对手有多大差异?

    • 最近运营发生了啥事?

    • 出现哪些意外bug?

    • 最新改动有什么影响?

    • ……

     

    回答都是:不太知道。甚至是:统统不知道。你问他知道啥?他只知道计算个流失率的数据,然后按用户年龄、性别、注册渠道、购买频次……等指标做一大堆交叉表。然后对着一组组数据1%、2%、3%的差异发呆:到底说明什么了呢?

     

    以上是个玩笑。总之分析不仅仅是跑个数据拉个表,更是深入问题内部、找到业务上真正病根。

    展开全文
  • 梯度下降法的原理及例题计算

    千次阅读 2019-09-25 15:00:26
    梯度下降法 参数选取的不同会影响到假设函数,在计算机中可以不断的猜测这个参数θ,我们通常会将参数的初始值设为0参数迭代的范围可以称为步长,在机器学习领域中有一个更专业的称呼叫学习。显而易见,学习的...

    梯度下降法的原理及例题计算

    参数选取的不同会影响到假设函数,在计算机中可以不断的猜测这个参数θ,我们通常会将参数的初始值设为0参数迭代的范围可以称为步长,在机器学习领域中有一个更专业的称呼叫学习率。显而易见,学习率的设置会直接影响到函数收敛的速度。在计算机中就是通过设置不同的学习率进行参数θ的迭代更新。

    1相关问题
    梯度下降法的表达式:θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
    形式化 GD(θ_j,α, ∂J(θ_j )/(∂θ_j ) )
    θ_j:参数,给定初始值;
    α:学习率;
    ∂J(θ_j )/(∂θ_j ):梯度;
    伪代码:
    repeat
    {
    θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
    }

    问题1:学习率是什么?
    学习率在上面的表达式中即是参数α,它是一个很小的正数。
    问题2:梯度是什么?
    多元函数的梯度定义为:∇f(x)=(∂f/(∂x_1 ),…,∂f/(∂x_n ))^T,所谓梯度也就是对多元函数求偏导。沿着梯度的负方向也就是函数下降速度最快的一个方向。
    例如:在这里插入图片描述
    问题3:为什么用梯度下降法更新参数?θ_j:=θ_j-α ∂J(θ_j )/(∂θ_j )
    梯度是函数变化最快的方向,因为前面有个减号。使得参数θ在向J(θ)越来越小的方向更新,而损失函数J(θ)在最小的时候也就是模拟的预测函数h最好的时候。需要求的参数θ正是在J(θ)最小时候的取值。

    2学习率的设置与调整策略
    学习率的设置至关重要,它决定了损失函数能否收敛以及收敛的快慢。下面通过选取不同大小学习率来观察损失函数的变化情况如图1,并做具体的说明。
    在这里插入图片描述
    图1:学习率设置对损失函数的影响
    曲线初始时上扬【红线】 :初始学习率过大导致振荡发散,应减小学习率并从头开始训练 。
    曲线初始时强势下降没多久归于水平 【蓝线】 :后期学习率过大导致无法收敛,应减小学习率,并重新训练后几轮 。
    曲线全程缓慢 【黄线】:初始学习率过小导致收敛慢,应增大学习率,并从头开始训练 。
    曲线下降速度较快,很好地收敛【绿线】:选取了较为合适的学习率,曲线能够以较快的速度收敛到损失函数很小的值。
    那么应该如何来调整学习率,从而让损失函数尽快地收敛呢?接下来给出三种调整策
    略。
    一:从一般的经验来看,学习率可以设置为0.001,0.003,0.01,0.03,0.1,0.3…具体需结合实际情况对比判断;二:根据数据集的大小来选择合适的学习率,当使用平方和误差作为代价函数时,随着数据量的增多,学习率应该被设置为相应更小的值(从梯度下降算法的原理可以分析得出);三:训练全过程并不是使用一个固定值的学习速度,而是随着时间的推移让学习率动态变化,比如刚开始训练,离最优值还很远,可以使用较大的学习率下的快一点,当快接近最优值时为避免跨过最优值,收敛速度要放缓(轮数减缓、指数减缓、分数减缓),使用较小学习率训练。
    但是训练时的最优值并不能提前知道,所以具体的解决办法是:在每次迭代后,使用估计的模型的参数来查看误差函数的值,如果相对于上一次迭代,错误率减少了,就可以以5%的幅度增大学习率如果相对于上一次迭代,错误率增大了,说明跳过最优值,那么应该重新设置上一轮迭代的值,并且减少学习率到之前的50%。因此,这是一种学习率自适应调节的方法。

    3梯度下降法的限制
    虽然梯度下降法在使损失函数收敛到最小值上有优异表现,但是我们的损失函数并不总是凸函数,意味着初始值选取的不同,很可能导致收敛到局部最优解。那么如何保证收敛到的值是全局最优解呢?
    在这里插入图片描述
    图2:初始点选取对损失函数收敛的影响
    如图2,选取了两个不同的初始值,并利用梯度下降法进行迭代,最后收敛到两个不同的局部最优解。为了保证损失函数最小,可以将这两个值进行比较,选取最小的那个值。同理,可以多选取几个不同的初始值进行尝试,选取最小的值做为全局最优解。

    B.4梯度下降法实例与代码实现
    假设损失函数为J(θ)=θ2,学习率为0.4,初始化参数起点为1,现在利用梯度下降法进行迭代:θ0=1,θ1=θ0-αJ^’ (θ^0 )=1-0.42=0.2,θ2=θ1-αJ^’ (θ^1 )=0.04,θ3=0.008,θ4=0.0016,将θ与J(θ)的关系图画出来,如图3,可以看出在进行到第四次迭代损失函数收敛到了最小值附近,这时候对应的参数θ就是假设函数h的参数。
    在这里插入图片描述
    图3:θ取值与J(θ)的关系图
    但是损失函数通常是比较复杂的多项式,下面给出表达式f(x)=x4-3x3+2,利用计算机进行梯度下降法的迭代,如算法B.1所示。
    算法B.1 梯度下降法的代码实现
    import numpy as np
    import matplotlib.pyplot as plt
    x=np.arange(-5,5,0.001)/从-5到5每隔0.001个单位取值/
    y=x**4-3
    x3+2/给出损失函数表达式/
    plt.plot(x,y)
    plt.show()
    old=0
    new=5
    step=0.01/设置学习率/
    precision=0.00001
    def derivative(x):
    return 4*x
    3-9x**2/求梯度/
    while abs(new-old)>precision: /梯度下降法的终止条件/
    old=new
    new=new-step
    derivative(new) /**/
    print(new)
    上述算法将学习率设置为0.01,对给定的损失函数进行迭代,当满足终止条件时,算法终止。

    展开全文
  • 百分比收益率计算:Rb=( s2- s1)/ s1= s2/ s1-1 对数收益率计算:Rd=ln(s2/ s1) 其中,s1,s2,s3是连续各期的股价,Rb表示百分比收益率,Rd表示对数收益率。  由定义可推知:Rd =ln(s2/ s1)= ln((s2-s1)/ s1+...
  • 中间和最后一个图是调整a与b的取值,绘出的损失函数变化图(蓝色表示损失小,红色表示损失大),中间是在一个图片样本上计算的损失结果,最下图为100张图片上计算的损失结果的一个平均。显然沿着直线方向得到的曲线...
  • 如何计算租金回报

    千次阅读 2018-08-21 13:30:37
    这里有介绍房地产投资分析的三种方法,可以比较科学地计算出投资买房的收益,消费者不妨试试。 方法一:租金回报分析法 公式:(税后月租金-每月物业管理费)×12/购买房屋总价 这种方法算出的比值越大,就...
  • 梯度下降算法原理及其计算过程

    千次阅读 2020-02-19 20:16:40
    还记得以前刚开始学习AI的时候,遇到了梯度下降算法,一直对很多概念搞不清楚,包括后来很长的一段时间也不是很明白梯度下降的实现原理,看了很多博客文章都是一知半解,总是有很多疑惑不能搞清楚,而且绝大多数的...
  • java记录计算同比上升下降

    千次阅读 2019-09-19 09:05:26
    return "下降"+Math.abs(result)+"%"; } if(result==0){ return "持平"; } return null; } public double countDecimal(BigDecimal preNum,BigDecimal sufNum){ boolean preBoolean = verifyNum...
  • 梯度下降学习的设定策略

    千次阅读 2019-04-23 14:39:38
    本文转载自卢明冬的博客-梯度下降学习的设定策略 1.学习的重要性 1)学习设置太小,需要花费过多的时间来收敛 2)学习设置较大,在最小值附近震荡却无法收敛到最小值 3)进入局部极值点就收敛,没有真正找到...
  • 波特传输字节数计算方法

    千次阅读 2020-05-26 00:00:00
    用 9600 波特来举例,就是最高每秒可以检测到 9600 个电平变化(上升沿/下降沿),也可以说最大每秒可以接收 9600 位数据,bit ,也就是二进制数(0/1),每个电平发生跳变的时钟周期为:1/9600 s. 2 传输字节数...
  • 如何高效计算用户留存

    千次阅读 2019-10-24 17:54:53
    简单介绍留存率的概念,说明数仓建设中对留存率计算的优化思路 什么是留存率 在互联网行业中,用户在某段时间内开始使用应用,经过一段时间后,仍然继续使用该应用的用户,被认作是留存用户。 留存率就是留存用户...
  • 增长, 下降. 同比, 环比
  • 可以用下面的命令将 cpu 占用高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%...
  • tensorflow 学习下降策略

    千次阅读 2018-07-26 22:32:41
    tensorflow 里面提供了几种学习率下降的策略,有指数下降法、分段固定值下降法、多项式下降法、自然指数下降法、随时间/步数下降法、余弦下降法、余弦重启式下降法、线性余弦下降法、带噪声的线性余弦下降法,下面...
  • 运用梯度迭代的方法寻求最优解又叫做梯度下降法,如果运用全部的样本进行计算那么每次计算都要考虑所有的样本,显然会影响效率,而且有时候也没有必要运用全部的数据来计算,所以在此基础上由批量地图下降法和小批量...
  • 学习a的计算标准

    千次阅读 2018-08-19 16:47:55
    当学习a非固定时,因为梯度下降是找的最小值,那么,在和给定的前提下,即寻找的最小值,即 进一步,如果h(α)可导,局部最小值处的α 满足: 对于该二次近似函数: 两种方法: 1、线性搜索(Line Search...
  • 梯度下降

    千次阅读 2019-08-16 10:29:39
    这就涉及到了梯度下降和学习(优化时每次采用的步长)。 首先来看一下梯度的定义。 梯度:在数学上,梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点...
  • 我们直到学习对于机器学习来说,大的学习虽然往往能够使得损失函数快速下降,但是导致不收敛或者振荡现象的发生,而小的学习虽然收敛,但是学习速率太慢,损失函数下降缓慢,需要等待长时间的训练,同时也会...
  • 4)自适应学习 自适应学习从某种程度上讲也算是动态调整学习的范畴,不过更偏向于通过某种算法来根据实时情况计算出最优学习,而不是人为固定一个简单策略让梯度下降按部就班地实行。 3.学习的设定策略 ...
  • 梯度下降算法原理讲解——机器学习

    万次阅读 多人点赞 2019-01-21 20:27:48
    详细来讲讲梯度下降算法的原理,感受数学和程序的魅力吧!!
  • 三、神经网络进一步优化——学习设置 一、预备知识 什么是梯度? 假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山。于是决定走一步算一步,也就是每次沿着当前位置最陡峭最易下山的方向前进一小步...
  • 模型已经训练出来了,用的自己的样本,但不知道怎样测试模型的这三个指标,tensorflow环境,小白一个,刚接触,谢谢!
  • 神经网络学习小记录45——Keras常用学习率下降方式汇总前言为什么要调控学习率下降方式汇总1、阶层性下降2、指数型下降3、余弦退火衰减 前言 学习是深度学习中非常重要的一环,好好学习吧! 为什么要调控学习 ...
  • 一种新的计算OFDM系统误码

    千次阅读 2020-12-30 19:48:39
    (2)传统的频分多路传输方法中,将频带分为若干个不相交的子频带来传输并行的数据流,在接收端用一组滤波器来分离各个子信道,这种方法的优点是简单直接,缺点是频谱的利用低,子信道之间要留有足够的保护频带,...
  • openstack计算节点,CPU占用100%

    千次阅读 2018-03-16 17:26:54
    1.1 现象在openstack计算节点上,如Figure-1所示,使用top工具发现某些个虚拟机的进程占用cpu核一直在100%,系统的负载load average:5.32,表明有5个task处于(可运行+不可中断阻塞状态);使用sar -q 2,如果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,017
精华内容 67,206
关键字:

下降率计算