二、神经网络的编程基础(Basics of Neural Network programming)
2.1 二分类(Binary Classification)
2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
2.6 更多的导数例子(More Derivative Examples)
2.8 使用计算图求导数(Derivatives with a Computation Graph)
2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
2.10 m 个样本的梯度下降(Gradient Descent on m Examples)
2.12 向量化的更多例子(More Examples of Vectorization)
2.13 向量化逻辑回归(Vectorizing Logistic Regression)
2.14 向量化 logistic 回归的梯度输出(Vectorizing Logistic Regression's Gradient)
2.15 Python 中的广播(Broadcasting in Python)
2.16 关于 python _ numpy 向量的说明(A note on python or numpy vectors)参考视频:
2.17 Jupyter/iPython Notebooks快速入门(Quick tour of Jupyter/iPython Notebooks)
2.18 (选修)logistic 损失函数的解释(Explanation of logistic regression cost function)
2.1 二分类(Binary Classification)
在神经网络的计算中,通常先有一个叫做前向暂停(forward pause)或叫做前向传播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播(backward propagation)的步骤。所以这周我也会向你介绍为什么神经网络的训练过程可以分为前向传播和反向传播两个独立的部分。
在课程中我将使用逻辑回归(logistic regression)来传达这些想法,以使大家能够更加容易地理解这些概念。 逻辑回归是一个用于二分类(binary classification)的算法。
假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用字母 y来表示输出的结果标签,如下图所示:
在计算机中为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为5x4 而不是64x64,如下图所示:
为了把这些像素值放到一个特征向量中,我们需要把这些像素值提取出来,然后放入一个特征向量。为了把这些像素值转换为特征向量 x, 我们需要像下面这样定义一个特征向量x 来表示这张图片,我们把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等等,直到得到一个特征向量,把图片中所有的红、绿、蓝像素值都列出来。如果图片的大小为64x64像素,那么向量 x的总维度,将是64乘以64乘以3,这是三个像素矩阵中像素的总量。在这个例子中结果为12,288。现在我们用n_x=12288,来表示输入特征向量的维度,有时候为了简洁,我会直接用小写的n来表示输入特征向量x的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量作为输入,然后预测输出结果y为1还是0,也就是预测图片中是否有猫:
2.2 逻辑回归(Logistic Regression)
本节将主要介绍逻辑回归的Hypothesis Function(假设函数)
对于二元分类问题来讲,给定一个输入特征向量X, 它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,你想要一个算法能够输出预测,你只能称之为y_, 也就是你对实际值 y的估计。更正式地来说,你想让 y_表示 y等于1的一种可能性或者是机会,前提条件是给定了输入特征。换句话来说,如果X是我们在上个视频看到的图片, 你想让 y_来告诉你这是一只猫的图片的机率有多大。X是一个n_x维的向量(相当于有n_x个特征的特征向量)。我们用w来表示逻辑回归的参数,这也是一个n_x维向量(因为实际上是特征权重,维度与特征向量相同),参数里面还有b, 这是一个实数(表示偏差)。所以给出输入x以及参数w和b之后,我们怎样产生输出预测值y_. 一件你可以尝试却不可行的事是让:
2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
为了训练逻辑回归模型的参数w和参数b我们,需要一个代价函数,通过训练代价函数来得到参数w和参数b。先看一下逻辑回归的输出函数:
为了让模型通过学习调整参数w,你需要给予一个样本的训练集,这会让你在训练集上找到参数w和参数b,来得到你的输出。
损失函数:
损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function:
这个L称为的损失函数,来衡量预测输出值和实际值有多接近。一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,因为当我们在学习逻辑回归参数的时候,会发现我们的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是我们在逻辑回归模型中会定义另外一个损失函数。
我们在逻辑回归中用到的损失函数是:
为什么要用这个函数作为逻辑损失函数?当我们使用平方误差作为损失函数的时候,你会想要让这个误差尽可能地小,对于这个逻辑回归损失函数,我们也想让它尽可能地小,为了更好地理解这个损失函数怎么起作用,我们举两个例子:
2.4 梯度下降法(Gradient Descent)
梯度下降法可以做什么?
在你测试集上,通过最小化代价函数(成本函数J(w,b)来训练的参数w和b,
梯度下降法的形象化说明
如图,代价函数(成本函数)是一个凸函数(convex function),像一个大碗一样。
可以用如图那个小红点来初始化参数w和b,也可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该达到同一点或大致相同的点。
我们以如图的小红点的坐标来初始化参数w和b。
2. 朝最陡的下坡方向走一步,不断地迭代
我们朝最陡的下坡方向走一步,如图,走到了如图中第二个小红点处。
我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如图,经过两次迭代走到第三个小红点处。
3.直到走到全局最优解或者接近全局最优解的地方
通过以上的三个步骤我们可以找到全局最优解,也就是代价函数(成本函数)J(w,b) 这个凸函数的最小值点。
梯度下降法的细节化说明(仅有一个参数)
假定代价函数(成本函数)J(w) 只有一个参数w,即用一维曲线代替多维曲线,这样可以更好画出图像。
整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。
整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。
梯度下降法的细节化说明(两个参数)
逻辑回归的代价函数(成本函数)J(w,b) 是含有两个参数的。
2.5 导数(Derivatives)
为了高效应用神经网络和深度学习,你并不需要非常深入理解微积分。
2.6 更多的导数例子(More Derivative Examples)
在这个例子中,函数在不同点处的斜率是不一样的,先来举个例子:
为了总结这堂课所学的知识,我们再来看看几个例子:
2.7 计算图(Computation Graph)
一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。计算图解释了为什么我们用这种方式组织这些计算过程。 我们将举一个例子说明计算图是什么。让我们举一个比逻辑回归更加简单的,或者说不那么正式的神经网络的例子。
2.8 使用计算图求导数(Derivatives with a Computation Graph)
看看你如何利用它计算出函数的导数。
这是一个流程图:
2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
本节我们讨论怎样通过计算偏导数来实现逻辑回归的梯度下降算法。它的关键点是几个重要公式,其作用是用来实现逻辑回归中梯度下降算法。但是在本节中,我将使用计算图对梯度下降算法进行计算。我必须要承认的是,使用计算图来计算逻辑回归的梯度下降算法有点大材小用了。但是,我认为以这个例子作为开始来讲解,可以使你更好的理解背后的思想。从而在讨论神经网络时,你可以更深刻而全面地理解神经网络。接下来让我们开始学习逻辑回归的梯度下降算法。
现在你已经知道了怎样计算导数,并且实现针对单个训练样本的逻辑回归的梯度下降算法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有m个训练样本的整个训练集。因此在下一节中,我们将这些思想应用到整个训练样本集中,而不仅仅只是单个样本上。