多元函数的梯度下降 骑猪看日落 2022-11-27 15:51 128阅读 0赞 ### 文章目录 ### * 导读 * 问题 * 变量确认 * 代价函数的确认 * 目标函数最终展开 # 导读 # **前一篇[梯度下降][Link 1]仅仅只是针对梯度下降的原理和流程作了一些阐释,用三个维度的例子说明了一个通用解法。而这里才是实际应用的具体表现,同时也包含很多小技巧。** # 问题 # 这里就还是用你的猫娘作为例子,但是这次代入了更多自变量: 你再次收集了20万猫娘的信息,包括年龄(`age`)、体重(`weight`)、身高(`height`)、最大跳跃距离(`distence`)、胸围(`bust`)、腰围(`waist`)、臀围(`hip`)、基础社会科学考试分数(`score`)…… 虽然可能还有很多指标,但是现在就先列举这8项。是不是觉得非常的麻烦?而且这下我们连图都画不出来了,甚至无法想象8个自变量如何构成一个解空间,更无法想象涉及8个自变量的函数将会是怎样一个扭曲的形态。 行,套公式嘛,**矩阵求解**。 # 变量确认 # 你整理出了一张含有 n n n行数据的表,其中每一行数据都代表一只猫娘的所有收集到的信息,所以你为每一行整理了一个矩阵: \[ a g e i w e i g h t i h e i g h t i d i s t a n c e i b u s t i w a i s t i h i p i \] , i ∈ \{ 1 , 2 , 3 , … , n \} \\left\[\\begin\{matrix\} age\_i\\\\weight\_i\\\\height\_i\\\\distance\_i\\\\bust\_i\\\\waist\_i\\\\hip\_i \\end\{matrix\}\\right\],i\\in\\\{1,2,3,\\ldots,n\\\} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡ageiweightiheightidistanceibustiwaistihipi⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤,i∈\{ 1,2,3,…,n\} **这里插播一句:** *因为面对这样一个生物,对于科研人员来说就是个名副其实的**黑匣子**:什么都不知道,只知道输入和输出。所以在确定函数关系式的时候相当的麻烦。所以往往是一个个变量分析,优先找出一个个独立不相关的变量,然后分析相关变量的影响。这里就**完全不是**拟合算法能够做到的了,而是来自不同领域的科研人员齐心协力研究发现最终的出来的结果。这里因为**赌的成分过高**,并且和梯度下降并没有什么直接的关系,所以**直接跳过**。现在就**直接跳到**你找到了每个自变量的精确幂指数和对数底数以及对应的线性关系的情况。* 然后你又双叒叕凭着你对猫娘的热爱找出了这8个变量的大致关系: # 代价函数的确认 # 当然,代价函数就是我们需要训练的目标函数。只要代价函数最小,我们最后训练的结果就会接近事实。 可是,光是二元函数构成的三维图就已经包含了很多的不确定性,陷入局部最优解、收敛慢、内存溢出……这都是很无奈但是可控的问题。不如我们把思维逆转过来:既然没有便利,就创造便利。 y = f ( a g e , w e i g h t , h e i g h t , d i s t a n c e , b u s t , w a i s t , h i p ) ⇓ y = ϵ + α 1 a g e + α 2 w e i g h t 2 + α 3 h e i g h t + α 4 d i s t a n c e 3 + α 5 3 ( b 2 + w a i s t 2 + h i p 2 ) y=f(age,weight,height,distance,bust,waist,hip)\\\\ \\Downarrow\\\\ y=\\epsilon+\\alpha\_1age+\\alpha\_2weight^2+\\alpha\_3height+\\alpha\_4distance^3+\\frac\{\\alpha\_5\}\{3\}(b^2+waist^2+hip^2) y=f(age,weight,height,distance,bust,waist,hip)⇓y=ϵ\+α1age\+α2weight2\+α3height\+α4distance3\+3α5(b2\+waist2\+hip2) 其中, ϵ , α 1 , α 2 , α 3 , α 4 , α 5 ∈ R \\epsilon,\\alpha\_1,\\alpha\_2,\\alpha\_3,\\alpha\_4,\\alpha\_5\\in\\mathbb\{R\} ϵ,α1,α2,α3,α4,α5∈R *如果你还有印象,那么你应该记得 ϵ \\epsilon ϵ服从正态分布 N ( 0 , σ 2 ) N(0,\\sigma^2) N(0,σ2),是随机误差。在一开始决定各种自变量的系数的时候往往会先忽视这个小东西,然后在全部得出结果之后加上以保证函数能够兼容一些“**偶然**”* 看到这样群魔乱舞的函数,你感觉到背脊发凉。完全没办法想象的解空间、完全无法想象的图形走向,更不用说最终目标的图像意义都无法解释……(*当然,这里是为了节目效果如此设计的*。) 这没难倒你。你把式子化为**矩阵**形式表达,就变成了这样: y = \[ 1 α 1 α 2 α 3 α 4 α 5 3 α 5 3 α 5 3 \] × \[ ϵ a g e w e i g h t 2 h e i g h t d i s t a n c e 3 b u s t 2 w a i s t 2 h i p 2 \] y=\\left\[\\begin\{matrix\} 1&\\alpha\_1&\\alpha\_2&\\alpha\_3&\\alpha\_4&\\alpha\_5\\over3&\\alpha\_5\\over3&\\alpha\_5\\over3 \\end\{matrix\} \\right\]\\times\\left\[\\begin\{matrix\} \\epsilon\\\\age\\\\weight^2\\\\height\\\\distance^3\\\\bust^2\\\\waist^2\\\\hip^2 \\end\{matrix\}\\right\] y=\[1α1α2α3α43α53α53α5\]×⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡ϵageweight2heightdistance3bust2waist2hip2⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ 再简化一些,更抽象一些,那就成为了: y = α T η y=\\alpha^T\\eta y=αTη 其中, α \\alpha α是待定系数的矩阵,而 η \\eta η则是自变量经过各自合适变化之后的矩阵,即: α T = \[ α 1 α 2 ⋯ α n \] n , η = \[ η 1 η 2 ⋮ η n \] n , \\alpha^T=\\left\[\\begin\{matrix\} \\alpha\_1&\\alpha\_2\\cdots\\alpha\_n \\end\{matrix\}\\right\]\_n,\\\\ \\eta=\\left\[\\begin\{matrix\} \\eta\_1\\\\\\eta\_2\\\\\\vdots\\\\\\eta\_n \\end\{matrix\}\\right\]\_n, αT=\[α1α2⋯αn\]n,η=⎣⎢⎢⎢⎡η1η2⋮ηn⎦⎥⎥⎥⎤n, 这里的 η \\eta η特指我们刚刚发现的列向量: η = \[ ϵ a g e w e i g h t 2 h e i g h t d i s t a n c e 3 b u s t 2 w a i s t 2 h i p 2 \] \\eta=\\left\[\\begin\{matrix\} \\epsilon\\\\age\\\\weight^2\\\\height\\\\distance^3\\\\bust^2\\\\waist^2\\\\hip^2 \\end\{matrix\}\\right\] η=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡ϵageweight2heightdistance3bust2waist2hip2⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ 如果你觉得麻烦,完全可以把系数相同、幂指数相同的 b u s t bust bust、 w a i s t waist waist和 h i p hip hip作为一个整体。这就看你能有多灵活了。 到这里,也就只是单纯的将变量合并,将复杂的公式变成简单易懂的矩阵向量,强行转成2个矩阵维度的**解空间**。当然,我们还是想象不到,只不过大致可以理解为某种类似 x x x轴和 y y y轴的神奇坐标轴在帮助我们标记位置。这么一想的话,就算是不能想象数轴的样子,也能够想象出解空间是个什么样了,而我们最终要求的目标函数最小值大概也能模模糊湖地猜出来在哪。 # 目标函数最终展开 # 但是你发现,到这里还是和上次讲到的梯度下降没有区别。没错,后面还有内容。 由于我们已经将目标函数改成了多元一次函数,所以,我们需要将目标函数彻底展开成为级数的形式,方便我们进一步设计算法。 还记得我们最初的公式么?[点击这里回顾][Link 2] β i = β i − α n ∑ i = 1 n ( f ( x i ) − y i ) 2 \\beta\_i=\\beta\_i-\\frac\{\\alpha\}\{n\}\\sum^n\_\{i=1\}(f(x\_i)-y\_i)^2 βi=βi−nαi=1∑n(f(xi)−yi)2 我们的目标就是让 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 \\frac\{1\}\{n\}\\sum^n\_\{i=1\}(f(x\_i)-y\_i)^2 n1∑i=1n(f(xi)−yi)2尽可能地小。那么问题就简单了,针对这个函数分析就好了。令: ϕ ( β ) = 1 n ∑ i = 1 n ( f ( x i ) − y i ) 2 \\phi(\\beta)=\\frac\{1\}\{n\}\\sum^n\_\{i=1\}(f(x\_i)-y\_i)^2 ϕ(β)=n1i=1∑n(f(xi)−yi)2 求个导: ϕ ˙ ( β ) = 2 n ∑ i = 1 n \[ f ( x i ) − y i \] f ˙ ( x i ) \\dot\{\\phi\}(\\beta)=\\frac\{2\}\{n\}\\sum^n\_\{i=1\}\[f(x\_i)-y\_i\]\\dot\{f\}(x\_i) ϕ˙(β)=n2i=1∑n\[f(xi)−yi\]f˙(xi) 于是迭代就简化为: θ j = θ j − α n ∑ i = 1 n \[ f ( x i ) − y i \] f ˙ ( x i ) \\theta\_j=\\theta\_j-\\frac\{\\alpha\}\{n\}\\sum^n\_\{i=1\}\[f(x\_i)-y\_i\]\\dot\{f\}(x\_i) θj=θj−nαi=1∑n\[f(xi)−yi\]f˙(xi) 到这,似乎就对计算机来说非常的方便了。如果依然是一元线性关系, f ˙ ( x i ) \\dot\{f\}(x\_i) f˙(xi)将会是 x i x\_i xi,因为自变量是 β \\beta β;而二元及以上的线性关系,可以使用矩阵统一分析,也能拆成多个一元关系逐个研究;非线性关系则是化简、换元,先掰成线性关系。 是不是有点能理解了呢? [Link 1]: https://blog.csdn.net/ordinary_brony/article/details/108036311 [Link 2]: https://blog.csdn.net/ordinary_brony/article/details/108033400
还没有评论,来说两句吧...