机器学习中常见问题_几种梯度下降法

一、梯度下降法

  在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数。在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD)。

  梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点。

  基本思想可以这样理解:我们从山上的某一点出发,找一个最陡的坡走一步(也就是找梯度方向),到达一个点之后,再找最陡的坡,再走一步,直到我们不断的这么走,走到最“低”点(最小花费函数收敛点)。

  如上图所示,得到了局部最优解。x,y表示的是theta0和theta1,z方向表示的是花费函数,很明显出发点不同,最后到达的收敛点可能不一样。当然如果是碗状的,那么收敛点就应该是一样的。

二、梯度下降法的变形形式

  在具体使用梯度下降法的过程中,主要有以下几种不同的变种,即:batch、mini-batch、SGD。其主要区别是不同的变形在训练数据的选择上。

1、批量梯度下降法BGD   批梯度下降法(Batch Gradient Descent)针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。   批量梯度下降法的损失函数为:

  进一步得到批量梯度下降的迭代式为:

  每迭代一步,都要用到训练集所有的数据,如果样本数目很大,那么可想而知这种方法的迭代速度! 优点:全局最优解;易于并行实现; 缺点:当样本数目很多时,训练过程会很慢。   从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

2、小批量梯度下降法MBGD   在上述的批梯度的方式中每次迭代都要使用到所有的样本,对于数据量特别大的情况,如大规模的机器学习应用,每次迭代求解所有样本需要花费大量的计算成本。是否可以在每次的迭代过程中利用部分样本代替所有的样本呢?基于这样的思想,便出现了mini-batch的概念。   假设训练集中的样本的个数为1000,则每个mini-batch只是其一个子集,假设,每个mini-batch中含有10个样本,这样,整个训练数据集可以分为100个mini-batch。伪代码如下:

3、随机梯度下降法SGD

  随机梯度下降算法(stochastic gradient descent)可以看成是mini-batch gradient descent的一个特殊的情形,即在随机梯度下降法中每次仅根据一个样本对模型中的参数进行调整,等价于上述的b=1情况下的mini-batch gradient descent,即每个mini-batch中只有一个训练样本。   随机梯度下降法的优化过程为:

  随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。 优点:训练速度快; 缺点:准确度下降,并不是全局最优;不易于并行实现。   从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。其迭代的收敛曲线示意图可以表示如下:

三 通俗的理解梯度下降

  (1)批量梯度下降—最小化所有训练样本的损失函数(对全部训练数据求得误差后再对参数进行更新),使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。批梯度下降类似于在山的某一点环顾四周,计算出下降最快的方向(多维),然后踏出一步,这属于一次迭代。批梯度下降一次迭代会更新所有theta,每次更新都是向着最陡的方向前进。

  (2)随机梯度下降—最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。随机也就是说我用样本中的一个例子来近似我所有的样本,来调整theta,其不会计算斜率最大的方向,而是每次只选择一个维度踏出一步;下降一次迭代只更新某个theta,报着并不严谨的走走看的态度前进。

四 随机梯度下降代码

load data; %导入X,Y,test_feature
epsilon = 0.0001; %收敛阈值
alpha = 0.001; %学习率
k = 1; %迭代次数
n = size(X,2); %特征数+1
m = size(X,1); %训练样本个数
theta = zeros(n,1);
theta_new = zeros(n,1);
converge = 0;
while(converge==0)    %未收敛
        for(i=1:m)        %反复使用m个训练样本,每个样本就更新一次参数
            J(k) = 1/2 * (norm(X*theta - Y))^2;
            for(j = 1:n)
                theta_new(j) = theta(j)-alpha*(X(i,:)*theta-Y(i,:))*X(i,j);
            end;
            if norm(theta_new-theta) < epsilon
                converge=1;
                theta = theta_new;
                break;
            else
                theta = theta_new;
                k = k + 1;
            end
        end;
end;

相关文献:

http://www.th7.cn/system/win/201511/142910.shtml

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

吴恩达机器学习笔记 —— 2 单变量线性回归

机器学习的过程就是通过上面的例子学习一个模型,当再次有数据x进来的时候,能给出对应的y值

670
来自专栏技术翻译

如何在Python中从0到1构建自己的神经网络

大多数关于神经网络的介绍性文章在描述它们时都会提到大脑类比。在不深入研究大脑类比的情况下,我发现简单地将神经网络描述为将给定的输入映射到期望的输出的数学函数就更...

900
来自专栏深度学习之tensorflow实战篇

神经网络中的学习速率如何理解

特征缩放 实际当我们在计算线性回归模型的时候,会发现特征变量x,不同维度之间的取值范围差异很大。这就造成了我们在使用梯度下降算法的时候,由于维度之间的差异使得J...

3396
来自专栏jennyxia的专栏

深度学习简易入门

深度学习是机器学习中的一个重要的方向,深度学习其实就是神经网络学习,这里“深度”就是说神经网络中众多的层。那么深度学习是用来干嘛的呢?

4740
来自专栏Android相关

机器学习介绍

设计和分析一些让计算机可以自动“学习“的算法。机器学习算法是一类从庞大的数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。

921
来自专栏张鹏宇的专栏

深度学习基础概念笔记

学习 tensorflow,caffe 等深度学习框架前,需要先了解一些基础概念。本文以笔记的形式记录了一个零基础的小白需要先了解的一些基础概念。

1K1
来自专栏杂七杂八

matlab留出法实现

留出法(hold-out) 方法:直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即.在S上训练出模型后,用T来评估其作为测...

5649
来自专栏新智元

【干货】CNN 感受野首次可视化:深入解读及计算指南

【新智元导读】作为目前的研究和应用热点,图形识别使用 CNN 模型架构。感受野则是 CNN 中最为重要的概念之一,但此前还没有任何关于如何计算和可视化 CNN ...

3763
来自专栏机器学习算法原理与实践

深度神经网络(DNN)反向传播算法(BP)

    在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propag...

1103
来自专栏人工智能LeadAI

卷积神经网络 | 深度学习笔记1

一、初识卷积网络结构 01 概览 前面已经做过手写体识别的任务。之前我们只是使用了两层的全连接层,或者根据喜好多加几层。我更喜欢把这样的结构叫做多层感知机,即使...

2837

扫码关注云+社区