第二周:神经网络的编程基础(Basics of Neural Network programming)

1、逻辑回归的代价函数(Logistic Regression Cost Function)

逻辑回归需要注意的两个点是,sigmoid函数log损失函数

deeplearning.ai课程学习(2)-LMLPHP

sigmoid函数的函数表达式为

deeplearning.ai课程学习(2)-LMLPHP

作为线性函数后的非线性转化,使得逻辑回归有别于硬分类的算法,例如SVM。逻辑回归对于分类的输出结果是[0,1]之间的一个值。

逻辑回归使用的损失函数(用于更新梯度)是 log损失函数,具体公式如下

deeplearning.ai课程学习(2)-LMLPHP

y^和y分别代表预测值和真实值。

对于log损失函数的解释,可以如下考虑:

当y=1时损失函数L= -  log(y^),如果想要损失函数 L 尽可能得小,那么 y^ 就要尽可能大,因为sigmoid函数取值[0,1],所以 y^ 会无限接近于1。

当y=0时损失函数L = - log(1-y^),如果想要损失函数 L 尽可能得小,那么 y^ 就要尽可能小,因为sigmoid函数取值[0,1],所以 y^ 会无限接近于0。

2、使用计算图求导数(Derivatives with a Computation Graph)

通过计算图的形式理解前向传播和反向传播。

前向(正向)传播:

假设,我们需要去求解 J(a,b,c)=3(a+b*c),我们将它拆成 几个步骤,则如下图所示

deeplearning.ai课程学习(2)-LMLPHP

1、计算 u = b*c = 3 * 2 = 6

2、计算 v = a + u = 5 + 6 = 11

3、计算 J = 3 * v = 3 * 11 = 33

在这后面再加上,激活函数的转化,误差的计算就是完整的前向传播过程了。

反向传播:

所谓的反向传播,就是假设我们已经进行过了一次前向传播的过程,也就是得到了预测值与实际值之间的误差,

我们想通过这个误差来调整输入的值(a,b,c),使得他们在前向计算得到的预测值能够更加的接近实际值。

deeplearning.ai课程学习(2)-LMLPHP

1、计算 dJ / dv = 3

2、计算 dv / da = 1以及 dv / du = 1

3、计算 du / db = c = 2 , du / dc = b = 3

至此,我们计算了图中所有可见项的导数,那么我们需要计算的 dJ / da,dJ / db,dJ / dc就可以通过链式求导法则得到。

4、dJ / da = (dJ / dv) * (dv / da) = 3 * 1 = 3 ; dJ / db = (dJ / dv) * (dv / du)  * (du / db) = 3 * 1 * 2 = 2;

   dJ / dc = (dJ / dv) * (dv / du)  * (du / dc) = 3 * 1 * 3 = 3。

即如下图的过程。

deeplearning.ai课程学习(2)-LMLPHP

在第二周,吴恩达首先介绍了逻辑回归算法(以及其损失函数),将逻辑回归算法看成一个神经网络,介绍了梯度下降和计算图,利用计算图更直观的介绍了反向传播的原理以及实现。

参考文献:

[1]. 课程视频:Coursera-deeplearning.ai / 网易云课堂

[2]. 深度学习笔记

05-22 19:56