Deep Learning Note: 1-1 逻辑回归和梯度下降

  Deep Learning Note 系列是我学习 deepLearning.ai 所开设深度学习课程的笔记,包含关键概念、模型和部分推导,方便随时查阅。假设读者已初步了解机器学习基础知识,并具有相应的数学基础。

0. 符号说明

  本文及后续内容使用符号定义如下:

  使用 $(x, y)$ 表示单个样本,其中 $x \in \mathbb{R}^{n_x}$,即一个 $n_x$ 维的特征向量(Feature Vector);$y \in \{ 0, 1 \}$,为标签(Label)。

  使用 $m$ 表示样本数量,在样本上使用圆括号和数字的角标表示该样本在样本集中的序号,整个样本集合为 $\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), …, (x^{(m)}, y^{(m)})\}$。使用 $m_{train}$ 表示训练集(Training Set)中样本的个数,使用 $m_{test}$ 表示测试集(Test Set)中样本的个数。

  定义 $X = [x^{(1)} x^{(2)} … x^{(m)} ]$,即各个样本的特征向量水平叠加后的结果,故有 $X \in \mathbb{R}^{n_x \times m}$,即 $X$ 是一个 $n_x \times m$ 的实数矩阵。

  定义 $Y = [y^{(1)} y^{(2)} … y^{(m)} ]$,即各个样本的标签水平叠加后的结果,故有 $Y \in \mathbb{R}^{1 \times m}$,即 $Y$ 是一个 $1 \times m$ 的实数矩阵。

1. 二分类

  对于二分类(Binary Classification)问题,我们的目标是习得一个分类器,使它对于给定样本的特征向量 $x$,可以预测该样本的标签 $y$,$y$ 的取值只有两种,分别对应真和假两种情况,如取值 0 或 1。

2. 逻辑回归

  逻辑回归(Logistic Regression)是一种监督学习算法,算法输出的标签只可能是 $0$ 或者 $1$,适用于二分类问题。

  对于给定输入特征矢量 $x$,$x \in \mathbb{R}^{n_x}$,我们希望得到其标签 $y$ 的估计 $ \hat{y}$,即在给定输入 $x$ 的条件下 $y$ 为 $1$ 的概率:

\begin{equation}
\hat{y} = P(y = 1|x) \tag{1}
\end{equation}

  逻辑归回的参数有:

\begin{equation}
w \in \mathbb{R}^{n_x} \\
b \in \mathbb{R}
\end{equation}

其中 $w$ 为权重(Weight),是一个 $n_x \times 1$ 的向量;$b$ 为偏置(Bias),或称为截距(Intercept Term),是一个实数。

  由此,逻辑归回的模型可以表述为:

\begin{equation}
\hat{y} = \sigma(w^{T}x + b) \tag{2}
\end{equation}

  这里的 $w^{T}x + b$ 只是一个线性模型:$w^{T}$ 为 $w$ 的转置,是一个 $1 \times n_x$ 的向量,它与 $n_x \times 1$ 的向量 $x$ 相乘得到一个实数,然后再加上实数 $b$。前面提到,我们希望模型的输出 $\hat{y}$ 是一个概率,有 $\hat{y} \in [0, 1]$,这是通过 Sigmoid 函数 $\sigma$ 达成的,其形式为:

\begin{equation}
\sigma(z) = \frac{1}{1 + e^{-z}} \tag{3}
\end{equation}

  Sigmoid 函数是一个可微的有界函数,在各点均有非负的导数。当 $z \rightarrow \infty$ 时,$\sigma(z) \rightarrow 1$;当 $z \rightarrow -\infty$ 时,$\sigma(z) \rightarrow 0$。Sigmoid 函数常用于二元分类问题,以及用作神经网络的激活函数(Activation Function)(把线性的输入转换为非线性的输出)。

  对于逻辑回归,我们的任务是要学习参数 $w$ 和 $b$,使得对于给定(输入)样本的特征向量 $x$,$\hat{y}$ 能够很好地估计该样本的真实标签 $y$ 为 $1$ 的概率。

  逻辑回归的训练过程可以简单表述为给定包含 $m$ 个样本的训练集 $\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), …, (x^{(m)}, y^{(m)})\}$,希望找到合适的参数 $w$ 和 $b$,使得 $\hat{y}^{(i)} \approx y^{(i)}$。这里带圆括号的角标表示样本序号,$x^{(i)}$ 表示第 $i$ 个样本的特征向量,$y^{(i)}$ 表示第 $i$ 个样本的真实标签,$\hat{y}^{(i)}$ 表示对第 $i$ 个样本的预测。

3. 逻辑回归的代价函数

  代价函数(Cost Function)用于定量地衡量模型在的在特定参数上的性能,这通常是通过计算模型在当前参数和样本集合上给出的预测值 $\hat{y}$ 与真实值 $y$ 之间的差距来得到的。代价函数的值越大,表示模型给出的预测与真实值之间的差距越大,模型(参数)越差;反之,代价函数的值越小,表示预测与真实值之间的差距越小,模型(参数)越好。通过最小化代价函数,我们可以得到最佳的模型参数,使得预测与真实值之间的差距最小。

  在定义代价函数前,需要先确定一个损失函数(Loss Function)。损失函数用于计算单个样本的预测值与实际值之间的差异。例如,可以定义损失函数为预测值 $\hat{y}$ 和真实值 $y$ 之间的平方误差的一半:

\begin{equation}
L(\hat{y}, y) = \frac{1}{2}(\hat{y} – y)^2 \tag{4}
\end{equation}

  上式实际计算的是 $\hat{y}$ 和 $y$ 之间距离的平方的一半,通过衡量 $\hat{y}$ 和 $y$ 之间的距离,定义了二者之间的差异程度。但在逻辑回归中,通常不会使用上式作为损失函数,因为它会导致优化问题变为非凸(Non-Convex)的,具有多个局部最佳(Local Optima),导致后面提到的梯度下降(Gradient Descent)算法可能无法找到全局最佳(Global Optima)。

  逻辑回归实际使用的损失函数为:

\begin{equation}
L(\hat{y}, y) = -[y\log{\hat{y}} + (1 – y)\log(1 – \hat{y})] \tag{5}
\end{equation}

  可以这样来简单地理解这个代价函数:

  首先将 $y = 1$ 带入式 (5),得到 $L(\hat{y}, y) = -\log{\hat{y}}$,此时我们希望 $L(\hat{y}, y)$ 最小化,即希望 $\log{\hat{y}}$ 最大化,即希望 $\hat{y}$ 最大化(对数函数是严格单调递增的)。又因为 $\hat{y}$ 是一个概率,有 $\hat{y} \in [0, 1]$,则 $y = 1$ 时最小化代价函数相当于让 $\hat{y}$ 趋近于 1。

  再将 $y = 0$ 带入式 (5),得到 $L(\hat{y}, y) = -\log(1 – \hat{y})$,同理,此时我们希望 $L(\hat{y}, y)$ 最小化,即希望 $\hat{y}$ 最小化,则 $y = 0$ 时最小化代价函数相当于让 $\hat{y}$ 趋近于 0。

  有了衡量单个样本的损失函数,就可以进一步定义针对整个样本集合的代价函数,为所有样本代价的平均值:

\begin{equation}
J(w, b) = \frac{1}{m} \sum_{i = 1}^m L(\hat{y}^{(i)}, y^{(i)})
= -\frac{1}{m} \sum_{i = 1}^m [y^{(i)}\log{\hat{y}^{(i)}} + (1 – y^{(i)})\log(1 – \hat{y}^{(i)})] \tag{6}
\end{equation}

  上式中的 $\hat{y}$ 是逻辑回归算法在参数 $w$ 和 $b$ 下输出的预测值。

  注意区分损失函数和代价函数的区别:损失函数作用于单个样本,衡量单个样本预测值和真实值之间的差异;而代价函数作用于样本集合,用于衡量当前参数在样本集合上的代价。逻辑回归算法的训练,就是找到合适的参数 $w$ 和 $b$,使得代价函数 $J(w, b)$ 最小化的过程。

4. 逻辑回归梯度下降

  梯度下降(Gradient Descent)是机器学习中最常用的一种最优化算法,相关资料有很多,这里不再详细展开。概括来说,梯度下降算法通过计算目标函数的各个参数在特定位置的偏导数(Partial Derivative),找到梯度最陡、也就是让目标函数的值下降速度最快的方向,沿这个方向略微调整各个参数的值,使得目标函数的值下降一小步,如此反复迭代,直到目标函数达到或足够接近一个极小值。如果目标函数是凸函数,则梯度下降算法可以达到全局最佳;如果目标函数非凸,则有可能陷入局部最佳。

  对于逻辑回归,其代价函数如式 (6) 所示,有两个参数 $w$ 和 $b$,则其梯度下降算法的过程就是不断地重复:

\begin{equation}
w = w – \alpha \frac{\partial J(w, b)}{\partial w} \tag{7}
\end{equation}

\begin{equation}
b = b – \alpha \frac{\partial J(w, b)}{\partial b} \tag{8}
\end{equation}

  式(7)、(8) 中的 $\alpha$ 为学习速率(Learning Rate),用于控制每次迭代时更新 $w$ 和 $b$ 的步长。学习速率可以看做是是参数($w$ 和 $b$)的参数,此类参数称为超参数(Hyper Parameter)。