神经网络基础之逻辑回归

转载于[添加链接描述](https://blog.csdn.net/red_stone1/article/details/77851177)

红色石头的个人网站:redstonewill.com

上节课我们主要对深度学习(Deep Learning)的概念做了简要的概述。我们先从房价预测的例子出发,建立了标准的神经网络(Neural Network)模型结构。然后从监督式学习入手,介绍了Standard NN,CNN和RNN三种不同的神经网络模型。接着介绍了两种不同类型的数据集:Structured Data和Unstructured Data。最后,我们解释了近些年来深度学习性能优于传统机器学习的原因,归结为三个因素:Data,Computation和Algorithms。本节课,我们将开始介绍神经网络的基础:逻辑回归(Logistic Regression)。通过对逻辑回归模型结构的分析,为我们后面学习神经网络模型打下基础。

1. Binary Classification

我们知道逻辑回归模型一般用来解决二分类(Binary Classification)问题。二分类就是输出y只有{0,1}两个离散值(也有{-1,1}的情况)。我们以一个图像识别问题为例,判断图片中是否有猫存在,0代表noncat,1代表cat。主要是通过这个例子简要介绍神经网络模型中一些标准化的、有效率的处理方法和notations。

这里写图片描述

如上图所示,这是一个典型的二分类问题。一般来说,彩色图片包含RGB三个通道。例如该cat图片的尺寸为(64,64,3)。在神经网络模型中,我们首先要将图片输入x(维度是(64,64,3))转化为一维的特征向量(feature vector)。方法是每个通道一行一行取,再连接起来。由于64x64x3=12288,则转化后的输入特征向量维度为(12288,1)。此特征向量x是列向量,维度一般记为nxnx,1),b是一个常数项。这样,逻辑回归的线性预测输出可以写成:

y^=wTx+by^=wTx+b
。这样从维度上来看,x和w都会增加一维。但在本课程中,为了简化计算和便于理解,Andrew建议还是使用上式这种形式将w和b分开比较好。

上式的线性输出区间为整个实数范围,而逻辑回归要求输出范围在[0,1]之间,所以还需要对上式的线性函数输出进行处理。方法是引入Sigmoid函数,让输出限定在[0,1]之间。这样,逻辑回归的预测输出就可以完整写成:

y^=Sigmoid(wTx+b)=σ(wTx+b)y^=Sigmoid(wTx+b)=σ(wTx+b)

Sigmoid函数是一种非线性的S型函数,输出被限定在[0,1]之间,通常被用在神经网络中当作激活函数(Activation function)使用。Sigmoid函数的表达式和曲线如下所示:

Sigmoid(z)=11+ezSigmoid(z)=11+e−z

这里写图片描述

从Sigmoid函数曲线可以看出,当z值很大时,函数值趋向于1;当z值很小时,函数值趋向于0。且当z=0时,函数值为0.5。还有一点值得注意的是,Sigmoid函数的一阶导数可以用其自身表示:

σ(z)=σ(z)(1σ(z))σ′(z)=σ(z)(1−σ(z))
与真实值越相似越好。我们把单个样本的cost function用Loss function来表示,根据以往经验,如果使用平方错误(squared error)来衡量,如下所示:

L(y^,y)=12(y^y)2L(y^,y)=12(y^−y)2
与真实样本输出y的接近程度。平方错误其实也可以,只是它是non-convex的,不利于使用梯度下降算法来进行全局优化。因此,我们可以构建另外一种Loss function,且是convex的,如下所示:

L(y^,y)=(ylog y^+(1y)log (1y^))L(y^,y)=−(ylog y^+(1−y)log (1−y^))
与真实样本输出y的平均接近程度。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)=1m∑i=1mL(y^(i),y(i))=−1m∑i=1m[y(i)log y^(i)+(1−y(i))log (1−y^(i))]

Cost function已经推导出来了,Cost function是关于待求系数w和b的函数。我们的目标就是迭代计算出最佳的w和b值,最小化Cost function,让Cost function尽可能地接近于零。

其实逻辑回归问题可以看成是一个简单的神经网络,只包含一个神经元。这也是我们这里先介绍逻辑回归的原因。

4. Gradient Descent

我们已经掌握了Cost function的表达式,接下来将使用梯度下降(Gradient Descent)算法来计算出合适的w和b值,从而最小化m个训练样本的Cost function,即J(w,b)。

由于J(w,b)是convex function,梯度下降算法是先随机选择一组参数w和b值,然后每次迭代的过程中分别沿着w和b的梯度(偏导数)的反方向前进一小步,不断修正w和b。每次迭代更新w和b后,都能让J(w,b)更接近全局最小值。梯度下降的过程如下图所示。

这里写图片描述

梯度下降算法每次迭代更新,w和b的修正表达式为:

w:=wαJ(w,b)ww:=w−α∂J(w,b)∂w

b:=bαJ(w,b)bb:=b−α∂J(w,b)∂b
表示对多个变量中某个变量求偏导数。

梯度下降算法能够保证每次迭代w和b都能向着J(w,b)全局最小化的方向进行。其数学原理主要是运用泰勒一阶展开来证明的,可以参考我的另一篇博客中的Gradient Descent有提到如何推导:台湾大学林轩田机器学习基石课程学习笔记10 – Logistic Regression

5. Derivatives

这一部分的内容非常简单,Andrew主要是给对微积分、求导数不太清楚的同学介绍的。梯度或者导数一定程度上可以看成是斜率。关于求导数的方法这里就不再赘述了。

6. More Derivative Examples

Andrew给出了更加复杂的求导数的例子,略。

7. Computation graph

整个神经网络的训练过程实际上包含了两个过程:正向传播(Forward Propagation)和反向传播(Back Propagation)。正向传播是从输入到输出,由神经网络计算得到预测输出的过程;反向传播是从输出到输入,对参数w和b计算梯度的过程。下面,我们用计算图(Computation graph)的形式来理解这两个过程。

举个简单的例子,假如Cost function为J(a,b,c)=3(a+bc),包含a,b,c三个变量。我们用u表示bc,v表示a+u,则J=3v。它的计算图可以写成如下图所示:

这里写图片描述

令a=5,b=3,c=2,则u=bc=6,v=a+u=11,J=3v=33。计算图中,这种从左到右,从输入到输出的过程就对应着神经网络或者逻辑回归中输入与权重经过运算计算得到Cost function的正向过程。

8. Derivatives with a Computation Graph

上一部分介绍的是计算图的正向传播(Forward Propagation),下面我们来介绍其反向传播(Back Propagation),即计算输出对输入的偏导数。

还是上个计算图的例子,输入参数有3个,分别是a,b,c。

首先计算J对参数a的偏导数。从计算图上来看,从右到左,J是v的函数,v是a的函数。则利用求导技巧,可以得到:

Ja=Jvva=31=3∂J∂a=∂J∂v⋅∂v∂a=3⋅1=3

根据这种思想,然后计算J对参数b的偏导数。从计算图上来看,从右到左,J是v的函数,v是u的函数,u是b的函数。可以推导:

Jb=Jvvuub=31c=312=6∂J∂b=∂J∂v⋅∂v∂u⋅∂u∂b=3⋅1⋅c=3⋅1⋅2=6

最后计算J对参数c的偏导数。仍从计算图上来看,从右到左,J是v的函数,v是u的函数,u是c的函数。可以推导:

Jc=Jvvuuc=31b=313=9∂J∂c=∂J∂v⋅∂v∂u⋅∂u∂c=3⋅1⋅b=3⋅1⋅3=9

为了统一格式,在程序代码中,我们使用da,db,dc来表示J对参数a,b,c的偏导数。

这里写图片描述

9. Logistic Regression Gradient Descent

现在,我们将对逻辑回归进行梯度计算。对单个样本而言,逻辑回归Loss function表达式如下:

z=wTx+bz=wTx+b

y^=a=σ(z)y^=a=σ(z)

L(a,y)=(ylog(a)+(1y)log(1a))L(a,y)=−(ylog(a)+(1−y)log(1−a))
,最后的Loss function如下所示:

这里写图片描述

然后,计算该逻辑回归的反向传播过程,即由Loss function计算参数w和b的偏导数。推导过程如下:

da=La=ya+1y1ada=∂L∂a=−ya+1−y1−a

dz=Lz=Laaz=(ya+1y1a)a(1a)=aydz=∂L∂z=∂L∂a⋅∂a∂z=(−ya+1−y1−a)⋅a(1−a)=a−y
和b进行求导了。

dw1=Lw1=Lzzw1=x1dz=x1(ay
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值