Gradient Descent
Tip1:Tuning your learning rate(η)
设 θ θ θ为 L ( θ ) L(θ) L(θ)的参数集,例:
θ 0 = [ θ 0 , 1 θ 0 , 2 ] θ_0=\left[ \begin{matrix}θ_{0,1} \\θ_{0,2} \\\end{matrix} \right] θ0=[θ0,1θ0,2]
则 θ n + 1 = θ n − η [ α L ( θ n , 1 ) α θ 1 α L ( θ n , 2 ) α θ 2 ] = θ n − η • ∇ L ( θ ) θ_{n+1}=θ_n-η\left[\begin{matrix}\frac{αL(θ_{n,1})}{αθ_1} \\\frac{αL(θ_{n,2})}{αθ_2}\\\end{matrix}\right]=θ_n-η•∇L(θ) θn+1=θn−η[αθ1αL(θn,1)αθ2αL(θn,2)]=θn−η•∇L(θ)
当参数过多时,无法visualize(可视化)函数图像。
但可以可视化不同learning rate(η)下Loss函数值的变化。
Adaptive Learning Rate:
前几次迭代时将η调大一些。因为初始时离正确答案比较远,应该加大步长。
当其不下降或者下降不明显时,再调小η值,使其步长变小,进行微调。
1/t decay就是一种做法,它的公式:
η
t
=
η
t
+
1
η_t=\frac{η}{\sqrt{t+1}}
ηt=t+1η。
Adagrad(自适应梯度算法)
均方根(root mean square):
x
1
2
+
x
2
2
+
.
.
.
+
x
n
2
n
\sqrt{\frac{x_1^2+x_2^2+...+x_n^2}{n}}
nx12+x22+...+xn2
在自适应梯度算法中,每个参数的learning rate都不相同:首先算出
η
t
=
η
t
+
1
η_t=\frac{η}{\sqrt{t+1}}
ηt=t+1η,然后用
η
t
η_t
ηt除以对应参数过去所有微分值的均方根。
例:
w 1 = w 0 − η 0 σ 0 g 0 , σ 0 = g 0 2 w_1=w_0-\frac{η_0}{σ_0}g_0,σ_0=\sqrt{g_0^2} w1=w0−σ0η0g0,σ0=g02
w 2 = w 1 − η 1 σ 1 g 1 , σ 1 = 1 2 ( g 0 2 + g 1 2 ) w_2=w_1-\frac{η_1}{σ_1}g_1,σ_1=\sqrt{\frac{1}{2}(g_0^2+g_1^2)} w2=w1−σ1η1g1,σ1=21(g02+g12)
w 3 = w 2 − η 2 σ 2 g 2 , σ 2 = 1 3 ( g 0 2 + g 1 2 + g 2 2 ) w_3=w_2-\frac{η_2}{σ_2}g_2,σ_2=\sqrt{\frac{1}{3}(g_0^2+g_1^2+g_2^2)} w3=w2−σ2η2g2,σ2=31(g02+g12+g22)
因此, w t + 1 = w t − η t σ t g t , σ t = 1 t + 1 ∑ i = 0 t g i 2 , η t = η t + 1 w_{t+1}=w_t-\frac{η_t}{σ_t}g_t,σ_t=\sqrt{\frac{1}{t+1}\sum_{i=0}^{t}{g_i^2}},η_t=\frac{η}{\sqrt{t+1}} wt+1=wt−σtηtgt,σt=t+11∑i=0tgi2,ηt=t+1η
当然,除了Adagrad之外,还有其他的做法。
Tip2:Stochastic Gradient Descent(Make training faster)
Gradient Descent:
L = ∑ n ( y ^ n − ( b + ∑ w i x n , i ) ) 2 , θ n = θ n − 1 − η ▽ L ( θ n − 1 ) L=\sum_{n}{(\widehat{y}_n-(b+\sum{w_ix_{n,i}}))^2},θ_n=θ_{n-1}-η▽L(θ_{n-1}) L=∑n(y n−(b+∑wixn,i))2,θn=θn−1−η▽L(θn−1)
SGD:
随机选一个example x n x_n xn
L n = ( y ^ n − ( b + ∑ w i x n , i ) ) 2 , θ n = θ n − 1 − η ▽ L n ( θ n − 1 ) L_n=(\widehat{y}_n-(b+\sum{w_ix_{n,i}}))^2,θ_n=θ_{n-1}-η▽L_n(θ_{n-1}) Ln=(y n−(b+∑wixn,i))2,θn=θn−1−η▽Ln(θn−1)
即只考虑一个example来计算Loss函数,这样可以使计算更快,一般不会影响准确度。
Tip3:Feature Scaling(特征缩放)
为什么要缩放
y
=
b
+
w
1
x
1
+
w
2
x
2
y=b+w_1x_1+w_2x_2
y=b+w1x1+w2x2把
x
1
x_1
x1,
x
2
x_2
x2比例缩放成相同的数量级。
举例来说:
左图中
x
2
x_2
x2规模较大,则对于同样的变化值
△
w
△w
△w,改变
w
2
w_2
w2比改变
w
1
w_1
w1对
y
y
y的影响更大,画出图像是一个椭圆。
右图中,将
x
2
x_2
x2缩放成了与
x
1
x_1
x1相同的规模,图像变成了一个圆。在Gradient Descent中,圆比椭圆更容易下降。
怎么缩放
m
i
m_i
mi为
x
1
,
i
,
x
2
,
i
,
.
.
.
,
x
R
,
i
x_{1,i},x_{2,i},...,x_{R,i}
x1,i,x2,i,...,xR,i的平均值(mean)
σ
i
σ_i
σi为标准差(Standard Deviation)
则
x
r
,
i
′
=
x
r
,
i
−
m
i
σ
i
x_{r,i}^{'}=\frac{x_{r,i}-m_i}{σ_i}
xr,i′=σixr,i−mi
Theory 为什么可以这么做
考虑泰勒级数(Taylor Series)
L
(
θ
)
≈
L
(
a
,
b
)
+
α
L
(
a
,
b
)
α
θ
1
(
θ
1
−
a
)
+
α
L
(
a
,
b
)
α
θ
2
(
θ
2
−
b
)
L(θ)≈L(a,b)+\frac{αL(a,b)}{αθ_1}(θ_1-a)+\frac{αL(a,b)}{αθ_2}(θ_2-b)
L(θ)≈L(a,b)+αθ1αL(a,b)(θ1−a)+αθ2αL(a,b)(θ2−b)
设
S
=
L
(
a
,
b
)
,
u
=
α
L
(
a
,
b
)
α
θ
1
,
v
=
α
L
(
a
,
b
)
α
θ
2
(
θ
2
−
b
)
S=L(a,b),u=\frac{αL(a,b)}{αθ_1},v=\frac{αL(a,b)}{αθ_2}(θ_2-b)
S=L(a,b),u=αθ1αL(a,b),v=αθ2αL(a,b)(θ2−b),则
L
(
θ
)
≈
S
−
u
a
−
v
b
+
u
θ
1
+
v
θ
2
L(θ)≈S-ua-vb+uθ_1+vθ_2
L(θ)≈S−ua−vb+uθ1+vθ2
而
(
θ
1
,
θ
2
)
∈
○
(
θ
1
−
a
)
2
+
(
θ
2
−
b
)
2
≤
d
2
(θ_1,θ_2)∈○(θ_1-a)^2+(θ_2-b)^2 \leq d^2
(θ1,θ2)∈○(θ1−a)2+(θ2−b)2≤d2,为了
L
L
L取最小值,
(
θ
1
−
a
,
θ
2
−
b
)
(θ_1-a,θ_2-b)
(θ1−a,θ2−b)应该与
(
u
,
v
)
(u,v)
(u,v)方向相反。
即
[
△
θ
1
△
θ
2
]
=
−
η
[
u
v
]
—
—
>
[
θ
1
θ
2
]
=
[
a
b
]
−
η
[
u
v
]
\left[ \begin{matrix}△θ_1 \\△θ_2 \\\end{matrix} \right]=-η\left[ \begin{matrix}u \\v \\\end{matrix} \right]——>\left[ \begin{matrix}θ_1 \\θ_2 \\\end{matrix} \right]=\left[ \begin{matrix}a \\b \\\end{matrix} \right]-η\left[ \begin{matrix}u \\v \\\end{matrix} \right]
[△θ1△θ2]=−η[uv]——>[θ1θ2]=[ab]−η[uv]
当然,如果泰勒展开到二次项或更多,还有其他的方法。