神经网络解决Logistic回归问题及公式向量化推导

一、Logistic问题描述

1、训练集和测试集表示

(1) 有m个训练样本,训练集表示为:{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}。其向量化表示为:

X=[x(1)x(2)x(m)]
X的维度是(nx,m),其中nx表示一个样本的所有特征(举例:对于一个图片来说,其所有特征就是RGB下的所有的像素点,若图片大小为64*64,则nx=64643)。x(i)是一个向量,表示一个样本。
(2) m个样本对应m个label,因此Y的表示如下:
Y=[y(1)y(2)y(m)]
Y的维度是(1, m)。

2、Logistic回归

Logistic回归的方程是y(i)=σ(wTx+b),其中σ(z(i))=11+ez(i)
给定训练集{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},我们希望样本的预测结果y^(i)与实际结果y(i)尽可能地接近。
其代价函数如下:
在Logistic回归模型中,我们并不使用平方和作为我们的目标函数,我们设定的目标函数如下:

L(y^,y)=(ylogy^+(1y)log(1y^))
为了验证其可行性,我们可将其分开考虑:
①若y=1,则L(y^,y)=logy^,若想要使得损失函数最小,则需要y^最大,这满足回归的任务要求。
②若y=0,则L(y^,y)=log(1y^),若想要使得损失函数最小,则需要y^最小,也满足回归的任务要求。
因此,Logistic回归的代价函数便是所有样本的损失函数之和,使用公式表示如下:
J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(i))]
下面的内容中为了方便运算,我们以L函数来进行分析,在最后的过程中才将其转化为J, J=1mL

3、转化为神经网络预测模型

Logistic回归问题可以简单地转化为两层的神经网络(也可以叫做单隐层神经网络),其结构图如下:

神经网络解决Logistic回归问题及公式向量化推导
输入值x(i)是一个样本向量,w是参数,此预测模型先基于线性模型,然后经过激励函数得到最终的预测值。

二、前向传播和后向传播

1、前向传播

下面使用一简单的例子介绍前向传播,如下图:

神经网络解决Logistic回归问题及公式向量化推导
前向传播和我们平时的思维是一致的,即给出输入,通过一次次变换得到输出。

2、后向传播

参数的更新过程是算法结果不断优化的过程:输入数据,根据前向传播可以得到预测值,将预测值和真实值进行比较,得到损失函数,基于损失函数,更新参数,使得每一次的迭代过程损失函数都会减小,这就是更新的主要思想。
下面主要讲后向传播及其推理过程,两层神经网络的模型如下:

神经网络解决Logistic回归问题及公式向量化推导
反向传播的过程就是从后向前更新参数的过程,更新参数的规则如下:
w:=wαdJ(w,b)dwb:=bαdJ(w,b)db

为了求取参数更新的公式,我们有如下的求导过程:
已知:
z=wTx+by^=a=σ(z)L(a,y)=(yloga+(1y)log(1a))

求dw的过程:
dw=L(w,b)dw=dL(w,b)dadadzdzdw()=(ya+1y1a)a(1a)x=(ay)x
又因为:
dz=L(w,b)dz=dL(w,b)dadadz=(ya+1y1a)a(1a)=ay
因此:dw=dzx
求db的过程:
db=L(w,b)db=dL(w,b)dadadzdzdb()=(ya+1y1a)a(1a)1=ay
因此,db=dz

三、m个样本的梯度下降

下图是一次迭代过程的伪代码:

神经网络解决Logistic回归问题及公式向量化推导
对于一次迭代的过程,便是先前向传播,更加前向传播的结果后向传播不断更新参数。
对于T次迭代过程的计算,只需要在一次迭代过程外面加一个for循环即可。

四、向量化

1、Z的向量化

Z=[z(1)z(2)z(m)]=[wTx(1)+bwTx(2)+bwTx(m)+b]=[wTx(1)wTx(2)wTx(m)]+[bbb]=wTX+b

2、A的向量化

A=[a(1)a(2)a(m)]=[σ(z(1))σ(a(2))σ(a(m))]=σ(Z)

3、J的向量化

J=1mi=1m[y(i)loga(i)+(1y(i))log(1a(i))]=1mi=1my(i)loga(i)1mi=1m(1y(i))log(1a(i))=1m(y(1)loga(1)+y(2)loga(2)+...+y(m)loga(m))1m[(1y(1))log(1a(1))+(1y(2))log(1a(2))+...+(1y(m))log(1a(m))]=1m[y(1)y(2)y(m)][loga(1)loga(2)loga(m)]1m[1y(1)1y(2)1y(m)][log(1a(1))log(1a(2))log(1a(m))]=1mYlogAT1m(1Y)log(1AT)

4、dz的向量化

已知:

dz(1)=a(1)y(1)dz(2)=a(2)y(2)...dz(m)=a(m)y(m)

又因为:
dZ=[dz(1)dz(2)dz(m)]A=[a(1)a(2)a(m)]Y=[y(1)y(2)y(m)]

因此:
dZ=[dz(1)dz(2)dz(m)]=[a(1)y(1)a(1)y(2)a(m)y(m)]=[a(1)a(2)a(m)][y(1)y(2)y(m)]=AY

5、dw的向量化

dw=1m(x(1)dz(1)+x(2)dz(2)+...+x(m)dz(m))=1m[x(1)x(2)x(m)][dz(1)dz(2)dz(m)]=1mXdZT

6、db的向量化

db=1mi=1mdz(i)=1mnp.sum(dZ)

注: np.sum(dZ)是调用python中numpy库的一个函数,其功能是将矩阵的所有元素相加。

7、向量化之后的实现逻辑回归过程

神经网络解决Logistic回归问题及公式向量化推导
注:这里展示的伪代码都是一次迭代过程,若需要多次迭代,则需要在外层增加for循环。



参考文献:
1、本内容主要来自于coursera上的dl视频,在此加上一些自己的看法和理解。
2、一步步手写神经网络