1.1 二分类(Binary Classification)
逻辑回归是一个用于二分类(binary classification)的算法。首先我们从一个问题开始说起,这里有一个二分类问题的例子,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用字母 y y y来表示输出的结果标签,如下图所示:
我们来看看一张图片在计算机中是如何表示的,为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为5x4 而不是64x64,如下图所示:
为了把这些像素值放到一个特征向量中,我们需要把这些像素值提取出来,然后放入一个特征向量 x x x。为了把这些像素值转换为特征向量 x x x,我们需要像下面这样定义一个特征向量 x x x 来表示这张图片,我们把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等等,直到得到一个特征向量,把图片中所有的红、绿、蓝像素值都列出来。如果图片的大小为64x64像素,那么向量 x x x 的总维度,将是64乘以64乘以3,这是三个像素矩阵中像素的总量。在这个例子中结果为12,288。现在我们用 n x = 12 , 288 n_x = 12,288 nx=12,288,来表示输入特征向量的维度,有时候为了简洁,我会直接用小写的 n n n来表示输入特征向量 x x x的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量作为输入,然后预测输出结果 y y y为1还是0,也就是预测图片中是否有猫,这就是二分类问题:
2.2 逻辑回归(Logistic Regression)
对于二元分类问题来讲,给定一个输入特征向量 X X X,它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,你想要一个算法能够输出预测,你只能称之为 y ^ \hat{y} y^,也就是你对实际值 y y y 的估计。更正式地来说,你想让 y ^ \hat{y} y^ 表示 y y y 等于1的一种可能性或者是机会,前提条件是给定了输入特征 X X X。换句话来说,如果 X X X是我们在上面看到的图片,你想让 y ^ \hat{y} y^ 来告诉你这是一只猫的图片的机率有多大。在上面文章所说的, X X X是一个 n x n_x nx维的向量(相当于有 n x n_x nx个特征的特征向量)。我们用 w w w来表示逻辑回归的参数,这也是一个 n x n_x nx维向量(因为 w w w实际上是特征权重,维度与特征向量相同),参数里面还有 b b b,这是一个实数(表示偏差)。所以给出输入 x x x以及参数 w w w和 b b b之后,我们怎样产生输出预测值 y ^ \hat{y} y^,一件你可以尝试却不可行的事是让 y ^ = w T x + b \hat{y}={{w}^{T}}x+b y^=wTx+b。
这时候我们得到的是一个关于输入 x x x的线性函数,实际上这是你在做线性回归时所用到的,但是这对于二元分类问题来讲不是一个非常好的算法,因为你想让 y ^ \hat{y} y^表示实际值 y y y等于1的机率的话, y ^ \hat{y} y^ 应该在0到1之间。这是一个需要解决的问题,因为 w T x + b {{w}^{T}}x+b wTx+b可能比1要大得多,或者甚至为一个负值。对于你想要的在0和1之间的概率来说它是没有意义的,因此在逻辑回归中,我们的输出应该是 y ^ \hat{y} y^等于由上面得到的线性函数式子作为自变量的sigmoid函数中,公式如上图最下面所示,将线性函数转换为非线性函数。(这也就是为什么要选用逻辑回归训练模型的原因——问题是做一个非线性的)
下图是sigmoid函数的图像,如果我把水平轴作为 z z z轴,那么关于 z z z的sigmoid函数是这样的,它是平滑地从0走向1,让我在这里标记纵轴,这是0,曲线与纵轴相交的截距是0.5,这就是关于 z z z的sigmoid函数的图像。我们通常都使用 z z z来表示 w T x + b {{w}^{T}}x+b wTx+b的值。
关于sigmoid函数的公式是这样的,
σ
(
z
)
=
1
1
+
e
−
z
\sigma \left( z \right)=\frac{1}{1+{{e}^{-z}}}
σ(z)=1+e−z1,在这里
z
z
z是一个实数,这里要说明一些要注意的事情,如果
z
z
z非常大那么
e
−
z
{{e}^{-z}}
e−z将会接近于0,关于
z
z
z的sigmoid函数将会近似等于1除以1加上某个非常接近于0的项,因为
e
e
e 的指数如果是个绝对值很大的负数的话,这项将会接近于0,所以如果
z
z
z很大的话那么关于
z
z
z的sigmoid函数会非常接近1。相反地,如果
z
z
z非常小或者说是一个绝对值很大的负数,那么关于
e
−
z
{{e}^{-z}}
e−z这项会变成一个很大的数,你可以认为这是1除以1加上一个非常非常大的数,所以这个就接近于0。实际上你看到当
z
z
z变成一个绝对值很大的负数,关于
z
z
z的sigmoid函数就会非常接近于0,因此当你实现逻辑回归时,你的工作就是去让机器学习参数
w
w
w以及
b
b
b这样才使得
y
^
\hat{y}
y^成为对
y
=
1
y=1
y=1这一情况的概率的一个很好的估计。
在符号上要注意的一点是当我们对神经网络进行编程时经常会让参数
w
w
w和参数
b
b
b分开,在这里参数
b
b
b对应的是一种偏置,是一个常数。