大数据集下的学习方法
大数据下的机器学习现在机器学习算法,其实就是大量数据集下对数据集进行拟合。当数据量很大的时候,算法的效率必然会降低,如何处理大量的数据,是现在要考虑的问题。随机梯度下降回顾线性回归的梯度下降。hθ(x)=∑j=0nθjxj代价函数Cost(θ,(x(i),y(i)))=12(hθ(x(i))−y(i))2Jtrain(θ)=12m∑i−1m(hθ(x(i))−y(i))2=1m∑i−1mCost(
大数据下的机器学习
现在机器学习算法,其实就是大量数据集下对数据集进行拟合。
当数据量很大的时候,算法的效率必然会降低,如何处理大量的数据,是现在要考虑的问题。
随机梯度下降
回顾线性回归的梯度下降。
h
θ
(
x
)
=
∑
j
=
0
n
θ
j
x
j
代
价
函
数
C
o
s
t
(
θ
,
(
x
(
i
)
,
y
(
i
)
)
)
=
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J
t
r
a
i
n
(
θ
)
=
1
2
m
∑
i
−
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
m
∑
i
−
1
m
C
o
s
t
(
θ
,
(
x
(
i
)
,
y
(
i
)
)
)
迭
代
运
行
梯
度
下
降
θ
j
:
=
θ
j
−
α
∂
J
t
r
a
i
n
(
θ
)
∂
θ
j
对
于
每
个
j
=
0
,
1
,
.
.
.
,
n
对
于
θ
∈
R
n
:
=
θ
j
−
α
1
m
∑
i
=
1
m
∂
C
o
s
t
(
θ
,
(
x
(
i
)
,
y
(
i
)
)
)
∂
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
这
里
的
m
就
是
我
们
的
训
练
集
样
本
数
量
.
\begin{aligned} & h_\theta(x)=\sum_{j=0}^n\theta_jx_j\\ & 代价函数Cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2\\ & J_{train}(\theta)=\frac{1}{2m}\sum_{i-1}^m(h_\theta(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i-1}^mCost(\theta,(x^{(i)},y^{(i)}))\\ & 迭代运行梯度下降\\ & \qquad \theta_j:=\theta_j-\alpha \frac{\partial J_{train}(\theta)}{\partial\theta_j}\qquad \qquad对于每个j=0,1,...,n对于\theta\in\mathbb{R}^n\\ & \qquad\quad :=\theta_j-\alpha \frac{1}{m}\sum_{i=1}^m\frac{\partial Cost(\theta,(x^{(i)},y^{(i)}))}{\partial\theta_j}\\ & \qquad\quad :=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\\ & \qquad这里的m就是我们的训练集样本数量. \\ \end{aligned}
hθ(x)=j=0∑nθjxj代价函数Cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2Jtrain(θ)=2m1i−1∑m(hθ(x(i))−y(i))2=m1i−1∑mCost(θ,(x(i),y(i)))迭代运行梯度下降θj:=θj−α∂θj∂Jtrain(θ)对于每个j=0,1,...,n对于θ∈Rn:=θj−αm1i=1∑m∂θj∂Cost(θ,(x(i),y(i))):=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)这里的m就是我们的训练集样本数量.
当m非常大的时候,例如千万,上亿等。可能就需要不少的时间,而且该算法还需要多次迭代,时间消耗不容小视。
接下来,我们不每次遍历所有的训练集来求θ,而是只从训练集中拿出一个(x,y)来进行单独的求θ。
随机梯度下降:
即
:
我
们
不
区
分
(
x
(
i
)
,
y
(
i
)
)
了
,
统
一
使
用
(
x
,
y
)
因
为
我
们
每
次
只
用
一
个
单
独
的
样
本
进
行
训
练
,
所
以
我
们
的
梯
度
下
降
式
子
变
为
:
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
)
−
y
)
x
j
\begin{aligned} 即:\ & 我们不区分(x^{(i)},y^{(i)})了,统一使用(x,y)\\ & 因为我们每次只用一个单独的样本进行训练,所以我们的梯度下降式子变为:\\ & \theta_j:=\theta_j-\alpha(h_\theta(x)-y)x_j \end{aligned}
即: 我们不区分(x(i),y(i))了,统一使用(x,y)因为我们每次只用一个单独的样本进行训练,所以我们的梯度下降式子变为:θj:=θj−α(hθ(x)−y)xj
此时,学习算法可能不会收敛到全局最优点,而是在最优点附近一个范围内游走,这是因为我们使用的是单独的样本。
如图:
经历曲折的路径,最后在一个范围内往复。
不过确定一个范围,也是一个不错的收获。
Mini-batch梯度下降
- 经典梯度下降,需要遍历所有训练集,时间成本太大。
- 随机梯度下降,只需要一次计算一个样本即可,时间花费少,但是最后精度不高。
我们使用折中的方法,将经典梯度下降和随机梯度下降结合起来。每次读入b个样本,即不多也不少,可以使时间变少,也可以使精度变高。
即
比
如
,
我
们
每
次
使
用
10
个
样
本
进
行
总
样
本
数
10000
的
梯
度
下
降
训
练
:
b
=
10
,
m
=
10000
f
o
r
(
b
=
1
,
11
,
21
,
.
.
.
,
9991
)
θ
j
:
=
θ
j
−
α
1
b
∑
i
=
1
b
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
对
于
每
个
j
=
0
,
1
,
.
.
.
,
n
对
于
θ
∈
R
n
b
:
=
b
+
10
\begin{aligned} & 比如,我们每次使用10个样本进行总样本数10000的梯度下降训练:b=10,m=10000\\ & for(b=1,11,21,...,9991)\\ & \qquad\theta_j:=\theta_j-\alpha\frac{1}{b}\sum_{i=1}^b(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\qquad \qquad对于每个j=0,1,...,n对于\theta\in\mathbb{R}^n\\ & \qquad b:=b+10\\ \end{aligned}
比如,我们每次使用10个样本进行总样本数10000的梯度下降训练:b=10,m=10000for(b=1,11,21,...,9991)θj:=θj−αb1i=1∑b(hθ(x(i))−y(i))xj(i)对于每个j=0,1,...,n对于θ∈Rnb:=b+10
检查收敛
按照随机或者m-b梯度下降运行后,每隔k次可以取这k次的平均值,进行检测J(θ)是否收敛。
自适应α
在进行算法执行时,合适的参数α也会帮助学习算法更快,更精确的定位到最优点。
我们一般期望是,一开始时,α较大,快速收敛到合适的范围内,然后α变小,缓慢的逼近最优点。
例
如
α
=
c
o
n
s
t
1
迭
代
次
数
+
c
o
n
s
t
2
,
α
随
迭
代
次
数
的
增
加
而
减
小
例如\alpha=\frac{const_1}{迭代次数+const_2},\alpha随迭代次数的增加而减小
例如α=迭代次数+const2const1,α随迭代次数的增加而减小
在线学习
- 离线学习:准备好数据,训练过程中不再增加新的数据,直到算法执行完。
- 在线学习:算法执行的时候,随时会增加入新的训练样本,训练集在执行时是会变化的。
之前我们讨论的一直都是离线学习。
但在现在这样的网络环境中,随时随地产生的数据,让在线学习也也有了一席之地。
类似随机梯度下降,离线的随机梯度下降是从准备好的训练集中依次读入样本进行训练。
在线的可以是实时的获取样本。
在线学习可以更加快速的对样本的变化做出反应。
应用可以在 商品推荐,搜索推荐,价格歧视等方面发挥作用。
数据并行
当样本数量多的时候,可以采用并行计算的方式。
将一个大样本分成若干个小样本,在不同的计算机中并行计算,最后汇总起来做最终计算。
这样可以节省时间成本。
能够数据并行计算的算法,一般是能够用累加表达出来的,累加的算法可以先独立计算部分,最后合并计算整体。
也可以使用单机多线程来实现。
参考资料
B站吴恩达机器学习相关课程:https://www.bilibili.com/video/BV164411b7dx
更多推荐
所有评论(0)