一、 模型的優(yōu)化算法原文鏈接 https://blog.csdn.net/blankit1/article/details/90412382 1.1 基于梯度下降的方法1.1.1樣本量1.1.2. 學(xué)習(xí)率的更新方法
二階方法,調(diào)整學(xué)習(xí)率 Adagrad(每個(gè)參數(shù)單獨(dú)調(diào)節(jié)) Adelta(防止Adagrad中的學(xué)習(xí)率一直減小) RMSprop(Adelta實(shí)例化) Adam(梯度、梯度方的歷史加權(quán)平均值) Adamax(Adam的二范數(shù)變?yōu)闊o窮范數(shù),更穩(wěn)定)
1.2. 牛頓法系列1.2.1. 牛頓法 1.2.2. 擬牛頓法 DFP BGFS L-BGFS(待完成) Broyden
二. 具體算法2.1.1批量梯度下降根據(jù)所有樣本的損失,更新模型參數(shù)。
以邏輯斯蒂回歸模型為例,訓(xùn)練集有m個(gè)樣本
X
(
x
1
,
x
2
,
.
.
.
,
x
m
)
X({x_{1}},{x_{2}},...,{x_{m}})
X(x1,x2,...,xm),誤差函數(shù)是交叉熵誤差函數(shù),批量梯度下降法的計(jì)算過程如下: 對(duì)于每個(gè)輸入
x
x
x,計(jì)算模型輸出
y
^
\hat{y}
y^.
y
^
=
σ
(
w
T
x
+
b
)
\hat{y} = \sigma (w^{T}x+b)
y^=σ(wTx+b) .其中
σ
(
z
)
=
1
1
+
e
?
z
\sigma (z) = \frac{1}{1+e^{-z}}
σ(z)=1+e?z1.(注:初始化
w
,
b
w,b
w,b) 計(jì)算
m
m
m個(gè)樣本的交叉熵?fù)p失,取平均值,得到關(guān)于
w
,
b
w,b
w,b的損失值
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
(
L
(
y
^
i
)
,
y
i
)
=
?
1
m
∑
i
=
1
m
(
y
i
l
o
g
y
^
i
+
(
1
?
y
i
)
l
o
g
(
1
?
y
^
i
)
)
J(w,b) = \frac{1}{m} \sum_{i=1}^{m}(L(\hat{y}_{i}),y_{i}) = -\frac{1}{m}\sum_{i=1}^{m}(y_{i}log\hat{y}_{i}+(1-y_{i})log(1-\hat{y}_{i}))
J(w,b)=m1i=1∑m(L(y^i),yi)=?m1i=1∑m(yilogy^i+(1?yi)log(1?y^i)) 計(jì)算
J
(
w
,
b
)
J(w,b)
J(w,b)關(guān)于
w
,
b
w,b
w,b的偏導(dǎo)
d
w
=
?
J
(
w
,
b
)
?
w
dw = \frac{\partial J(w,b)}{\partial w}
dw=?w?J(w,b),
d
b
=
?
J
(
w
,
b
)
?
b
db = \frac{\partial J(w,b)}{\partial b}
db=?b?J(w,b) 更新
w
,
b
w,b
w,b
w
=
w
?
l
r
?
d
w
,
b
=
b
?
l
r
?
d
b
w = w - lr * dw, b = b - lr*db
w=w?lr?dw,b=b?lr?db,
l
r
lr
lr是學(xué)習(xí)率. 重復(fù)步驟1~4,達(dá)到終止條件結(jié)束算法。
2.1.2 隨機(jī)梯度下降單個(gè)樣本輸入后,計(jì)算得到損失后,更新模型參數(shù)。
以邏輯斯蒂回歸模型為例,訓(xùn)練集有m個(gè)樣本
X
(
x
1
,
x
2
,
.
.
.
,
x
m
)
X({x_{1}},{x_{2}},...,{x_{m}})
X(x1,x2,...,xm),誤差函數(shù)是交叉熵誤差函數(shù),隨機(jī)梯度下降法的計(jì)算過程如下: 對(duì)于任意一個(gè)輸入
x
i
x_{i}
xi,計(jì)算模型輸出
y
i
^
\hat{y_{i}}
yi^.
y
i
^
=
σ
(
w
T
x
i
+
b
)
\hat{y_{i}} = \sigma (w^{T}x_{i}+b)
yi^=σ(wTxi+b) .其中
σ
(
z
)
=
1
1
+
e
?
z
\sigma (z) = \frac{1}{1+e^{-z}}
σ(z)=1+e?z1.(注:初始化
w
,
b
w,b
w,b) 計(jì)算輸入
x
i
x_{i}
xi的交叉熵?fù)p失
J
i
(
w
,
b
)
=
L
(
y
^
i
,
y
i
)
=
y
i
l
o
g
y
^
i
+
(
1
?
y
i
)
l
o
g
(
1
?
y
^
i
)
J_{i}(w,b) = L(\hat{y}_{i},y_{i})= y_{i}log\hat{y}_{i}+(1-y_{i})log(1-\hat{y}_{i})
Ji(w,b)=L(y^i,yi)=yilogy^i+(1?yi)log(1?y^i) 計(jì)算
J
i
(
w
,
b
)
J_{i}(w,b)
Ji(w,b)關(guān)于
w
,
b
w,b
w,b的偏導(dǎo)
d
w
=
?
J
i
(
w
,
b
)
?
w
dw = \frac{\partial J_{i}(w,b)}{\partial w}
dw=?w?Ji(w,b),
d
b
=
?
J
i
(
w
,
b
)
?
b
db = \frac{\partial J_{i}(w,b)}{\partial b}
db=?b?Ji(w,b) 更新
w
,
b
w,b
w,b
w
=
w
?
l
r
?
d
w
,
b
=
b
?
l
r
?
d
b
w = w - lr * dw, b = b - lr*db
w=w?lr?dw,b=b?lr?db,
l
r
lr
lr是學(xué)習(xí)率. 重復(fù)步驟1~4,達(dá)到終止條件結(jié)束算法。
2.1.3 mini-Batch梯度下降根據(jù)小批量n個(gè)樣本的損失,更新模型參數(shù)。
以邏輯斯蒂回歸模型為例,訓(xùn)練集有m個(gè)樣本
X
(
x
1
,
x
2
,
.
.
.
,
x
m
)
X({x_{1}},{x_{2}},...,{x_{m}})
X(x1,x2,...,xm),誤差函數(shù)是交叉熵誤差函數(shù),批量梯度下降法的計(jì)算過程如下: 對(duì)于小批量的n個(gè)樣本中的每個(gè)輸入
x
x
x,計(jì)算模型輸出
y
^
\hat{y}
y^.
y
^
=
σ
(
w
T
x
+
b
)
\hat{y} = \sigma (w^{T}x+b)
y^=σ(wTx+b) .其中
σ
(
z
)
=
1
1
+
e
?
z
\sigma (z) = \frac{1}{1+e^{-z}}
σ(z)=1+e?z1.(注:初始化
w
,
b
w,b
w,b) 計(jì)算
n
n
n個(gè)樣本的交叉熵?fù)p失,取平均值,得到關(guān)于
w
,
b
w,b
w,b的損失值
J
(
w
,
b
)
=
1
n
∑
i
=
1
n
(
L
(
y
^
i
)
,
y
i
)
=
?
1
n
∑
i
=
1
n
y
i
l
o
g
y
^
i
+
(
1
?
y
i
)
l
o
g
(
1
?
y
^
i
)
J(w,b) = \frac{1}{n} \sum_{i=1}^{n}(L(\hat{y}_{i}),y_{i})\\ = -\frac{1}{n}\sum_{i=1}^{n}y_{i}log\hat{y}_{i}+(1-y_{i})log(1-\hat{y}_{i})
J(w,b)=n1i=1∑n(L(y^i),yi)=?n1i=1∑nyilogy^i+(1?yi)log(1?y^i) 計(jì)算
J
(
w
,
b
)
J(w,b)
J(w,b)關(guān)于
w
,
b
w,b
w,b的偏導(dǎo)
d
w
=
?
J
(
w
,
b
)
?
w
dw = \frac{\partial J(w,b)}{\partial w}
dw=?w?J(w,b),
d
b
=
?
J
(
w
,
b
)
?
b
db = \frac{\partial J(w,b)}{\partial b}
db=?b?J(w,b) 更新
w
,
b
w,b
w,b
w
=
w
?
l
r
?
d
w
,
b
=
b
?
l
r
?
d
b
w = w - lr * dw, b = b - lr*db
w=w?lr?dw,b=b?lr?db,
l
r
lr
lr是學(xué)習(xí)率. 重復(fù)步驟1~4,達(dá)到終止條件結(jié)束算法。
2.2 梯度更新算法12.2.1 動(dòng)量法問題背景
下圖所示,紅點(diǎn)是最小值點(diǎn)。為了到達(dá)紅點(diǎn),如果使用較大的學(xué)習(xí)率,則會(huì)出現(xiàn)紫線畫出的發(fā)散現(xiàn)象,如果使用較小的學(xué)習(xí)率,如藍(lán)線所示,收斂的速度比較慢。因此,希望有種學(xué)習(xí)方法,能在縱軸上減小擺動(dòng),在橫軸上,希望加快學(xué)習(xí)。這里就需要每次橫軸和縱軸的更新量不同,如果使用
w
=
w
?
l
r
?
d
w
w = w - lr * dw
w=w?lr?dw,則達(dá)不到這種效果。 方法引入
動(dòng)量法在原始權(quán)值梯度
d
w
dw
dw的基礎(chǔ)上,增加了上一時(shí)刻的更新量
υ
t
?
1
\upsilon _{t-1}
υt?1。
υ
t
=
γ
υ
t
?
1
+
η
▽
θ
J
(
θ
)
\upsilon _{t} = \gamma \upsilon _{t-1} + \eta \bigtriangledown _{\theta }J(\theta )
υt=γυt?1+η▽θJ(θ)
θ
=
θ
?
υ
t
\theta =\theta - \upsilon _{t}
θ=θ?υt 2.2.2 Nesterov 梯度加速法(Nesterov Accelerated Gradient)問題背景
尋找最小值的過程,就像小球下山,小球在下山的過程中,速度會(huì)一直增加,這樣會(huì)沖過最低點(diǎn),然后又沖下來。我們希望小球到山底附近時(shí),會(huì)自動(dòng)減速,停在最小值處。 方法引入
θ
?
υ
t
\theta - \upsilon _{t}
θ?υt是下一時(shí)刻小球所在位置的近似估計(jì)。通過計(jì)算函數(shù)關(guān)于下一時(shí)刻的梯度表示參數(shù)的梯度方向。
υ
t
=
γ
υ
t
?
1
+
η
▽
θ
J
(
θ
?
υ
t
)
\upsilon _{t} = \gamma \upsilon _{t-1} + \eta \bigtriangledown _{\theta }J(\theta -\upsilon _{t} )
υt=γυt?1+η▽θJ(θ?υt)
θ
=
θ
?
υ
t
\theta =\theta - \upsilon _{t}
θ=θ?υt 短的藍(lán)色 當(dāng)前梯度 棕色和長的藍(lán)色 更新的累積梯度 綠色 最終的更新值
這種更新方法可以阻止更新過快而越過最小值點(diǎn)而使響應(yīng)速度提高。 2.2.3 Adagrad問題背景
我們能夠根據(jù)誤差函數(shù)的斜率調(diào)整更新量并加速SGD,我們還希望根據(jù)每個(gè)參數(shù)的重要性來調(diào)整每個(gè)參數(shù)的更新量 Adagrad 是一種基于梯度的優(yōu)化算法。它調(diào)整參數(shù)的學(xué)習(xí)率的規(guī)則: larger updates for infrequent and smaller updates for frequent parameters(怎么翻呢?) SGD的更新規(guī)則如下: g
t
,
i
=
▽
θ
t
J
(
θ
t
,
i
)
g_{t,i} = \bigtriangledown _{\theta _{t}}J(\theta _{t,i})
gt,i=▽θtJ(θt,i)
θ
t
+
1
,
i
=
θ
t
,
i
?
η
?
g
t
,
i
\theta_{t+1,i} = \theta _{t,i} - \eta \cdot g_{t,i}
θt+1,i=θt,i?η?gt,i
G
t
∈
R
d
×
d
G_{t}\in R^{d\times d}
Gt∈Rd×d是對(duì)角陣,對(duì)角上的元素
(
i
,
i
)
(i,i)
(i,i)是累積到
t
t
t時(shí)刻的梯度的平方。 其中
g
t
,
i
g_{t,i}
gt,i表示參數(shù)
θ
i
\theta _{i}
θi在時(shí)間
t
t
t時(shí)的梯度。 Adagrad算法每次單獨(dú)更新每個(gè)參數(shù):
θ
t
+
1
,
i
=
θ
t
,
i
?
η
G
t
,
i
i
+
ε
?
g
t
,
i
\theta_{t+1,i} = \theta _{t,i} - \frac{\eta}{\sqrt {G_{t,ii}+\varepsilon} } \cdot g_{t,i}
θt+1,i=θt,i?Gt,ii+ε η?gt,i 其中
ε
\varepsilon
ε是平滑項(xiàng),防止除數(shù)為0. 向量化后: Adagrad的主要缺點(diǎn)是,訓(xùn)練過程中,分母中的梯度平方項(xiàng)一直在增加,這會(huì)使學(xué)習(xí)率越來越小,從而導(dǎo)致模型無法繼續(xù)學(xué)習(xí)。 2.2.4 Adadelta當(dāng)前時(shí)刻參數(shù)梯度平方的均值
E
[
g
2
]
t
=
γ
E
[
g
2
]
t
?
1
+
(
1
?
γ
)
g
t
2
E[g^{2}]_{t} = \gamma E[g^{2}]_{t-1} +(1-\gamma)g_{t}^{2}
E[g2]t=γE[g2]t?1+(1?γ)gt2 Adagrad參數(shù)的更新量 用
E
[
g
2
]
t
E[g^{2}]_{t}
E[g2]t代替
G
t
G_{t}
Gt,得
Δ
θ
t
=
?
η
E
[
g
2
]
t
+
ε
g
t
\Delta \theta_{t} = - \frac{\eta }{\sqrt{E[g^{2}]_{t}+\varepsilon }} g_{t}
Δθt=?E[g2]t+ε ηgt 分母是梯度RMSE的校正,用RMSE代替后:
Δ
θ
t
=
?
η
R
M
S
E
(
[
g
]
t
)
g
t
\Delta \theta_{t} = - \frac{\eta }{RMSE([g]_{t})} g_{t}
Δθt=?RMSE([g]t)ηgt 完整的Adadelta算法:
E
[
g
2
]
t
=
γ
E
[
g
2
]
t
?
1
+
(
1
?
γ
)
g
t
2
(
1
)
E[g^{2}]_{t} = \gamma E[g^{2}]_{t-1} +(1-\gamma)g_{t}^{2} \text(1)
E[g2]t=γE[g2]t?1+(1?γ)gt2(1)
Δ
θ
t
=
?
η
R
M
S
E
(
[
g
]
t
)
g
t
(
2
)
\Delta \theta_{t} = - \frac{\eta }{RMSE([g]_{t})} g_{t} \text(2)
Δθt=?RMSE([g]t)ηgt(2) 2.2.5 RMSpropRMSprop是Adadelta的實(shí)例化,
γ
=
0.9
\gamma =0.9
γ=0.9.
E
[
g
2
]
t
=
0.9
E
[
g
2
]
t
?
1
+
0.1
g
t
2
(
1
)
E[g^{2}]_{t} = 0.9 E[g^{2}]_{t-1} +0.1g_{t}^{2} \text(1)
E[g2]t=0.9E[g2]t?1+0.1gt2(1)
Δ
θ
t
=
?
η
E
[
g
2
]
t
+
ε
g
t
\Delta \theta_{t} = - \frac{\eta }{\sqrt{E[g^{2}]_{t}+\varepsilon }} g_{t}
Δθt=?E[g2]t+ε ηgt 2.2.6 Adam( Adaptive Moment Estimation)Adam,Adaptive Moment Estimation,自適應(yīng)動(dòng)量評(píng)估。Adam除了像Adadelta和RMSprop那樣保存歷史指數(shù)衰梯度方的均值,還保存了歷史指數(shù)衰減動(dòng)量的均值
m
t
=
β
1
m
t
?
1
+
(
1
?
β
1
)
g
t
m_{t}=\beta _{1}m_{t-1} + (1-\beta _{1})g_{t}
mt=β1mt?1+(1?β1)gt
ν
t
=
β
1
ν
t
?
1
+
(
1
?
β
2
)
g
t
2
\nu _{t}=\beta _{1}\nu_{t-1} + (1-\beta _{2})g^{2}_{t}
νt=β1νt?1+(1?β2)gt2
m
t
,
ν
t
m_{t},\nu _{t}
mt,νt初始化為0,在初始階段這二者趨于0,為了解決這個(gè)問題,引入了偏差修正:
m
^
t
=
m
t
1
?
β
1
\hat m_{t} = \frac{m_{t}}{1-\beta _{1}}
m^t=1?β1mt,
ν
t
=
ν
t
1
?
β
2
\nu _{t} = \frac{\nu_{t}}{1-\beta _{2}}
νt=1?β2νt Adam的參數(shù)更新規(guī)則:
Δ
θ
t
=
?
η
ν
^
t
+
ε
m
^
t
\Delta \theta_{t} = - \frac{\eta }{\sqrt{\hat \nu_{t}+\varepsilon }} \hat m_{t}
Δθt=?ν^t+ε ηm^t 2.2.7 AdaMaxAdaMax將Adam中的分母的計(jì)算推廣到了
∞
\infty
∞范數(shù) Adamax更新規(guī)則 2.3.1 牛頓法為了便于理解用牛頓法優(yōu)化目標(biāo)函數(shù),首先介紹單個(gè)變量牛頓法,用于數(shù)值分析中求近似解。具體參考,得到的近似解的推導(dǎo)公式為:
x
n
+
1
=
x
n
?
f
(
x
n
)
f
′
(
x
n
)
x_{n+1} = x_{n} - \frac{f(x^{n})} {f^{'}(x^{n})}
xn+1=xn?f′(xn)f(xn) 引入 :對(duì)于多元變量,在某點(diǎn)處的導(dǎo)數(shù)變成了海塞矩陣(Hesse matrix).海塞矩陣是一個(gè)多元函數(shù)二階偏導(dǎo)構(gòu)成的矩陣。
f
(
x
)
f(x)
f(x)具有二階連續(xù)偏導(dǎo),
f
(
x
)
f(x)
f(x)的海塞矩陣
H
(
x
)
H(x)
H(x)為
H
(
x
)
=
[
?
2
f
?
x
i
?
x
j
]
n
×
n
H(x) = [\frac{\partial ^{2}f}{\partial x_{i}\partial x_{j}}]_{n\times n}
H(x)=[?xi?xj?2f]n×n
考慮無約束的最優(yōu)化問題
m
i
n
x
∈
R
n
f
(
x
)
\underset{x\in R^{n}}{min}f(x)
x∈Rnminf(x) 思考 1. 寫出
f
(
x
)
f(x)
f(x)在
x
k
x_{k}
xk處的泰勒展式
f
(
x
)
=
f
(
x
k
)
+
g
k
T
(
x
?
x
k
)
+
1
2
(
x
?
x
k
)
H
(
x
k
)
(
x
?
x
k
)
T
+
.
.
.
f(x)=f(x_{k})+g_{k}^{T}(x-x_{k})+\frac{1}{2}(x-x_{k})H(x_{k})(x-x_{k})^{T}+...
f(x)=f(xk)+gkT(x?xk)+21(x?xk)H(xk)(x?xk)T+... 2. 求
f
(
x
)
f(x)
f(x)的極值的必要條件是
f
′
(
x
)
=
0
f'(x)=0
f′(x)=0,
g
k
T
+
H
(
x
k
)
(
x
?
x
k
)
=
0
g_{k}^{T}+ H(x_{k})(x-x_{k})=0
gkT+H(xk)(x?xk)=0, 3. 牛頓法求解g(x)=0
以下源自2 2.3.2 擬牛頓法計(jì)算
H
k
?
1
H^{-1}_{k}
Hk?1比較麻煩, (B.12)或(B.13)是擬牛頓的條件 2.3.2.1 擬牛頓法-DFP(Davidon-Fletcher-Powell)算法DFP算法用
G
k
G_{k}
Gk來近似
H
k
?
1
H^{-1}_{k}
Hk?1 2.3.2.2 擬牛頓法-BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法BFGS算法用
B
k
B_{k}
Bk來近似
H
k
H_{k}
Hk 2.3.2.3
?
*
? 擬牛頓法-Broyden類算法
Pytorch中的優(yōu)化器有以下一些: Adadelta Adagrad Adam SparseAdam Adamax ASGD LBFGS RMSprop Rprop SGD
一些解釋參考 關(guān)于Adagrad算法,連個(gè)新詞:激勵(lì)收斂和懲罰收斂 安利編輯公式的鏈接: 在線公式編輯 數(shù)學(xué)公式輸入方法
|