目录第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第二周:神经网络的编程基础 (Basics of Neural Network programming)2.1 二分类(Binary Classification)这周我们将学习神经网络的基础知识,其中需要注意的是,当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含𝑚个样本的训练集,你很可能习惯于用一个 for 循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用 for 循环来遍历整个训练集,所以在这周的课程中你将学会如何处理训练集。 另外在神经网络的计算中,通常先有一个叫做前向暂停(forward pause)或叫做前向传播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播(backward propagation)的步骤。所以这周我也会向你介绍为什么神经网络的训练过程可以分为前向传播和反向传播两个独立的部分。 在课程中我将使用逻辑回归(logistic regression)来传达这些想法,以使大家能够更加容易地理解这些概念。即使你之前了解过逻辑回归,我认为这里还是有些新的、有趣的东西等着你去发现和了解,所以现在开始进入正题。 逻辑回归是一个用于二分类(binary classification)的算法。首先我们从一个问题开始说起,这里有一个二分类问题的例子,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签 1 作为结果;如果识别出不是猫,那么输出标签 0 作为结果。现在我们可以用字母𝑦来表示输出的结果标签,如下图所示: 我们来看看一张图片在计算机中是如何表示的,为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为 64x64 像素,那么你就有三个规模为 64x64 的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为 5x4 而不是 64x64,如下图所示:
用一对(𝑥, 𝑦)来表示一个单独的样本,𝑥代表𝑛𝑥维的特征向量,𝑦 表示标签(输出结果)只能为 0 或 1。 而训练集将由𝑚个训练样本组成,其中(𝑥(1), 𝑦(1))表示第一个样本的输入和输出,(𝑥(2), 𝑦(2))表示第二个样本的输入和输出,直到最后一个样本(𝑥(𝑚), 𝑦(𝑚)),然后所有的这些一起表示整个训练集。有时候为了强调这是训练样本的个数,会写作𝑀𝑡𝑟𝑎𝑖𝑛,当涉及到测试集的时候,我们会使用𝑀𝑡𝑒𝑠𝑡来表示测试集的样本数。 最后为了能把训练集表示得更紧凑一点,我们会定义一个矩阵用大写𝑋的表示,它由输入向量𝑥(1)、𝑥(2)等组成,如下图放在矩阵的列中,所以现在我们把𝑥(1)作为第一列放在矩阵中,𝑥(2)作为第二列,𝑥(𝑚)放到第𝑚列,然后我们就得到了训练集矩阵𝑋。所以这个矩阵有𝑚列,𝑚是训练集的样本数量,然后这个矩阵的高度记为𝑛𝑥,注意有时候可能因为其他某些原因,矩阵𝑋会由训练样本按照行堆叠起来而不是列,如下图所示:𝑥(1)的转置直到𝑥(𝑚)的转置,但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单: 现在来简单温习一下:𝑋是一个规模为𝑛𝑥乘以𝑚的矩阵,当你用 Python 实现的时候,你会看到 X.shape,这是一条 Python 命令,用于显示矩阵的规模,即 X.shape 等于(𝑛𝑥, 𝑚),𝑋是一个规模为𝑛𝑥乘以𝑚的矩阵。所以综上所述,这就是如何将训练样本(输入向量𝑋的集合)表示为一个矩阵。 那么输出标签𝑦呢?同样的道理,为了能更加容易地实现一个神经网络,将标签𝑦放在列中将会使得后续计算非常方便,所以我们定义大写的𝑌等于𝑦(1), 𝑦(𝑚), . . . , 𝑦(𝑚),所以在这里是一个规模为 1 乘以𝑚的矩阵,同样地使用 Python 将表示为 Y.shape 等于(1, 𝑚),表示这是一个规模为 1 乘以𝑚的矩阵。
2.2 逻辑回归(Logistic Regression)在这个视频中,我们会重温逻辑回归学习算法,该算法适用于二分类问题,本节将主要介绍逻辑回归的 Hypothesis Function(假设函数)。 对于二元分类问题来讲,给定一个输入特征向量𝑋,它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,你想要一个算法能够输出预测,你只能称之为𝑦^ ,也就是你对实际值 𝑦 的估计。更正式地来说,你想让 𝑦^ 表示 𝑦 等于 1 的一种可能性或者是机会,前提条件是给定了输入特征𝑋。换句话来说,如果𝑋是我们在上个视频看到的图片,你想让 𝑦^ 来告诉你这是一只猫的图片的机率有多大。在之前的视频中所说的,𝑋是一个𝑛𝑥维的向量(相当于有𝑛𝑥个特征的特征向量)。我们用𝑤来表示逻辑回归的参数,这也是一个𝑛𝑥维向量(因为𝑤实际上是特征权重,维度与特征向量相同),参数里面还有𝑏,这是一个实数(表示偏差)。所以给出输入𝑥以及参数𝑤和𝑏之后,我们怎样产生输出预测值𝑦^ ,一件你可以尝试却不可行的事是让 𝑦^ = w T x + b w^T x + b wTx+b。 这时候我们得到的是一个关于输入𝑥的线性函数,实际上这是你在做线性回归时所用到的,但是这对于二元分类问题来讲不是一个非常好的算法,因为你想让𝑦^ 表示实际值𝑦等于 1的机率的话,𝑦^ 应该在 0 到 1 之间。这是一个需要解决的问题,因为 w T x + b w^Tx + b wTx+b可能比 1 要大得多,或者甚至为一个负值。对于你想要的在 0 和 1 之间的概率来说它是没有意义的,因此在逻辑回归中,我们的输出应该是𝑦^等于由上面得到的线性函数式子作为自变量的 sigmoid函数中,公式如上图最下面所示,将线性函数转换为非线性函数。 下图是 sigmoid 函数的图像,如果我把水平轴作为𝑧轴,那么关于𝑧的 sigmoid 函数是这样的,它是平滑地从 0 走向 1,让我在这里标记纵轴,这是 0,曲线与纵轴相交的截距是 0.5,这就是关于𝑧的 sigmoid 函数的图像。我们通常都使用𝑧来表示
w
T
x
+
b
w^Tx + b
wTx+b的值。 在继续进行下一步之前,介绍一种符号惯例,可以让参数𝑤和参数𝑏分开。在符号上要注意的一点是当我们对神经网络进行编程时经常会让参数𝑤和参数𝑏分开,在这里参数𝑏对应的是一种偏置。在之前的机器学习课程里,你可能已经见过处理这个问题时的其他符号表示。比如在某些例子里,你定义一个额外的特征称之为 x 0 x_0 x0,并且使它等于 1,那么现在𝑋就是一个𝑛𝑥加 1 维的变量,然后你定义𝑦^ = 𝜎( θ T x θ^Tx θTx)的 sigmoid 函数。在这个备选的符号惯例里,你有一个参数向量 θ 0 , θ 1 , θ 2 , . . . , θ n x θ0, θ1, θ2, . . . , θ_{nx} θ0,θ1,θ2,...,θnx,这样θ0就充当了𝑏,这是一个实数,而剩下的θ1 直到 θ n x θ_{nx} θnx充当了𝑤,结果就是当你实现你的神经网络时,有一个比较简单的方法是保持𝑏和𝑤分开。但是在这节课里我们不会使用任何这类符号惯例,所以不用去担心。 现在你已经知道逻辑回归模型是什么样子了,下一步要做的是训练参数𝑤和参数𝑏,你需要定义一个代价函数,让我们在下节课里对其进行解释。 2.3 逻辑回归的代价函数(Logistic Regression Cost Function)在上个视频中,我们讲了逻辑回归模型,这个视频里,我们讲逻辑回归的代价函数(也翻译作成本函数)。 为什么需要代价函数: 为了让模型通过学习调整参数,你需要给予一个𝑚样本的训练集,这会让你在训练集上找到参数𝑤和参数𝑏,,来得到你的输出。 对训练集的预测值,我们将它写成 y ^ \hat{y} y^,我们更希望它会接近于训练集中的y值,为了对上面的公式更详细的介绍,我们需要说明上面的定义是对一个训练样本来说的,这种形式也使用于每个训练样本,我们使用这些带有圆括号的上标来区分索引和样本,训练样本i所对应的预测值是y(i),是用训练样本的 w T x ( i ) + b w^Tx(i) + b wTx(i)+b然后通过 sigmoid 函数来得到,也可以把𝑧定义为 z ( i ) = w T x ( i ) + b z(i) = w^Tx(i) + b z(i)=wTx(i)+b,我们将使用这个符号(i)注解,上标(i)来指明数据表示x或者y或者z或者其他数据的第𝑖个训练样本,这就是上标(i)的含义。 损失函数: 损失函数又叫做误差函数,用来衡量算法的运行情况,
L
o
s
s
f
u
n
c
t
i
o
n
:
L
(
y
^
,
y
)
Loss function:L(\hat{y}, y)
Lossfunction:L(y^,y). 我们在逻辑回归中用到的损失函数是:
L
(
y
^
,
y
)
=
−
y
l
o
g
(
y
^
)
−
(
1
−
y
)
l
o
g
(
1
−
y
^
)
L(\hat{y} , y) = −ylog(\hat{y}) − (1 − y)log(1 − \hat{y})
L(y^,y)=−ylog(y^)−(1−y)log(1−y^) 当𝑦 = 1时损失函数
L
=
−
l
o
g
(
y
^
)
L = −log(\hat{y})
L=−log(y^),如果想要损失函数𝐿尽可能得小,那么
y
^
\hat{y}
y^就要尽可能大,因为 sigmoid 函数取值[0,1],所以
y
^
\hat{y}
y^会无限接近于 1。 在这门课中有很多的函数效果和现在这个类似,就是如果𝑦等于 1,我们就尽可能让
y
^
\hat{y}
y^变大,如果𝑦等于 0,我们就尽可能让
y
^
\hat{y}
y^ 变小。 损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的代价函数,算法的代价函数是对𝑚个样本的损失函数求和然后除以𝑚: 原文地址:https://blog.csdn.net/weixin_43597208/article/details/136484761 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://www.msipo.com/article-657541.html 如若内容造成侵权/违法违规/事实不符,请联系MSIPO邮箱:3448751423@qq.com进行投诉反馈,一经查实,立即删除!
上一篇:【React】React响应事件下一篇:java第一次作业(一)
热门文章Copyright © 2024, msipo.com |