2.13 向量化 Logistic 回归-深度学习-Stanford吴恩达教授


←上一篇↓↑下一篇→
2.12 向量化的更多例子回到目录2.14 向量化 Logistic 回归的梯度输出

向量化 Logistic 回归 (Vectorizing Logistic Regression)

我们已经讨论过向量化是如何显著加速你的代码,在本次视频中我们将讨论如何实现逻辑回归的向量化计算。这样就能处理整个数据集,甚至不会用一个明确的for循环就能实现对于整个数据集梯度下降算法的优化。我对这项技术感到非常激动,并且当我们后面谈到神经网络时同样也不会用到一个明确的 for 循环。

让我们开始吧,首先我们回顾一下逻辑回归的前向传播步骤。所以,如果你有 m m m 个训练样本,然后对第一个样本进行预测,你需要这样计算。计算 z z z ,我正在使用这个熟悉的公式 z ( 1 ) = w T x ( 1 ) + b z^{(1)}=w^Tx^{(1)}+b z(1)=wTx(1)+b 。然后计算激活函数 a ( 1 ) = σ ( z ( 1 ) ) a^{(1)}=\sigma(z^{(1)}) a(1)=σ(z(1)) ,计算第一个样本的预测值 y y y

然后对第二个样本进行预测,你需要计算 z ( 2 ) = w T x ( 2 ) + b z^{(2)}=w^Tx^{(2)}+b z(2)=wTx(2)+b a ( 2 ) = σ ( z ( 2 ) ) a^{(2)}=\sigma(z^{(2)}) a(2)=σ(z(2)) 。然后对第三个样本进行预测,你需要计算 z ( 3 ) = w T x ( 3 ) + b z^{(3)}=w^Tx^{(3)}+b z(3)=wTx(3)+b a ( 3 ) = σ ( z ( 3 ) ) a^{(3)}=\sigma(z^{(3)}) a(3)=σ(z(3)) ,依次类推。如果你有 m m m 个训练样本,你可能需要这样做 m m m 次,可以看出,为了完成前向传播步骤,即对我们的 m m m 个样本都计算出预测值。有一个办法可以并且不需要任何一个明确的for循环。让我们来看一下你该怎样做。

首先,回忆一下我们曾经定义了一个矩阵 X X X 作为你的训练输入,(如下图中蓝色 X X X )像这样在不同的列中堆积在一起。这是一个 n x n_x nx m m m 列的矩阵。我现在将它写为Python numpy的形式 ( n x , m ) (n_x,m) (nx,m) ,这只是表示 X X X 是一个 n x n_x nx 乘以 m m m 的矩阵 R n x ∗ m \R^{n_x*m} Rnxm

在这里插入图片描述

现在我首先想做的是告诉你该如何在一个步骤中计算 z 1 z_1 z1 z 2 z_2 z2 z 3 z_3 z3 等等。实际上,只用了一行代码。所以,我打算先构建一个 1 ∗ m 1*m 1m 的矩阵,实际上它是一个行向量,同时我准备计算 z ( 1 ) , z ( 2 ) , ⋯ z^{(1)},z^{(2)},\cdots z(1),z(2), 一直到 z ( m ) z^{(m)} z(m) ,所有值都是在同一时间内完成。结果发现它可以表达为 w w w 的转置乘以大写矩阵 然后加上向量 [ b b ⋯ b ] [bb\cdots b] [bbb] ( [ z ( 1 ) z ( 2 ) ⋯ z ( m ) ] = w T + [ b b ⋯ b ] ) ([z^{(1)}z^{(2)}\cdots z^{(m)}]=w^T+[bb\cdots b]) ([z(1)z(2)z(m)]=wT+[bbb]) [ b b ⋯ b ] [bb\cdots b] [bbb] 是一个 1 ∗ m 1*m 1m 的向量或者 1 ∗ m 1*m 1m 的矩阵或者是一个 m m m 维的行向量。所以希望你熟悉矩阵乘法,你会发现的 w w w 转置乘以 x ( 1 ) x^{(1)} x(1) x ( 2 ) x^{(2)} x(2) 一直到 x ( m ) x^{(m)} x(m) 。所以 w w w 转置可以是一个行向量。所以第一项 w T X w^TX wTX 将计算 w w w 的转置乘以 x ( 1 ) x^{(1)} x(1) w w w 转置乘以 x ( 2 ) x^{(2)} x(2) 等等。然后我们加上第二项 [ b b ⋯ b ] [bb\cdots b] [bbb] ,你最终将 b b b 加到了每个元素上。所以你最终得到了另一个 1 ∗ m 1*m 1m 的向量, [ z ( 1 ) z ( 2 ) ⋯ z ( m ) ] = w T X + [ b b ⋯ b ] = [ w T x ( 1 ) + b , w T x ( 2 ) + b , ⋯   , w T x ( m ) + b ] [z^{(1)}z^{(2)}\cdots z^{(m)}]=w^TX+[bb\cdots b]=[w^Tx^{(1)}+b,w^Tx^{(2)}+b,\cdots, w^Tx^{(m)}+b] [z(1)z(2)z(m)]=wTX+[bbb]=[wTx(1)+b,wTx(2)+b,,wTx(m)+b]

w T x ( 1 ) + b w^Tx^{(1)}+b wTx(1)+b 这是第一个元素, w T x ( 2 ) + b w^Tx^{(2)}+b wTx(2)+b 这是第二个元素, w T x ( m ) + b w^Tx^{(m)}+b wTx(m)+b 这是第 m m m 个元素。

如果你参照上面的定义,第一个元素恰好是 z ( 1 ) z^{(1)} z(1) 的定义,第二个元素恰好是 z ( 2 ) z^{(2)} z(2) 的定义,等等。所以,因为 X X X 是一次获得的,当你得到你的训练样本,一个一个横向堆积起来,这里我将 [ z ( 1 ) , z ( 2 ) , ⋯   , z ( m ) ] [z^{(1)},z^{(2)},\cdots,z^{(m)}] [z(1),z(2),,z(m)] 定义为大写的 Z Z Z ,你用小写 z z z 表示并将它们横向排在一起。所以当你将不同训练样本对应的小写 x x x 横向堆积在一起时得到大写变量 X X X 并且将小写变量也用相同方法处理,将它们横向堆积起来,你就得到大写变量 Z Z Z 。结果发现,为了计算 W T X + [ b b ⋯ b ] W^TX+[bb\cdots b] WTX+[bbb]numpy命令是Z=np.dot(w.T,x)+b。这里在Python中有一个巧妙的地方,这里 b b b 是一个实数,或者你可以说是一个 1 ∗ 1 1*1 11 矩阵,只是一个普通的实数。但是当你将这个向量加上这个实数时,Python自动把这个实数 b b b 扩展成一个 1 ∗ m 1*m 1m 的行向量。所以这种情况下的操作似乎有点不可思议,它在Python中被称作广播(brosdcasting),目前你不用对此感到顾虑,我们将在下一个视频中进行进一步的讲解。话说回来它只用一行代码,用这一行代码,你可以计算大写的 Z Z Z ,而大写 Z Z Z 是一个包含所有小写 z ( 1 ) z^{(1)} z(1) z ( m ) z^{(m)} z(m) 1 ∗ m 1*m 1m 的矩阵。这就是 Z Z Z 的内容,关于变量 a a a 又是如何呢?

我们接下来要做的就是找到一个同时计算 [ a ( 1 ) , a ( 2 ) , ⋯   , a ( m ) ] [a^{(1)},a^{(2)},\cdots,a^{(m)}] [a(1),a(2),,a(m)] 的方法。就像把小写 x x x 堆积起来得到大写 X X X 和横向堆积小写 z z z 得到大写 Z Z Z 一样,堆积小写变量 a a a 将形成一个新的变量,我们将它定义为大写 A A A 。在编程作业中,你将看到怎样用一个向量在sigmoid函数中进行计算。所以sigmoid函数中输入大写 Z Z Z 作为变量并且非常高效地输出大写 A A A 。你将在编程作业中看到它的细节。

总结一下,在这张幻灯片中我们已经看到,不需要for循环,利用 m m m 个训练样本一次性计算出小写 z z z 和小写 a a a ,用一行代码即可完成。

Z = np.dot(w.T,X) + b

这一行代码: A = [ a ( 1 ) , a ( 2 ) , ⋯   , a ( m ) ] = σ ( Z ) A=[a^{(1)},a^{(2)},\cdots,a^{(m)}]=\sigma(Z) A=[a(1),a(2),,a(m)]=σ(Z) ,通过恰当地运用 σ \sigma σ 一次性计算所有 a a a 。这就是在同一时间内你如何完成一个所有 m m m 个训练样本的前向传播向量化计算。

概括一下,你刚刚看到如何利用向量化在同一时间内高效地计算所有的激活函数的所有 a a a 值。接下来,可以证明,你也可以利用向量化高效地计算反向传播并以此来计算梯度。让我们在下一个视频中看该如何实现。

课程PPT

在这里插入图片描述
在这里插入图片描述


←上一篇↓↑下一篇→
2.12 向量化的更多例子回到目录2.14 向量化 Logistic 回归的梯度输出

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Logistic回归、机器学习和深度学习是三个不同的概念和技术,它们在应用领域、方法以及优缺点方面存在着一些区别。 Logistic回归是一种监督学习算法,用于处理二分类问题。它通过对数据集拟合一个S形曲线,将输入特征与概率输出之间建立关系。优点是计算简单且模型可解释性强,适用于小规模数据集。缺点是只能处理二分类问题,并且对于特征之间的非线性关系无法建模。 机器学习是一种通过训练数据和统计技术来实现计算机自主学习和改进性能的方法。它涵盖了很多算法和技术,包括Logistic回归。机器学习可以通过训练数据来学习模式和规律,并用于数据分类、聚类、回归等任务。它的优点是可以适应各种数据类型和问题,并且能够处理大规模的数据集。然而,机器学习模型的解释性较弱,需要选择合适的算法和特征工程来提高性能。 深度学习是机器学习中的一个子领域,主要使用神经网络模型来进行数据学习和特征提取。与机器学习相比,深度学习可以通过多层次的非线性变换学习复杂的模式和关系。它在图像识别、语音识别、自然语言处理等领域取得了很大的成功。深度学习的优点是可以自动提取特征,并且能够处理大规模的复杂数据集。但它需要大量的数据和计算资源,且模型的训练和调优有一定的困难。 综上所述,Logistic回归适用于简单的二分类问题,机器学习方法可以处理各种类型的问题,而深度学习则在处理复杂数据和模式时表现较好。选择适合的方法取决于问题的复杂度、数据的规模和可用的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值