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

向量化 Logistic 回归 (Vectorizing Logistic Regression)

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

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

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

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

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

wTx(1)+bw^Tx^{(1)}+bwTx(1)+b 这是第一个元素, wTx(2)+bw^Tx^{(2)}+bwTx(2)+b 这是第二个元素, wTx(m)+bw^Tx^{(m)}+bwTx(m)+b 这是第 mmm 个元素。

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

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

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

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σ 一次性计算所有 aaa 。这就是在同一时间内你如何完成一个所有 mmm 个训练样本的前向传播向量化计算。

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

课程PPT



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

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

  1. 2.2 Logistic 回归-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.1 二元分类 回到目录 2.3 Logistic 回归损失函数 Logistic 回归 (Logistic Regression) 在这个视频中,我们会重温逻辑回归学习算 ...

  2. 2.12 向量化更多例子-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.11 向量化 回到目录 2.13 向量化 Logistic 回归 向量化更多例子 (More Vectorization Examples) 从上节视频中,你知道了怎样通 ...

  3. 2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.13 向量化 Logistic 回归 回到目录 2.15 Python 中的广播 向量化 Logistic 回归的梯度输出 (Vectorizing Logistic R ...

  4. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  5. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

  6. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  7. 2.15 Python 中的广播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.14 向量化 Logistic 回归的梯度输出 回到目录 2.16 关于 Python Numpy 向量的说明 Python 中的广播 (Broadcasting in ...

  8. 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.9 神经网络的梯度下降法 回到目录 3.11 随机初始化 直观理解反向传播 (Backpropagation Intuition (Optional)) 这个视频主要是推 ...

  9. 2.9 Logistic 回归的梯度下降法-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.8 计算图的导数计算 回到目录 2.10 m 个样本的梯度下降 Logistic 回归的梯度下降法 (Logistic Regression Gradient Desce ...

最新文章

  1. c#(winform)环境下使用动态链接库dll的详解
  2. 电脑安装python3.7说缺少-centos7:python3.7 缺少_ssl模块问题
  3. setfacl命令_一名合格的Linux运维人员应该掌握哪些命令?
  4. 【项目管理】敏捷宣言
  5. 【科普】OSS存储的基本操作
  6. bilibili有电脑版吗_你体验过电脑版的《和平精英》吗?不用担心内存,也不用担心卡顿...
  7. PyTorch模型读写、参数初始化、Finetune
  8. 一键移植工具_让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)
  9. Flink 1.12 资源管理新特性回顾
  10. html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex
  11. 数据结构之查找算法:分块查找
  12. java 启动jar包JVM参数
  13. Ubuntu软件安装新选择—星火应用商店(QQ、微信等一网打尽)
  14. python读取组合惯导数据,并进行坐标转换到北东天、utm坐标系
  15. 腾讯云学生机介绍—校园扶持计划
  16. SDN实验(三)——集线器hub的实现
  17. 中断 10 分钟,改变孩子沉迷游戏的习惯
  18. 如何给PDF文件加密和解密?
  19. 鸿蒙断更术辰东,唐家三少说出《圣墟》断更真相,这次不怪辰东,网文将大范围断更...
  20. 计算机cpu风扇关闭,cpu风扇怎么关闭

热门文章

  1. redis 3.2.1 centos7
  2. SQL优化(二)-- 慢查询
  3. matplotlib的下载和安装方法
  4. 最长回文子串 hihocode 1032 hdu 3068
  5. 自动生成Insert数据的SQL脚本
  6. 可以下载Microsoft ISA Server 2006 试用版了,网管需要关注
  7. 初步了解Linux内核中断初始化
  8. 未解决oracle错误12505、01034、27101
  9. MFC对话框控件成员变量编程熟悉 - 开发一个简单天线长度计算器
  10. Windows内核工具Win64AST初步使用