深度学习笔记之Andrew Ng(2)

由于吴恩达离职百度,自立门户,他最近在网上特别火,连带着他的各种课程也跟着火了起来,本系列是有关于吴恩达在Coursera上面发布的,关于深度学习与神经网络的课程笔记。给有中文学习需求的同学分享一下,同时也帮助我自己梳理一下知识网络,如有遗漏与错误,望CSDN的各位大神能够指点出来。

WEEK2

二元分类(Binary Classification):

首先讲到了二元分类,也就是我们常说的是否问题,所以这里我们要解决的问题是一个关于0和1的分类问题。Andrew的课程中使用逻辑回归来应对这个问题,课程中使用的是判断一张图片是否为小猫图片的例子。

确定输入数据:

首先需要的是输入数据,跳过图片分层的问题,我们单纯的把每个像素点从图像中拿出来,reshape成一个新的vector,作为输入,假设我们有m个图像作为训练集,那么全部的训练集为:{(X(1),Y(1)),(X(2),Y(2)),……(X(m),Y(m))}。输入数据的结构为:
这里写图片描述

逻辑回归:
我们熟悉的线性回归方程,在分类问题中,是不能够使用的,因为我们需要得到的预测Y是一个概率p,p代表了预测值是每一种输出可能性的概率,那种可能性最大,我们就会把预测值归为该类。那么这个时候,需要的是一个分类函数,这里我们使用逻辑回归函数用作分类。

这里写图片描述

先上图,这是我从百度知道扒过来的一张,sigmoid函数的图像,逻辑回归使用的是sigmoid函数,简单来说,做一个二元分类的时候,对于本图,我们规定sigmoid函数大于0.5的时候,该输入的分类为1,小于0.5时,该输入的分类为0.同样,作为标准NN的激活函数,sigmoid函数在之后的学习中应该会多次出场,想要有深入了解sigmoid函数,给大家一个链接:
http://blog.jobbole.com/88521/

损失函数(cost function):
损失函数(Cost Function)是第一周的重点讲述内容,其实不管在哪篇机器学习的入门课程中,cost function都是重中之重。损失函数代表了当前的h的质量,损失函数越小,证明h的质量越高。机器学习,是通过一个学习的过程而的到一个具有在处理同一类数据通用的方法h。那么h是在这个学习过程里面不断学习完善的,在这个学习的过程中,我们需要用到损失函数来对h进行调整。

下面给出损失函数的公式:
这里写图片描述
其中,yi^为预测值,yi为真实值,J是损失函数,那么可以看出来,J是预测值与真实值的平方和的平均数,而J越小,上文提到过,当前这个函数的预测准确度就会越高。

之后Andrew举了两个例子,挑一个比较有代表性的说一下,由于我们目前所讨论的都是线性回归问题,这部分用到的是初中数学的斜率问题。

扫描二维码关注公众号,回复: 17168336 查看本文章

这边引入了一个等值线(contour line),下图右侧的就是一个等值线,图中的三个绿色点代表了三个斜率不同,但是损失值相同的三条回归方程线。
这里写图片描述
通过确定与比对损失值,我们可以看到,在等值线中间的为损失值最小的回归方程,那么也就是相对于目前这个问题的最优解。如下图:
这里写图片描述

梯度下降:

好了,说完了损失函数,那么就要开始说如何通过损失函数,让我们的处理方法h逐渐变得合理,贴近最优解了。

现在我们假设我们的h=θ0+ θ1*x那么可以把损失函数J构造成一个依赖于θ0和θ1的函数,那么如下图所示,我们只需要在开始的时候,随机定义一个θ0和θ1,然后找到该点的切线,然后根据梯度下降原理, 通过一个步长α(也就是学习率),来一步步找到最优解。
这里写图片描述
不过在这个图片中,大家可以看到热点图中,有两个表明红色箭头的位置,都是蓝色最优解,而且左边的蓝色明显比右边的要颜色更深,这代表着左边的损失函数值更小,但是通过目前的随机点,我们得到的是一个局部的最优解J2,而不是全局最优解J。这个是一个正常现象,梯度下降的一个缺点就是容易陷入局部最优,那么解决的方法就是使用模拟退火法,这个我猜测Andrew在之后的课程中会提及,我也会在之后的博客中写明这个问题,但是目前,可以带着这个问题,先继续往下看。

下面给出的是梯度下降的方程式:
这里写图片描述
通过不断地调整θj,我们最终会得到一个最优解θj。
这边Andrew强调了关于设置步长α的问题,假如α过大,那么我们可能会陷入一个死循环,每次都在最优解两侧不断徘徊而无法达到最优解,而如果α多小,我们就需要耗费太长时间来得到最优解,那么一个很好的解决办法是,让α自动的减小,而使θj能以最快的时间逼近最优解而不用担心第一种问题。
这里写图片描述

计算图(Computation Graph):
什么是计算图结构
(1)可以将计算图看作是一种用来描述函数的语言,图中的节点代表函数的输入,图中的边代表这个函数操作。
(2)看到一个计算图的例子,我们就可以很容易地写出其对应的函数。

计算图可以用来表示每一步的函数操作,那么就很自然的引出来了正向传播与逆向传播。
这里写图片描述
正向方向,我们称b与c的操作为b*c,那么u由bc两个输入节点得出,推到最后一步,最终的输出J=3*v,这算是正向传播,那么反向传播(Back Propagation)在这个图中如何表示呢?
还是由最简单的u=b*c,那么u的变化有多少是由b影响的呢,这个时候,只需要求出函数u关于b的偏导数就可以了,为2。那么同理,我们要的职一个输出Y的变化有多少是由某一个输入影响的,就求出关于该输出的偏导数。
算式:
这里写图片描述
描述了函数J关于a的偏导数是如何计算的。

最后说的是,如何把逻辑回归和逆向传播结合到一起的算式推导:
这里写图片描述
上图为逻辑回归的计算图,那么作为思考,大家可以想一想函数L关于输入x1,w1,x2,w2,b五个参数的偏导数。

WEEK2 END

猜你喜欢

转载自blog.csdn.net/jxsdq/article/details/78129706