二元分类 (Binary Classification)
这周我们将学习神经网络的基础知识,当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含 个样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集,所以在这周的课程中你将学会如何处理训练集。
另外在神经网络的计算中,通常先有一个叫做前向暂停(forward pause)或叫做前向传播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播(backward propagation)的步骤。所以这周我也会向你介绍为什么神经网络的训练过程可以分为前向传播和反向传播两个独立的部分。
在材料中我将使用逻辑回归(logistic regression)来传达这些想法,以使大家能够更加容易地理解这些概念。
逻辑回归是一个用于二元分类(binary classification)算法。举个二分类问题的例子,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用符号 来表示输出的结果标签,如下图所示:
为了在计算机中保存一张彩色图像,计算机要存储3个独立的矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,所以如果你的图片大小为64x64像素,那么你就会有3个64x64的矩阵去分别代表图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为5x4 而不是64x64,如下图所示:
为了用向量表示这些像素矩阵,我们将这些矩阵的像素值展开为一个向量 作为算法的输入,为了把这些像素值展开成一个向量,我们需要按照如下方法:定义一个与该图像相对应的向量,我们直接将255、231、...这些像素值取出,放入 中,直到红色通道的像素值全部放入到了中,接着就是255、134、...等代表绿色的像素值,最后是蓝色通道的像素值。最终我们会得到一个非常长的向量,这个向量中列出了红、绿、蓝三个通道的像素值。如果图片的大小为64x64像素,那么向量 的维度就是将是64乘以64乘以3,即这是三个像素矩阵中像素的总量。并且我们用 来表示输入特征向量的维度。有时候为了简洁,我会直接用小写 来表示。
所以在二分类问题中,我们的目标就是学习这样的一个分类器,即我们输入一副以特征向量表示的图像,然后预测对应的输出是0还是1,即这幅图是不是猫。
接下来我们说明一些在余下课程中,需要用到的一些符号。
符号定义 :
用一对 来表示一个单独的样本,其中是维的特征向量, 是标签,取值为0 或1。而训练集包含个训练样本,所以训练集将被写为,即表示第一个样本的输入和输出。同理 表示第二个样本的输入和输出,直到最后一个样本 。有时候为了强调这是训练样本的个数,会写作 , 当是测试集的时候,我有时会用 来表测试集样本总数。
最后为了能把训练集表示得更紧凑一点,我们将定义一个矩阵,用大写的 表示。的定义:将训练集中的输入 ...按列排列到矩阵中,即把放第一列,放第二列这样。所以这个矩阵有列,其中即为训练样本的总数,同时矩阵有行。请注意,在一些其他的课程中,可能是把训练样本的输入按行排列(相当于上例矩阵进行转置操作)。但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单:
现在来简单概况一下: 是一个规模为乘以的矩阵,当你用Python实现的时候,你会看到X.shape
,这是一条Python命令,用于显示矩阵的规模,即X.shape
结果为
X.shape
=
,
以上就是如何将训练样本输入 表示为一个矩阵 。
那如何组织输出标签 ?同样的道理,为了能更加容易地实现一个神经网络,同样将 按列排列。所以我们定义大写的 等于 ,所以 是一个规模为1乘以 的矩阵。同样地使用Python命令将表示为Y.shape =
。
当你在后面的课程中实现神经网络的时候,你会发现,一个好的符号约定能够将不同训练样本的数据很好地组织起来。好了,我们接着到下一个视频,在下个视频中,我们将以逻辑回归作为开始。