超硬核!!!神技~使用梯度下降法解二元一次方程

首先问一个问题 y = ( x 1 − 3 ) 2 + ( x 2 + 4 ) 2 = 0 , x 1 , x 2 y = (x1-3)^2 + (x2+4)^2 = 0,x1 ,x2 y=(x13)2+(x2+4)2=0x1x2等于多少?

当然经历了优秀教育的你,可以立马说出答案: x 1 = 3 、 x 2 = − 4 x1 = 3、x2 = -4 x1=3x2=4

但是,还是需要自己动脑子呀。。。。

所以咱能偷懒的时候就尽可能的偷懒,于是乎有了一个大胆的想法:教我的电脑学多元函数求解~~

想法是好,但是怎么算呢?在线等。。。


精彩的部分来了,睁大眼睛哦~

首先从问题出发,因为是求 x 1 、 x 2 x1、x2 x1x2的值

所以我们也可以看成是求 y y y的最小值问题

既然涉及到了最小值问题,自然分不开我们的老朋友:梯度下降法

使用梯度下降法的公式是: △ x = − l r ∗ y ′ △x = -lr * y' x=lry (顺便了解一下梯度上升的公式: △ x = l r ∗ y ′ △x = lr * y' x=lry

通过公式,不难看出,我们可以转换问题的求解方向喽

只要把 y y y的导数的表达式弄出来,那么求解 y y y的最小值还不是信手捏来的,嘿嘿

好了,说到这我也饿了,节省时间,不多说,直接上代码


首先定义y这个函数

y = lambda x1, x2:(x1 - 3) **2 + (x2 + 4) **2

求y的导数(当然我们需要分开求导哦~)

    dy_dx1 = lambda x1,x2:2*(x1 -3)
    dy_dx2 = lambda x1,x2:2*(x2 + 4)

然后搞一搞梯度下降,求解 △ x 1 和 △ x 2 △x1 和 △x2 x1x2的值

    dx1 = lambda x1,x2,lr: -lr * dy_dx1(x1,x2)  # 求x1最小值
    dx2 = lambda x1,x2,lr: -lr * dy_dx2(x1,x2)  # 求x2最小值

最后还是,迭代更新,就好啦

    x1,x2 = 1,1
    for _ in range(epoches):
        x1 += dx1(x1,x2,lr)
        x2 += dx2(x1,x2,lr)
    return x1,x2

运行一下,嘻嘻

x1,x2 =  (2.999999999999889, -3.999999999999889)

目前教会了电脑如何进行求多元函数,那么离求微积分还远么(✪ω✪)

你可能感兴趣的:(Python,算法,深度学习)