Deeplearning,ai之学习笔记 Week2 Neural Networks Basics


Tasks:
Build a logistic regression model, structured as a shallow neural network
Implement the main steps of an ML algorithm, including making predictions, derivative computation, and gradient descent.
Implement computationally efficient, highly vectorized, versions of models.
Understand how to compute derivatives for logistic regression, using a backpropagation mindset.
Become familiar with Python and Numpy
Work with iPython Notebooks
Be able to implement vectorization across multiple training examples

Logistic Regression as a Neural Network

Binary Classification 二分分类

通过这一节,我们将简单了解二分分类,并规定一些我们将在后面使用到的符号。

概念

在二分分类问题中,输出是一个离散化的数值,0或1.

Example: Cat vs Non-cat
给定的输入是一张图片中,我们需要判断图片中是否有cat,有则输出1,没有则输出0.

训练样本的形式化表示

对于刚刚那个cat的例子,我们可以更加形式化地描述这个过程:给定一张图片,这个图片在计算机里的存储方式其实是3个矩阵——RGB,这里不妨设图片像素是64 * 64。那么我们可以将它的RGB信息按顺序填成一列。就得到了一个列向量x。我们设输入就是这个x,这个x是一个64 *64 *3维的向量,x称作是它的特征向量,它的维数我们称作是n。然后经过判断后,我们会得到一个结果,有cat或者无cat。我们令这个结果为y。对于一个数据集,我们可以有m个输入数据,也就是m张图片,也就是m个x。每一个x都有一个确定的y与之对应,那就有m个y。形成对应关系的x和y,我们将它们写成一个二元组 ( x , y ) (x, y) (x,y)这样就表示出了一组数据和它的输出。

我们还想体现一下一整个数据集,也就是输入,和输出之间的关系。
将输入的特征列向量 x 1 , x 2 . . . x m x_1,x_2...x_m x1x2...xm,按照顺序列好形成一个矩阵 X X X,这个 X X X就是我们用来表示总体的输入的矩阵。同理,我们将所有的y按照顺序列好,形成一个矩阵Y,这就是我们用来表示输出的矩阵。

这里会有一个小问题:为什么x不做成一个行向量的模式呢?Andrew的回答是在神经网络中,我们发现列向量使用起来更好。那么让我们继续学习来看吧!

Logistic Regression logistic回归

logistic回归是一种用于监督学习,当输出为0或1时的算法。它的目标是减小通过数据来判断结果时可能出现的错误。

仍然以Cat作为例子,给出一个图片,它的特征向量x也已经给出,我们想通过这个算法来输出Cat在这个图片里出现的可能性。即:
G i v e n   x , y ^ = P ( y = 1 ∣ x ) , w h e r e   0 ⩽ y ^ ⩽ 1 Given\ x, \hat{y}=P(y=1|x),where \ 0\leqslant \hat{y} \leqslant1 Given x,y^=P(y=1x),where 0y^1
在logistic回归中,我们会用到两个参数,w和b。
w代表权重,是一个n维的列向量,和x的维数相同。
b代表阀值,是一个实数。

我们先构造一个输出z,这里输出是实数,我们输出的实数z又是什么呢?既然我们刚刚定义了w和b,我们可以很快地得到一个线性的z,即 z = w T x + b z=w^Tx+b z=wTx+b.线性的z有一些坏处,比如z有可能取到负值或者很大的正数。但是我们需要得到的结果是一个概率,是一个0到1间的值。所以我们需要将它修改一下。引入Sigmoid函数。

我们的输出由这样的一个函数形成,Sigmoid函数 σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{−z}} σ(z)=1+ez1
它的图像是这样的
在这里插入图片描述

我们从图像可以发现这个函数的一些特点:
1.z是一个很大的正数,那么 σ ( z ) = 1 \sigma(z) =1 σ(z)=1
2.z是一个很小的负数,那么 σ ( z ) = 0 \sigma(z) =0 σ(z)=0
3.z=0,则 σ ( z ) = 0.5 \sigma(z) =0.5 σ(z)=0.5

引入 σ ( z ) \sigma(z) σ(z)函数后,我们就能将y表示出来了
y ^ = σ ( w T x + b ) \hat{y}=\sigma(w^Tx+b) y^=σ(wTx+b)

接下来要怎么做呢?让我们继续吧!

Logistic Regression Cost Function logistic回归损失函数和成本函数

上面我们定义了输出函数是如何形成的,那么接下来的问题是:w和b该如何获得呢?或者说,当我们确定了一对w和b时,我们如何来评价它所形成的模型的好坏呢?

Loss(Error)Function 损失函数——评价算法的效果

我们想通过一个函数来描述 y ^ \hat{y} y^ y y y之间的差距,我们将其定义为损失函数。一个简单的想法是以 y ^ \hat{y} y^ y y y的差的平方来判断。但是在实际运用中,我们以此定义的损失函数不是一个凸函数,不利于我们后面使用梯度判断法。所以我们想要构造一个凸函数来实现我们的目标。

这里,我们定义损失函数为:
L ( y ^ ( i ) , y ( i ) ) = − [ y ( i ) l o g ( y ^ ( i ) ) + ( 1 − y ^ ( i ) l o g ( 1 − y ( i ) ) ] L(\hat{y}^{(i)}, y^{(i)})=-[ y^{(i)}log(\hat{y}^{(i)})+(1-\hat{y}^{(i)}log(1-y^{(i)}) ] L(y^(i),y(i))=[y(i)log(y^(i))+(1y^(i)log(1y(i))]
对于一个预测结果,我们总是希望它的损失函数是尽量小的,所以:
1.如果 y ( i ) = 1 y^{(i)}=1 y(i)=1: L ( y ^ ( i ) , y ( i ) ) = − l o g ( y ^ ( i ) ) L(\hat{y}^{(i)}, y^{(i)})=-log(\hat{y}^{(i)}) L(y^(i),y(i))=log(y^(i))那么 y ^ ( i ) \hat{y}^{(i)} y^(i)就会趋于1;
2.如果 y ( i ) = 0 y^{(i)}=0 y(i)=0: L ( y ^ ( i ) , y ( i ) ) = − l o g ( 1 − y ( i ) ) L(\hat{y}^{(i)}, y^{(i)})=-log(1-y^{(i)}) L(y^(i),y(i))=log(1y(i))那么 y ^ ( i ) \hat{y}^{(i)} y^(i)就会趋于0;

Cost Function 成本函数——衡量w和b在训练集上的效果

我们定义成本函数为整个样本在参数w和b下的平均损失,我们在训练中所需要做到的,就是找到合适的w和b,使得成本函数最小。
成本函数定义如下:
J ( w , b ) = − 1 m ∑ i = 1 m [ ( [ y ( i ) l o g ( y ^ ( i ) ) + ( 1 − y ^ ( i ) l o g ( 1 − y ( i ) ) ] J(w,b)=-\frac{1}{m}\sum_{i=1}^m[([ y^{(i)}log(\hat{y}^{(i)})+(1-\hat{y}^{(i)}log(1-y^{(i)}) ] J(w,b)=m1i=1m[([y(i)log(y^(i))+(1y^(i)log(1y(i))]
结果表明,logistic回归可以看作是一个非常小的神经网络,接下来我们会学习到一个神经网络到底能做什么,继续!

Gradient Descent 梯度下降法

我们通过之前的小节,已经定义了损失函数和成本函数,此节我们将解决如何得到参数w和b。通过成本函数,我们知道,想要得到的w和b要使得成本函数最小。所以我们采用了如下的梯度下降法来解决这个问题。

首先,我们知道,前面定义的成本函数是一个凸函数,它会存在一个最(小)值。而这个最小值就是我们所对应的w和b,就是我们所期望的w和b。

然后我们要如何得到这个最小值呢?当然我们会从一个初始值出发来寻找,这里的初始值可以是任意的。我们需要注意到梯度的概念,梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
在这里插入图片描述
比如这里,我们可以发现这是一个凸函数,它有一个最小值。对于我们的成本函数 J ( w , b ) J(w,b) J(w,b)从任意一个点出发,我们沿着当前所在点的梯度方向走,就可以走到那个最低点 ( w m i n , b m i n ) (w_{min},b_{min}) (wmin,bmin)

具体的算法定义如下(伪代码):

Gradient Descent(w, b)
{
w : = w − α d J ( w ) d w w := w - \alpha\frac{dJ(w)}{dw} w:=wαdwdJ(w)
b : = b − α d J ( b ) d b b := b - \alpha\frac{dJ(b)}{db} b:=bαdbdJ(b)
if(dJ(w)/dw == 0 && dJ(b)/dj == 0)
return
Gradient Descent(w, b)
}

Derivatives 导数

这辈子都不会忘记怎么求导的(滑稽)
要是真忘了,就看看工数吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值