目录
一、求数值解的方法-梯度下降法
找到极值点的速度:步长的大小决定,但是也不是越大越好
步长太小,迭代次数多,收敛慢
步长太大,引起震荡,可能无法收敛
所以这个步长的取值是否可以自动调节呢?
如上图所示,斜率与步长是呈正比例的关系的。
而斜率是可以通过某点的求导获得,然后进行迭代。
但是疑问来了,为什么迭代公式仅仅使用减号,而没有加号呢?其实我们分析发现:
在 x>0 的时候,函数的导数值是是大于零的,也就是曲线是上升趋势,因此减去导数值是朝着极值(较小的值)方向;(不用再计算两个值比较大小了)
在 x<0 的时候,是相反的道理。
二、实现梯度下降法
1、梯度下降法求解一元线性回归问题:
一元线性回归,转换成二元平方损失函数求极值的问题;二元函数使用偏导,求得各个变量的值,使得Loss损失函数最小;从而确定了函数参数。
2.当然,我们还有均方差损失函数:
注意,我们还有一个参数:学习率 ;我们知道只要学习率够小,可以保证一定收敛。但过小则运算缓慢,过大则出现震荡。通常学习率 属于超参数,即学习之前已经设置,不是通过训练得到的。
三、一元线性回归Numpy实现
四、可训练变量
tf.Variable()
trainalbe属性
五、自动求导机制-GradientTape
如果想重复使用tape,加上True,运行完后使用del释放:
多元函数求偏导数:
可以嵌套使用,进行二阶求导: