如何通过梯度下降的方法求解损失函数?

  • 如何通过梯度下降的方法求解损失函数?

    求解损失函数的方式有:最小二乘法(即对参数求偏导,令其为0后联立方程组求解),但只适用于损失函数为凸函数的情况。

    • 当损失函数不是凸函数的时候如何求解呢?

      • 可以采用梯度下降的方法;其思路为:随机选择初始参数值,带入损失函数进行计算,然后梯度下降这个参数值,迭代一定次数,使其逼近最优解参数。
    • 如何梯度下降?如何确定迭代次数?为什么能保证这样的结果能够逼近最优解?

      通过人为设定学习率,作用于初始参数,使其按照一定的方向移动一定的距离。其公式为:w_n=w_{n-1}-lr\cdot \nabla_wf(w_{n-1})

    • 迭代次数:无法事先确定,只能通过不断尝试;

    • 因为\nabla_wf(x)=\frac{\partial f}{\partial w},即对f(x)求导,当趋近最优解时,斜率趋于平缓,再经过lr的调整,减去的数值就会不断缩小,从而保证结果逼近最优解,但是如果损失函数存在两个拐点,则可能只会得到局部最优解。

    • 如何设定梯度下降的学习率?

      • lr:学习率;\nabla_wf(w_{n-1}):梯度值;
      • 学习率:设定过低,会导致迭代次数增加,计算量变大;学习率设定过高,可能导致越过阈值,从而越来越远离最优解;
      # 计算梯度以及绘制梯度变化函数
      def gd(lr=0.02,itera_times=20,w=10):
          '''
          (28(x-2))梯度值变化情况
          '''
          results=[w]
          for i in range(itera_times):
              w-=lr*28*(w-2)
              results.append(w)
          return results
      
      def show_trace(res):
          '''
          特定函数(14*(x-2)^2)的梯度下降轨迹绘制函数
          '''
          f_line=np.arange(-6,10,0.1)
          plt.plot(f_line,[14*np.power(x-2,2) for x in f_line])
          plt.plot(res,[14*np.power(x-2,2) for x in res],'-o')
          plt.xlabel('x')
          plt.ylabel('Loss(x)')
      
      import matplotlib.pyplot as plt
      plt.figure(figsize=(10,5))
      plt.subplot(131)
      plt.title('lr=0.001')
      show_trace(gd(lr=0.001))
      plt.subplot(132)
      plt.title('lr=0.01')
      show_trace(gd(lr=0.01))
      plt.subplot(133)
      plt.title('lr=0.08')
      show_trace(gd(lr=0.08))
      

    • 梯度下降计算参数步骤:

      1. 确定数据及模型
      2. 设置随机初始参数值
      3. 根据损失函数求出梯度表达式,以最小二乘法为例:一般回归类函数使用MSE,\frac{MSELoss(\hat{w})}{\boldsymbol{\hat{w}}}=\frac{2X^T(X\hat{w}-y)}{m},求得\nabla_w f(w_{n-1})
      4. 梯度下降:w_n=w_{n-1}-lr\cdot \nabla_w f(w_{(n-1)}),得出最优参数
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值