2.9 Logistic 回归的梯度下降法-深度学习-Stanford吴恩达教授
←上一篇 | ↓↑ | 下一篇→ |
---|---|---|
2.8 计算图的导数计算 | 回到目录 | 2.10 m 个样本的梯度下降 |
Logistic 回归的梯度下降法 (Logistic Regression Gradient Descent)
本节我们讨论怎样通过计算偏导数来实现逻辑回归的梯度下降算法。它的关键点是几个重要公式,其作用是用来实现逻辑回归中梯度下降算法。但是在本节视频中,我将使用计算图对梯度下降算法进行计算。我必须要承认的是,使用计算图来计算逻辑回归的梯度下降算法有点大材小用了。但是,我认为以这个例子作为开始来讲解,可以使你更好的理解背后的思想。从而在讨论神经网络时,你可以更深刻而全面地理解神经网络。接下来让我们开始学习逻辑回归的梯度下降算法。
假设样本只有两个特征 x1x_1x1 和 x2x_2x2 ,为了计算 zzz ,我们需要输入参数 w1w_1w1 、 w2w_2w2 和 bbb ,除此之外还有特征值 x1x_1x1 和 x2x_2x2 。因此 zzz 的计算公式为: z=w1x1+w2x2+bz=w_1x_1+w_2x_2+bz=w1x1+w2x2+b 回想一下逻辑回归的公式定义如下: y^=a=σ(z)\hat{y}=a=\sigma(z)y^=a=σ(z) 其中 z=wT+b,σ(z)=11+e−zz=w^T+b,\ \sigma(z)=\frac{1}{1+e^{-z}}z=wT+b, σ(z)=1+e−z1 损失函数: L(y^(i),y(i))=−y(i)logy^(i)−(1−y(i))log(1−y^(i))L(\hat{y}^{(i)},y^{(i)})=-y^{(i)}\log\hat{y}^{(i)}-(1-y^{(i)})\log(1-\hat{y}^{(i)})L(y^(i),y(i))=−y(i)logy^(i)−(1−y(i))log(1−y^(i)) 代价函数: J(w,b)=1m∑imL(y^(i),y(i))J(w,b)=\frac1m\sum_i^mL(\hat{y}^{(i)},y^{(i)})J(w,b)=m1∑imL(y^(i),y(i)) 假设现在只考虑单个样本的情况,单个样本的代价函数定义如下: L(a,y)=−(ylog(a)+(1−y)log(1−a))L(a,y)=-(y\log(a)+(1-y)\log(1-a))L(a,y)=−(ylog(a)+(1−y)log(1−a)) 其中 aaa 是逻辑回归的输出, yyy 是样本的标签值。现在让我们画出表示这个计算的计算图。 这里先复习下梯度下降法, www 和 bbb 的修正量可以表达如下:
w:=w−α∂J(w,b)∂w,b:=b−α∂J(w,b)∂bw:=w-\alpha \frac{\partial J(w,b)}{\partial w},\quad b:=b-\alpha \frac{\partial J(w,b)}{\partial b}w:=w−α∂w∂J(w,b),b:=b−α∂b∂J(w,b)
如图:在这个公式的外侧画上长方形。然后计算: y^=a=σ(z)\hat{y}=a=\sigma(z)y^=a=σ(z) 也就是计算图的下一步。最后计算损失函数 L(a,y)L(a,y)L(a,y) 。 有了计算图,我就不需要再写出公式了。因此,为了使得逻辑回归中最小化代价函数 L(a,y)L(a,y)L(a,y) ,我们需要做的仅仅是修改参数 www 和 bbb 的值。前面我们已经讲解了如何在单个训练样本上计算代价函数的前向步骤。现在让我们来讨论通过反向计算出导数。 因为我们想要计算出的代价函数 L(a,y)L(a,y)L(a,y) 的导数,首先我们需要反向计算出代价函数 L(a,y)L(a,y)L(a,y) 关于 aaa 的导数,在编写代码时,你只需要用 dadada 来表示 dL(a,y)da\frac{dL(a,y)}{da}dadL(a,y) 。 通过微积分得到: dL(a,y)da=−y/a+(1−y)/(1−a)\frac{dL(a,y)}{da}=-y/a+(1-y)/(1-a)dadL(a,y)=−y/a+(1−y)/(1−a) 如果你不熟悉微积分,也不必太担心,我们会列出本课程涉及的所有求导公式。那么如果你非常熟悉微积分,我们鼓励你主动推导前面介绍的代价函数的求导公式,使用微积分直接求出 L(a,y)L(a,y)L(a,y) 关于变量 aaa 的导数。如果你不太了解微积分,也不用太担心。现在我们已经计算出 dadada ,也就是最终输出结果的导数。 现在可以再反向一步,在编写Python代码时,你只需要用 dzdzdz 来表示代价函数 LLL 关于 zzz 的导数 dLdz\frac{dL}{dz}dzdL ,也可以写成 dL(a,y)dz\frac{dL(a,y)}{dz}dzdL(a,y) ,这两种写法都是正确的。 dLdz=a−y\frac{dL}{dz}=a-ydzdL=a−y 。 因为 dL(a,y)dz=dLdz=(dLda)⋅(dadz)\frac{dL(a,y)}{dz}=\frac{dL}{dz}=(\frac{dL}{da})\cdot(\frac{da}{dz})dzdL(a,y)=dzdL=(dadL)⋅(dzda) , 并且 dadz=a(˙1−a)\frac{da}{dz}=a\dot(1-a)dzda=a(˙1−a) , 而 dLda=(−ya+(1−y)(1−a))\frac{dL}{da}=(-\frac ya+\frac{(1-y)}{(1-a)})dadL=(−ay+(1−a)(1−y)) ,因此将这两项相乘,得到:
dz=dL(a,y)dz=dLdz=(dLda)⋅(dadz)=(−ya+(1−y)(1−a))⋅a(1−a)=a−ydz=\frac{dL(a,y)}{dz}=\frac{dL}{dz}=(\frac{dL}{da})\cdot(\frac{da}{dz})=(-\frac ya+\frac{(1-y)}{(1-a)})\cdot a(1-a)=a-ydz=dzdL(a,y)=dzdL=(dadL)⋅(dzda)=(−ay+(1−a)(1−y))⋅a(1−a)=a−y
视频中为了简化推导过程,假设 nxn_xnx 这个推导的过程就是我之前提到过的链式法则。如果你对微积分熟悉,放心地去推导整个求导过程,如果不熟悉微积分,你只需要知道 dz=(a−y)dz=(a-y)dz=(a−y) 已经计算好了。
现在进行最后一步反向推导,也就是计算 www 和 bbb 变化对代价函数 LLL 的影响,特别地,可以用: dw1=1m∑imx1(i)(a(i)−y(i))dw_1=\frac1m\sum_i^mx_1^{(i)}(a^{(i)}-y^{(i)}) dw1=m1i∑mx1(i)(a(i)−y(i))dw2=1m∑imx2(i)(a(i)−y(i))dw_2=\frac1m\sum_i^mx_2^{(i)}(a^{(i)}-y^{(i)}) dw2=m1i∑mx2(i)(a(i)−y(i))db=1m∑im(a(i)−y(i))db=\frac1m\sum_i^m(a^{(i)}-y^{(i)})db=m1i∑m(a(i)−y(i)) 视频中, dw1dw_1dw1 表示 ∂L∂w1=x1⋅dz\frac{\partial L}{\partial w_1}=x_1\cdot dz∂w1∂L=x1⋅dz ,dw2dw_2dw2 表示 ∂L∂w2=x2⋅dz\frac{\partial L}{\partial w_2}=x_2\cdot dz∂w2∂L=x2⋅dz , db=dzdb = dzdb=dz 。 因此,关于单个样本的梯度下降算法,你所需要做的就是如下的事情: 使用公式 dz=(a−y)dz=(a-y)dz=(a−y) 计算 dzdzdz , 使用 dw1=x1⋅dzdw_1=x_1 \cdot dzdw1=x1⋅dz 计算 dw1dw_1dw1 , 计算 dw2=x2⋅dzdw_2=x_2 \cdot dzdw2=x2⋅dz 计算 dw2dw_2dw2 , db=dzdb=dzdb=dz 计算 dbdbdb ,然后: 更新 w1=w1−αdw1w_1=w_1-\alpha\ dw_1w1=w1−α dw1 , 更新 w2=w2−αdw2w_2=w_2-\alpha\ dw_2w2=w2−α dw2 , 更新 b=b−αdbb=b-\alpha\ dbb=b−α db 。 这就是关于单个样本实例的梯度下降算法中参数更新一次的步骤。
现在你已经知道了怎样计算导数,并且实现针对单个训练样本的逻辑回归的梯度下降算法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有 mmm 个训练样本的整个训练集。因此在下一节视频中,我们将这些思想应用到整个训练样本集中,而不仅仅只是单个样本上。
课程PPT
←上一篇 | ↓↑ | 下一篇→ |
---|---|---|
2.8 计算图的导数计算 | 回到目录 | 2.10 m 个样本的梯度下降 |
2.9 Logistic 回归的梯度下降法-深度学习-Stanford吴恩达教授相关推荐
- 2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.13 向量化 Logistic 回归 回到目录 2.15 Python 中的广播 向量化 Logistic 回归的梯度输出 (Vectorizing Logistic R ...
- 3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.8 激活函数的导数 回到目录 3.10 直观理解反向传播 神经网络的梯度下降法 (Gradient Descent for Neural Networks) 在这个视频中 ...
- 2.4 梯度下降法-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.3 Logistic 回归损失函数 回到目录 2.5 导数 梯度下降法 (Gradient Descent) 梯度下降法可以做什么? 在你测试集上,通过最小化代价函数(成 ...
- 2.10 m 个样本的梯度下降-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.9 Logistic 回归的梯度下降法 回到目录 2.11 向量化 mmm 个样本的梯度下降 (Gradient Descent on mmm example) 在之前的 ...
- 2.19 总结-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...
- 2.13 向量化 Logistic 回归-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.12 向量化的更多例子 回到目录 2.14 向量化 Logistic 回归的梯度输出 向量化 Logistic 回归 (Vectorizing Logistic Regr ...
- 3.12 总结-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...
- 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 3.9 神经网络的梯度下降法 回到目录 3.11 随机初始化 直观理解反向传播 (Backpropagation Intuition (Optional)) 这个视频主要是推 ...
- 2.15 Python 中的广播-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.14 向量化 Logistic 回归的梯度输出 回到目录 2.16 关于 Python Numpy 向量的说明 Python 中的广播 (Broadcasting in ...
最新文章
- TextRNN用于文本分类
- springmvc+batis applicationContext-mybatis.xml 具体说明
- linux下配置myBase7.ini
- 《C++ Primer》13.1.3节练习
- spring对事务的控制 AOP
- 能力成熟度模型(CMM)
- Java自动跳转到debug模式的解决方法
- 如何搞懂容器的核心技术点?
- VUE颜色选择器插件vColorPicker
- 在.Net中执行js
- 多线程并发编程知识点汇总
- 前端技术教学第一周 10.15
- 微信小程序使用VANT filed 组件 input框内文字省略
- 高通voforia插件使相机对焦的方法
- 流放之路 剧情 第六章
- native react 折线图_【详解】纯 React Native 代码自定义折线图组件(译)
- ios16隐藏的六个实用功能,你知道几个?
- 艾诗娜:红女巫 Ashina: The Red Witch Build.10280376 官方中文 免安装【209M】
- 【matlab】正弦波、方波、三角波、白噪声等8种基本信号
- android 全景usb 全景,汽车360度全景USB高清数字信号输出系统的制作方法
热门文章
- 二分查找(等于x,小于x,小于等于x,大于x,大于等于x )
- 函数atof,atoi,atol,strtod,strtol,strtoul 描述
- 20145307《信息安全系统设计基础》课程总结
- 总结一些关于操作数据库是sql语句还是存储过程问题
- mysql创建新用户并分配数据库权限
- android画一个圆形图片组件
- Silverlight 自定义鼠标
- Memcached深度分析【zz】
- UA OPTI512R 傅立叶光学导论11 卷积的性质
- UA STAT675 统计计算I 随机数生成2 线性递归模m与Multiple Recursive Generator (MRG)