2.1 Binary Classification
逻辑回归模型一般用来解决二分类(Binary Classification)问题
二分类就是输出y只有{0,1}两个离散值(也有{-1,1}的情况)
彩色图片包含RGB三个通道。例如该cat图片的尺寸为(64,64,3)
在神经网络模型中,首先要将图片输入x(维度是(64,64,3))转化为一维的特征向量(featurevector)。方法是每个通道一行一行取,再连接起来。则转化后的输入特征向量维度为(12288,1)。此特征向量x是列向量,维度一般记为nx
如果训练样本共有m张图片,那么整个训练样本X组成了矩阵,维度是(nx,m),nx代表了每个样本X(i)特征个数,列m代表了样本个数,输出Y组成了一维的行向量,维度是(1,m)
2.2 Logistic Regression
逻辑回归中,预测值y^=P(y=1∣x)表示为1的概率,取值范围在[0,1]之间
使用线性模型,引入参数w和b。权重w的维度是(nx,1),b是一个常数项
逻辑回归的预测输出可以完整写成:
y^=Sigmoid(wTx+b)=σ(wTx+b) Sigmoid函数的一阶导数可以用其自身表示:
σ′(z)=σ(z)(1−σ(z)) 2.3 Logistic Regression Cost Function
单个样本的cost function用Loss function来表示,使用平方误差(squared error):
L(y^,y)=21(y^−y)2 逻辑回归一般不使用平方误差来作为Loss function。原因是这种Loss function一般是non-convex的。
non-convex函数在使用梯度下降算法时,容易得到局部最小值(localminimum),即局部最优化。而最优化的目标是计算得到全局最优化(Global optimization),因此一般选择的Loss function应该是convex的
构建另外一种Loss function(针对单个样本),且是convex的:
L(y^,y)=−(ylog y^+(1−y)log (1−y^)) 当y=1时,L(y^,y)=−logy^,如果y^越接近1,L(y^,y)≈0,表示预测效果越好;如果y^越接近0,L(y^,y)≈+∞,表示预测效果越差
当y=0时,L(y^,y)=−log(1−y^),如果y^越接近0,L(y^,y)≈0,表示预测效果越好;如果y^越接近1,L(y^,y)≈+∞,表示预测效果越差
Cost function是m个样本的Loss function的平均值,反映了m个样本的预测输出y^与真实样本输出y的平均接近程度:
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))] 2.4 Logistic Regression Gradient Descent
对单个样本而言,逻辑回归Loss function表达式如下:
y^=a=σ(z) L(a,y)=−(ylog(a)+(1−y)log(1−a)) 计算该逻辑回归的反向传播过程:
da=∂a∂L=−ay+1−a1−y dz=∂z∂L=∂a∂L⋅∂z∂a=(−ay+1−a1−y)⋅a(1−a)=a−y dw1=∂w1∂L=∂z∂L⋅∂w1∂z=x1⋅dz=x1(a−y) dw2=∂w2∂L=∂z∂L⋅∂w2∂z=x2⋅dz=x2(a−y) db=∂b∂L=∂z∂L⋅∂b∂z=1⋅dz=a−y 则梯度下降算法可表示为:
w1:=w1−α dw1 w2:=w2−α dw2 b:=b−α db 2.5 Gradient descent on m examples
m个样本的Cost function表达式如下:
z(i)=wTx(i)+b y^(i)=a(i)=σ(z(i)) 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))] Cost function关于w和b的偏导数可以写成和平均的形式:
dw1=m1i=1∑mx1(i)(a(i)−y(i)) dw2=m1i=1∑mx2(i)(a(i)−y(i)) dwm=m1i=1∑mxm(i)(a(i)−y(i)) db=m1i=1∑m(a(i)−y(i)) 算法流程如下所示:
J=0; dw1=0; dw2=0; db=0;
for i = 1 to m
z(i) = wx(i)+b;
a(i) = sigmoid(z(i));
J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
dz(i) = a(i)-y(i);
dw1 += x1(i)dz(i);
dw2 += x2(i)dz(i);
db += dz(i);
J /= m;
dw1 /= m;
dw2 /= m;
db /= m;
经过每次迭代后,根据梯度下降算法,w和b都进行更新:
w1:=w1−α dw1 w2:=w2−α dw2 wm:=wm−α dwm b:=b−α db 在深度学习中,样本数量m通常很大,使用for循环会让神经网络程序运行得很慢。应该尽量避免使用for循环操作,而使用矩阵运算,能够大大提高程序运行速度
2.6 Vectorizing Logistic Regression’s Gradient Output
db可表示为:
db=m1i=1∑mdz(i) dw可表示为:
dw=m1X⋅dZT 单次迭代,梯度下降算法流程如下所示:
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
dZ = A-Y
dw = 1/m*np.dot(X,dZ.T)
db = 1/m*np.sum(dZ)
w = w - alpha*dw
b = b - alpha*db
2.7 Explanation of logistic regression cost function(optional)
y^可以看成是预测输出为正类(+1)的概率:
y^=P(y=1∣x) 当y=1时:
p(y∣x)=y^ 当y=0时:
p(y∣x)=1−y^ 整合到一个式子:
P(y∣x)=y^y(1−y^)(1−y) 进行log处理:
log P(y∣x)=log y^y(1−y^)(1−y)=y log y^+(1−y)log(1−y^) 上述概率P(y|x)越大越好,加上负号,则转化成了单个样本的Loss function,越小越好:
L=−(y log y^+(1−y)log(1−y^)) 对于所有m个训练样本,假设样本之间是独立同分布的,总的概率越大越好:
max i=1∏m P(y(i)∣x(i)) 引入log函数,加上负号,将上式转化为Cost function:
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))]