拟合数据的算法的原理:要拟合的数据直接找一条线,该线要符合→各点到该线的距离最小
那么如何获取最优解:
假设这里有数值E
E = (预测值-实际值)的平方
一般E被称为残差,残差越小拟合度越好
为了更好地对E进行计算(这里是求导)以便找到最优解,我们引入一个概念,链式法则,
是微积分中的求导法则,用于复合函数求导。复合函数的导数将为构成复合这有限个函数在相应点的导数的乘积,称链式法则。
为方便理解,直接联想高中学的复合函数求导即可
然后,
导数→变化率→变化率越小→E的数值越小,拟合度越好→E的导数为0的时候→误差最小的点→最优解
那么就产生了新的问题,要怎么控制计算E的X的区间呢(联想高中的最小二乘法的计算方式)
于是我们要引入一个新的概念,学习率
学习率是一个超参数,控制着我们根据损失梯度调整的网络权重。值越低,我们沿着向下的斜率走得越慢即值越低计算的间距/区间越小
学习率如何影响算法的计算:
new-weight = old-weight 减 (learning-ate * gradient)
为了提高计算的效率,我们就需要对学习率进行设计,当他离最优解的区间太远的时候适当提高,离最优解的距离比较近的时侯再减小即可
那么要怎么实现呢,
求导→变化率→在变化率上做文章即可
由此,得出以下公式
step-size = slope* learning-rate
问题来了,里面的斜率(slope)是怎么知道的呢
由此,我们要引入一个概念SSR(Sum of Squares due to Regression/回归平方和)
计算公式:
进一步推广,当y1,y2带进去并加起来的时候,自然就构成有梯度的斜率
那么梯度是如何下降的呢
step-size for calculating slope = slopelearning-rate
step-size for calculating intercept = interceptlearning-rate
new-intercept = old-intercept 减 step-size
推广
new-slope= old-slope 减 step-size
那么问题又来了
这么干,什么时候是个头呢
这个时候就要我们主动定义了,小于某个值,比如0.00001的时候我们认为这个误差足够小了
然后问题又出来了
如果怎么算都无法小于这个值呢
只要定义step大于某个值即可,比如当训练了2000次,这个还是没法降到那个值,那我们就认为它已经到了极限,停止训练模型