Basics of Neural Network programming-part1
1.二分类-Binary Classification
假如你有一张图片作为输入,比如一只猫,如果识别这张图片为猫,则输出1作为结果,否则输出0。抽象为输入x = 一张图片,输出y = 1 / 0,这就是二分类问题。
首先,我们来讨论一下一张图片是如何输入的。
类似于数学中微分后积分的思想,我们求曲线围成面积时可以将其看作无数个小矩形组成,那我们就可以用无数个连续的矩形近似为这块区域(若左图所示)。同理,我们可以将一张图片看作是无数块小色块拼接在一起(如右图)。如果以矩形作为划分的话,近似如下(为了图片美观,细分粒度较大)
我们可以将一张图片视作一个矩阵,而矩阵中的每一个元素就是一个色块,而每个色块我们可以用一个RBG值来表示(R代表red,B代表blue,G代表green,即通过三基色来混和得到该色块的颜色),每个元素的值具体化(R, B, G),此处我们也可以抽象为三个矩阵如下
也就是说,如果图片大小为64×64像素,那么输入变量x的维度就是64×64×3(12,288)。现在我们用n_x = 12,288,来表述输入特征向量的维度,为了简洁也会直接写为n。通常,我们会将输入的x,也就是这三个矩阵按照行依次纵向排列,输入的x转化为x = [255, 231, … …, 255, 134, … …]T。
符号定义
在此,我们规范说明一下接下来需要用到的一些符号。
-
x:表示一个nx维输入数据,维度为(nx, 1)
-
y:表示输出结果,取值为(0, 1)
-
(x(i), y(i))表示第i组数据,此处默认为训练数据
-
X = [x(1), x(2), …, x(m)]表示所有的训练数据集的输入值,放在一个nx×m的矩阵中,其中m表示样本数量
-
Y = [y(1), y(2), …, y(m)]对应所有训练数据集的输出值,维度为1×m
用一对(x, y)来表示一个单独的样本,x代表nx维的特征向量,y表示标签(输出结果)只能为0或1。训练集由m个训练样本组成,其中(x(i),y(i))表示训练集中第i个样本的输入和输出。有时为了强调这是训练样本的个数,会写作Mtrain,而用Mtest表示测试机的样本数。
最后为了能把训练集表示得更紧凑一点,我们会定义一个矩阵X,由输入向量x(1)、x(2)等组成,如左图放置在矩阵之中,第i列就代表第i个训练数据的输入。这个矩阵有m列,m也正是训练集的样本数量,矩阵高度记作nx。
有时候,会因为其他原因,矩阵X由训练样本按行堆叠起来而不是列,如右图所示。但在实现神经网络的时候,使用左图中形式,会让整个过程更加简单。
综上所述,就是如何将训练样本(输入向量X的集合)表示为一个矩阵的方法。
那么输出标签y呢?同样的道理,为了能更加容易实现一个神经网络,我们将标签y放在列中将会使得后续计算更加方便,定义Y = [y(1), y(2), …, y(m)]。
下一节,我们将重点介绍逻辑回归。