官术网_书友最值得收藏!

3.1 梯度向量

梯度(gradient)是優(yōu)化問題中的重要概念,幾乎所有優(yōu)化方法都需要討論梯度。本節(jié)首先用直觀的方法介紹梯度。如圖3.1所示,在坡面A點(diǎn)處放置一個(gè)小球,輕輕松開手的一瞬間,小球沿著坡面最陡峭方向滾下,瞬間滾動(dòng)方向便是梯度下降方向(direction of gradient descent)。數(shù)學(xué)中,此方向的反方向即梯度方向,也稱作梯度上升方向。

圖3.1 梯度方向原理

叢書第一冊(cè)第6章講解方向微分(directional derivative)時(shí),簡單聊過圖3.2。曲面上,經(jīng)過P點(diǎn)有無數(shù)條切線,lx1lx2P點(diǎn)處沿著x方向的微分方向,ly1ly2P點(diǎn)處沿著y方向的微分方向。lh2為下降最快方向,lh1為上升最快方向,即本節(jié)要講的梯度方向。lc1lc2方向是和等高線相切的方向,沿著這兩個(gè)方向微小移動(dòng),在曲面上高度不會(huì)變化。在此基礎(chǔ)上,本節(jié)要深入介紹梯度和一些簡單應(yīng)用。叢書第三冊(cè)第12章引入過倒三角微分算子(Nabla symbol)?,它也叫Nabla 算子。本節(jié)開始用?來表達(dá)梯度運(yùn)算:

圖3.2 曲面投影到x-y平面的等高線和P點(diǎn)的幾條個(gè)性切線(圖像來自叢書第一冊(cè)第6章)

這一小節(jié),[x1, x2] 表示[x, y],二元函數(shù)fx1, x2)寫作fx)。

x1-x2平面上,PxP1, xP2)點(diǎn)處,任意偏離P點(diǎn)的微小移動(dòng)(Δx1, Δx2)都導(dǎo)致fx)大小發(fā)生變化,對(duì)應(yīng)等高線數(shù)值變化。

比如,當(dāng)前點(diǎn)位于P點(diǎn),微小移動(dòng)后到達(dá)Q點(diǎn),如圖3.3所示。

圖3.3 曲面從P點(diǎn)移動(dòng)到Q點(diǎn)對(duì)應(yīng)位置變化

用一階偏微分做近似求解Δf

上式便是叢書之前講過的多元函數(shù)泰勒一階展開。曲面上點(diǎn)PxP1, xP2)在x1x2 兩個(gè)維度上的偏微分,分別為該點(diǎn)處x1-z平面和x2-z平面內(nèi)切線的斜率,如圖3.4所示。

圖3.4 偏微分和切線斜率關(guān)系

從幾何角度來講,P點(diǎn)處曲面切面替代曲面本身,估算函數(shù)值。圖3.5給出這一過程。投影位移量(Δx1, Δx2)一致情況下,沿著曲面,從P點(diǎn)運(yùn)動(dòng)到Q點(diǎn);而沿著P點(diǎn)切面,移動(dòng)到了R點(diǎn)。R點(diǎn)對(duì)應(yīng)高度與Q點(diǎn)高度近似。R點(diǎn)和Q點(diǎn)的高度差是估算誤差。圖3.6為圖3.5局部放大圖,這張圖更清晰地展示了估算過程。

圖3.5 曲面從P點(diǎn)線性移動(dòng)到R點(diǎn)對(duì)應(yīng)位置變化

圖3.6 二元函數(shù)一階泰勒展開估算

這種估算實(shí)際上相當(dāng)于兩個(gè)向量內(nèi)積關(guān)系,這兩個(gè)向量分別如下:

向量(Δx1, Δx2)決定了P點(diǎn)方向的微分方向,如圖3.7所示。

圖3.7 x1-x2平面上方向微分

在沒有特殊說明情況下,fx1, x2)梯度一般表達(dá)為列向量:

梯度也可用行向量表達(dá),如下:

fx1, x2)某一點(diǎn)P處梯度為:

用另外一種方法解釋。

x1-x2平面上,給定一個(gè)方向,用向量v 表示:

沿著v方向?qū)?i>f(x)求解方向微分:

v為單位向量,即:

且,令單位向量v為:

圖3.7給出了θ1θ2角度定義。方向?qū)?shù)和偏導(dǎo)之間關(guān)系為:

三元函數(shù)fx1, x2, x3)空間中,同樣獲得類似結(jié)論:

多元函數(shù)也可得出類似結(jié)論。根據(jù)梯度和向量v定義,這樣表達(dá)fx)在v方向微分:

根據(jù)向量點(diǎn)乘法則:

θ = 90°,則說明方向?qū)?shù)沿著等高線切向方向,函數(shù)值不會(huì)有任何變化,如圖3.8(a)和(b)所示。若θ = 180°,如圖3.8(c),則方向?qū)?shù)沿著梯度相反方向,這是函數(shù)值下降最快方向。

如圖3.8(d),θ = 0°,方向?qū)?shù)和梯度同向,這是函數(shù)值最快上升方向。這種情況,方向?qū)?shù)和梯度同向,因此向量v 用?fx)表達(dá):

因此,

本冊(cè)優(yōu)化部分還會(huì)繼續(xù)深入討論該性質(zhì)。

當(dāng)θ為銳角,函數(shù)變化大于0,函數(shù)值上升,如圖3.8(e);當(dāng)θ為鈍角,函數(shù)變化小于0,函數(shù)值下降,如圖3.8(f)。另外,?fx)和向量v的關(guān)系,和本書上一章介紹的投影(projection)幾乎完全一致。

圖3.8 x1-x2平面上六種方向微分情況

梯度向量模的大小決定了函數(shù)不同點(diǎn)上的最大變化率。換句話說,函數(shù)在不同點(diǎn)的最大變化率很可能不同。函數(shù)于該點(diǎn)處上升或者下降的幅度在下式限制范圍之內(nèi):

上式性質(zhì)叫作Cauchy-Schwarz不等式。如圖3.8所示,對(duì)于二元函數(shù),x1-x2平面上,坐標(biāo)軸刻度比例為1:1時(shí),任意一點(diǎn)函數(shù)梯度方向和函數(shù)等高線切線方向相垂直。另外,優(yōu)化問題中,一般采用歸一化梯度向量(normalized gradient vector):

歸一化向量模為1:

函數(shù)梯度向量方向和大小隨著位置變化,因此,在當(dāng)前點(diǎn)上升或下降方向,一般不是相鄰點(diǎn)上升或者下降最快方向。下面通過圖像講解這一點(diǎn)。圖3.9展示了不同高度(-2, -4, -6和-8)等高線上不同位置點(diǎn)梯度向量的大小和方向。如前文討論內(nèi)容,對(duì)于該二次曲面,越靠近極值點(diǎn),梯度向量越小。但此結(jié)論不適用于錐面,錐面梯度向量的模,除極點(diǎn)外,完全相同。由圖3.9看到,當(dāng)?shù)雀呔€高度相同時(shí),等高線密集處(坡度越陡峭),即梯度向量模較大位置。請(qǐng)讀者注意,圖3.9中四個(gè)分圖中的梯度經(jīng)過了同樣比例縮放。以下代碼獲得圖3.9。

圖3.9 不同高度等高線上梯度向量分布情況

B4_Ch3_1.m

clc; close all; clear all
syms x1 x2

f = -x1^2 - 2*x2^2 - x1*x2;
g = gradient(f, [x1, x2])

[XX1, XX2] = meshgrid(-3:0.4:3,-3:0.4:3);
[XX1_fine, XX2_fine] = meshgrid(-3:.2:3,-3:.2:3);

contour_f = subs(f, [x1 x2], {XX1_fine,XX2_fine});

figure(1)
% c_start = floor(min(double(contour_f(:))));
% c_end   = floor(max(double(contour_f(:))));
% c_levels = c_start:(c_end-c_start)/20:c_end;

c_start = -24; c_end   = 0;
c_levels = c_start:2:c_end;

ii = 1:4;

for i = ii

  subplot(2,2,i)
  plot_fig(g,XX1_fine,XX2_fine,contour_f,c_levels,i)

end

function plot_fig(g,XX1_fine,XX2_fine,contour_f,c_levels,i)
syms x1 x2
contour(XX1_fine,XX2_fine,double(contour_f),c_levels); hold on

c_level = c_levels(end-i); %  -1, -2, -3, - 4
[contour_loc,~] =
contour(XX1_fine,XX2_fine,double(contour_f),[c_level,c_level],'L
ineWidth',3);

x1_contour_c = contour_loc(1,2:end);
x2_contour_c = contour_loc(2,2:end);

dFF_dx1 = subs(g(1), [x1 x2], {x1_contour_c x2_contour_c});
dFF_dx2 = subs(g(2), [x1 x2], {x1_contour_c x2_contour_c});

scale_factor = 0.15;
h = quiver(x1_contour_c, x2_contour_c,
double(dFF_dx1)*scale_factor, double(dFF_dx2)*scale_factor);
h.AutoScale = 'off';
h.Color = [0,96,166]/255;
h.Marker = '.';
h.MarkerSize = 3;
h.MaxHeadSize = Inf;

xlabel('${x_1}$','Interpreter','latex');
ylabel('${x_2}$','Interpreter','latex');
zlabel('${f(x_1,x_2)}$','Interpreter','latex')
title(['Contour level = ',num2str(c_level)])
set(gca, 'FontName', 'Times New Roman','fontsize',10)
grid off; axis equal
xlim([-3,3]); ylim([-3,3]);
caxis([-18 0])
end

有了這些向量計(jì)算基礎(chǔ)內(nèi)容,下面幾節(jié)講解直線、曲線、平面和曲面法向量和切向量性質(zhì)。

主站蜘蛛池模板: 环江| 北流市| 垫江县| 连州市| 汉沽区| 定陶县| 新津县| 东源县| 桓台县| 兴业县| 开江县| 密山市| 始兴县| 双柏县| 清流县| 永州市| 宜城市| 日照市| 贺州市| 德安县| 石楼县| 南开区| 伊金霍洛旗| 河南省| 涿鹿县| 碌曲县| 怀化市| 闻喜县| 巴青县| 广宁县| 凉城县| 三原县| 崇义县| 辽阳市| 江口县| 同江市| 宁乡县| 石景山区| 浏阳市| 八宿县| 库尔勒市|