人工智能教程 - 1.2.6 如何计算逻辑回归的偏导数

朋友们,如需转载请标明出处:http://blog.csdn.net/jiangjunshow

总目录(新手请点击总目录从序言看起,否则你可能看不懂本篇文章)

本篇文章我将结合计算图来为大家讲解如何计算逻辑回归的偏导数。

首先让我们来回顾一下有关逻辑回归的知识。如下图所示,在逻辑回归的前向传播过程中,第一步我们要先计算出z,第二步计算出预测值y’或a,最后计算出损失函数L。他们的计算公式之前已经讲过,这里就不再啰嗦了。(下图中假设只有两个特征x1和x2)
这里写图片描述
上面是前向传播,那么反向传播应该如何计算呢?
我们最终的目的是要计算出dL/dw1和dL/dw2以及dL/db,然后更新w1、w2、b以使损失函数L越来越小,使预测越来越精准。为了计算出dw1、dw2和db,第一步需要计算出da(dL/da)。da的计算公式是-(y/a)+(1-y)/(1-a),这个公式是根据微积分知识求导出来的,如果你熟悉微积分你可以自己对L进行关于a的求导运算最终会得到上面的公式;如果你不熟悉微积分没有关系,只要记住上面那个公式就行了。本系列教程中会提供所有相关的公式,从某些角度上来说,重点不在于那些公式,重点在于对人工智能机制和理论的理解以及如何利用人工智能技术解决实际问题。下一步我们需要求出dz,根据链式法则dz可以通过(dL/da)*(da/dz)求出,(dL/da)上面我们已经求出来了,(da/dz)的计算公式是a(1-a),经过计算后dz=a-y。同理,我们可以计算出dw1=x1*dz,dw2=x2*dz,db=dz。如下所示:
这里写图片描述
得到dw1、dw2、db后,就可以更新这些参数值进行梯度下降,例如w1hat=w1-a*dw1,然后用新的参数值再次进行前向传播然后再反向传播,
通过这样不停的前向反向传播来训练参数。

上面讲述的是单个训练样本时如何计算逻辑回归的偏导数(训练样本—例如在训练识别猫的神经网络中,一张猫的图片就是一个训练样本),下面我给大家介绍多个训练样本时如何计算偏导数。

通过对前面文章的学习我们已经知道——成本其实就是多个样本的损失的平均值——m个样本的损失累加起来然后除以m就是成本。同理,多个样本时的偏导数等于每个样本的偏导数的平均值。

下图给出m个样本时计算偏导数的伪码。先将各个变量初始化为0,然后用一个for循环遍历m个样本,在for循环中将每个样本的损失和偏导数进行累加,出了for循环后,再将累加值除以m得到平均值。
这里写图片描述
利用上面的计算过程我们实现了逻辑回归的前向传播、反向传播,对参数进行梯度下降,一步一步的更新参数,使预测越来越精准。但在实际应用中,上面的过程是有瑕疵的。上面过程包含了两个循环,一个循环用于遍历每个样本(上面有m个样本),另一个循环用于遍历每一个特征(上面只有两个特征),实际应用中用于训练的数据集是非常非常大的,这两个循环的存在会导致训练非常非常的慢,前面的文章我们讲到过训练速度对于深度学习是非常非常重要的。
为了去掉上面两个循环,我们使用了一种叫做向量化的技术,他大大的提升了训练速度。下篇文章我将为大家介绍它。

由于我要去做近视手术了,所以可能一个月内不能用电脑,写不了文章了,希望大家耐心等待。学习人工智能不是一朝一夕的事!

也快过年了,在这里提前祝各位朋友新年快乐!万事如意!

新的文章将改为在公众号上发布,请大家加我的微信,之后会用微信向大家公布测试题答案和一些通知,以及统一回答大家遇到的常见问题,有项目也可以招集大家一起做。加我时请注明“人工智能”。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jiangjunshow/article/details/79256005