引入
当我们得到一个目标函数后,如何进行求解?直接求解?(不一定可解,线性回归可以当做是一个特例)
常规套路:机器学习的套路就是我交给机器一堆数据,然后告诉它什么样的学习方式是对的(目标函数),然后让他朝着这个方向去做。
如何优化:每次优化一点点。
目标函数:
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
0
m
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta_0,\theta_1) = \frac{1}{2m}\sum_{i=0}^m\Big(h_\theta(x^i)-y^i\Big)^2
J(θ0,θ1)=2m1i=0∑m(hθ(xi)−yi)2
θ 0 \theta_0 θ0和 θ 1 \theta_1 θ1一开始的随机初始化,寻找山谷的最低点,也就是我们目标函数的终点,什么样的参数能使得目标函数达到极值点
下山分几步走:
-
找到当前最适合的方向
-
走一小步
-
按照方向与步伐去更新我们的参数
梯度下降的三种常用方式
-
批量梯度下降(GD): J ( θ ) = − 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i J(\theta)=-\frac{1}{m}\sum_{i=1}^m(y^i-h_\theta(x^i))x_j^i J(θ)=−m1∑i=1m(yi−hθ(xi))xji , θ j = θ j + 1 m ∑ i = 1 m ( y i − h θ ( x i ) ) x j i \theta_j = \theta_j+\frac{1}m\sum_{i=1}^{m}(y^i-h_\theta(x^i))x_j^i θj=θj+m1∑i=1m(yi−hθ(xi))xji
容易得到最优解,但是每个由于考虑所有的样本,速度很慢
-
随机梯度下降(SGD): θ j + ( y i − h θ ( x i ) ) x j i \theta_j+(y^i-h_\theta(x^i))x_j^i θj+(yi−hθ(xi))xji
每次找到一个样本,迭代速度快,但不一定每次都朝着收敛的方向
-
小批次梯度下降(minbatch): θ 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}\big(h_\theta(x^k)-y^k)x_j^k θj=θj−α101∑k=ii+9(hθ(xk)−yk)xjk
每次迭代选择一小部分数据来算,比较实用
学习率
-
学习率(步长):对结果产生巨大的影响,一般小一些
-
如何选择:从小的时候,不行再小,基本上以0.01开始
-
批处理数量:32,64,128都可以,一般还得考虑内存和效率
minbatch越小,速度越快,但是精度不高,越大,速度越慢,精度越高。但minbatch等于1的时候,就相当于随机梯度下降
所有的努力都值得期许,每一份梦想都应该灌溉!