本文介绍了逻辑回归 (Logistic Regression) 相关的数学知识,重点在于参数和变量的向量化。
二元分类,是将示例归类为两个类别中的一类。
例如,有 1000 张 64 x 64 像素的图片,已知其中哪些是猫、哪些不是。在这个基础上,给一张新的 64 x 64 像素的图片,需要判断是不是猫。
这种基础的图像识别问题,可以归为二元分类。
训练样本数和测试样本数
m=mtrainmtest=1000=1
单个样本的特征数
n=nx=64×64×3
单个样本的输入和输出
x(i)=x1(i)x2(i)⋮xn(i)∈Rn,y(i)∈{0,1}⊂R1
总样本的输入和输出
XY=[x(1)x(2)⋯x(m)]∈Rn×m=[y(1)y(2)⋯y(m)]∈R1×m
逻辑回归是一种学习算法,适用于输出为 0 或 1 的情况。逻辑回归的目标是最小化其预测输出 y^ 和实际输出 y 的误差。
Given x, y^=P(y=1∣x),where 0≤y^≤1
对于单个样本,逻辑回归使用的参数如下:
- 输入:x∈Rn
- 实际输出:y∈0,1
- 权重:w∈Rn
- 阈值/偏置:b∈R1
- 净输入/加权输入:z=wTx+b
- 预测输出:y^=σ(z)=σ(wTx+b)
将输入 z 映射到输出 y^ 的函数称为激活函数 (Activation Function)。这里激活函数使用 Sigmoid 函数σ(z),可以将输出映射到 [0,1] 的范围内:
σ(z)=1+e−z1
如果 z 很大,那么 y^ 接近于 1;反之则接近于 0。
定义损失函数 (Loss Function) 和成本函数 (Cost Function),以训练参数 w 和 b。
损失函数用于单个样本,代表预测输出 y^(i) 和实际输出 y(i) 之间的误差。
L(y^(i),y(i))=−[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
- 若 y(i)=1,则 L(y^(i),y(i))=−log(y^(i)),最小化 L 等价于 y^(i) 接近于 1。
- 若 y(i)=0,则 L(y^(i),y(i))=−log(1−y^(i)),最小化 L 等价于 y^(i) 接近于 0。
成本函数是整个训练集的损失函数的平均值。最小化成本函数,可以得到最优的参数 w 和 b。
J(w,b)=m1i=1∑mL(y^(i),y(i))=−m1i=1∑m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
梯度下降法的定义为,如果实值函数 F(x) 在点 a 处可微且有定义,那么函数 F(x) 在点 a 沿着梯度相反的方向下降最快。这里使用梯度下降法最小化成本函数 J(w,b),以得到最优的参数 w 和 b,其中 α 为学习率 (learning rate)。
wjb:=wj−α∂wj∂J,where j=1,2,⋯,n:=b−α∂b∂J
记 a(i)=y^(i)=σ(z(i)):
⎩⎨⎧∂L∂J∂a(i)∂L∂z(i)∂a(i)=m1=−a(i)y(i)+1−a(i)1−y(i)=(1+e−z(i))2e−z(i)=a(i)(1−a(i))⇒∂z(i)∂J=∂L∂J∂a(i)∂L∂z(i)∂a(i)=m1(a(i)−y(i))
由于 z(i)=w1x1(i)+w2x2(i)+⋯+wnxn(i)+b,因此有:
∂wj∂J∂b∂J=i=1∑m∂z(i)∂J∂wj∂z(i)=i=1∑mxj(i)∂z(i)∂J=i=1∑m∂z(i)∂J∂b∂z(i)=i=1∑m∂z(i)∂J
以 z=wTx+b 为例,原始输入输出为:
z(1)z(2)z(m)=w1x1(1)+w2x2(1)+⋯+wnxn(1)+b=w1x1(2)+w2x2(2)+⋯+wnxn(2)+b⋮=w1x1(m)+w2x2(m)+⋯+wnxn(m)+b
向量化之后为:
z(1)z(2)⋮z(m)TZ=w1w2⋮wnTx1(1)x2(1)⋮xn(1)x1(2)x2(2)⋮xn(2)⋯⋯⋱⋯x1(m)x2(m)⋮xn(m)+bb⋮bT⇓=WTX+B
向量 化之后,对整个训练样本进行单次训练,描述如下:
ZAdZdWdbWb=WTX+B=σ(Z)=∂Z∂J=m1(A−Y)=∂W∂J=X⋅[dZ]T=i=1∑mdZi:=W−α⋅dW:=b−α⋅db
以上可以使用 Python Numpy 进行实现。