吴恩达深度学习Deep Learning课程笔记

1.1 前言

课程安排:

1.神经网络和深度学习

内容:神经网络的基础,如何建立神经网络、深度神经网络、以及如何在数据时训练它们

2.提升深度神经网络

内容:深度学习方面的实践,严密地构建神经网络以及提升其表现,包括超参数调整、正则化、诊断偏差和方差、高级优化算法等

3.结构化机器学习工程

内容:分割数据集的方式,端到端深度学习,热门深度学习问题

4.CNN卷积神经网络

5.NLP:序列模型

RNN、LSTM

1.2 什么是神经网络

从简单的根据房子尺寸预测房价例子开始,拟合房价的过程从左抽象为右,输入房子尺寸,输出价格,这就是一个简单的神经网络,中间的圆圈就是一个独立的神经元。大的神经网络就是简单神经网络的堆叠

在这基础上,增加输入、比如卧室数量等,我们构建的网络也随之变得更复杂,如下:

 

在神经网络中,我们只需要输入特征,中间每个隐藏节点的具体表示由神经网络自己获取

2.1 二元分类

假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。我们用字母 y 来表示输出的结果标签。

在计算机中为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。简单表示如下图所示(注意它们的规模为5x4而不是64x64):

我们用一个特征向量 x 来表示这张图片,把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等图片中所有的红、绿、蓝像素值。如果图片的大小为64x64像素,那么向量 x 的总维度,将是64乘以64乘以3=12288,这是三个像素矩阵中像素的总量。我们用n来表示输入特征向量的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量 x 作为输入,然后预测输出结果 y 为1还是0,也就是预测图片中是否有猫:

符号定义 :

X:表示一个 n_x 维输入数据,大小为(n_{x}1);

y:表示输出结果,取值为 (0 , 1);

(x^{(i)},y^{(i)}):表示第 i 组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;

X=[x^{(1)},x^{(2)},\cdots,x^{(m)}]:表示所有的训练数据集的输入值,放在一个 n_x * m 的矩阵中,其中m 表示样本数目。有时候为了强调这是训练样本的个数,会写作 M_{train}​,当涉及到测试集的时候,使用 M_{test} 表示测试集的样本数;

Y=[y^{(1)},y^{(2)},\cdots,y^{(m)}]:对应表示所有训练数据集的输出值,维度为1*m

为了能把训练集表示得更紧凑一点,我们会定义一个矩阵用大写的 X 表示,它由输入向量 x^{(1)} x^{(2)} 等组成。我们把 x^{(1)} 作为第一列放在矩阵中, x^{(2)} 作为第二列, x^{(m)} 放到第 m 列,然后我们就得到了训练集矩阵 X,如下图。所以这个矩阵有 m 列,m 是训练集的样本数量,然后这个矩阵的高度记为 n_x,注意有时候可能因为其他某些原因,矩阵 X 会由训练样本按照行堆叠起来而不是列,如下图所示, x^{(1)}  的转置直到 x^{(m)} 的转置,但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单

同样的道理,为了能更加容易地实现一个神经网络,将标签 y 放在列中将会使得后续计算非常方便,所以我们定义大写的 Y 等于 y^{(1)},y^{(2)},\cdots,y^{(m)},规模为1乘以 m 的矩阵

2.2 逻辑回归

对于二元分类问题来讲,给定一个输入特征向量 X,它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,想要一个算法能够输出预测,你称之为 \hat{y}​,也就是对实际值 y 的估计。更正式地来说,你想让 \hat{y}​ 表示 y 等于1的一种可能性或者是机会,换句话说,你想让 \hat{y}​ 告诉你图片里是一只猫的机率有多大。我们用 w 来表示逻辑回归的参数,这也是一个 n_x 维向量(因为 w 实际上是特征权重,维度与特征向量相同),参数里面还有 b,这是一个实数(表示偏差)。所以给出输入以及参数之后,我们怎样产生输出预测值​,一件你可以尝试却不可行的事是让 \hat{y}=w^Tx+b

不可行的原因:因为你想让 \hat{y}​ 表示实际值 y 等于1的机率的话, \hat{y}​ 应该在0到1之间。但 w^Tx+b可能比1要大得多,或者甚至为一个负值。因此在逻辑回归中,我们的输出 \hat{y} 应该是等于由上面得到的线性函数式子作为自变量的sigmoid函数中,公式如下,将线性函数转换为非线性函数:

下图是sigmoid函数的图像,它平滑地从0走向1,曲线与纵轴相交的截距是0.5。我们通常都使用 z来表示 w^Tx+b 的值。

可见,如果 z 非常大,那么 e^{-z} 将会接近于0,关于 z 的sigmoid函数将会近似等于1除以1加上某个非常接近于0的项。相反地,如果 z 非常小或者说是一个绝对值很大的负数,那么 e^{-z} 这项会变成一个很大的数,关于 z 的sigmoid函数就会非常接近于0。因此当你实现逻辑回归时,你的工作就是去让机器学习参数 w 以及 b ,使得 \hat{y}​ 成为对 y=1 这一情况的概率的一个很好的估计。

符号说明:在某些例子里,会定义一个额外的特征称之为 x_0​,并且使它等于1,那么 X 就是一个 n_x​ 加1维的变量,sigmoid函数为 \hat{y}=\sigma(\theta^Tx)  。在这个备选的符号惯例里,参数向量为\theta_0,\theta_1,\theta_2,\cdots,\theta_{n_x}​​,这里 \theta_0 充当 b,是一个实数,而剩下的 \theta_1​ 直到 \theta_{n_x}​​ 充当 w

2.2 逻辑回归损失函数

为什么需要代价函数:

为了训练逻辑回归模型的参数 w 和参数 b ,我们需要一个代价函数,通过训练代价函数来得到参数 w 和参数 b

损失函数:

损失函数又叫做误差函数,Loss function: L(\hat{y},y),我们通过这个称为 L 的损失函数,来衡量预测输出值和实际值有多接近。

我们在逻辑回归中用到的损失函数是:

L(\hat{y},y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y})

为了更好地理解这个损失函数怎么起作用,我们举两个例子:

y=1 时损失函数 L=-\log(\hat{y}),如果想要损失函数 L 尽可能得小,那么 \hat{y}​ 就要尽可能大,因为sigmoid函数取值 [0,1],所以 \hat{y}​ 会无限接近于1。

y=0 时损失函数 L=-\log(1-\hat{y}),如果想要损失函数 L 尽可能得小,那么 \hat{y}​ 就要尽可能小,所以 \hat{y}​ 会无限接近于0。

损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的总代价函数,即对 m 个样本的损失函数求和然后除以 m

J(w,b)=\frac1m\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})=\frac1m\sum_{i=1}^m(-y^{(i)}\log\hat{y}^{(i)}-(1-y^{(i)})\log(1-\hat{y}^{(i)}))

在训练逻辑回归模型时候,我们需要找到合适的 wb ,来让代价函数 J 的总代价降到最低。 根据我们对逻辑回归算法的推导及对单个样本的损失函数的推导和针对算法所选用参数的总代价函数的推导,结果表明逻辑回归可以看做是一个非常小的神经网络。

2.4 梯度下降法

梯度下降法的形象化说明:

在这个图中,横轴表示你的空间参数 wb ,在实践中, w 可以是更高的维度,但是为了更好地绘图,我们定义wb ,都是单一实数,代价函数(成本函数) J(w,b) 是在水平轴 wb 上的曲面,因此曲面的高度就是 J(w,b) 在某一点的函数值。我们所做的就是找到使得代价函数(成本函数) J(w,b) 函数值是最小值时,对应的参数 wb

可以看到,成本函数是一个凸函数,如下:

而下图就与上图有些相反,它是非凸的并且有很多不同的局部最小值。

凸函数这性质是我们使用这个特定成本函数的重要原因之一

1.为了找到最佳参数值,我们首先初始化 wb

可以用如图那个小红点来初始化参数 wb ,也可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该都达到同一点或大致相同的点。

我们以如图的小红点的坐标来初始化参数  wb

2. 朝最陡的下坡方向走一步,不断地迭代

我们朝最陡的下坡方向走一步,如图,走到了如图中第二个小红点处。

我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如图,经过两次迭代走到第三个小红点处。

3.直到走到全局最优解或者接近全局最优解的地方 

通过以上的三个步骤我们可以找到全局最优解,也就是代价函数(成本函数)J(w,b)  这个凸函数的最小值点。

梯度下降法的细节化说明(仅有一个参数)

假定代价函数(成本函数)J(w) 只有一个参数 w ,即用一维曲线代替多维曲线,这样可以更好地画出图像。

迭代就是不断重复做如图的公式:

:= 表示更新参数,

\alpha 表示学习率(learning rate),用来控制步长(step),即向下走一步的长度 \frac{dJ(w)}{dw} 就是函数 J(w)w 求导(derivative),在代码中我们会使用 dw 表示这个结果

对于导数更加形象化的理解就是斜率(slope),如图该点的导数就是这个点相切于 J(w) 的小三角形的高除宽。假设我们以如图点为初始化点,该点处的斜率的符号是正的,即 \frac{dJ(w)}{dw}>0 ,所以接下来会向左走一步。

整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。

假设我们以如图点为初始化点,该点处的斜率的符号是负的,即 \frac{dJ(w)}{dw}<0 ,所以接下来会向右走一步。

整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。

梯度下降法的细节化说明(两个参数)

逻辑回归的代价函数(成本函数) J(w,b) 是含有两个参数的。

\partial 表示求偏导符号,可以读作round,\frac{\partial J(w,b)}{\partial w}​ 就是函数 J(w,b)w 求偏导,在代码中我们会使用 dw 表示这个结果, \frac{\partial J(w,b)}{\partial b}​ 就是函数 J(w,b)b 求偏导,在代码中我们会使用 db 表示这个结果, 小写字母 d 用在求导数(derivative),即函数只有一个参数的情况下, 偏导数符号 \partial 用在求偏导(partial derivative),即函数含有两个以上的参数的情况下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值