深度学习笔记_Week1

发布时间 2024-01-03 20:20:06作者: Exungsh?

本笔记基于吴恩达深度学习deeplearning.ai课程

第二周:神经网络的编程基础

神经网络的训练过程可以分为前向传播和反向传播两个独立的部分

2.1 二分类(Binary Classification)

所谓二分类问题,可以参照以下例子

假如你有一张图片作为输入,比如这只猫,如果识别这张图 片为猫,则输出标签 1 作为结果;如果识别出不是猫,那么输出标签 0 作为结果。

在二分类问题中,目标就是习得一个分类器,它以图片的特征向量作为输入,然后预测输出结果 ? 为 1 还是 0

? = [? (1) , ? (2) , . . . , ? (?) ]:表示所有的训练数据集的输入值,放在一个 ?? × ?的矩阵中, 其中?表示样本数目

? = [? (1) , ? (2) , . . . , ? (?) ]:对应表示所有训练数据集的输出值,维度为1 × ?。

用一对(?, ?)来表示一个单独的样本,?代表??维的特征向量,? 表示标签(输出结果)只能为 0 或 1。 而训练集将由?个训练样本组成,其中(? (1) , ? (1) )表示第一个样本的输入和输 出,(? (2) , ? (2) )表示第二个样本的输入和输出,直到最后一个样本(? (?) , ? (?) ),然后所有的这些一起表示整个训练集。

总的来说,?是一个规模为??乘以?的矩阵,?是一个规模为 1 乘以?的矩阵。

2.2 逻辑回归(Logistic Regression)

逻辑回归通过计算 y^ 来实现对实际值 y 的估计,一件可以尝试却不可行的事是让?^ = ??? + ? ,因为我们希望的 y^ 值域为0到1,故要使用sigmoid函数。

\[?(?) = 1/{1 + e^{-z}} \]

sigmoid函数很好地将所有的z值映射到 0 到 1 之间。

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

为什么需要代价函数:

为了训练逻辑回归模型的参数参数?和参数?我们,需要一个代价函数,通过训练代价函数来得到参数?和参数?。

损失函数:

损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function:?(?^ , ?). 我们通过这个?称为的损失函数,来衡量预测输出值和实际值有多接近。一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,因为梯度下降法很可能找不到全局最优值,在逻辑回归模型中会定义另外一个损失函数。 我们在逻辑回归中用到的损失函数是:?(?^ , ?) = −?log(?^) − (1 − ?)log(1 − ?^)

image

代价函数:

算法的代价函数是对?个样本的损失函数求和然后除以m:

image

损失函数只适用于单个训练样本,而代价函数是参数的总代价,所以在训练逻辑回归模型时候,我们需要找到合适的?和?,来让代价函数 ? 的总代价降到最低。

2.4 梯度下降法(Gradient Descent)

即以求导数的方法不断地逼近全局最优解,即代价函数 ? 这个凸函数的最小值点

对于w和b,使用所有样本不断进行以下迭代:

其中 α 为学习率,用于控制步长(一次迭代移动的距离)

image

2.5 导数(Derivatives)

2.6 更多的导数例子(More Derivative Examples)

2.7 计算图(Computation Graph)

一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。

以下为课上计算图的例子:

image

所谓前向传播即从左到右进行计算,由abc到 ? 的过程,而得到 ? 后从右向左计算得到 ? 对各个变量的偏导数的过程即为反向传播。

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

计算的最终目标是 ? 对 a、b、c 的偏导数(因为我们的目的是通过偏导数进行梯度下降),可以通过高数的链式求导法则进行轻松计算,由于中间过程量以及最终结果在前向传播中已经计算得出,因此可以反向通过微分的方式逐一求出偏导数,直至最左边,此即反向传播。

image

2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

简单推导一下w和b的偏导数

image

对于每个样本,要做的几件事是:

  1. 计算dz
  2. 根据dz计算dw、db
  3. 梯度下降,得到新的w和b的值