吴恩达《深度学习工程师》Part1.Week2 神经网络基础
2018-02-17 23:11
337 查看
2.1 二分分类
二分分类问题是根据输入XX来判断其是否属于某种类型,用1和0来表示。
图1 判断图片中是否有猫的二分类问题
图1为一个典型的二分类问题。输入为一张RGB图片的三个通道亮度值,将这三个通道的亮度值依次排列出来构成了输入XX,目标是判断图片中是否有猫,用输出y=1y=1或00来表示。当输入图片数量为m个,纬度为nxnx时,X∈Rnx×mX∈Rnx×m, y∈{0,1}y∈{0,1}。
2.2 logistic回归
继续上节的判断图片是否有猫的问题,二分类问题直接预测输出为11或00,本节讲的logistic回归问题,则是根据输入x∈Rnxx∈Rnx,计算图片有猫的概率y^=P(y=1|x)y^=P(y=1|x)。
最简单的办法是采用线性模型,将xx乘上权重w∈Rnxw∈Rnx,再加上偏置bb, 得到:
y^=wTx+by^=wTx+b
但是这样得到的y^y^极有可能小于00或大于11,而y^y^的取值范围只能是00到11之间。
logistic回归方法是将上面的y^y^代入到sigmoid函数中,sigmoid(z)=11+e−zsigmoid(z)=11+e−z,其形状如图2所示。
图2 sigmoid函数
sigmoid函数的函数值位于00到11之间。最终,我们得到了logistic模型的形式如下:
y^=11+e−(wTx+b)y^=11+e−(wTx+b)
logistic模型的建模过程就是求解权重ww和bb的过程。
2.3 logistic回归损失函数
判断logistic模型的好坏可以通过比较预测值y^y^和实际值yy之间的差别来实现,这里我们定义一个损失函数(loss function)或者叫误差函数(error function)L(y^,y)L(y^,y),训练模型的过程就是寻找ww和bb,使得损失函数最小的过程。
损失函数其中一个选择是使用平方误差,L(y^,y)=12(y^−y)2L(y^,y)=12(y^−y)2,但是这个损失函数在进行随机梯度下降时是非凸的,进行模型训练时只能得到局部最优解,很难得到全局最优解。
logistic回归分析使用的损失函数如下:
L(y^,y)=−(ylogy^+(1−y)log(1−y^))L(y^,y)=−(ylogy^+(1−y)log(1−y^))
如果y=1y=1,则L(y^,y)=−logy^L(y^,y)=−logy^,当ww和bb的取值使得损失函数L(y^,y)L(y^,y)值最小时,y^y^值最大,即最接近于目标值1,预测效果最佳,此时的ww和bb即为我们想要的模型参数。
如果y=0y=0,则L(y^,y)=−log(1−y^)L(y^,y)=−log(1−y^),当ww和bb的取值使得损失函数L(y^,y)L(y^,y)值最小时,y^y^值最小,即最接近于目标值0,预测效果最佳,此时的ww和bb即为我们想要的模型参数。
损失函数是在单个样本上计算的,代价函数(cost function)则是在m个样本的训练集上定义的,如下式所示:
J(w,b)=1m∑1mL(y^(i),y(i))=−1m∑1my(i)logy^(i)+(1−y(i))log(1−y^(i))J(w,b)=1m∑1mL(y^(i),y(i))=−1m∑1my(i)logy^(i)+(1−y(i))log(1−y^(i))
根据一个训练集来计算ww和bb时,要使得代价函数尽可能小。
2.4 梯度下降法
上节讲到,对logistic模型的训练过程就是寻找最佳的ww和bb使得代价函数J(w,b)J(w,b)最小的过程。代价函数J(w,b)J(w,b)是一个凸函数,其形状如图3所示。
图3 凸函数图示
其中ww可以是多维向量,这里为了方便绘图,采用了一维向量表示。
梯度下降法是一种重要的求解最优ww和bb的方法,原理如下:
图4 梯度下降法
对于任意给定ww初始值,根据w:=w−α⋅dww:=w−α⋅dw进行更新,其中dw=∂J(w,b)∂wdw=∂J(w,b)∂w,从图4可以看出,随着ww的不断更新,代价函数JJ不断减小,直到到达最小值。
参数bb的求解步骤跟ww的一样。
2.5 导数
略
2.6更多导数的例子
略
2.7 计算图
神经网络的计算是通过前向传播(forward propagation)实现的,计算出输出,紧接着是反向传播(back propagation)过程,用来计算梯度,并更新参数ww和bb。
下面引入计算图的概念,例如计算J=3(a+bc)J=3(a+bc),可以用下图表示:
图5 一个简单的计算图
JJ的计算分解为几个不同的流程,这是一个类似于前向传播的过程。
2.8 计算图的导数计算
为了计算上节中的导数,可以按照下图进行:
图6 计算图的导数计算流程
为了求出dJdudJdu,可以先计算出dJdvdJdv,再计算出dvdudvdu,那么
dJdu=dJdv⋅dvdudJdu=dJdv⋅dvdu
上式就是链式求导法则。
2.9 logistic回归中的梯度下降法
以单样本的logistic回归分析为例,说明如何进行梯度下降法。
图7 logistic回归分析主要步骤
图8 单样本logistic回归分析流程图
logistic回归分析的过程是这样的,先进行向前传播,根据初始权重WW、偏置bb和输入XX,计算出预测值y^y^,再进行反向传播,计算出权重WW、偏置bb的导数,并对其进行更新,也就是2.4节讲到的梯度下降法步骤。
在计算权重WW、偏置bb的导数时,可以根据流程图的分解来分部计算,依次求出:
∂L∂a=−ya+1−y1−a∂L∂a=−ya+1−y1−a
∂a∂z=a(1−a)∂a∂z=a(1−a)
∂z∂w1=x1∂z∂w1=x1
∂z∂w2=x2∂z∂w2=x2
∂z∂b=1∂z∂b=1
利用链式求导法则,得到:
∂L∂w1=(a−y)x1∂L∂w1=(a−y)x1
∂L∂w2=(a−y)x2∂L∂w2=(a−y)x2
∂L∂b=(a−y)∂L∂b=(a−y)
采用梯度下降法对WW和bb进行更新:
w:=w−α⋅∂L∂ww:=w−α⋅∂L∂w
b:=b−α⋅∂L∂bb:=b−α⋅∂L∂b
2.10 m个样本的梯度下降
上节的梯度下降是对单个样本进行的计算,优化的目标函数是损失函数LL。当给定一个包含mm个数据的训练集时,优化的是代价函数JJ,2.3节讲到,
J(w,b)=1m∑1mL(y^(i),y(i))J(w,b)=1m∑1mL(y^(i),y(i))
因此
∂J∂w1=1m∑m1∂L(i)∂w1∂J∂w1=1m∑1m∂L(i)∂w1
∂J∂w2=1m∑m1∂L(i)∂w2∂J∂w2=1m∑1m∂L(i)∂w2
......
∂J∂b=1m∑m1∂L(i)∂b∂J∂b=1m∑1m∂L(i)∂b
实现以上计算过程的伪代码如下:
在得到以上的dw1,dw2,..,bdw1,dw2,..,b值以后,应用一次梯度下降法,对WW和bb进行更新。
不过上面的代码中存在多个for循环,而for循环在深度学习的训练中会严重影响代码运行效率,下节将讲到如何使用向量化(Vectorization)的方法来替代for循环,从而提高计算效率。
2.11 向量化
在进行logistic回归分析时,输入XX一般是一维向量,X∈RnxX∈Rnx,权重WW也是一维向量,W∈RnxW∈Rnx,那么在计算z=WT⋅X+bz=WT⋅X+b时,如果使用for循环,则代码如下:
如果在python中用向量化来实现的话,可以直接用以下代码:
经过测试,向量化比for循环计算效率高300倍。
在CPU和GPU中都有并行化的指令,有时被成为SIMD(Single instruction multiple data)指令,意味着如果使用类似
2.12 向量化的更多例子
对2.10节中的logistic回归分析求梯度值的代码进行向量化改进,新的代码如下:
2.13 向量化logistic回归
在logistic回归分析计算激活值zz时,输入W,XW,X均为向量,可以直接用以下代码实现:
其中
2.13 向量化logistic回归的梯度输出
上节已经可对AA实现了向量化,又有标签YY是向量化的,则dZdZ可以直接计算:
总结起来,完整的向量化logistic回归分析代码为:
2.15 至2.17
略
2.18 Logistic损失函数的解释
Logistic回归分析预测的函数y^y^表达式为:y^=sigmoid(wTx+b)y^=sigmoid(wTx+b)
y^y^是已知xx时,y=1y=1的概率值:y^=P(y=1|x)y^=P(y=1|x)
当y=1y=1时,预测得到的概率就等于y^y^
当y=0y=0时,预测得到的概率则等于1−y^1−y^
想要把这两个式子整合在一起,可以使用下面的函数:
P(y|x)=y^y(1−y^)1−yP(y|x)=y^y(1−y^)1−y
对于单个数据,Logistic模型获得最优的预测效果,意味着概率P(y|x)P(y|x)取最大值,由于loglog函数为单调递增函数,最大化P(y|x)P(y|x)等价于最大化log(P(y|x))log(P(y|x))。由于进行梯度下降法时,目标函数要求最小值,因此在前面加上负号,这样损失函数就变为:
L(y^(i),y(i))=−log(P(y|x))=−(y^logy+(1−y^)log(1−y))L(y^(i),y(i))=−log(P(y|x))=−(y^logy+(1−y^)log(1−y))
当在m个数据的训练集上进行训练时,需要这m个数据的联合概率最大化,即联合概率分布最大化(这里假设m个样本服从独立同分布IID)
max∏1mP(y(i)|x(i))max∏1mP(y(i)|x(i))
这就是极大似然估计(Maximum Likelihood Estimate,MLE),由于loglog函数为单调递增函数,对上式进行loglog运算:
max∑1m−L(y^(i),y(i))max∑1m−L(y^(i),y(i))
由于梯度下降法要对优化目标函数求最小值,上式加入负号,为了便于后面的计算,进行缩放,除以m,得到:
min1m∑1mL(y^(i),y(i))min1m∑1mL(y^(i),y(i))
二分分类问题是根据输入XX来判断其是否属于某种类型,用1和0来表示。
图1 判断图片中是否有猫的二分类问题
图1为一个典型的二分类问题。输入为一张RGB图片的三个通道亮度值,将这三个通道的亮度值依次排列出来构成了输入XX,目标是判断图片中是否有猫,用输出y=1y=1或00来表示。当输入图片数量为m个,纬度为nxnx时,X∈Rnx×mX∈Rnx×m, y∈{0,1}y∈{0,1}。
2.2 logistic回归
继续上节的判断图片是否有猫的问题,二分类问题直接预测输出为11或00,本节讲的logistic回归问题,则是根据输入x∈Rnxx∈Rnx,计算图片有猫的概率y^=P(y=1|x)y^=P(y=1|x)。
最简单的办法是采用线性模型,将xx乘上权重w∈Rnxw∈Rnx,再加上偏置bb, 得到:
y^=wTx+by^=wTx+b
但是这样得到的y^y^极有可能小于00或大于11,而y^y^的取值范围只能是00到11之间。
logistic回归方法是将上面的y^y^代入到sigmoid函数中,sigmoid(z)=11+e−zsigmoid(z)=11+e−z,其形状如图2所示。
图2 sigmoid函数
sigmoid函数的函数值位于00到11之间。最终,我们得到了logistic模型的形式如下:
y^=11+e−(wTx+b)y^=11+e−(wTx+b)
logistic模型的建模过程就是求解权重ww和bb的过程。
2.3 logistic回归损失函数
判断logistic模型的好坏可以通过比较预测值y^y^和实际值yy之间的差别来实现,这里我们定义一个损失函数(loss function)或者叫误差函数(error function)L(y^,y)L(y^,y),训练模型的过程就是寻找ww和bb,使得损失函数最小的过程。
损失函数其中一个选择是使用平方误差,L(y^,y)=12(y^−y)2L(y^,y)=12(y^−y)2,但是这个损失函数在进行随机梯度下降时是非凸的,进行模型训练时只能得到局部最优解,很难得到全局最优解。
logistic回归分析使用的损失函数如下:
L(y^,y)=−(ylogy^+(1−y)log(1−y^))L(y^,y)=−(ylogy^+(1−y)log(1−y^))
如果y=1y=1,则L(y^,y)=−logy^L(y^,y)=−logy^,当ww和bb的取值使得损失函数L(y^,y)L(y^,y)值最小时,y^y^值最大,即最接近于目标值1,预测效果最佳,此时的ww和bb即为我们想要的模型参数。
如果y=0y=0,则L(y^,y)=−log(1−y^)L(y^,y)=−log(1−y^),当ww和bb的取值使得损失函数L(y^,y)L(y^,y)值最小时,y^y^值最小,即最接近于目标值0,预测效果最佳,此时的ww和bb即为我们想要的模型参数。
损失函数是在单个样本上计算的,代价函数(cost function)则是在m个样本的训练集上定义的,如下式所示:
J(w,b)=1m∑1mL(y^(i),y(i))=−1m∑1my(i)logy^(i)+(1−y(i))log(1−y^(i))J(w,b)=1m∑1mL(y^(i),y(i))=−1m∑1my(i)logy^(i)+(1−y(i))log(1−y^(i))
根据一个训练集来计算ww和bb时,要使得代价函数尽可能小。
2.4 梯度下降法
上节讲到,对logistic模型的训练过程就是寻找最佳的ww和bb使得代价函数J(w,b)J(w,b)最小的过程。代价函数J(w,b)J(w,b)是一个凸函数,其形状如图3所示。
图3 凸函数图示
其中ww可以是多维向量,这里为了方便绘图,采用了一维向量表示。
梯度下降法是一种重要的求解最优ww和bb的方法,原理如下:
图4 梯度下降法
对于任意给定ww初始值,根据w:=w−α⋅dww:=w−α⋅dw进行更新,其中dw=∂J(w,b)∂wdw=∂J(w,b)∂w,从图4可以看出,随着ww的不断更新,代价函数JJ不断减小,直到到达最小值。
参数bb的求解步骤跟ww的一样。
2.5 导数
略
2.6更多导数的例子
略
2.7 计算图
神经网络的计算是通过前向传播(forward propagation)实现的,计算出输出,紧接着是反向传播(back propagation)过程,用来计算梯度,并更新参数ww和bb。
下面引入计算图的概念,例如计算J=3(a+bc)J=3(a+bc),可以用下图表示:
图5 一个简单的计算图
JJ的计算分解为几个不同的流程,这是一个类似于前向传播的过程。
2.8 计算图的导数计算
为了计算上节中的导数,可以按照下图进行:
图6 计算图的导数计算流程
为了求出dJdudJdu,可以先计算出dJdvdJdv,再计算出dvdudvdu,那么
dJdu=dJdv⋅dvdudJdu=dJdv⋅dvdu
上式就是链式求导法则。
2.9 logistic回归中的梯度下降法
以单样本的logistic回归分析为例,说明如何进行梯度下降法。
图7 logistic回归分析主要步骤
图8 单样本logistic回归分析流程图
logistic回归分析的过程是这样的,先进行向前传播,根据初始权重WW、偏置bb和输入XX,计算出预测值y^y^,再进行反向传播,计算出权重WW、偏置bb的导数,并对其进行更新,也就是2.4节讲到的梯度下降法步骤。
在计算权重WW、偏置bb的导数时,可以根据流程图的分解来分部计算,依次求出:
∂L∂a=−ya+1−y1−a∂L∂a=−ya+1−y1−a
∂a∂z=a(1−a)∂a∂z=a(1−a)
∂z∂w1=x1∂z∂w1=x1
∂z∂w2=x2∂z∂w2=x2
∂z∂b=1∂z∂b=1
利用链式求导法则,得到:
∂L∂w1=(a−y)x1∂L∂w1=(a−y)x1
∂L∂w2=(a−y)x2∂L∂w2=(a−y)x2
∂L∂b=(a−y)∂L∂b=(a−y)
采用梯度下降法对WW和bb进行更新:
w:=w−α⋅∂L∂ww:=w−α⋅∂L∂w
b:=b−α⋅∂L∂bb:=b−α⋅∂L∂b
2.10 m个样本的梯度下降
上节的梯度下降是对单个样本进行的计算,优化的目标函数是损失函数LL。当给定一个包含mm个数据的训练集时,优化的是代价函数JJ,2.3节讲到,
J(w,b)=1m∑1mL(y^(i),y(i))J(w,b)=1m∑1mL(y^(i),y(i))
因此
∂J∂w1=1m∑m1∂L(i)∂w1∂J∂w1=1m∑1m∂L(i)∂w1
∂J∂w2=1m∑m1∂L(i)∂w2∂J∂w2=1m∑1m∂L(i)∂w2
......
∂J∂b=1m∑m1∂L(i)∂b∂J∂b=1m∑1m∂L(i)∂b
实现以上计算过程的伪代码如下:
J=0,dw1=0,dw2=0,...,b=0 for i =1 to m: z[i]=w.T*x[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+=dz[i]*x1[i] dw2+=dz[i]*x2[i] ... b+=dz[i] J/=m dw1/=m dw2/=m ... b/=m
在得到以上的dw1,dw2,..,bdw1,dw2,..,b值以后,应用一次梯度下降法,对WW和bb进行更新。
不过上面的代码中存在多个for循环,而for循环在深度学习的训练中会严重影响代码运行效率,下节将讲到如何使用向量化(Vectorization)的方法来替代for循环,从而提高计算效率。
2.11 向量化
在进行logistic回归分析时,输入XX一般是一维向量,X∈RnxX∈Rnx,权重WW也是一维向量,W∈RnxW∈Rnx,那么在计算z=WT⋅X+bz=WT⋅X+b时,如果使用for循环,则代码如下:
w=[w_1,w_2,...,w_nx],x=[x_1,x_2,x_nx] z=0 for i in range(n_x): z+=w[i]*x[i] z+=b
如果在python中用向量化来实现的话,可以直接用以下代码:
w=[w_1,w_2,...,w_nx],x=[x_1,x_2,x_nx] import numpy as np z=np.dot(w,b)+b
经过测试,向量化比for循环计算效率高300倍。
在CPU和GPU中都有并行化的指令,有时被成为SIMD(Single instruction multiple data)指令,意味着如果使用类似
np.dot这样的指令,能够充分利用并行化进行计算,显著提高计算效率。
2.12 向量化的更多例子
对2.10节中的logistic回归分析求梯度值的代码进行向量化改进,新的代码如下:
import numpy as np ''' J=0,dw1=0,dw2=0,...,b=0 the previous line changes to the following line''' J=0,dw=np.zeros((n_x,1)),...,b=0 for i =1 to m: z[i]=w.T*x[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+=dz[i]*x1[i] dw2+=dz[i]*x2[i] ... the previous lines changes to the following line''' dw=dz[i]*x[i] b+=dz[i] J/=m '''dw1/=m dw2/=m ... the previous line changes to the following line ''' dw/=m b/=m
2.13 向量化logistic回归
在logistic回归分析计算激活值zz时,输入W,XW,X均为向量,可以直接用以下代码实现:
Z=np.dot(W.T,X)+b A=sigmoid(Z)
其中
W.T是对W的转置操作,上述代码还使用了Python中的广播(broadcasting)功能。sigmoid函数是用户自定义的可以将向量Z作为输入,并输出向量A的函数。
2.13 向量化logistic回归的梯度输出
上节已经可对AA实现了向量化,又有标签YY是向量化的,则dZdZ可以直接计算:
db=np.sum(dZ)/m dw=np.dot(X,dZ.T)/m
总结起来,完整的向量化logistic回归分析代码为:
Z=np.dot(W.T,X)+b A=sigmoid(Z)
dZ=A-Y
dw=np.dot(X,dZ.T)/m
db=np.sum(dZ)/m
w-=alpha*dw
b-=alpha*db
2.15 至2.17
略
2.18 Logistic损失函数的解释
Logistic回归分析预测的函数y^y^表达式为:y^=sigmoid(wTx+b)y^=sigmoid(wTx+b)
y^y^是已知xx时,y=1y=1的概率值:y^=P(y=1|x)y^=P(y=1|x)
当y=1y=1时,预测得到的概率就等于y^y^
当y=0y=0时,预测得到的概率则等于1−y^1−y^
想要把这两个式子整合在一起,可以使用下面的函数:
P(y|x)=y^y(1−y^)1−yP(y|x)=y^y(1−y^)1−y
对于单个数据,Logistic模型获得最优的预测效果,意味着概率P(y|x)P(y|x)取最大值,由于loglog函数为单调递增函数,最大化P(y|x)P(y|x)等价于最大化log(P(y|x))log(P(y|x))。由于进行梯度下降法时,目标函数要求最小值,因此在前面加上负号,这样损失函数就变为:
L(y^(i),y(i))=−log(P(y|x))=−(y^logy+(1−y^)log(1−y))L(y^(i),y(i))=−log(P(y|x))=−(y^logy+(1−y^)log(1−y))
当在m个数据的训练集上进行训练时,需要这m个数据的联合概率最大化,即联合概率分布最大化(这里假设m个样本服从独立同分布IID)
max∏1mP(y(i)|x(i))max∏1mP(y(i)|x(i))
这就是极大似然估计(Maximum Likelihood Estimate,MLE),由于loglog函数为单调递增函数,对上式进行loglog运算:
max∑1m−L(y^(i),y(i))max∑1m−L(y^(i),y(i))
由于梯度下降法要对优化目标函数求最小值,上式加入负号,为了便于后面的计算,进行缩放,除以m,得到:
min1m∑1mL(y^(i),y(i))min1m∑1mL(y^(i),y(i))
相关文章推荐
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week2 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week3 浅层神经网络
- 吴恩达Coursera深度学习(4-1)卷积神经网络基础
- 吴恩达《深度学习-神经网络和深度学习》2--神经网络基础
- 吴恩达《深度学习工程师》Part1.Week3 浅层神经网络
- Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归
- 吴恩达《深度学习工程师》Part1.Week3 浅层神经网络
- 吴恩达《深度学习工程师》Part1.Week4 深层神经网络
- 吴恩达Deeplearning.ai专项课程笔记(一)-- 神经网络基础
- 吴恩达《深度学习工程师》Part1.Week3 浅层神经网络