梯度下降法、座標下降法、牛頓迭代法

風景不在對岸wj發表於2017-11-22

1 梯度下降法


2 座標下降法

1.首先給定一個初始點,如 X_0=(x1,x2,…,xn); 
2.for x_i=1:n 
固定除x_i以外的其他維度 
以x_i為自變數,求取使得f取得最小值的x_i; 
end 
3. 迴圈執行步驟2,直到f的值不再變化或變化很小.

3 牛頓迭代法


牛頓迭代法(Newton’s method)又稱為牛頓-拉夫遜方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。 
把f(x)在x0點附近展開成泰勒級數 f(x) = f(x0)+(x-x0)f’(x0)+(x-x0)^2*f”(x0)/2! +… 取其線性部分,作為非線性方程f(x) = 0的近似方程,即泰勒展開的前兩項,則有f(x0)+f’(x0)(x-x0)=0 設f’(x0)≠0則其解為x1=x0-f(x0)/f’(x0) 這樣,得到牛頓法的一個迭代序列:x(n+1)=x(n)-f(x(n))/f’(x(n))。

4 最小二乘法與梯度下降法區別

最小二乘是構建目標函式中的一種方法; 
梯度下降是求解最優目標函式中的一種方法。

對於變數個數為2-3個的目標函式,可以直接用方程組的方式求解出來,這也就是我們常見的狹義上的最小二乘法。 
對於變數個數多個的目標函式,這時,狹義的最小二乘法就難以勝任,而用梯度下降法求解就容易多了。

附錄

梯度下降法matlab示例: 

function [k ender]=steepest(f,x,e)
    %梯度下降法,f為目標函式(兩變數x1和x2),x為初始點,如[0;0]
    syms x1 x2 m; %m為學習率
    d=-[diff(f,x1);diff(f,x2)];  %分別求x1和x2的偏導數,即下降的方向
    flag=1;  %迴圈標誌
    k=0; %迭代次數
    while(flag)
        d_temp=subs(d,x1,x(1));      %將起始點代入,求得當次下降x1梯度值
        d_temp=subs(d_temp,x2,x(2)); %將起始點代入,求得當次下降x2梯度值
        nor=norm(d_temp); %範數
        if(nor>=e) %梯度為0,說明達到極小點
            x_temp=x+m*d_temp;            %改變初始點x的值
            f_temp=subs(f,x1,x_temp(1));  %將改變後的x1和x2代入目標函式
            f_temp=subs(f_temp,x2,x_temp(2));
            h=diff(f_temp,m);  %對m求導,找出最佳學習率
            m_temp=solve(h);   %求方程,得到當次m
            x=x+m_temp*d_temp; %更新起始點x
            k=k+1;
        else
            flag=0;
        end
    end
    ender=double(x);  %終點
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

呼叫函式:

syms x1 x2;
f=(x1-1)^2+2*(x2-2)^2+x1;
x=[3;0];
e=10^(-20);
[k ender]=steepest(f,x,e)

原文地址:http://blog.csdn.net/zkq_1986/article/details/52317258

相關文章