活动地址:CSDN21天学习挑战赛
资料来源:deeplearing.ai
《机器学习实战》,机械工业出版社
机器学习——优化算法(一)
一.mini-batch梯度下降法
训练集输入:
X
(
n
x
,
m
)
=
[
x
(
1
)
,
x
(
2
)
,
x
(
3
)
,
.
.
.
,
x
(
m
)
]
X_{(n_x,m)}=[x^{(1)},x^{(2)},x^{(3)},...,x^{(m)}]
X(nx,m)=[x(1),x(2),x(3),...,x(m)]
训练集输出:
Y
(
1
,
m
)
=
[
y
(
1
)
,
y
(
2
)
,
y
(
3
)
,
.
.
.
,
y
(
m
)
]
Y_{(1,m)}=[y^{(1)},y^{(2)},y^{(3)},...,y^{(m)}]
Y(1,m)=[y(1),y(2),y(3),...,y(m)]
n
x
:
自变量个数
m
:
输入集中样本数目
x
(
i
)
:
第
i
个样本的输入
y
(
i
)
:
第
i
个样本的输出
n_x:自变量个数 \\m:输入集中样本数目\\x^{(i)}:第i个样本的输入\\y^{(i)}:第i个样本的输出
nx:自变量个数m:输入集中样本数目x(i):第i个样本的输入y(i):第i个样本的输出
如果样本的数目过大,即使我们使用向量化的方法也会导致训练时间较长,因为我们每进行一次梯度下降法就必须对整个训练集的数据进行处理,直到整个训练集被处理完才能进行下一步操作。因此我们可以把训练集分割为一个个小的子集,每次处理一个子集,基于单个子集进行梯度计算,显然这可以明显提高算法速度。
例如,我们假定m=5000000,我们可以将整个训练集输入分成5000个子集,每个子集包含1000个样本,如下所示:
X
{
1
}
=
[
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
1000
)
]
X
{
2
}
=
[
x
(
1001
)
,
x
(
1002
)
,
.
.
.
,
x
(
2000
)
]
.
.
.
X
{
5000
}
=
[
x
(
4999001
)
,
x
(
4999001
)
,
.
.
.
,
x
(
5000000
)
]
X^{\{1\}}=[x^{(1)},x^{(2)},...,x^{(1000)}]\\X^{\{2\}}=[x^{(1001)},x^{(1002)},...,x^{(2000)}]\\...\\X^{\{5000\}}=[x^{(4999001)},x^{(4999001)},...,x^{(5000000)}]
X{1}=[x(1),x(2),...,x(1000)]X{2}=[x(1001),x(1002),...,x(2000)]...X{5000}=[x(4999001),x(4999001),...,x(5000000)]
同理我们将输出也分为5000个子集,记作:
Y
{
1
}
,
Y
{
2
}
,
.
.
.
Y
{
5000
}
Y^{\{1\}},Y^{\{2\}},...Y^{\{5000\}}
Y{1},Y{2},...Y{5000}
伪代码如下所示:
f
o
r
t
=
1
:
5000
%
向前传播
Z
[
1
]
=
W
[
1
]
X
{
t
}
+
b
[
1
]
A
[
1
]
=
g
[
1
]
(
Z
[
1
]
)
Z
[
2
]
=
W
[
2
]
X
{
t
}
+
b
[
2
]
A
[
1
]
=
g
[
2
]
(
Z
[
2
]
)
.
.
.
Z
[
L
]
=
W
[
L
]
X
{
t
}
+
b
[
L
]
A
[
L
]
=
g
[
L
]
(
Z
[
L
]
)
for\space t=1:5000\\ \%向前传播\\Z^{[1]}=W^{[1]}X^{\{t\}}+b^{[1]}\\A^{[1]}=g^{[1]}(Z^{[1]})\\Z^{[2]}=W^{[2]}X^{\{t\}}+b^{[2]}\\A^{[1]}=g^{[2]}(Z^{[2]})\\...\\Z^{[L]}=W^{[L]}X^{\{t\}}+b^{[L]}\\A^{[L]}=g^{[L]}(Z^{[L]})
for t=1:5000%向前传播Z[1]=W[1]X{t}+b[1]A[1]=g[1](Z[1])Z[2]=W[2]X{t}+b[2]A[1]=g[2](Z[2])...Z[L]=W[L]X{t}+b[L]A[L]=g[L](Z[L])
%
计算代价函数
J
{
t
}
=
1
1000
∑
i
=
1
L
l
(
y
i
^
,
y
i
)
+
λ
2
∗
1000
∑
l
=
1
L
∣
∣
W
[
l
]
∣
∣
F
2
%
L
2
正则化可以防止过拟合
\%计算代价函数\\J^{\{t\}}=\frac{1}{1000}\sum_{i=1}^Ll(\hat{y^i},y^i)+\frac{\lambda}{2*1000}\sum_{l=1}^L||W^{[l]}||^2_F\%L2正则化可以防止过拟合
%计算代价函数J{t}=10001∑i=1Ll(yi^,yi)+2∗1000λ∑l=1L∣∣W[l]∣∣F2%L2正则化可以防止过拟合
%
l
(
x
,
y
)
为逻辑回归成本函数
;
%
∣
∣
W
[
l
]
∣
∣
F
2
=
∑
i
=
1
n
[
l
−
1
]
∑
j
=
1
n
[
l
]
(
W
i
j
[
l
]
)
2
,
即
l
层权重矩阵的所有元素平方和;
%
l
为当前神经网络层数;
%
通过代价函数计算梯度,进行反向传播;
\%l(x,y)为逻辑回归成本函数;\\\%||W^{[l]}||^2_F=\sum_{i=1}^{n[l-1]}\sum_{j=1}^{n[l]}(W_{ij}^{[l]})^2,即l层权重矩阵的所有元素平方和;\\\%l为当前神经网络层数;\\\%通过代价函数计算梯度,进行反向传播;
%l(x,y)为逻辑回归成本函数;%∣∣W[l]∣∣F2=∑i=1n[l−1]∑j=1n[l](Wij[l])2,即l层权重矩阵的所有元素平方和;%l为当前神经网络层数;%通过代价函数计算梯度,进行反向传播;
W
[
l
]
=
W
[
l
]
−
α
d
W
[
l
]
,
b
[
l
]
=
b
[
l
]
−
α
d
b
[
l
]
W^{[l]}=W^{[l]}-\alpha dW^{[l]},b^{[l]}=b^{[l]}-\alpha db^{[l]}
W[l]=W[l]−αdW[l],b[l]=b[l]−αdb[l]
注意,当每个子集中样本数为一时,就变成了随机梯度下降。