人工智慧中最核心的數學環節是求出一個目標函數(object function)的最小值/最大值。求出一個函數最小是/最大值的方法很多,在這裡我們介紹一個最經典的方法之一:直接求出極值點。這些極值點的共同特點是在這些點上的梯度為0, 如下圖所示。這個圖裡面,有8個極值點,而且這些極值點中必然會存在最小值或者最大值(除去函數的左右最端點)。所以在這種方式下,我們通常x先求出函數的導數,然後設置成為0。之後從找出的極值點中選擇使得結果為最小值/最大值的極值點。

A. 無約束條件的優化

例1:求 f(x)=x^2-2x-3 的最小值

對於這樣的一個問題,其實我們都知道這個問題的答案是 x=1 ,基本上不需要計算就能看出來。接下來我們通過求導的方式來求一下最小值。首先對 f(x) 求導並把導數設置成0。

f(x)=2x-2 = 0

從而得到 x=1 , 求出來的是唯一的極值點,所以最後得出來的函數的最小值是 f(1)=1-2-3=-4

例2: f(x)=x^4-3x^2+4 的最小值

求導之後  f(x)=4x^3-6x=0

即可以得到 x_1=0, x_2=sqrt(frac{3}{2}), x_3=-sqrt(frac{3}{2}) 。 把這三個值分別帶入到 f(x) 即可以得到 f(0)=4, f(sqrt(frac{3}{2}))=frac{9}{4}-frac{9}{2}+4=frac{7}{4}, f(-sqrt(frac{3}{2}))=frac{7}{4} 。所以, x_2,x_3 兩個點都可以作為函數的最小值點,這時候函數值為 frac{7}{4}

*請注意:並不一定所有函數的極值都可以通過設置導數為0的方式求出。也就是說,有些問題中當我們設定導數為0時,未必能直接計算出滿足導數為0的點(比如邏輯回歸模型),這時候就需要利用數值計算相關的技術(最典型為梯度下降法,牛頓法..)

B. 帶約束條件的優化 - 拉格朗日乘法項(Lagrangian Multiplier)

對於某些求極值問題,函數通常帶有一些條件。如下面的例子:

例3:求 f(x,y)=x+y 的最大值,但有個條件是 x^2+y^2=1 。那這時候怎麼求出最大值呢?

拉格朗日乘法項就是用來解決這類問題。我們可以把限制條件通過簡單的轉變加到目標函數中,這時候問題就變成了

maximize~~~ L=x+y+lambda(x^2+y^2-1)

剩下的過程就跟上面的類似了。設定導數為0,即可以得到以下三個方程:

 f_x(x,y,lambda)=1+2lambda x=0

f_y(x,y,lambda)=1+2lambda y=0

    f_{lambda}(x,y,lambda)=x^2+y^2-1=0

解完之後即可以得到 lambda_1=frac{sqrt{2}}{2}, lambda_2=-frac{sqrt{2}}{2} 。 針對於每一個$lambda$我們得到的解為 (x=frac{sqrt{2}}{2},y=frac{sqrt{2}}{2}),(x=-frac{sqrt{2}}{2}, y=-frac{sqrt{2}}{2}) 。把兩個解帶入到原來函數里並做比較即可以確定最優解。

【視頻1】優化問題介紹

視頻封面

07:21優化問題介紹

【視頻2】無約束條件優化

視頻封面

06:04無約束條件優化

【視頻3】有約束條件優化

視頻封面

10:35有約束條件優化

練習題:

  1. 【簡單】求解函數 f(x,y)=x^2+3xy+y^2-x+3y 的最大值/最小值, 給定的條件是 x^2-y^2+1=0 (hint: 如果求解過程中遇到比較複雜的多項式,可以利用numpy工具來求解。比如 3x^2+4x+1=0 則可以使用如下代碼:)

import numpy as np
coeff = [3,4,1]
np.roots(coeff)

2. 【難】假設我們有N對數據 (mathbf{x}_1,y_1), ...(mathbf{x}_N, y_N) ,其中每個 y_i 的取值為0或者1, mathbf{x}_i 是一個長度為 D 的向量, 我們可以把每一對的 (mathbf{x}_i,y_i) 當做是已知的。 則對於函數L(W, b) = sum_{i=1}^{N}(y_ilog sigma(W^{	op}mathbf{x}_i+b) + (1-y_i)log[1-sigma(W^{	op}mathbf{x}_i+b)]), 求解使得它取得最大值的參數 W,b 。其中 sigma 函數的定義為sigma(x)=frac{1}{1+e^{-x}} 。 試著使用把導數設置為0的方法來求解,並判斷是否這個方法行得通? 如果不行,這個問題怎麼求解呢?

對於練習題,鼓勵大家互相討論。


推薦閱讀:
相关文章