數(shù)學(xué)知識(shí)
導(dǎo)函數(shù)
本質(zhì)上梯度下降法是在解決極值的問題
而在數(shù)學(xué)上求極值,需要知道導(dǎo)函數(shù) 就很容易求的 比如
函數(shù) y = x^2 + 4x + 4 的最大/小值是在其導(dǎo)函數(shù)等于0時(shí)的x的值 即 2*x + 4 = 0 是 x=-2 存在最大/小值 y=0
導(dǎo)函數(shù)的公式
f(x) = 4 f(x)’= 0
f(x) = 2x f(x)’= 2
f(x) = x^2 f(x)’= 2x
f(x) = x^3 f(x)’= 3x^2
f(x) = 4x^2 + 2x + 5 f(x)’= 8x + 2
鏈?zhǔn)椒▌t
這個(gè)是一個(gè)非常重要法則
求函數(shù) ?f(x) = 4(x + 2)^2的導(dǎo)函數(shù)
設(shè) z(x) = x + 2 則 f(x) = f(z(x)) = 4z^2 則
f(x)’= f(z(x))’* z’= 8*z * (1) = 8*(x + 2) = 8x + 16
使用鏈?zhǔn)椒▌t 能使求導(dǎo)變得很簡單
偏導(dǎo)數(shù)
如果一個(gè)函數(shù)有兩個(gè)未知數(shù)x, y那么就有個(gè)兩個(gè)導(dǎo)函數(shù),分別關(guān)于x狼犯,y的 求法其實(shí)很簡單 把另一個(gè)當(dāng)作沒看見就好 例如
f(x, y) = 4x^2 + 5 x y + 6y^2
x的偏導(dǎo)數(shù) = 8x + 5y
y的偏導(dǎo)數(shù) = 12y + 5x
矩陣及其乘法
假設(shè)
nx = ax + by + t1
ny = cx + dy + t2
那么可以用矩陣表示為
假設(shè)矩陣[a, b, c, d]為K情组,[x, y]為X丈挟,[t1, t2]為B, [nx, ny]為Y那么上面的等式為
KX+B=Y
一個(gè)m行z列的矩陣A 乘以一個(gè) z行n列的矩陣B得到的矩陣為m行n列 即:
m x z @ z x n = m x n
意味著 兩個(gè)矩陣相乘 必須是前面的列數(shù)等于后面的行數(shù)
意味著 矩陣乘法不滿足交換律
示例如下 前一個(gè)的行乘以后一個(gè)的列作為某個(gè)元素
梯度下降法
如果求函數(shù)y = x^2 + 4x + 4 的極值
那么當(dāng)2x+4=0時(shí)获枝,x處就是函數(shù)的極值
當(dāng)然還有一種方式积蜻。就是我們把x從-10闯割,10的整數(shù)依次代入上面的函數(shù)中 然后得到當(dāng)x=-2時(shí) y的值最小為0,而梯度下降法與這種方式類似 下圖是使用梯度下降法求極值
起先x設(shè)置為0竿拆,循環(huán)一百次宙拉,每次上次的基礎(chǔ)上減去 0.1乘以其導(dǎo)數(shù) 輸出如下
x起始值可以是任意的,同樣的0.1 可以是任意小于1的正小數(shù)丙笋,最終輸出趨于-2
一般地 0.1稱之為學(xué)習(xí)率
為什么循環(huán)谢澈,直接求方程2x+4=0啊 只能說年少輕狂。御板。锥忿。
為什么要減去其導(dǎo)數(shù),參看牛頓法求極值‘
總而言之怠肋,它很重要敬鬓,奠定了機(jī)器學(xué)習(xí)的基礎(chǔ),也能解決實(shí)際中的不少問題
應(yīng)用示例
直線逼近
理想中兩個(gè)點(diǎn)確定了一條直線笙各,但現(xiàn)實(shí)是給了一堆點(diǎn)來確定一條直線
設(shè)這條直線是 kx + b = y 使得 (y - (kx + b))^2 的值最小
已知 x1, x2, x3, y1, y2, y3 求k和b 函數(shù)是((kx + b) - y)^2
k的偏導(dǎo)數(shù)是 2((kx + b) - y) * x
b的偏導(dǎo)數(shù)是 2((kx + b) - y)
示例代碼如下:
循環(huán)100次之后發(fā)現(xiàn) 基本上求出k和b了 也可以把k钉答,b的誤差打印出來
輸出如下:
2D矩陣逼近
在2d平面中的(x,y)變換成一個(gè)新的點(diǎn)(u, v) 則
(u = ax + by + t1, v = cx + dy + t2)
由參數(shù)a杈抢,b数尿, c,d惶楼,t1, t2組成了2d的變換矩陣
求一個(gè)變換矩陣 使得滿足(x1, y1), (x2, y2), (x3, y3) … 變換后的點(diǎn)為(u1, v1), (u2, v2), (u3, v3) ….
設(shè) u = ax + by + t1, v = cx + by + t2求參數(shù) a, b, c, d, t1, t2使得((ax + by + t1) - u)^2 和 ((cx + dy + t2) - v) ^2 在極值處
a’ = 2((ax + by + t1) - u) * x
b’ = 2((ax + by + t1) - u) * y
c’ = 2((cx + dy + t2) - v) * x
d’ = 2((cx + dy + t2) - v) * y
t1’ = 2((ax + by + t1) - u)
t2’ = 2((cx + dy + t2) - v)
示例代碼如下:
這里使用矩陣W來表示參數(shù)(a, b, c, d), 矩陣T來表示參數(shù)(t1, t2) 使用矩陣的乘法和加法大大的節(jié)省了代碼量
3D矩陣逼近
了解了2D的矩陣砌创,那么3D的矩陣也同理
u = ax + by + cz + t1
v = ex + fy + gz + t2
w = hx + iy + jz + t3
只是參數(shù)變成了12個(gè) 其中W包含9個(gè) 加上 T的3個(gè) 那么代碼如下
輸出如下:
總結(jié)
在上面示例中 更新參數(shù)時(shí) 減去當(dāng)前參數(shù)的偏導(dǎo)數(shù)虏缸,偏導(dǎo)數(shù)也稱之為是該參數(shù)的梯度
這種函數(shù) (kx+b - y)^2 稱之為損失函數(shù)
更新參數(shù)的時(shí)候 是減去 學(xué)習(xí)率 x 梯度,而不是加上 學(xué)習(xí)率 x 梯度嫩实,為什么?如果是加上 那么損失函數(shù)應(yīng)該是(y - (kx + b))^2, 但是在牛頓法中用的是減號(hào)窥岩,在上面的求拋物線y=x^2 + 4x + 4中使用加號(hào)的話 求不出來極值甲献。。颂翼。