梯度下降
引入:当我们得到了一个目标函数后,如何进行求解?
直接求解?(并不一定可解,线性回归可以当做一个特例)
常规套路:机器学习的套路就是我交给机器一堆数据,然后告诉它什么样的学习方式是对的(目标函数),然后让它朝着这个方向去做
如何优化:一口吃不成胖子,我们要静悄悄的一步步的完成迭代(每次优化一点点,积累起来就是个大成绩)
目标函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
(
i
)
)
2
J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2}
J(θ0,θ1)=2m1∑i=1m(hθ(xi)−y(i))2
寻找山谷的最低点,也就是我们的目标函数终点(什么样的参数能使目标函数达到极值点)
下山分几步走?(更新参数)
(1)找到当前最合适的方向
(2)走那么一小步,走快了该“跌倒”了
(3)按照方向与步伐去更新我们的参数
梯度下降,目标函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
(
i
)
)
2
J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{(i)})^{2}
J(θ0,θ1)=2m1∑i=1m(hθ(xi)−y(i))2
一般有三种梯度下降的方式:
批量梯度下降:
∂
J
(
θ
)
∂
θ
j
=
−
1
m
∑
i
=
1
m
(
y
i
−
h
0
(
x
i
)
)
x
j
i
\frac{\partial J(\theta)}{\partial \theta_{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{i}-h_{0}(x^{i}))x_{j}^{i}
∂θj∂J(θ)=−m1∑i=1m(yi−h0(xi))xji
(容易得到最优解,但是由于每次考虑所有的样本,速度很慢)
随机梯度下降:
θ
j
′
=
θ
j
+
(
y
i
−
h
θ
(
x
i
)
)
x
j
i
\theta_{j}^{'}=\theta_{j}+(y^{i}-h_{\theta}(x^{i}))x_{j}^{i}
θj′=θj+(yi−hθ(xi))xji
(每次找一个样本,迭代速度快,但是不一定每一次都朝着收敛的方向)
小批量梯度下降法:
θ
j
:
=
θ
j
−
α
1
10
∑
k
=
i
i
+
9
(
h
θ
(
x
(
k
)
)
−
y
(
k
)
)
x
j
(
k
)
\theta_{j}:=\theta_{j}-\alpha \frac{1}{10}\sum_{k=i}^{i+9}(h_{\theta}(x^{(k)})-y^{(k)})x_{j}^{(k)}
θj:=θj−α101∑k=ii+9(hθ(x(k))−y(k))xj(k)
(每次更新选择一小部分数据进行计算,实用!!!)
梯度下降学习率
学习率(步长):对结果会产生巨大的影响,一般取值小点
如何选择:从小的时候选择,不行再小
批处理数量:32,64,128一般都可以,很多时候还得考虑内存和效率