lyb深度學習學習筆記第三章 數值計算

2021-10-04 14:03:01 字數 2422 閱讀 9206

上溢位和下溢位,eg. sof

tmax

(x)i

=exi

∑ejx

softmax(x)_i = \frac}

softma

x(x)

i​=∑

ejx​

exi​

​ 可以通過z=x

−max

(x

)z = x-max(x)

z=x−ma

x(x)

來解決上下溢位問題

矩陣過於敏感:最大最小特徵值商的絕對值越多,矩陣求逆對誤差越敏感

梯度下降:沿著梯度反方向下降x′=

x−ϵ∇

xf(x

)\boldsymbol^=\boldsymbol-\epsilon \nabla_} f(\boldsymbol)

x′=x−ϵ

∇x​f

(x)

常用假設-lipschitz連續

jacobian矩陣

​ 一階導矩陣

hessian矩陣

​ 1. 二階偏導矩陣,等價於梯度的jacobian

​ 2.實對稱矩陣

​ 3. 在任意方向d

dd上的二階導數為dth

dd^thd

dthd

,d

dd為特徵向量時,其為對應的特徵值,其他的方向的二階導數為特徵值的加權平均,所以二階導數的上限為最大特徵值,下限為最小特徵值

​ 4. 考慮梯度下降的泰勒二階近似f(x

(0)−

ϵg)≈

f(x(

0))−

ϵg⊤g

+12ϵ

2g⊤h

gf(

x(0)

−ϵg)

≈f(x

(0))

−ϵg⊤

g+21

​ϵ2g

⊤hg

​ 在gth

gg^thg

gthg

為正的情況下,ϵ∗=

g⊤gg

⊤h

g\epsilon^=\frac g} h g}

ϵ∗=g⊤h

gg⊤g

​ 的情況下函式下降最快。因此hessian矩陣決定了學習率的量級

極值點判定

​ 基於∇xf

(x)=

0\nabla_xf(x)=0

∇x​f(x

)=0的情況下:

hessian正定 => 區域性極小值點

hessian負定 => 區域性極大值點

​ hessian特徵值有正有負 =>在某些截面是極小點、有些截面是極大點

​ hessian特徵值存在0 => 無法判定是極大極小值點

梯度下降沒有用到hessian的資訊,在具有不同方向上導數增加的快慢不同,因此有二階方法,如

牛頓法迭代:二次泰勒展開後根據一階導數條件:x∗=

x(0)

−h(f

)(x(

0))−

1∇xf

(x(0

))

\boldsymbol^=\boldsymbol^-\boldsymbol(f)\left(\boldsymbol^\right)^ \nabla_ f\left(\boldsymbol^\right)

x∗=x(0

)−h(

f)(x

(0))

−1∇x

​f(x

(0))

​ 比梯度下降快,但在鞍點附近有害(會指向鞍點)

約束優化

對於恆定學習率,取梯度下降的結果,投影到可行域上

將梯度投影到可行域上

設計成無約束優化

在kkt條件下,寫成lagrange函式min⁡x

max⁡

λmax⁡α

,α⩾0

l(x,

λ,α)

\min _ \max _} \max _, \boldsymbol \geqslant 0} l(\boldsymbol, \boldsymbol, \boldsymbol)

minx

​maxλ​

maxα,α

⩾0​l

(x,λ

,α)

kkt條件是確定乙個點是最優點的必要條件,包括:

廣義lagrangian梯度為0

所有關於x和kkt乘子的約束都滿足

不等式約束顯示互補鬆弛性 α⊙h

(x)=

0\alpha \odot h(x)=0

α⊙h(x)

=0

第三章學習筆記

執行執行緒,簡稱執行緒,是在程序中活動的物件。核心排程的物件是執行緒,而不是程序。程序描述符中包含的資料能完整地描述乙個正在執行的程式 各種狀態之間存在轉換的條件,若滿足則進行轉換,跟模擬電路中所學的狀態機是乙個道理。通過st task state task,state 函式來設定當前程序狀態 fo...

Asp學習筆記第三章

2006 07 20 20 03 07 asp學習筆記第三章 一 收集客戶端資料到伺服器語句request 1.表單頁面 這句一定要放到表單標籤的第一行 2.處理表單頁面 dim id,pwd id request.form id1 pwd request.form pwd1 if isempty ...

K R學習筆記 第三章

這一章講控制流,基本就是if else while do while switch case之類的。基本的東西大家都懂。需要強調的是在預設狀態下,if else語句中的else是與之前最近的if匹配的,所以如果這不是你的本意,那麼最好加上大括號括起來。其實我幾乎不會犯這個錯誤,因為我寫程式時,習慣於...