AI数学基础37-从代码角度深入理解梯度下降法2
2018-07-06 本文已影响35人
LabVIEW_Python
在《AI数学基础36-从代码角度深入理解梯度下降法1》我们得到了训练数据,即101个(x,y)。回顾一下监督式机器学习基本思路:有一组样本x,并有对应的标签y,通过最小化代价函数(cost function),训练出参数w和b(针对本文简化的情况)。
第一步,为参数赋一个初始值init_w, init_b;
init_w = 0
init_b = 0
第二步,计算当前参数(w,b)代价函数(cost function)。代价函数是每个样本(sample)的误差(error)的平均值
cost function顺便说一下,在机器学习中,代价函数习惯上用字母J,而不是C来表示,原因是,J代表Jacobian matrix,隐含后面要对该函数做一阶偏导的意思。
代价函数Python代码实现如下图所示:
第三步,计算代价函数对(w,b)的一阶偏导数,即梯度,并根据梯度更新w,b的值,公式推导如下:
对于新的w,b值,由下面的公式算出:
其中α是学习率(learning rate)
代码实现如下图所示:
每一步计算梯度,并更新w,b值第四步,不断重复第三步,直到找到代价函数值最小,或者达到指定的训练步数
实现代码,如下图所示:
以上四步,就是梯度下降法典型的实现。
我们写一个函数,来测试一下:
到此,使用梯度下降法,训练(w,b)参数,成功。
梯度下降法 vs 反向传输法
梯度下降法是应用非常广的数学优化方法(mathematical optimization method), 当它应用于神经网络(Neural Network)时,又被称为反向传输法(Back Propagation) ,是神经网络算法中应用的最广的优化策略(the most popular optimization strategy)