deeplearning.ai 笔记 Specialization 1 week 2 Logistic Regression as a Neural Network

本周回顾神经网络的基础知识。

对于深度学习,有些技巧是值得学习的。比如,不显式的使用for循环遍历整个训练集。本周将会展示正向传播与反向传播,以及逻辑回归等。

逻辑回归是一个二分类算法

Binary Classification

举例:对于一幅图像来说(假设图片大小为64*64),他在计算机中是由三个64*64的矩阵表示的(红绿蓝三元色),每个像素有不同的数值,如何把一幅图片作为特征向量输入呢?

输入x是将图片三层的各个value依次填入到一个n*1的向量中,其中n=64*64*3=12288,输入这个向量后,神经网络要给出的结果是0或者1(对于该图片来说,0代表不是猫,1代表是猫)。

一些以后会用到的记号:

m为训练样本,m下标test为测试样本。

输入X:nx行m列的矩阵,在Python中X.shape()可以得到nx和m。

输出Y:0或1


下面实现逻辑回归算法


逻辑回归想要做什么呢?

输入x,输出yhat(为一个y=1的概率),参数:w(与x同样为nx维向量), b(常数)

输出yhat = wTx+b,但是这样对于二分的效果不好,可能是一个负数。可以用sigmoid函数(如图)来计算,这样yhat会落在0到1之间,z=wTx+b很大时yhat约等于1,很小时yhat约等于0。

另一种记法:有些课程中定义了红色字体的表示方法,但本课程中不使用红色字体的记法,因为分开w and b更容易理解。

Logistic Regression Cost Function


逻辑回归的代价函数(cost function):

y=sigmoid(wTx + b),给出{(x1,y1)...(xm,ym)},想要yhat接近y,这时为了优化逻辑回归模型的参数W和b,需要一个代价函数。

ps:上括号代表的是数据

定义损失函数(Loss function)时可能会想到平方差,L(yhat,y)=1/2 *(yhat-y)**2,但是在这里不会这么用,因为研究参数时,所讨论的优化问题会变成非凸问题,产生多个局部最优解,梯度下降算法也就无法找到全局最优解。

实际使用的损失函数为:


当y=1时,L(yhat,y)=-log(yhat),想要log(yhat)大,yhat就应该尽量大;

当y=0时,L(yhat,y)=-log(1-yhat),想要log(1-yhat)大,yhat应该尽量小。

代价函数检测优化组的运行情况:


代价函数适用于单一的优化示例(training example),损失函数反映的是参数成本(cost of your parameters)

优化逻辑回归模型时,要试着去寻找w和b,以此来缩小整体成本( 

the loss function for training example and the
 
overall cost function for the parameters of your algorithm.
 )


接下来看看如何使用梯度下降模型去训练(学习)调整w和b:

Gradient Descent



初始化w,b时一般会用zero(随机random也可以),因为是梯度下降总会向着最低的点(最优)找最陡的路走到。上幅图中说凸函数就是要找最优解,而非凸函数会使得梯度下降陷入局部最优解而无法进行全局最优解的寻找。在本图中,w也可以是高维的,但是为了看起来直观,用了一维。

红色的点沿着最陡的方向迭代,知道到达(接近)最低点(最优解)。

接下来用一维曲线代替多维(省略了b):


w每次赋值:w - alpha * dJ(w)/dw(其中dJ(w)/dw也简写为dw),在图中如果w在最低点的右边,由导数的定义可知dw是该点在曲线上的斜率,此时大于0,所以w每次迭代变小,慢慢接近最低点;若w在最低点左边,导数为负,w变大而接近最低点。可以看出对于梯度下降,w的初始值不影响算法的收敛。

Derivatives

微积分和导数的基本知识(如果熟悉可以跳过)


More Derivative Examples


Computation graph

计算图能解释为什么使用正向传播来计算神经网络的输出以及使用反向传播来计算微分。


计算图举例:3(a+bc),下节讲红色箭头表示的反向传播

Derivatives with a Computation Graph

链式法则:改变a时会改变v,进一步改变J



Logistic Regression Gradient Descent

在逻辑回归,我们要做的就是修改参数w,b来使L最小。


展示了反向传播的过程以及导数推导(建议自己推导一遍)

这是在一个例子下的情况,下面介绍m个例子的情况

Gradient Descent on m Examples



对于m个数据,求他们的平均值即可


这样写虽然可以,但是有for循环在数据集很大的情况下会使得代码低效。所以在深度学习中使用向量化去处理数据十分必要。

接下来讲如何向量化(vectorization)

猜你喜欢

转载自blog.csdn.net/zbazz/article/details/79841470