第二周:神经网络的编程基础(Basics of Neural Network programming)

2.1 Binary Classification

逻辑回归模型一般用来解决二分类(Binary Classification)问题

二分类就是输出y只有{0,1}两个离散值(也有{-1,1}的情况)

彩色图片包含RGB三个通道。例如该cat图片的尺寸为(64,64,3)

在神经网络模型中,首先要将图片输入x(维度是(64,64,3))转化为一维的特征向量(featurevector)。方法是每个通道一行一行取,再连接起来。则转化后的输入特征向量维度为(12288,1)。此特征向量x是列向量,维度一般记为nxn_x

如果训练样本共有m张图片,那么整个训练样本X组成了矩阵,维度是(nxn_x,m),nxn_x代表了每个样本X(i)X^{(i)}特征个数,列m代表了样本个数,输出Y组成了一维的行向量,维度是(1,m)

2.2 Logistic Regression

逻辑回归中,预测值y^=P(y=1x)\hat y=P(y=1 | x)表示为1的概率,取值范围在[0,1]之间

使用线性模型,引入参数w和b。权重w的维度是(nxn_x,1),b是一个常数项

逻辑回归的预测输出可以完整写成:

y^=Sigmoid(wTx+b)=σ(wTx+b)\hat y = Sigmoid(w^Tx+b)=\sigma(w^Tx+b)

Sigmoid函数的一阶导数可以用其自身表示:

σ(z)=σ(z)(1σ(z))\sigma'(z)=\sigma(z)(1-\sigma(z))

2.3 Logistic Regression Cost Function

单个样本的cost functionLoss function来表示,使用平方误差(squared error)

L(y^,y)=12(y^y)2L(\hat y,y)=\frac12(\hat 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^+(1y)log (1y^))L(\hat y,y)=-(ylog\ \hat y+(1-y)log\ (1-\hat y))

当y=1时,L(y^,y)=logy^L(\hat y,y)=-\log \hat y,如果y^\hat y越接近1,L(y^,y)0L(\hat y,y)\approx 0,表示预测效果越好;如果y^\hat y越接近0,L(y^,y)+L(\hat y,y)\approx +\infty,表示预测效果越差

当y=0时,L(y^,y)=log(1y^)L(\hat y,y)=-\log(1- \hat y),如果y^\hat y越接近0,L(y^,y)0L(\hat y,y)\approx 0,表示预测效果越好;如果y^\hat y越接近1,L(y^,y)+L(\hat y,y)\approx +\infty,表示预测效果越差

Cost function是m个样本的Loss function的平均值,反映了m个样本的预测输出y^\hat y与真实样本输出y的平均接近程度:

J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)log y^(i)+(1y(i))log (1y^(i))]J(w,b)=\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})=-\frac1m\sum_{i=1}^m[y^{(i)}log\ \hat y^{(i)}+(1-y^{(i)})log\ (1-\hat y^{(i)})]

2.4 Logistic Regression Gradient Descent

对单个样本而言,逻辑回归Loss function表达式如下:

z=wTx+bz=w^Tx+b
y^=a=σ(z)\hat y=a=\sigma(z)
L(a,y)=(ylog(a)+(1y)log(1a))L(a,y)=-(y\log(a)+(1-y)\log(1-a))

计算该逻辑回归的反向传播过程:

da=La=ya+1y1ada=\frac{\partial L}{\partial a}=-\frac ya+\frac{1-y}{1-a}
dz=Lz=Laaz=(ya+1y1a)a(1a)=aydz=\frac{\partial L}{\partial z}=\frac{\partial L}{\partial a}\cdot \frac{\partial a}{\partial z}=(-\frac ya+\frac{1-y}{1-a})\cdot a(1-a)=a-y
dw1=Lw1=Lzzw1=x1dz=x1(ay)dw_1=\frac{\partial L}{\partial w_1}=\frac{\partial L}{\partial z}\cdot \frac{\partial z}{\partial w_1}=x_1\cdot dz=x_1(a-y)
dw2=Lw2=Lzzw2=x2dz=x2(ay)dw_2=\frac{\partial L}{\partial w_2}=\frac{\partial L}{\partial z}\cdot \frac{\partial z}{\partial w_2}=x_2\cdot dz=x_2(a-y)
db=Lb=Lzzb=1dz=aydb=\frac{\partial L}{\partial b}=\frac{\partial L}{\partial z}\cdot \frac{\partial z}{\partial b}=1\cdot dz=a-y

则梯度下降算法可表示为:

w1:=w1α dw1w_1:=w_1-\alpha\ dw_1
w2:=w2α dw2w_2:=w_2-\alpha\ dw_2
b:=bα dbb:=b-\alpha\ db

2.5 Gradient descent on m examples

m个样本的Cost function表达式如下:

z(i)=wTx(i)+bz^{(i)}=w^Tx^{(i)}+b
y^(i)=a(i)=σ(z(i))\hat y^{(i)}=a^{(i)}=\sigma(z^{(i)})
J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)log y^(i)+(1y(i))log (1y^(i))]J(w,b)=\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})=-\frac1m\sum_{i=1}^m[y^{(i)}log\ \hat y^{(i)}+(1-y^{(i)})log\ (1-\hat y^{(i)})]

Cost function关于w和b的偏导数可以写成和平均的形式:

dw1=1mi=1mx1(i)(a(i)y(i))dw_1=\frac1m\sum_{i=1}^mx_1^{(i)}(a^{(i)}-y^{(i)})
dw2=1mi=1mx2(i)(a(i)y(i))dw_2=\frac1m\sum_{i=1}^mx_2^{(i)}(a^{(i)}-y^{(i)})
dwm=1mi=1mxm(i)(a(i)y(i))dw_m=\frac1m\sum_{i=1}^mx_m^{(i)}(a^{(i)}-y^{(i)})
db=1mi=1m(a(i)y(i))db=\frac1m\sum_{i=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α dw1w_1:=w_1-\alpha\ dw_1
w2:=w2α dw2w_2:=w_2-\alpha\ dw_2
wm:=wmα dwmw_m:=w_m-\alpha\ dw_m
b:=bα dbb:=b-\alpha\ db

在深度学习中,样本数量m通常很大,使用for循环会让神经网络程序运行得很慢。应该尽量避免使用for循环操作,而使用矩阵运算,能够大大提高程序运行速度

2.6 Vectorizing Logistic Regression’s Gradient Output

db可表示为:

db=1mi=1mdz(i)db=\frac1m \sum_{i=1}^mdz^{(i)}

dw可表示为:

dw=1mXdZTdw=\frac1m X\cdot dZ^T

单次迭代,梯度下降算法流程如下所示:

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^\hat y可以看成是预测输出为正类(+1)的概率:

y^=P(y=1x)\hat y=P(y=1|x)

当y=1时:

p(yx)=y^p(y|x)=\hat y

当y=0时:

p(yx)=1y^p(y|x)=1-\hat y

整合到一个式子:

P(yx)=y^y(1y^)(1y)P(y|x)=\hat y^y(1-\hat y)^{(1-y)}

进行log处理:

log P(yx)=log y^y(1y^)(1y)=y log y^+(1y)log(1y^)log\ P(y|x)=log\ \hat y^y(1-\hat y)^{(1-y)}=y\ log\ \hat y+(1-y)log(1-\hat y)

上述概率P(y|x)越大越好,加上负号,则转化成了单个样本的Loss function,越小越好:

L=(y log y^+(1y)log(1y^))L=-(y\ log\ \hat y+(1-y)log(1-\hat y))

对于所有m个训练样本,假设样本之间是独立同分布的,总的概率越大越好:

max i=1m P(y(i)x(i))max\ \prod_{i=1}^m\ P(y^{(i)}|x^{(i)})

引入log函数,加上负号,将上式转化为Cost function

J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i) log y^(i)+(1y(i))log(1y^(i))]J(w,b)=-\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})=-\frac 1m\sum_{i=1}^m[y^{(i)}\ log\ \hat y^{(i)}+(1-y^{(i)})log(1-\hat y^{(i)})]

Last updated