人工智能AI数学基础

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)

上一篇 下一篇

猜你喜欢

热点阅读