数学优化
數(shù)學(xué)優(yōu)化(Mathematical Optimization)問題,也叫最優(yōu)化問題,是指在一定約束條件下,求解一個(gè)目標(biāo)函數(shù)的最大值(或最小值)問題。
數(shù)學(xué)優(yōu)化問題的定義為:給定一個(gè)目標(biāo)函數(shù)(也叫代價(jià)函數(shù))f : A → R,尋找一個(gè)變量(也叫參數(shù))x? ∈ D,使得對于所有D中的x,f(x?) ≤ f(x)(最小化);或者f(x?) ≥ f(x)(最大化),其中D為變量x 的約束集,也叫可行域;D中的變量被稱為是可行解。
?最優(yōu)化問題一般可以表示為求最小值問題。求f(x) 最大值等價(jià)于求?f(x) 的最小值。
?
數(shù)學(xué)優(yōu)化的類型
離散優(yōu)化問題
離散優(yōu)化(Discrete Optimization)問題是目標(biāo)函數(shù)的輸入變量為離散變量,比如為整數(shù)或有限集合中的元素。離散優(yōu)化問題的求解一般都比較困難,優(yōu)化算法的復(fù)雜度都比較高。離散優(yōu)化問題主要有兩個(gè)分支:
1. 組合優(yōu)化(Combinatorial Optimization):其目標(biāo)是從一個(gè)有限集合中找出使得目標(biāo)函數(shù)最優(yōu)的元素。在一般的組合優(yōu)化問題中,集合中的元素之間存在一定的關(guān)聯(lián),可以表示為圖結(jié)構(gòu)。典型的組合優(yōu)化問題有旅行商問題、最小生成樹問題、圖著色問題等。很多機(jī)器學(xué)習(xí)問題都是組合優(yōu)化問題,比如特征選擇、聚類問題、超參數(shù)優(yōu)化問題以及結(jié)構(gòu)化學(xué)習(xí)(Structured Learning)中標(biāo)簽預(yù)測問題等。
2. 整數(shù)規(guī)劃(Integer Programming):輸入變量x ∈ Zd 為整數(shù)。一般常見的整數(shù)規(guī)劃問題為整數(shù)線性規(guī)劃(Integer Linear Programming,ILP)。整數(shù)線性規(guī)劃的一種最直接的求解方法是:
(1)去掉輸入必須為整數(shù)的限制,將原問題轉(zhuǎn)換為一般的線性規(guī)劃問題,這個(gè)線性規(guī)劃問題為原問題的松弛問題;
(2)求得相應(yīng)松弛問題的解;
(3)把松弛問題的解四舍五入到最接近的整數(shù)。但是這種方法得到的解一般都不是最優(yōu)的,因此原問題的最優(yōu)解不一定在松弛問題最優(yōu)解的附近。另外,這種方法得到的解也不一定滿足約束條件。
?
連續(xù)優(yōu)化問題
連續(xù)優(yōu)化(Continuous Optimization)問題是目標(biāo)函數(shù)的輸入變量為連續(xù)變量x ∈ Rd,即目標(biāo)函數(shù)為實(shí)函數(shù)。
?
無約束優(yōu)化和約束優(yōu)化
在連續(xù)優(yōu)化問題中,根據(jù)是否有變量的約束條件,可以將優(yōu)化問題分為無約束優(yōu)化問題和約束優(yōu)化問題。
無約束優(yōu)化問題:可行域?yàn)檎麄€(gè)實(shí)數(shù)域D = Rd,可以寫為
?
其中x ∈ Rd 為輸入變量,f : Rd → R為目標(biāo)函數(shù)。
約束優(yōu)化問題:變量x需要滿足一些等式或不等式的約束。約束優(yōu)化問題通常使用拉格朗日乘數(shù)法來進(jìn)行求解。
?
線性優(yōu)化和非線性優(yōu)化
如果在公式(C.1) 中,目標(biāo)函數(shù)和所有的約束函數(shù)都為線性函數(shù),則該問題為線性規(guī)劃問題(Linear Programming)。相反,如果目標(biāo)函數(shù)或任何一個(gè)約束函數(shù)為非線性函數(shù),則該問題為非線性規(guī)劃問題(Nonlinear Programming)
在非線性優(yōu)化問題中,有一類比較特殊的問題是凸優(yōu)化問題(Convex Programming)。在凸優(yōu)化問題中,變量x 的可行域?yàn)橥辜?/strong>,即對于集合中任意兩點(diǎn),它們的連線全部位于在集合內(nèi)部。目標(biāo)函數(shù)f 也必須為凸函數(shù),即滿足
凸優(yōu)化問題是一種特殊的約束優(yōu)化問題,需滿足目標(biāo)函數(shù)為凸函數(shù),并且等式約束函數(shù)為線性函數(shù),不等式約束函數(shù)為凹函數(shù)。
?
?
優(yōu)化算法
優(yōu)化問題一般都是通過迭代的方式來求解:通過猜測一個(gè)初始的估計(jì)x0,然后不斷迭代產(chǎn)生新的估計(jì)x1, x2, · · · xt,希望xt 最終收斂到期望的最優(yōu)解x?。一個(gè)好的優(yōu)化算法應(yīng)該是在一定的時(shí)間或空間復(fù)雜度下能夠快速準(zhǔn)確地找到最優(yōu)解。同時(shí),好的優(yōu)化算法受初始猜測點(diǎn)的影響較小,通過迭代能穩(wěn)定地找到最優(yōu)解x? 的鄰域,然后迅速收斂于x?。
優(yōu)化算法中常用的迭代方法有線性搜索和置信域方法等。線性搜索的策略是尋找方向和步長,具體算法有梯度下降法、牛頓法、共軛梯度法等。
?
全局最優(yōu)和局部最優(yōu)
對于很多非線性優(yōu)化問題,會存在若干個(gè)局部的極小值。局部最小值,或局部最優(yōu)解x? 定義為:存在一個(gè)δ > 0,對于所有的滿足∥x?x?∥ ≤ δ 的x,公式f(x?) ≤ f(x) 成立。也就是說,在x? 的附近區(qū)域內(nèi),所有的函數(shù)值都大于或者等于f(x?)。
對于所有的x ∈ A,都有f(x?) ≤ f(x) 成立,則x? 為全局最小值,或全局最優(yōu)解(像loss一樣,loss最小)。
一般的,求局部最優(yōu)解是容易的,但很難保證其為全局最優(yōu)解。對于線性規(guī)劃或凸優(yōu)化問題,局部最優(yōu)解就是全局最優(yōu)解。
要確認(rèn)一個(gè)點(diǎn)x? 是否為局部最優(yōu)解,通過比較它的鄰域內(nèi)有沒有更小的函數(shù)值是不現(xiàn)實(shí)的。如果函數(shù)f(x) 是二次連續(xù)可微(連續(xù)的二階導(dǎo)數(shù))的,我們可以通過檢查目標(biāo)函數(shù)在點(diǎn)x? 的梯度?f(x?) 和Hessian 矩陣?2f(x?) 來判斷。
局部最小值的一階必要條件: 如果x? 為局部最優(yōu)解并且函數(shù)f 在x? 的鄰域內(nèi)一階可微,則在?f(x?) = 0。
證明:如果函數(shù)f(x) 是連續(xù)可微的,根據(jù)泰勒展開公式(Taylor’s Formula),函數(shù)f(x) 的一階展開可以近似為
注:在這里可以將x*看做是x0,△x看做是x-x0,對照Taylaor展開式。
假設(shè)?f(x?) ?= 0,則可以找到一個(gè)△x(比如△x = ?α?f(x?),α為很小的正數(shù)),使得
這和局部最優(yōu)的定義矛盾。
注:為什么要選a為正數(shù),因?yàn)椴捎昧朔醋C法,找到了一個(gè)反例,那么這個(gè)就不成立
?
局部最優(yōu)解的二階必要條件: 如果x? 為局部最優(yōu)解并且函數(shù)f 在x? 的鄰域內(nèi)二階可微,則在?f(x?) = 0,?2f(x?)為半正定矩陣。
證明:如果函數(shù)f(x) 是二次連續(xù)可微的,函數(shù)f(x) 的二階展開可以近似為
由一階必要性定理可知?f(x?) = 0,則
?
即?2f(x?) 為半正定矩陣。
?
梯度下降法
梯度下降法(Gradient Descent Method),也叫最速下降法(Steepest Descend Method),經(jīng)常用來求解無約束優(yōu)化(可實(shí)行域?yàn)檎麄€(gè)實(shí)數(shù)域)的極小值問題。
對于函數(shù)f(x),如果f(x) 在點(diǎn)xt 附近是連續(xù)可微的,那么f(x) 下降最快的方向是f(x) 在xt 點(diǎn)的梯度方向的反方向。
根據(jù)泰勒一階展開公式,
要使得f(xt+1) < f(xt),就得使△xT?f(xt) < 0。我們?nèi) 鱴 = ?α?f(xt)。如果α > 0 為一個(gè)夠小數(shù)值時(shí),那么f(xt+1) < f(xt) 成立。
這樣我們就可以從一個(gè)初始值x0 出發(fā),通過迭代公式
生成序列x0, x1, x2, . . . 使得
如果順利的話,序列(xn) 收斂到局部最優(yōu)解x?。注意每次迭代步長α 可以改變,但其取值必須合適,如果過大就不會收斂,如果過小則收斂速度太慢。
?
梯度下降法為一階收斂算法,當(dāng)靠近極小值時(shí)梯度變小,收斂速度會變慢,并且可能以“之字形”的方式下降。如果目標(biāo)函數(shù)為二階連續(xù)可微,我們可以采用牛頓法。牛頓法為二階收斂算法,收斂速度更快,但是每次迭代需要計(jì)算Hessian 矩陣的逆矩陣,復(fù)雜度較高。
轉(zhuǎn)載于:https://www.cnblogs.com/callyblog/p/11250845.html
總結(jié)
                            
                        - 上一篇: Oracle分析函数FIRST_VALU
 - 下一篇: leetcode 两数之和 整数反转 回