1引言
最近在接触深度学习方面的相关知识,但是在学习的过程中,经常碰到这个词【梯度下降】,一开始我是真的没搞明白,但是有感觉这个东西又挺重要的,所以就查了很多资料,但是对于小白来讲,很少有解释清楚的,自己在阅读了一些文献和代码之后,对梯度下降有了一些新的理解,特此分享出来,希望对于一些同学有帮助,也希望看完之后点个赞,赠人一赞,手留知识。
2 正文
梯度下降算法呢,他的作用就是用来求函数的最小值,以
y
=
x
2
+
1
y= x^2+1
y=x2+1这个函数为例吧,显然我们根据所学的知识一眼就可以看出它在
x
=
0
x=0
x=0处有最小值,但是对于计算机来说,他可不知道啊!想一想,在
x
=
0
x=0
x=0处,有什么特征呢?或者用我们所学知识可以想到,在某一点的导数等于0时,函数在这个点有极值。
对于
y
=
x
2
+
1
y= x^2+1
y=x2+1这个函数而言,导数
d
y
d
x
=
2
x
{dy \over dx }=2x
dxdy=2x我们可以先随意取一个x的值,如
x
0
=
8
x_0=8
x0=8,那么在这个点的导数值为16,如果我们想减小导数值的大小,即让导数趋近于0,我们只能减小x的大小,但是计算机怎么知道x到底减小多少才合适呢?所以就需要一个迭代的过程,这里就是
x
1
=
x
0
−
l
r
∗
2
x
0
x_1=x_0-lr*2x_0
x1=x0−lr∗2x0lr是一个超参数,也就是经常说的学习率,这里就取
l
r
=
0.1
lr=0.1
lr=0.1吧。那么可以得到
x
1
=
0.64
x_1=0.64
x1=0.64,然后再使用公式
x
2
=
x
1
−
l
r
∗
2
x
1
x_2=x_1-lr*2x_1
x2=x1−lr∗2x1得到
x
2
=
0.512
x_2=0.512
x2=0.512,看到这里有没有发现
x
0
,
x
1
,
x
2
x_0,x_1,x_2
x0,x1,x2在依次减小,即向着
x
=
0
x=0
x=0靠近,经过多次循环以后,x就变为一个非常接近于0的数,此时,在该点的函数值即为函数的最小值。
这里要强调一下,虽然lr的大小是自己取的,但是也不能太离谱,取值过大,如 l r = 3 lr=3 lr=3,你将会发现x的值越来越震荡,最终趋于无穷。取值过小,迭代的会非常慢,需要迭代很多次才行,严重影响效率。
上面讲的是一元函数的情况,如果是多元函数呢?那么就对函数的自变量求偏导才行,