美文网首页
参数更新策略算法

参数更新策略算法

作者: Echoooo_o | 来源:发表于2019-06-02 13:57 被阅读0次

    SGD

    将原来的权重W 减去 学习率和偏导数的积

    class SGD:
    
        """随机梯度下降法(Stochastic Gradient Descent)"""
    
        def __init__(self, lr=0.01):
            self.lr = lr
            
        def update(self, params, grads):
            for key in params.keys():
                params[key] -= self.lr * grads[key] 
    

    策略:朝着梯度的方向前进
    优点:简单易于实现
    缺点:效率低

    Momentum

    class Momentum:
    
        """Momentum SGD"""
    
        def __init__(self, lr=0.01, momentum=0.9):
            self.lr = lr
            self.momentum = momentum
            self.v = None
            
        def update(self, params, grads):
            if self.v is None:
                self.v = {}
                for key, val in params.items():                                
                    self.v[key] = np.zeros_like(val)
    """
    In  [1]: a = np.arange(24).reshape(4,6)
    ...      b = np.zeros_like(a)
    
    Out [1]: (4, 6) #a.shape
    Out [1]: (4, 6) #b.shape
    Out [1]: array([[0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0],
                    [0, 0, 0, 0, 0, 0]]) # a_0
    
    生成一个和你所给数组a相同shape的全0数组
    """
                    
            for key in params.keys():
                self.v[key] = self.momentum*self.v[key] - self.lr*grads[key] 
                params[key] += self.v[key]
    

    策略:模拟物体物理运动 使变化稳定
    优点:可以更快地朝x轴方向靠近
    缺点:超参数学习率不好确定

    AdaGrad

    策略:AdaGrad会为参数的每个元素适当地调整学习率 参数的元素中变动较大(被大幅更新)的元素的学习率将变小
    优点:函数的取值高效地向着最小值移动
    缺点:如果无止境地学习,更新量就会变为0,完全不再更新(梯度消失)

    Adam

    Adam算法跑得比SGD更快,却存在两大缺陷:结果可能不收敛、可能找不到全局最优解。也就是说它的泛化能力较差,在解决某些问题上,表现还不如SGD

    相关文章

      网友评论

          本文标题:参数更新策略算法

          本文链接:https://www.haomeiwen.com/subject/dantxctx.html