梯度下降法求函式最小值 基於matlab實現
阿新 • • 發佈:2019-02-12
演算法原理
梯度下降法是一個最優化演算法,可以用來求一個函式的最小值,最大值等,也常用於人工神經網路中更新各個感知器之間的權值,求出cost function的最小值等,應用廣泛。
其原理簡單,就求函式的最小值這個應用而言,大致說來就是先求出該函式梯度,大家都知道梯度是一個函式在該點的最快上升率,那麼求個相反數就是最快下降率了。將每個自變數按下列公式更新:
其中
當
Matlab實現
% 沒有加入衝量項的隨機梯度下降法實現
syms x y real
y(x) = x^2+2*x+10 ;
delta(x) = -diff(y(x)) ;
step = 0.1 ;
first_x = 10 ;
x_current = first_x ;
x_next = first_x ;
show_tmp = 0 ;
show = [] ;
counter = 0 ;
delta_last = 0 ;
while (true)
delta_x = double(delta(x_current))*step ;
if(abs(delta_x) < 0.0001)
break
end
x_next = x_current + delta_x ;
x_current = x_next ;
counter = counter + 1;
show_tmp = x_next ;
show = [show, show_tmp] ;
if(counter > 200)
break ;
end
end
x_next
counter
figure(1)
ezplot(y(x))
hold on
plot([-100, 100],[double(y(x_next)), double(y(x_next))],'-r' )
double(y(x_next))
figure(2)
plot(show)
pause
close all
待求解的函式曲線圖像如下所示,其中的紅線為梯度下降法算出來的最小值,可以看出來梯度下降法成功求出了該函式的最小值。
自變數的變化曲線,可以看出當迴圈超過25次時,此時的x已經很接近最小值點了,收斂速度取決於步長step。
各位可以自行調整步長和初始值,觀察其收斂速度的變化,需要注意的是,這個步長如果太大將會導致震盪,無法收斂到最小值點,如果太小,將導致收斂速度太慢。
——————————————————————————————
另外,這個函式因為是二次函式,沒有多個極點,因此梯度下降法能夠在不陷入區域性最優的情況下找到最大值,如果是存在多個極點的複雜函式會怎麼樣呢?讓我們看下以下例子:
% 加入了衝量項,緩解陷入區域性最優的隨機梯度下降演算法
syms x y real
y(x) = x^2+4*x+sin(cos(2*x+x^2)) ;
delta(x) = -diff(y(x)) ;
step = 0.1 ;
first_x = 10 ;
x_current = first_x ;
x_next = first_x ;
show_tmp = 0 ;
show = [] ;
counter = 0 ;
delta_last = 0 ;
alpha = 0; % 衝量項比例係數,設為0相當於沒有加入衝量項
while (true)
delta_x = double(delta(x_current))*step + delta_last*alpha;
delta_last = delta_x ;
if(abs(delta_x) < 0.0001)
break
end
x_next = x_current + delta_x ;
x_current = x_next ;
counter = counter + 1;
show_tmp = x_next ;
show = [show, show_tmp] ;
if(counter > 200)
break ;
end
end
x_next
counter
figure(1)
ezplot(y(x))
hold on
plot([-100, 100],[double(y(x_next)), double(y(x_next))],'-r')
double(y(x_next))
figure(2)
plot(show)
pause
close all
可以看出來,最小值和剃度下降法算出來的最小值並沒有重合,此時演算法陷入了局部最優點,梯度下降法算出的最小值是y = -3.1586
自變數變化曲線如下:
當把衝量項的係數alpha改為0.5時,得出:
此時梯度下降法算出來的最小值為 y = -3.9611,從圖中也可以看出已經是達到了函式最低點了。
自變數變化曲線如下:
總結上面的實驗,可以看出,加入衝量項可以緩解梯度下降法陷入區域性最優的風險。