momentum动量方法

        由一阶滤波器得到启发(采用本次采样值与上次滤波输出进行加权,得到有效滤波,使得输出对输入有反馈作用)


        如下图,当γ增加,滤波器输出震荡减少。平均滤波器输出与平均滤波器输入相同,岁当当γ增加时,滤波器输入变慢。滤波器有助于减少震荡的书数目,同时仍然保持平均值。


动量MOBP

      将动量滤波器加到参数的改变后,得到:

      由于使用动量项,可以在维持算法稳定的基础上使用更高的学习速度,动量的另一个特征是当轨迹进入某一个一直的方向后,可以加速收敛。

     



python程序

import numpy as np
from math import e
import matplotlib.pyplot as plt
import scipy.io as sio

def logsig(x):
    return 1/(1+e**(-x))

if __name__=="__main__":
    W1=np.array([[2.0],[3.0]])
    b1=np.array([[-1.],[1.]])
    W2=np.array([[1.,1.]])
    b2=np.array([[-1.]])
    P=np.array([np.arange(-2,2,0.1)])
    #P=np.array([[1]])
    a0=P
    T=logsig(np.dot(W2,logsig(np.dot(W1,P)+b1))+b2)

    x = -2.0
    y = 0.6
    ep=300
    W1[0,0]=x
    W2[0,0]=y
    n1 = np.dot(W1, P)+b1
    a1 = logsig(n1)
    n2 = np.dot(W2, a1)+b2
    a2 = logsig(n2)
    lr=1.5
    mc=0.

    xx=np.zeros([1,ep+1])
    yy=np.zeros([1,ep+1])
    ee = np.zeros([1, ep + 1])
    E=T-a2
    #print E
    xx[0,0]=x
    yy[0,0]=y
    ee[0,0]=np.sum(E*E)
    v1=np.zeros(W1.shape)
    v2=np.zeros(W2.shape)
    for i in range(1,ep+1):
        s2=-2*E*(1-a2)*a2
        s1=np.dot(W2.T,s2)*a1*(1-a1)
        #print s1
        #s2=-2*a2*(1-a2)*E
        #s1=(1-a1)*a1*np.dot(W2.T,s2)
        dW2 = np.dot(s2, a1.T)
        dW1=np.dot(s1,a0.T)
        #print dW1
        v1 = mc * v1 - lr * dW1
        v2 = mc * v2 - lr * dW2
        newx=W1[0,0]+v1[0,0]
        W1[0,0]=newx
        xx[0,i]=newx
        newy = W2[0, 0] + v2[0, 0]
        W2[0, 0] = newy
        yy[0, i] = newy
        a1=logsig(np.dot(W1,a0)+b1)
        a2=logsig(np.dot(W2,a1)+b2)
        E=T-a2
        ee[0,i]=np.sum(E*E)
    print W1, W2
    data=sio.loadmat('nndbp1')
    p1=plt.subplot(121)
    p2=plt.subplot(122)
    x2=data['x2']
    y2=data['y2']
    E2=data['E2']
    x2,y2=np.meshgrid(x2,y2)
    p1.contour(x2,y2,E2)
    #p1.plot(xx[0,1:80],yy[0,1:80])
    p1.plot(xx[0,1:80],yy[0,1:80])
    p2.plot(ee[0,1:50])
    plt.show()







实验结果


上图,当mc=0,lr=1.5时,迭代约30次后收敛



mc=0,lr=2.5时出现震荡


mc=0.1,lr=2,5时,仅需10次就收敛了


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值