二元分类与 Logistic 回归从属于笔者的Deep Learning Specialization 课程笔记系列文章,本文主要记述了笔者学习 Andrew NG Deep Learning Specialization 系列课程的笔记与代码实现。注意,本篇有大量的数学符号与表达式,部分网页并不支持;能够前往源文件查看较好的排版或者在本身的编辑器中打开。算法
本部分将会介绍神经网格构建与训练的基础知识;通常来讲,网络的计算过程由正向传播(Forward Propagation)与反向传播(Back Propagation)两部分组成。这里咱们将会以简单的 Logistic 回归为例,讲解如何解决常见的二元分类(Binary Classification)问题。这里咱们将会尝试训练出简单的神经网络以自动识别某个图片是否为猫,为猫则输出 1,不然输出 0。计算机中的图片每每表示为红、绿、蓝三个通道的像素值;若是咱们的图像是 64 64 像素值大小,咱们的单张图片的特征维度即为 64 64 * 3 = 12288,便可以使用 $n_x = 12288$ 来表示特征向量的维度。网络
上标 $^{(i)}$ 表示第 $i$ 个训练用例,而上标 $^{[l]}$ 则表示第 $l$ 层。机器学习
在深度学习中,使用结点表明输入、激活函数或者数据,边表明权重或者误差,下图便是两个典型的神经网络:编辑器
在猫咪识别问题中,咱们给定了未知的图片,能够将其表示为 $X in R^{n_x}$ 的特征向量;咱们的任务就是寻找合适的算法,来根据特征向量推导出该图片是猫咪的几率。在上面的介绍中咱们假设了 Logistic 函数的参数为 $w in R^{n_x} $ 以及 $b in R$,则输出的计算公式能够表示为:
$$
hat{y} = sigma(w^Tx + b)
$$
这里的 $sigma$ 表示 Sigmoid 函数,该函数的表达式与线型以下:函数
上图中能够发现,当 $t$ 很是大时,$e^{-t}$ 趋近于 0,总体的函数值趋近于 1;反之,若是 $t$ 很是小的时候,总体的函数值趋近于 0。学习
咱们的训练目标是在给定训练数据 ${(x^{(1)}, y^{(1)}),...,(x^{(m)},y^{(m)})}$ 的状况下使得 $hat{y}^{(i)}$ 尽量接近 $y^{(i)}$,而所谓的损失函数便是用于衡量预测结果与真实值之间的偏差。最简单的损失函数定义方式为平方差损失:
$$
L(hat{y},y) = frac{1}{2} (hat{y} - y)^2
$$
不过 Logistic 回归中咱们并不倾向于使用这样的损失函数,由于其对于梯度降低并不友好,不少状况下会陷入非凸状态而只能获得局部最优解。这里咱们将会使用以下的损失函数:
$$
L(hat{y},y) = -(yloghat{y} + (1-y)log(1-hat{y}))
$$
咱们的优化目标是但愿损失函数值越小越好,这里咱们考虑两个极端状况,当 $y = 1$ 时,损失函数值为 $-loghat{y}$;此时若是 $hat{y} = 1$,则损失函数为 0。反之若是 $hat{y} = 0$,则损失函数值趋近于无穷大。当 $y = 0$ 时,损失函数值为 $-log(1-hat{y})$;若是 $hat{y} = 1$,则损失函数值也变得无穷大。这样咱们能够将 Logistic 回归中总的代价函数定义为:
$$
J(w,b) =
frac{1}{m}sum_{i=1}^mL(hat{y}^{(i)} - y^{(i)}) =
-frac{1}{m} sum_{i=1}^m [y^{(i)}loghat{y}^{(i)} + (1-y^{(i)})log(1-hat{y}^{(i)})]
$$
在深度学习的模型训练中咱们经常会接触到损失函数(Loss Function)与代价函数(Cost Function)的概念,其中损失函数代指单个训练用例的错误程度,而代价函数每每是整个训练集中全部训练用例的损失函数值的平均。优化