牛顿法和SGD求解方程的理解和简单实现

最近小伙伴面试的时候,好多面试官都会问给定一个方程如何求解? 比如x + sinx + 1 = 0的, 小伙伴们大多都回答的用牛顿法或者用随机梯度下降, 当然面试官会问原理....

牛顿法和SGD作为最常见优化方法平时总是听到,也略知一二,除了在数值分析这门课上手动推过之后,再也没仔细研究过,平时用tensorflow都是自动优化的,所以我简单用实现了这两个优化方法加深理解.

先说牛顿法, 牛顿法是求解方程的方法!!而不是求极值的方法!!

牛顿法就是随机选一点带入方程,

比如对x + sinx + 1 =0来说, 我先随机选一点x0 = 0, 带入方程得到y0 = 1, 并计算在x0这一点的导数为2(导数1 + cosx), 然后根据(x0, y0), 以及这一点的导数, 求出和X轴的交点(x1, 0), 在把x1带入方程, 以此类推.

                    Xn+1 = Xn - f(Xn)/f'(Xn)

 

再说SGD, SDG是求极值的方法!!!直到没有导数那一点才停止,也就是极值点,这个就容易理解了,随机一点,向它的负导数方向寻找最小值(也可以说是损失函数的最优解),也就是x每次减去它的导数(再乘以学习率:步长).

再多说一点,只有凸函数才能用梯度下降找到极值点.

                Xn+1 = Xn - learning_rate * delta

 

from math import *
import random

def Newton(x):
    """
    用牛顿法对s+sinx+1=0求解
    接收一个x,返回一个更接近解的新x
    """
    y = func(x)
    x_dev = derivative(x)     # x这
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值