文章目录

  • 线性回归
  • 线性回归一般步骤
  • 损失(代价)函数
  • 梯度下降
  • 多变量线性回归
  • 特征缩放(归一化)
  • 随机梯度下降和‘Mini-batch’梯度下降
  • ‘Mini-batch’梯度下降


线性回归

大自然让我们回归到一定的区间范围之内;反过来说就是,有一个平均的水平,可以让突出的事物能向他靠拢

那些高个子的后代的身高,有种回归到大众身高的趋势
                                                --- 高尔顿

线性回归一般步骤

高维数组线性回归内存不足怎么办 线性回归 高阶_随机梯度下降

损失(代价)函数

线性回归实际上要做的事情就是: 选择合适的参数(θ0, θ1),使得hθ(x)方程,很好的拟合训练集

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_02

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_03

高维数组线性回归内存不足怎么办 线性回归 高阶_随机梯度下降_04

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_05

梯度下降

梯度下降是一种非常通用的优化算法,能够为大范围的问题找到最优解。梯度下降的中心思想就是迭代的调整参数从而使损失函数最小化

假设你迷失在山上的浓雾之中,你能感觉到的只有你脚下路面的坡度。快速到达山脚的一个策略就是沿着最陡的方向下坡。这就是梯度下降的做法:通过测量参数向量θ相关的误差函数的局部梯度,并不断沿着降低梯度的方向调整,直到梯度降为0,到达最小值

具体来说,首先使用一个随机的θ值(这被称为随机初始化),然后逐步改良,每次踏出一步,每一步都尝试降低一点损失函数(如MSE),直到算法收敛出一个最小值

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_06

高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_07

梯度下降的方向1:只要对损失函数求导,θ的变化方向永远趋近于损失函数的最小值

高维数组线性回归内存不足怎么办 线性回归 高阶_随机梯度下降_08

梯度下降的方向2: 如果θ已经在最低点,那么梯度将不会发生变化

高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_09

梯度下降的步长1:梯度下降中一个重要参数是每一步的步长,这取决于超参数的学习率

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_10


如果学习率太低,算法需要经过大量迭代才能收敛,这将耗费很长时间

如果学习率太高,那你可能会越过山谷直接到达山的另一边,甚至有可能比之前的起点还高。这会导致算法发散,值越来越大,最后无法找到好的解决方案梯度下降的步长2:梯度下降的步长会逐渐变小

高维数组线性回归内存不足怎么办 线性回归 高阶_随机梯度下降_11


梯度下降的局部最小值问题

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_12


并不是所有的损失函数看起来都像是一个漂亮的碗,有的可能像山洞、山脉、高原或者各种不规则的地形,导致很难收敛到最小值。

比如上边这个图,如果随机初始值从左侧起步,那么会收敛到一个局部最小值,而不是全局最小值;如果算法从右侧起步,那么需要经过很长时间才能越过正整片高原。如果你停下得太早,将永远达不到全局最小值

梯度下降的局部最小值问题

如何应对?

1.对于MSE来说,因为损失函数是个凸函数,所以不存在局部最小值,只有一个全局最小值

  1. 通过随机初始化θ,可以避开局部最小值
  2. 对于多变量,高维度的值,就算在某个维度上陷入和局部最小值,但是还能从别的维度跳出

我们把梯度下降扩展到2维

扩展到2维以后,只要我们知道在每一个维度(分量)上的梯度下降情况,通过向量加和,我们也可以得到梯度在高维上整体的移动情况

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_13


高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_14

“Batch” Gradient Descent 批梯度下降
批梯度下降:指的是每下降一步,使用所有的训练集来计算梯度值

“Stochastic” Gradient Descent 随机梯度下降
随机梯度下降:指的是每下降一步,使用一条训练集来计算梯度值

“Mini-Batch” Gradient Descent “Mini-Batch”梯度下降
“Mini-Batch”梯度下降:指的是每下降一步,使用一部分的训练集来计算梯度值

多变量线性回归

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_15

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_16

高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_17

特征缩放(归一化)

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_18

左图的梯度下降算法直接走向最小值,可以快速到达。而在右图中,先是沿着与全局最小值方向近乎垂直的方向前进,接下来是一段几乎平坦的长长的山谷。最终还是会抵达最小值,但是这需要花费大量的时间

特征缩放是为了确保特征在一个数量级上

比如: x1 = 房屋面积(0-400 m2)

x2 = 卧室数量(1-5)

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_19

高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_20

我们通常可以通过损失函数来确保梯度下降在正常工作

当损失函数上升的时候,证明梯度下降方法没有正常工作,这时候可以使用小一点的学习率α

对于足够小的学习率α而言,损失函数应该每次都下降
但是如果学习率α太小,收敛的速度将会很慢

随机梯度下降和‘Mini-batch’梯度下降

当我们做梯度下降的时候,用到了所有的数据,相当于求和取平均

“Batch” Gradient Descent 批梯度下降
批梯度下降:指的是每下降一步,使用所有的训练集来计算梯度值

“Stochastic” Gradient Descent 随机梯度下降
随机梯度下降:指的是每下降一步,使用一条训练集来计算梯度值

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_21

高维数组线性回归内存不足怎么办 线性回归 高阶_高维数组线性回归内存不足怎么办_22

高维数组线性回归内存不足怎么办 线性回归 高阶_最小值_23

随机梯度下降思想:把m个样本分成m份,每次用1份做梯度下降;也就是说,当有m个样本时,批梯度下降只能做一次梯度下降,但是随机梯度下降可以做m次

‘Mini-batch’梯度下降

如果 mini-batch 大小 = m : 那他就是批梯度下降
如果 mini-batch 大小 = 1 : 那他就是随机梯度下降
如果 mini-batch 1 < 大小 < m :那他就是‘Mini-batch’随机梯度下降

高维数组线性回归内存不足怎么办 线性回归 高阶_梯度下降_24


如何选择:

训练集比较小: 使用批梯度下降(小于2000个)

训练集比较大:使用Mini-bitch梯度下降 一般的Mini-batch size 是64,128,256, 512,1024

Mini-batch size要适用CPU/GPU的内存