• 梯度下降的问题


    %matplotlib inline
    import gluonbook as gb
    import math
    from mxnet import nd
    import numpy as np
    
    eta = 0.4
    
    def f_2d(x1,x2):
        return 0.1*x1**2 + 2*x2**2
    
    def gd_2d(x1,x2,s1,s2):
        return (x1-eta*0.2*x1,x2-eta*4*x2,0,0)
    
    def train_2d(trainer):
        x1,x2,s1,s2 = -5,-2,0,0
        results = [(x1,x2)]
        for i in range(20):
            x1,x2,s1,s2 = trainer(x1,x2,s1,s2)
            results.append((x1,x2))
        print('epoch %d,x1 %f,x2 %f' % (i+1,x1,x2))
        return results
    
    def show_trace_2d(f,results):
        gb.plt.plot(*zip(*results),'-o',color='#ff7f0e')
        x1,x2 = np.meshgrid(np.arange(-5.5,1.0,0.1),np.arange(-3.0,1.0,0.1))
        gb.plt.contour(x1,x2,f(x1,x2),colors='#1f77b4')
        gb.plt.xlabel('x1')
        gb.plt.ylabel('x2')
    
    show_trace_2d(f_2d,train_2d(gd_2d))
    
    eta = 0.6
    show_trace_2d(f_2d,train_2d(gd_2d))

    可以看到,x2 比 x1 的斜率的绝对值更大。

    给定学习率,迭代自变量时会使自变量在竖直方向比水平方向移动幅度更大。那么我们需要一个较小的学习率从而避免自变量在竖直方向上越过目标函数最优解。然而,这样又会造成自变量在水平方向上朝着最优解移动变慢。

    调大学习率,竖直方向的自变量,不断越过最优解,并发散。

  • 相关阅读:
    当今优质男人的硬指标15条
    真正爱你的男人
    二十条人生建议
    女孩嫁人前先看看这十句话
    MM拒绝GG求爱的几种方法
    让你受用一生的爱情经典
    男女朋友们的经典称呼
    一道终身受用的测试题
    爱情,你在哪里?
    经典短篇:女人心疼男人的10种方式
  • 原文地址:https://www.cnblogs.com/TreeDream/p/10083037.html
Copyright © 2020-2023  润新知