Deep Learning Note: 1-1 逻辑回归和梯度下降
Deep Learning Note 系列是我学习 deepLearning.ai 所开设深度学习课程的笔记,包含关键概念、模型和部分推导,方便随时查阅。假设读者已初步了解机器学习基础知识,并具有相应的数学基础。
Contents [show]
0. 符号说明
本文及后续内容使用符号定义如下:
使用 (x,y) 表示单个样本,其中 x∈Rnx,即一个 nx 维的特征向量(Feature Vector);y∈{0,1},为标签(Label)。
使用 m 表示样本数量,在样本上使用圆括号和数字的角标表示该样本在样本集中的序号,整个样本集合为 {(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))}。使用 mtrain 表示训练集(Training Set)中样本的个数,使用 mtest 表示测试集(Test Set)中样本的个数。
定义 X=[x(1)x(2)…x(m)],即各个样本的特征向量水平叠加后的结果,故有 X∈Rnx×m,即 X 是一个 nx×m 的实数矩阵。
定义 Y=[y(1)y(2)…y(m)],即各个样本的标签水平叠加后的结果,故有 Y∈R1×m,即 Y 是一个 1×m 的实数矩阵。
1. 二分类
对于二分类(Binary Classification)问题,我们的目标是习得一个分类器,使它对于给定样本的特征向量 x,可以预测该样本的标签 y,y 的取值只有两种,分别对应真和假两种情况,如取值 0 或 1。
2. 逻辑回归
逻辑回归(Logistic Regression)是一种监督学习算法,算法输出的标签只可能是 0 或者 1,适用于二分类问题。
对于给定输入特征矢量 x,x∈Rnx,我们希望得到其标签 y 的估计 ˆy,即在给定输入 x 的条件下 y 为 1 的概率:
ˆy=P(y=1|x)
逻辑归回的参数有:
w∈Rnxb∈R
其中 w 为权重(Weight),是一个 nx×1 的向量;b 为偏置(Bias),或称为截距(Intercept Term),是一个实数。
由此,逻辑归回的模型可以表述为:
ˆy=σ(wTx+b)
这里的 wTx+b 只是一个线性模型:wT 为 w 的转置,是一个 1×nx 的向量,它与 nx×1 的向量 x 相乘得到一个实数,然后再加上实数 b。前面提到,我们希望模型的输出 ˆy 是一个概率,有 ˆy∈[0,1],这是通过 Sigmoid 函数 σ 达成的,其形式为:
σ(z)=11+e−z
Sigmoid 函数是一个可微的有界函数,在各点均有非负的导数。当 z→∞ 时,σ(z)→1;当 z→−∞ 时,σ(z)→0。Sigmoid 函数常用于二元分类问题,以及用作神经网络的激活函数(Activation Function)(把线性的输入转换为非线性的输出)。
对于逻辑回归,我们的任务是要学习参数 w 和 b,使得对于给定(输入)样本的特征向量 x,ˆy 能够很好地估计该样本的真实标签 y 为 1 的概率。
逻辑回归的训练过程可以简单表述为给定包含 m 个样本的训练集 {(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},希望找到合适的参数 w 和 b,使得 ˆy(i)≈y(i)。这里带圆括号的角标表示样本序号,x(i) 表示第 i 个样本的特征向量,y(i) 表示第 i 个样本的真实标签,ˆy(i) 表示对第 i 个样本的预测。
3. 逻辑回归的代价函数
代价函数(Cost Function)用于定量地衡量模型在的在特定参数上的性能,这通常是通过计算模型在当前参数和样本集合上给出的预测值 ˆy 与真实值 y 之间的差距来得到的。代价函数的值越大,表示模型给出的预测与真实值之间的差距越大,模型(参数)越差;反之,代价函数的值越小,表示预测与真实值之间的差距越小,模型(参数)越好。通过最小化代价函数,我们可以得到最佳的模型参数,使得预测与真实值之间的差距最小。
在定义代价函数前,需要先确定一个损失函数(Loss Function)。损失函数用于计算单个样本的预测值与实际值之间的差异。例如,可以定义损失函数为预测值 ˆy 和真实值 y 之间的平方误差的一半:
L(ˆy,y)=12(ˆy–y)2
上式实际计算的是 ˆy 和 y 之间距离的平方的一半,通过衡量 ˆy 和 y 之间的距离,定义了二者之间的差异程度。但在逻辑回归中,通常不会使用上式作为损失函数,因为它会导致优化问题变为非凸(Non-Convex)的,具有多个局部最佳(Local Optima),导致后面提到的梯度下降(Gradient Descent)算法可能无法找到全局最佳(Global Optima)。
逻辑回归实际使用的损失函数为:
L(ˆy,y)=−[ylogˆy+(1–y)log(1–ˆy)]
可以这样来简单地理解这个代价函数:
首先将 y=1 带入式 (5),得到 L(ˆy,y)=−logˆy,此时我们希望 L(ˆy,y) 最小化,即希望 logˆy 最大化,即希望 ˆy 最大化(对数函数是严格单调递增的)。又因为 ˆy 是一个概率,有 ˆy∈[0,1],则 y=1 时最小化代价函数相当于让 ˆy 趋近于 1。
再将 y=0 带入式 (5),得到 L(ˆy,y)=−log(1–ˆy),同理,此时我们希望 L(ˆy,y) 最小化,即希望 ˆy 最小化,则 y=0 时最小化代价函数相当于让 ˆy 趋近于 0。
有了衡量单个样本的损失函数,就可以进一步定义针对整个样本集合的代价函数,为所有样本代价的平均值:
J(w,b)=1mm∑i=1L(ˆy(i),y(i))=−1mm∑i=1[y(i)logˆy(i)+(1–y(i))log(1–ˆy(i))]
上式中的 ˆy 是逻辑回归算法在参数 w 和 b 下输出的预测值。
注意区分损失函数和代价函数的区别:损失函数作用于单个样本,衡量单个样本预测值和真实值之间的差异;而代价函数作用于样本集合,用于衡量当前参数在样本集合上的代价。逻辑回归算法的训练,就是找到合适的参数 w 和 b,使得代价函数 J(w,b) 最小化的过程。
4. 逻辑回归梯度下降
梯度下降(Gradient Descent)是机器学习中最常用的一种最优化算法,相关资料有很多,这里不再详细展开。概括来说,梯度下降算法通过计算目标函数的各个参数在特定位置的偏导数(Partial Derivative),找到梯度最陡、也就是让目标函数的值下降速度最快的方向,沿这个方向略微调整各个参数的值,使得目标函数的值下降一小步,如此反复迭代,直到目标函数达到或足够接近一个极小值。如果目标函数是凸函数,则梯度下降算法可以达到全局最佳;如果目标函数非凸,则有可能陷入局部最佳。
对于逻辑回归,其代价函数如式 (6) 所示,有两个参数 w 和 b,则其梯度下降算法的过程就是不断地重复:
w=w–α∂J(w,b)∂w
b=b–α∂J(w,b)∂b
式(7)、(8) 中的 α 为学习速率(Learning Rate),用于控制每次迭代时更新 w 和 b 的步长。学习速率可以看做是是参数(w 和 b)的参数,此类参数称为超参数(Hyper Parameter)。