AI数学基础37-从代码角度深入理解梯度下降法2

在《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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容