1.梯度下降法介绍
1.1梯度
梯度是指一个多元函数,对每一个参数求偏导,所得到的向量就是梯度。 eg:
上述相当于标量函数对向量变量进行求导,所得到得即时梯度,而多是高维函数对高位变量进行求导,得到的则是雅可比矩阵。
1.2梯度下降法
梯度下降法,简单来说,就是以一定的学习率$a$,或者说是步长,从当前位置,向梯度方向
下降。
从数学公式上来看:
,即进行了一次梯度下降。
其中学习率为
,这个参数是十分重要的,若
太小,则迭代次数很多,下降缓慢,若
过大,则无法达到最低点。
此种方法用于获得模型的参数。
建模的步骤一般如下:
- 获取观测数据(即我们手中现有的数据)
- 确定模型与参数
- 对参数进行估计(下面梯度下降法开始发挥它的用处)
- 确定损失函数
- 通过损失函数对参数进行求导,得到梯度,并进行梯度下降。一定注意,是通过对损失函数进行梯度下降,来得到参数值!
比如我们用到的损失函数为:
。
里面的参数为
,因此应对
进行求导,其中
为标量,因此求导得到的是梯度,这就涉及到了矩阵求导术,移步知乎大神
https://
zhuanlan.zhihu.com/p/24
709748
此文章从标量求导引向矩阵求导,不仅介绍了如何求导,还介绍了很多数学思想,如数学追求整体性,相似性,定义不方便计算我们要创造公式定理,等等。
矩阵求导的本质其实是逐项求导。
或者直接看矩阵求导的公式:https://blog.csdn.net/WPR1991/article/details/82929843
对
进行求导,主要用到两个公式,一个是矩阵求导链式法则,一个是矩阵求导中的对转置相乘进行求导,这类似与标量的平方求导。
得到:
或者
2.python手写实现
不管用什么语言实现,其本质都是通过矩阵运算实现的算法。下面算法的前置知识为:矩阵内积,上述梯度,numpy(实现矩阵运算)。
2.1实例描述
首先我们通过代码实现一个线性回归模型。然后通过梯度下降法对此模型进行拟合。
2.2代码实现
import
运行结果:
#第二步
可以看到,学习率越大,学习速度越快。
3. Tensorflow实现
import
# 生成1维的W矩阵,取值是[-1,1]之间的随机数