V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huzhikuizainali
V2EX  ›  数学

关于机器学习中应用线性回归的几点疑问

  •  
  •   huzhikuizainali · 2022-01-25 08:58:18 +08:00 · 1397 次点击
    这是一个创建于 1017 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本问题是“Batch 线性回归中为什么要要分别求代价函数等于 0 和等于 1 时的截距和斜率?”的延申问题。
    1 、为什么在求代价函数 j 的过程中要用梯度下降法呢?还要考虑步长α,步长太大有可能不收敛,求不到极值。何必这么麻烦呢?既然代价函数是 2 次平方差。那么就应该存在极值,直接求导数等于 0 时对应的截距和斜率不就完了么?微积分的书上在讲线性回归的例题时就是一步求解啊,其他求极值方法,泰勒多项式展开求余项最小。或者二次型求条件极值。感觉都是一步求解。为什么在机器学习中非要引入梯度还要设置步长还要设个循环来求极值呢?不浪费算力么?

    2 、回归问题(广义的回归问题)是机器学习的一个重要类别。最后总能转化为求代价函数的最大值或最小值问题吧。目前看到机器学习的初期课程都是认为极值存在于代价函数的一阶导数等于零的地方。可是在多元微积分课程中这个问题很复杂。首先极值点不一定是最大值或最小值。其次一阶导数等于 0 也有可能是鞍点,还要用二阶导数判定。再次即便求出局部极值点还要讨论定义域闭区间点。最后将所有极值点函数值和定义域边缘的函数值进行比较才能找出最大值和最小值。
    以上这么多步骤机器学习回归问题会涉及到么?听了前几节机器学习课程,以上问题完全没有讨论,提都没提。直接默认一阶导数等于 0 就是极值点,极值点就是最大值或最小值!这样会不会有点莽撞?
    按照多元微积分上复杂的步骤求最值,感觉用程序实现有点难度啊。求解以前你也不知道会有多少极值点。多少鞍点。
    MengQuadra
        1
    MengQuadra  
       2022-01-25 09:34:50 +08:00
    个人愚见:
    1. 梯度下降是因为在参数贼多函数复杂程度爆炸的时候,求全局最优解的代价无法接受。引入梯度使得在高维空间搜索近似解存在可行性。入门自然是从简单的开始。比起不收敛,高质量与可靠的训练数据来源是个更困难的前提。
    2. 大部分的数据质量都摸不到网络的瓶颈,管他局部还是全局,好用就是好结果(暴论
    BruceYuan
        2
    BruceYuan  
       2022-01-25 09:44:10 +08:00
    我的理解:
    1. 假如数据量多的话,等同于最小二乘法求极值,需要计算超大规模矩阵逆,计算量远大于梯度下降;
    2. 你定义的代价函数一般都是很简单的函数,你可以直接计算它的二阶导,以 MAE 为例,二阶导就是 > 0, 因为设计损失函数的时候就会让它一阶导为 0 的时候是最大值或者最小值。
    tfdetang
        3
    tfdetang  
       2022-01-25 10:25:20 +08:00
    我的理解:
    多元微积分课程中是已经有了一个 已知函数 f(x*) 来求极值, 当然这个问题很复杂,不过这个问题并不是机器学习所解决的问题。

    机器学习的目的是,我并不知道 f(x*)长什么样,更不要说有多少极值点和鞍点了;而是通过 x-> f(x*) -> y 的先验知识去模拟出一个 x->^f(x*)->^y 尽可能的与原函数相似。 所以损失函数衡量的也是 y 与 ^y 的差距,并不是直接去衡量 f(x*)的极值点
    huzhikuizainali
        4
    huzhikuizainali  
    OP
       2022-01-25 21:51:32 +08:00
    @BruceYuan 1. 假如数据量多的话,等同于最小二乘法求极值,需要计算超大规模矩阵逆,计算量远大于梯度下降;---------------如果不用线性代数的方式求极值呢?用微积分的。当然我也不确定用微积分求二次多元函数的偏导数计算量集亍比线性代数方式计算量小。

    应用梯度下降法真的是因为计算量的原因么?
    huzhikuizainali
        5
    huzhikuizainali  
    OP
       2022-01-25 21:52:47 +08:00
    @tfdetang 你说的 f(x*)是目标函数?还是代价函数?
    BruceYuan
        6
    BruceYuan  
       2022-01-26 09:41:01 +08:00
    @huzhikuizainali 你说的微积分求极值,应该要知道 目标函数 是什么?

    1. 你不知道 f(*) 是什么?
    2. 对于复杂的 f(*) ,存在多个极值;如果是 微积分(多元得算偏导) f'(*) = 0 , 只能判断某个 定义域下面的极值点?而且还得保证这个函数是 连续可导的。

    如果使用 梯度下降(一般是变种,比如 sgd 、adam 之类的)则可以缓解 2 中的问题 (因为这本身就是一种用来求极值的方法)
    huzhikuizainali
        7
    huzhikuizainali  
    OP
       2022-01-26 13:10:58 +08:00
    @BruceYuan 我知道 2 ,但是不知道 1
    其次,梯度下降法只能缓解 2 。也就是说具体问题具体分析。有时候看运气。也许求得的知识局部极值。对么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3020 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:24 · PVG 21:24 · LAX 05:24 · JFK 08:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.