1. 大型数据集的学习
在低方差的模型情况下增加数据集的规模可以帮助获得更好的结果。当数据集很大,是个多达100 万条记录的训练集时的应对方法。如果采用之前学习的批量梯度下降,每一次梯度下降迭代,都需要计算训练集的误差的平方和,计算代价非常大。
面对大规模训练集时,首先应该做的事是:绘制学习曲线来帮助判断去检查这么大规模的训练集是否真的必要。必须要大规模的数据时候,批量梯度下降方法不再适应,需要使用其他的方法。
2. 梯度下降
(1)随机梯度下降
随机梯度下降法每次更新 θj 只会用当前遍历的样本。迭代过程中不像批量梯度下降直接下降到最优,还是曲折波动的。
上图反映了相较于批量梯度下降法,随机梯度下降法的曲线就显得不是那么平滑,而是很曲折了,其也倾向于找到局部最优解而不是全局最优解。因此,需要绘制调试曲线来监控随机梯度的工作过程是否正确。一般每完成 多次(1000)迭代,求取平均误差并进行绘制,得到误差随迭代次数的变化曲线。
遇到曲线波动,无明显下降的时候,并不意味着学习率出了问题,有可能是平均间隔取的太小,当发现明显上升态势的曲线,就需要减小学习率。
另外,学习率 α 还可以随着迭代次数进行优化:
α
=
c
o
n
s
t
a
n
t
1
i
t
e
r
a
t
i
o
n
N
u
m
b
e
r
+
c
o
n
s
t
a
n
t
2
α=\frac {constant1}{iterationNumber+constant2}
α=iterationNumber+constant2constant1这样,随着迭代次数的增多,我们的下降步调就会放缓,避免出现抖动
随机梯度下降法工作前,需要先乱序数据集,是的遍历样本的过程更加分散
迭代:
f
o
r
i
=
1
,
.
.
.
,
m
:
for\quad i=1,...,m:
fori=1,...,m:
θ
j
=
θ
j
−
α
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
(
i
)
j
,
f
o
r
j
=
0
,
.
.
.
,
n
\quad \quad \quadθ_j=θj−α(hθ(x(i))−y(i))x(i)j, \quad for \quad j=0,...,n
θj=θj−α(hθ(x(i))−y(i))x(i)j,forj=0,...,n
(2)mini-batch
Mini 批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,通过参数 b 指明了每次迭代时,用于更新 θ 的样本数。假定 b=10,m=1000 ,Mini 批量梯度下降法的工作过程如下:
f
o
r
i
=
1
,
11
,
21
,
.
.
.
991
:
for \quad i=1,11,21,...991:
fori=1,11,21,...991:
θ
j
=
θ
j
−
α
1
10
∑
k
=
i
i
+
9
(
h
θ
(
x
Z
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
f
o
r
j
=
0
,
.
.
.
,
n
\quad \quad \quadθ_j=θ_j−α\frac{1}{10}\sum_{k=i}^{i+9}(h_θ(xZ^{(i)})−y^{(i)})x^{(i)}_j,for \quad j=0,...,n
θj=θj−α101∑k=ii+9(hθ(xZ(i))−y(i))xj(i),forj=0,...,n
(3)批量梯度下降、随机梯度下降和mini-batch的比较
批量梯度下降 | 随机梯度下降 | mini-batch | |
---|---|---|---|
迭代公式 | θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) θ_j=θ_j−α\frac1m\sum_{i=1}^m(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j θj=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i), f o r j = 0 , . . . , n for \quad j=0,...,n forj=0,...,n |
f
o
r
i
=
1
,
.
.
.
,
m
:
for\quad i=1,...,m:\quad \quad \quad \quad \quad \quad
fori=1,...,m: θ j = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) j θ_j=θj−α(hθ(x(i))−y(i))x(i)j θj=θj−α(hθ(x(i))−y(i))x(i)j, f o r j = 0 , . . . , n for \quad j=0,...,n forj=0,...,n | 其中每次迭代样本数量10,总样本1000 f o r i = 1 , 11 , 21 , . . . 991 : for \quad i=1,11,21,...991:\quad\quad \quad \quad \quad fori=1,11,21,...991: θ j = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x Z ( i ) ) − y ( i ) ) x j ( i ) θ_j=θ_j−α\frac{1}{10}\sum_{k=i}^{i+9}(h_θ(xZ^{(i)})−y^{(i)})x^{(i)}_j θj=θj−α101∑k=ii+9(hθ(xZ(i))−y(i))xj(i), f o r j = 0 , . . . , n for \quad j=0,...,n forj=0,...,n |
数据使用 | 每次使用样本的全部数据 | 每次使用一个样本进行迭代 | 每次迭代部分数据(一般size是64,128,256,512,少见1024) |
计算时间 | 迭代速度慢,时间长 | 单次迭代速度快,但是失去了所有向量化带来的加速,一次处理一个样本,效率低下 | 每次迭代部分数据,合理的数量会快速下降 |
收敛情况 | 逐渐减小,理论上能收敛于一个确定的值 | J-iterations曲线不是那么平滑,而是很曲折了,倾向于找到局部最优解而不是全局最优解 | J-iterations曲线曲折性位于批量梯度下降和随机梯度下降之间 |
超参数 | 学习率α | 学习率α,学习率下降参数 | size和学习率α |
3. 在线学习
用户登录了某提供货运服务的网站,输入了货运的发件地址和收件地址,该网站给出了货运报价,用户决定是购买该服务( y=1 )或者是放弃购买该服务( y=0 )。
特征向量 x 包括了收发地址,报价信息,我们想要学习 p(y=1|x;θ) 来最优化报价:
获得关于该用户的样本
(
x
,
y
)
(x,y)
(x,y),使用该样本更新
θ
:
θ
j
=
θ
j
−
α
(
h
θ
(
x
)
−
y
)
x
j
,
f
o
r
j
=
0
,
.
.
,
n
θ:θ_j=θ_j−α(h_θ(x)−y)x_j, for\quad j=0,..,n
θ:θj=θj−α(hθ(x)−y)xj,forj=0,..,n
在线学习并不需要一个固定的样本集进行学习,而是不断接收样本,不断通过接收到的样本进行学习。
4. 映射化简和数据并行
Mini 批量梯度下降法时,假定
b
=
400
,
m
=
400
,
000
,
000
b=400,m=400,000,000
b=400,m=400,000,000 ,对
θ
θ
θ 的优化为:
θ
j
=
θ
j
−
α
1
400
∑
i
=
1
400
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
θ_j=θ_j−α\frac1{400}∑_{i=1}^{400}(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j
θj=θj−α4001i=1∑400(hθ(x(i))−y(i))xj(i)
假定有 4 个机器(Machine),首先通过 Map (映射)过程来并行计算式中的求和项,每个机器被分配到 100 个样本进行计算:
t
e
m
p
j
(
1
)
=
∑
i
=
1
100
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
temp^{(1)}_j=∑_{i=1}^{100}(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j
tempj(1)=i=1∑100(hθ(x(i))−y(i))xj(i)
t
e
m
p
j
(
2
)
=
∑
i
=
101
200
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
temp^{(2)}_j=∑_{i=101}^{200}(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j
tempj(2)=i=101∑200(hθ(x(i))−y(i))xj(i)
t
e
m
p
j
(
3
)
=
∑
i
=
201
300
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
temp^{(3)}_j=∑_{i=201}^{300}(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j
tempj(3)=i=201∑300(hθ(x(i))−y(i))xj(i)
t
e
m
p
j
(
4
)
=
∑
i
=
301
400
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
temp^{(4)}_j=∑_{i=301}^{400}(h_θ(x^{(i)})−y^{(i)})x^{(i)}_j
tempj(4)=i=301∑400(hθ(x(i))−y(i))xj(i)最后,通过 Reduce(规约)操作进行求和:
θ
j
=
θ
j
−
α
1
400
(
t
e
m
p
j
(
1
)
+
t
e
m
p
j
(
2
)
+
t
e
m
p
j
(
3
)
+
t
e
m
p
j
(
4
)
)
θ_j=θ_j−α\frac1{400}(temp^{(1)}_j+temp^{(2)}_j+temp^{(3)}_j+temp^{(4)}_j)
θj=θj−α4001(tempj(1)+tempj(2)+tempj(3)+tempj(4))可以使用多台机器进行 MapReduce,此时,Map 任务被分配到多个机器完成;也可以使用单机多核心进行 MapReduce,此时,Map 任务被分配到多个 CPU 核心完成。