泰勒公式,也稱泰勒展開式,是用在一個函數在某點的信息,描述其附近取值的公式。如果函數足夠平滑,在已知函數在某一點的各階導數值的情況下,泰勒公式可以利用這些導數值來做系數,構建一個多項式近似函數,求得在這一點的鄰域中的值。
泰勒公式用一句話描述:就是用多項式函數去逼近光滑複雜函數,以直代曲。
先來感受一下泰勒公式的逼近效果:
泰勒公式的維基百科定義:設 n 是一個正整數,如果定義在一個包含 a 的區間上的函數 f 在 a 點處 n 1 次可導,那麼對于這個區間上的任意 x 都有:
其中的多項式稱為函數在 a 處的泰勒展開式,Rn(x) 是泰勒公式的餘項且是 (x-a)n 的高階無窮小
這裡的餘項即為誤差,因為使用多項式函數在某點展開,逼近給定函數,最後肯定會有一丢丢的誤差,我們稱之為餘項。
泰勒公式的定義看起來高端大氣。但如果 a=0 的話,就是麥克勞倫公式,即:
這個就是我們下面讨論的,可以認為麥克勞倫公式和泰勒公式等價。
泰勒公式的作用就是用一個多項式函數去逼近一個給定的函數(即盡量使多項式函數圖像拟合給定的函數圖像),注意,逼近的時候一定是從函數圖像上的某個點展開。如果是一個非常複雜函數,想求其某點的值,直接求無法實現,這時候就可以使用泰勒公式取近似的求該值,這是泰勒公式的應用之一,泰勒公式在機器學習中主要應用于梯度叠代。
不過這裡我們首先看看多項式函數圖像特點及其如何逼近給定函數。
初等數學已經了解到一些函數如:ex,sinx,cosx,arctanx,lgx....的一些重要性質,但是初等數學不曾回答怎樣來計算他們,下面我們慢慢學習。
首先,我們看一下泰勒展示式:
其中 f(0), f ''(0)/2! 這些都是常數,我們暫時不管,先看看其中最基礎的組成部分,幂函數有什麼特點。
可以看到,幂函數其實隻有兩種形态,一種是關于 Y 軸對稱,一種是關于原點對稱,并且指數越大,增長速度越大。
那幂函數組成的多項式函數有什麼特點呢?
我們發現:如果把9次的和2次的直接放在一起,那2次的都不用玩了。
但是開始的時候,應該是2次的效果更好,之後才慢慢輪到9次,可是如何才能讓 x2 和 x9 的圖像特性能結合起來呢?
所以說,通過改變系數,多項式可以像鋼絲一樣彎成任意的函數曲線。
1.2 用多項式對 ex 進行逼近ex 是麥克勞倫展示形式上最簡單的函數,有 e 就是這麼任性。下面看一下 ex 的多項式展示式:
增加一個 1/4!*x4 看看。
增加一個 1/5!*x5 看看。
可以看出, 1/n!*xn 不斷的彎曲着那根多項式形成的鐵絲去逼近 ex,并且 n 越大,其作用的區域距離 0 越遠。
連起來看,如下:
sin(x) 是周期函數,有非常多的彎曲,難以想象可以用多項式進行逼近。
下面看一下 sin(x) 的多項式展示式。
同樣,我們再增加一個 1/7!*x7 試試。
可以看到 1/7!*x7 在适當的位置,改變了x - 1/3!*x3 1/5!*x5 的彎曲方向,最終讓 x - 1/3!*x3 1/5!*x5 - 1/7!*x7 更好的逼近 sin(x)。
下面看看 sin(x)的泰勒展示:
從上圖中每次不同程度的函數逼近可以看出:對于精确度要求較高且需要估計誤差的時候,必須用高次多項式來近似表達函數,同時給出誤差公式。以上就是利用多項式函數去逼近給定函數的一個過程。
1.4 泰勒公式是怎麼推導的?是根據“以直代曲,化整為零”的數學思想,産生了泰勒公式。
如上圖,把曲線等分為 n 份,分别為 a1, a2, .... an,令 a1 = a, a2 = a Δx, ... xn = a (n-1)Δx。我們可以退出 (Δ2, Δ3 可以認為是二階,三階微分,其準确的數學用于是差分,和微分相比,一個是有限量,一個是極限量):
也就是說, f(x) 全部可以由 a 和 Δx 決定,這個就是泰勒公式提出的基本思想。據此的思想,加上極限 Δx -> 0,就可以推出泰勒公式。
注意:為什麼泰勒公式選擇多項式函數去近似表達給定的函數?
首先,我們看如下多項式:
其實多項式是最簡單的一類初等函數。關于多項式,由于它本身的運算僅是有限項加減法和乘法,所以在數值計算方面,多項式是人們樂于使用的工具。因此我們經常用多項式來近似表達函數。這也是為什麼泰勒公式選擇多項式函數去近似表達給定的函數。
下面我們推導一下其一階泰勒公式,我們首先從一階導數着手,假設 f(x) 在 x0 處有一階導數,那麼根據定義,就有:
現在先回顧一下關于函數極限的一個結論:
其中,α(x) 是該極限過程下的某個無窮小,即: α(x) -> 0(x ->x*),利用這個結論,可以将(1)改寫為:
其中 α1(x) -> 0(x ->x0),再進一步變形,就可以得到:
注意到(4)末尾那一項,很清楚,它是 (x - x0) 的高階無窮小,這是因為:
于是,我們可以直接将它記作:
這樣的話,(4)式就可以進一步改寫為:
這就是一階泰勒公式,老師的PPT如下:
那麼如何得到二階呢?
先比較一下二階泰勒和一階泰勒形式上的差别。他們前兩項都是一樣的,隻不過二階的又多出一項。注意到,高階無窮小的記号實際上是一個“收納筐”,它裡面裝着很多隐藏着的東西。如此,我們猜測,二階泰勒多出來的這一項,一定是從一階泰勒那個高階無窮小中“分析”出來的。
這啟發我們來考慮這樣一個極限:
這是 一個 0/0 的極限,要求解它可以考慮使用洛必達。但是,請注意,我們現在隻有 f(x) 在 x0 一點一階可導的條件,這還不足以讓我們使用洛必達。不過,這并沒有太大困難,隻要加強條件就行,比如:我們讓 f(x) 在 x0 處二階可導,這樣的話,就不僅保證了 f '' (xo) 存在,還同時保證了 f(x) 在 x0 某鄰域内一階可導,這就滿足了洛必達的使用條件。
好了,下面開始洛必達!
現在,我們又利用(2)的結論,将這個極限改寫為:
基于同一理由:
我們将它代入(10)并連同(10)一起帶回(7),就将得到:
這就是二階泰勒公式!
下面看一下以直代曲,當 |x| 很小的時候:
這就相當于,在求一階導數,求 f(x) 在某一點的切線,這個從函數整體來看,隻能表示出下一個點上,函數的整體走勢是上升還是下降。
但是我們多畫幾個函數,就會發現隻使用一階導數看起來有點不準,它隻幫我們定位了下一個點是上升還是下降,對之後的趨勢就很難把控了。
如何做的更準确一些呢? 我們如果把二階導利用上呢?
更形象一點:
以此類推:
我們所找的多項式應該滿足下面條件:
解釋一下上面的轉換時如何做的,以上面第三行的二階導數為例:
第一個箭頭的轉換:将 Pn(x) 求二階導函數後将 x0 帶入,求得 Pn''(x0) = 2!a2
第二個箭頭的轉換:所以 f ''(x0) = 2! a2,所以 a2 = 1/2! * f '' (x0)
多項式函數:
上面多項式中的系數 a 可以全部由 f(x) 表示,則得到泰勒多項式為:
上式稱為 f(x) 在 x0 處關于 (x - x0) 的 n 階泰勒多項式。
其中誤差為:
因為是用多項式函數去無限逼近給定的函數,所以兩者之間肯定存在一丢丢的誤差。
麥克勞倫公式為:
近似可得:
麥克勞林多項式在做逼近的時候很有用,它可以幫我們實現一個函數,在 x 軸 [0, 1] 之間符合低次幂的圖像,在大于 1 的作用域上符合高次幂的圖像,這樣便可以更好地拟合某些函數。
1.5 階乘的含義這裡補充一個知識:0的階乘為1,0的階乘等于1是人為規定的。
原因如下:一個正整數的階乘是所有小于等于該數的正整數的積,并且有0的階乘為1.簡單一點是人為規定的,但是它有道理的,因為階乘是一個遞推定義, n! = n*(n-1)!,那麼必然有一個初始值需要認為規定。因為 1!=1,根據 1!=1*0!,所以 0!=1。
那麼階乘到底什麼意思呢?
首先這裡要問了,為什麼要使用泰勒公式呢?
實際應用中,泰勒公式需要階段,隻取有限項,一個函數的有限項的泰勒級數叫做泰勒展開式。泰勒公式的餘項可以用來估算這種近似的誤差。
泰勒公式最直接的一個應用就是用于計算,計算機一般都是把 sin(x) 進行泰勒展開進行計算的。
泰勒公式還可以把問題簡化,比如計算:
代入 sin(x) 的泰勒展示有:
其中 o(x3) 是泰勒公式裡面的餘項,是高階無窮小。
下面給出幾個常見函數在 x=0 處的泰勒級數,即麥克勞林級數。
下面是幾個常見的初等函數的帶有佩亞諾餘項的麥克勞林公式:
佩亞諾餘項為 (x - x0)n 的高階無窮小:Rn(x) = o[(x - x0)n]
1.9 例子:求其n階麥克勞倫展開式
拉格朗日乘子法是用來求條件極值的,或者說拉格朗日乘子法叫拉格朗日數乘法求解條件極值,極值問題有兩類,其一,求函數在給定區間上的極值,對自變量沒有其他要求,這種極值稱為無條件極值。其二,對自變量有一些附加的約束條件限制下的極值,稱為條件極值。
下面我們一步一步慢慢來
2.1 如何求條件極值?給個函數: u = f(x, y),如何求其極值點呢?
簡單來說直接求它的偏導不就OK了,即:
但是:現在問題難度加大了,如果再加上約束條件呢?限制條件為 v(x, y) = 0
解出 y = y(x) 代入 z 中有:
這說明當 u 的梯度與條件 z = z(x, y) 的法向量共線的時候 u 取得條件極值。
由于一般情況下 v(x, y) 很難求出顯式子,所以我們運用銀行求導的法則:
于是得到:
顯然:
于是我們得到結論: u = f(x, y) 在條件 v(x, y) = 0 作用下的極值點由下述函數的極值點給出,注意到 v(x, y) = 0,極值也相同。
老師的PPT:
下面來解析一下。
想象一下,目标函數 f (x, y) 是一座山的高度,約束 g(x, y)=C 是鑲嵌在山上的一條曲線如上圖。為了找到曲線的最低點,就從最低的等高線(0那條)開始往上數。數到第三條,等高線終于和曲線有交點了,如下圖所示,因為比這條等高線低的地方都不在約束範圍内,所以這肯定是這條約束曲線的最低點了。
而且約束條件在這裡不可能和等高線相交,一定是相切。因為如果相交的話,如下圖所示,那麼曲線肯定會有一部分在B區域,但是B區域比等高線低,這是不可能的。
兩條曲線相切,意味着他們在這點的法線(法向量)平行,也就是法向量隻差一個任意的常數乘子(取為 - λ)
我們把這個式子的右邊移到左邊,并把常數移到微分算子,就得到:
把這個式子重新解釋一下:這個就是函數 f(x, y) λ g(x, y) 無約束情況下極值點的必要條件。
(上圖解釋:兩曲線相切等價于兩曲線在切點處擁有共線的法向量,因此可得到函數 f(x, y) 與 g(x, y)在切線處的梯度(gradient)成正比,于是我們可以列出方程組求解切線的坐标(x,y),進而得到函數 f的極值)
從代數方面再梳理一下:
求一個多元函數 f(x, y, z,...) 在條件 g(x, y, z,....) =a 下的極值,實際上是求前者在後者定義域下的極值。
而求函數 L(r, x, y,z...) = f(x, y, z....) r*(g(x,y,z...)-a) 的無條件極值,極值存在的條件為 L 的所有偏導數等于0。
關鍵的一點來了,由于 r 也是 L 的變量,所以 L 對 r 的偏導數為 0 相當于要求:
這恰好使 L(r, x, y, z...) 的除了r外的所有變量被限制在 g(x, y, z,...) 的定義域内。
而在這個定義域内,顯然 g-a 恒等于0,于是就有 L=f,求 f的有條件極值問題被轉化為求 L的無條件極值問題。
2.3 什麼是拉格朗日乘子法?在數學最優問題中,拉格朗日乘子法(Lagrange Multiplier,以數學家拉格朗日命名)是一種尋找遍曆受一個或多個條件限制的多元函數的極值的方法。
基本的拉格朗日乘子法(又稱為拉格朗日乘數法),就是求解函數 f(x1, x2, ....)在 g(x1,x2...)=0的約束條件下的極值的方法。其主要思想是引入一個新的參數 λ (即拉格朗日乘子),将約束條件與原函數聯系到一起,使能配成與變量數量相等的等式方程,從而求出得到原函數極值的的各個變量的解。
這種方法将一個有 n 個變量與 k 個約束條件的最優化問題轉換為一個有 n k 個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一種新的标量未知數,即拉格朗日乘數:約束方法的梯度(gradient)的線性組合裡每個向量的系數。這種方法保證了在獲得最優乘子的情況下,原目标函數的解和拉格朗日函數的解是一緻的。
需要注意的是:lagrange函數本身沒有意義的,我們隻是希望構造出一個 Lagrange函數,來使得這個函數的極值等于原函數 f(x) 在約束條件下的極值。
2.4 如何使用拉格朗日乘子法?在機器學習的過程中,我們經常遇到在有限制的情況下,最大化表達式的問題。即求表達式的最大值,一般情況下我們都是求導,令其等于 0,但是機器學習的過程中,我們經常遇到在有限制的情況下,最大化表達式,如下例子所示:
此時,我們引入一個拉格朗日乘子 λ 構造出拉格朗日表達式 :
對于有多個限制的表達式,則有:
其中, λ 稱為拉格朗日乘子。
接下來就是要對拉格朗日表達式求導,令其為0,解方程即可。
最後将方程的解代入原函數中即可。
最後,小編想說:我是一名python開發工程師,整理了一套最新的python系統學習教程,想要這些資料的可以關注私信小編“01”即可(免費分享哦)希望能對你有所幫助。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!