梯度下降算法就是以迭代的思想,求解出损失函数的最小值,继而求出模型的参数,他是DeepLearning最核心的算法,下面通过对损失函数是线性函数来求解最小值,继而衍生出非线性函数的求解方法。
线性回归
假设loss=y=x²*sin(x),我们需要求出loss函数的最小值,常规解决方法为求函数y的导出y',y'=0的时候y有可能取到最小值,再判断是否是极小值。
梯度下降算法也很类似,只需要迭代x*=x-Δx即可,x*为目标值,x为当前值,Δx为求导过后的值,迭代很多次过后,梯度Δx趋近于0 那么x*=x-limΔx就不变,在我们的最小值附近来回波动,当迭代次数够了,我们就可以直接输出当前x*。(这一步看不懂的可以看后面的例子再回来理解)
以上我们其实省略了一个learningrate,如x*=x-Δx*lr,这个lr是自己设定,他的大小影响的是每一次迭代的变化量。
假设y=w*x+b,我们还有一系列x以及对应的y值,我们需要求w和b,常规解法只需要找到两组x,y待入求值即可。、
但是现实生活中,是具有噪声的,y=w*x+b+ε,ε∈N(0,1),我们需要通过n组数据找出一对w,b值,尽可能的适用于这n组数据。
因此我们命loss=(w*x+b-y)²,w,b未知,这个函数表示理论值w*x+b与实际值y的差的平方,希望loss的值最小,这就回归到上一个例子了。
总结一下怎么对线性函数进行梯度下降算法:
1.loss=∑i(w*xi+b-yi)²
2.Minimize loss
3.w'*x+b'->y
问题分类
Linear Regression 线性-->y属于正无穷到负无穷
Logistic Regression 逻辑-->y∈(0,1)
Classification 分类 比如识别是猫还是狗
案例
给出100组[x,y]数据,求出在这100组数据上最适合的[w,b]
导入数据,初始化lr,b,w,以及迭代次数
求loss=∑i(w*xi+b-yi)²,即将所有[x,y]带入(w*xi+b-yi)²,求和再求平均值,平均值即代表当前loss,返回loss
求出当前Δw,Δb,为所有Δw,Δb的和的均值,而后根据x*=x-Δx,求出目标w*,b*,并返回
最后迭代
大家可以根据这个例子来熟悉原理。