学习完吴恩达老师的视频,记录这部分内容
以多元线性回归为例:
h
θ
(
x
)
=
∑
j
=
1
m
θ
j
x
j
h_\theta(x)=\sum_{j=1}^{m}\theta_j x_j
hθ(x)=∑j=1mθjxj
损失函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2
其中,
i
=
1
,
2
,
.
.
.
,
m
i=1,2,...,m
i=1,2,...,m是训练样本的数量,
j
=
0
,
1
,
2
,
.
.
,
n
j=0,1,2,..,n
j=0,1,2,..,n是参数的个数
梯度下降 full batch 对参数的更新公式为:
θ
j
:
=
θ
j
−
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−m1∑i=1m(hθ(x(i))−y(i))xj(i)
整个过程是:
repeat{
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\qquad\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
\qquad
( j=1,2,…,n)
}
所以更新一次
θ
j
\theta_j
θj要使用所有的样本
i
=
1
,
2
,
.
.
,
m
i=1,2,..,m
i=1,2,..,m,在数据集很大的情况下,计算量特别大,非常费时,因此出现了:
SGD(随机梯度下降)
SGD对参数的更新公式为:
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−α(hθ(x(i))−y(i))xj(i)
整个过程是:
repeat{
\qquad
for i=1,2,…,m{
\qquad\qquad
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−α(hθ(x(i))−y(i))xj(i)
\qquad\qquad
( j=1,2,…,n)
}
}
则SGD更新一次参数是需要用到一个样本,一次repeat完成了m次的参数更新。为了训练的随机性,我们首先需要将整个训练集随机shuffle打乱。SGD大大提高了训练的速度,但此方法也有一个弊端就是:每次更新只用到一个样本,训练朝着对当前样本损失函数减小的方向,可能来来回回。因此一个折中的方法:mini btach出现了。
mini batch 对参数的更新公式为:
θ
j
:
=
θ
j
−
α
∑
k
=
i
i
+
b
(
h
θ
(
x
(
k
)
)
−
y
(
k
)
)
x
(
k
)
\theta_j:=\theta_j-\alpha\sum_{k=i}^{i+b}(h_\theta(x^{(k)})-y^{(k)})x^{(k)}
θj:=θj−α∑k=ii+b(hθ(x(k))−y(k))x(k)
这里的b是一个batch的size,一般取[2,100],整个过程为:
repeat{
\qquad
for i=1,1+b,1+2b,…,m{
\qquad\qquad
θ
j
:
=
θ
j
−
α
∑
k
=
i
i
+
b
(
h
θ
(
x
(
k
)
)
−
y
(
k
)
)
x
(
k
)
\theta_j:=\theta_j-\alpha\sum_{k=i}^{i+b}(h_\theta(x^{(k)})-y^{(k)})x^{(k)}
θj:=θj−α∑k=ii+b(hθ(x(k))−y(k))x(k)
\qquad\qquad
( j=1,2,…,n)
}
}
则mini batch更新一次参数用到了b个样本,一次repeat完成了m/b次参数更新。