用Python学习吴恩达机器学习——梯度下降算法理论篇

2023-10-31

开篇词:(CSDN专供)

欢迎阅读我的文章,本文起先是在B站上进行投稿,一开始是采用吴恩达机器学习2012年版的,目前已经出了十二期了。现在我决定将我摸索出来的学习笔记在各个平台上进行连载,保证同时更新。

半年已过,谁知道AI领域已发生很大的变数,近期热门的AI绘画也加剧了AI学习的需求和浪潮,现在正值吴恩达老师推出吴恩达机器学习10周年之际推出的最新版机器学习2022课程,我在观望了新旧两版课程后。果断决定跳上新版课程的列车,因为新版终于使用Python了,其开放、开源的jupyter实验室资源终于解开了我半年以来的疑惑和思路。所以让我们继续

用Python学习机器学习吧!

print('Python YYDS!!!') 


目录

Gradient Descent 梯度下降(对应视频P15)

Implementing Gradient Descent 实现梯度下降(对应视频P16) 

Gradient Descent Intution 梯度下降的直觉(对应视频P17) 

Learning Rate 学习率(对应视频P18) 


本文对应以下课程视频内容“P15-P20”整编而成 

4.1 梯度下降


Gradient Descent 梯度下降(对应视频P15)

欢迎回来!在上一个视频中我们看到了成本函数J以及如何尝试选择不同的参数w和参数b并查看他们为您带来的代价函数值,如果我们有更系统的方法来找到参数w和参数b的值,那就好了,这将得到参数w,b的最小代价函数值J的结果,

 \begin{aligned} &w=w-\alpha\frac{\partial}{\partial w}J(w,b)\\ \\ &b=b-\alpha\frac{\partial}{\partial b}J(w,b)\\ \end{aligned}这是梯度下降算法的公式,之后会解释其含义。

        事实证明,您可以使用一种称为梯度下降的算法来做到这一点。

梯度下降算法在机器学习中无处不在,不仅用于线性回归的训练,还用于一些最先进的神经网络模型,也称深度学习模型,深度学习是您在第二门课程中学习到的,学习这两种梯度下降算法将使您拥有机器学习的重要组成部分。

        梯度下降算法可以用来尝试最小化任何函数,而不仅仅是线性回归模型的代价函数。

首先,你要做的只是开始对参数w,参数b进行预测,在线性回归中,初始值是多少并不重要,所以一个常见的选择是将所有参数都设置为0(set w=0,b=0)。

然后,您将一直更改参数w和参数b的值,以尝试降低代价函数的参数w和参数b的值。

直到代价函数J达到或接近最小值

 下面直接给出梯度下降算法思想的直观解释图(新版课程的) 


Implementing Gradient Descent 实现梯度下降(对应视频P16) 

让我们看看如何在实际中实现梯度下降算法,让我写一下梯度下降算法 

w:w=w-\alpha\frac{\partial}{\partial w}J(w,b)

注意:这里的“=”不是数学意义上的“等于号”,而是之前我们学过的赋值的意思,即将“=”号右边的计算结果赋值给“=”左边。式子中“α”是希腊字母Alpha代表学习率(Learning Rate)

如果学习率alpha非常大,那您下山会非常激进,你会试图下坡时迈太大的步子(容易扯到egg)

如果学习率alpha非常小,那您下山会非常“淑女”,你将迈小步下坡。下篇我们会回来解释如何选择一个较好的学习率,让您安稳下山。

最后,关于标红的这一坨东西,是代价函数J的导数项 

w=w-\alpha{\color{Red} \frac{d}{dw}J(w,b)}

现在,我想提下,导数来自微积分,即使你不熟悉微积分,也不用担心。接下来给出参数b的算法 

b:b=b-\alpha\frac{\partial}{\partial b}J(w,b)

 最后给出梯度下降算法的全公式 

\begin{aligned} w=w-\alpha\frac{\partial}{\partial w}J(w,b)\qquad(1)\\ b=b-\alpha\frac{\partial}{\partial b}J(w,b)\qquad\quad(2) \end{aligned}

        对于梯度下降算法,您将重复这两个更新步骤,直到算法收敛(指到达一个局部最小值的点),参数w和参数b不在随着您采取每个额外步骤而发生很大的变化。

一个重要的细节是,对于梯度下降,您要同时更新参数w和参数b 

左边的做法是正确的,要同时更新参数w,b


Gradient Descent Intution 梯度下降的直觉(对应视频P17) 

现在让我们更深入地研究梯度下降以获得更好的直觉,这是上一篇你看到的梯度下降算法 

        按照数学惯例,这里的d是用这种有趣的字体写的,如果你有一定的数学基础,你应该知道这不是导数,是偏导数。但是为了实现机器学习算法,这里将其称为导数。我们现在要关心的是这套公式是什么意思,怎么来的?为什么要这样相乘,它导致了参数w和参数b的更新。

        假设你现在有这个代价函数J,你也使用这种算法试图通过调整参数w来最小化代价函数值

现在我们把难度降低点,只考虑一个参数的情况,先暂时将参数b的值设成0,这样就是个二维图像,而不是三维图像了,让我们看看梯度下降中代价函数J对参数w的作用 

        这里是斜率,代入到上文提到的(1)式中,因为看图像,这个导数是一个正数所以大于0,所以最新更新的参数w值是参数w值-学习率乘以某个正数。那你会得到一个更小的参数w值,在图像上的体现就是,点正在向左移动,参数w数值正在减少

稍微总结一下就是以下式子 

\begin{aligned} &J(w)\\ &w=w-\alpha\frac{\partial}{\partial w}J(w)>0\\ &w=w-\alpha(positive \,\,number)\\ &w=w-\alpha\frac{\partial}{\partial w}J(w)<0\\ &w=w-\alpha(negative \,\,number)\\ \end{aligned}

这篇的目的是能让你理解为什么梯度下降中的导数是有意义的,梯度下降算法中的另一个关键因素是学习率Alpha,你如何选择Alpha,你如何选择Alpha?如果它太大会发生什么?


Learning Rate 学习率(对应视频P18) 

        学习率alpha的选择将对您实现梯度下降的效率产生巨大影响,学习率alpha的选择至关重要。在本篇中,让我们更深入地了解学习率,这也将帮助您实现梯度下降算法。

上图可以看到学习率的选取对梯度下降算法的效率有很大的影响,稍微总结一下吧

if α is too small…
如果学习率α太小的话
Gradient        descent may be slow.
梯度下降过程会很慢

if α is too large…
如果学习率α太大的话
Gradient        descent may:
Overshoot,never reach minimum,Fail to converge,diverge
梯度下降过程会很冲,并从不到达最小值,无法收敛,甚至发散 

        现在我们就可以用J函数进行梯度下降了,如图,一开始第一步到第二步迈的很大,不断进行的过程中,每一步的间隔越来越小直至接近局部最小值。

        在下一篇笔记中,我们将采用函数J并将使用线性回归模型的代价函数中,这就是第一个学习的算法——线性回归算法。 

        之所以没在这里使用Python解释是因为上面吴老师所列举的J函数还没有具体的式子,不好编写,只能说写伪代码,所以在下一篇笔记中,我们会重新定义之前实现的线性函数代码!

在下一篇笔记里,我们将会用Python带入到线性函数中,这样才便于理解,敬请期待吧!

Author: Andrew Ng

Editor:  Phoenix fight!

Date:2022 Oct 14th  


免责声明!!!

关于封面图是由AI生成,以下是AI生成的图片的服务免责声明,望周知!

如有疏漏欢迎前往评论区提出并指正!

一起学习,一起进步,一起分享,一起成长!

最后欢迎各位前往我的B站专栏阅读往期文章,

https://www.bilibili.com/read/cv19090716

顺便吐槽一下,CSDN你们的Latex编辑器居然不支持中文?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Python学习吴恩达机器学习——梯度下降算法理论篇 的相关文章

  • Erlang:到 Python 实例的端口没有响应

    我正在尝试通过 Erlang 端口与外部 python 进程进行通信 首先 打开一个端口 然后通过 stdin 将消息发送到外部进程 我期待在进程的标准输出上得到相应的答复 我的尝试如下所示 open a port Port open po
  • 如何替换Python字符串中的正确字母

    任务是 您的任务是纠正数字化文本中的错误 您只需处理以下错误 S 被误解为 5 O 被误解为 0 I 被误解为 1 我的代码 def correct string for i in string if 5 in string string
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c
  • 动态字段取决于 WTForms 的先前字段

    我正在使用 WTForms 制作表格 目前 我有这个 class UploadForm flask wtf Form fichier wtforms fields FileField u Fichier description wtform
  • Python3将模块从文件夹导入到另一个文件夹

    我的结构字典是 mainFolder folder1 init py file1 py file2 py folder2 init py file3 py file4 py setup py init py 我需要将 file4 py 从f
  • Python Selenium 打印另存为 PDF 等待文件名输入

    我正在尝试通过打印对话框将网站另存为 PDF 我的代码允许我另存为pdf 但要求我输入文件名 我不知道如何将文件名传递到弹出框 附上我的代码 import time from selenium import webdriver import
  • 为什么需要设置WORKON_HOME环境变量?

    我已经有一段时间没有使用 python 虚拟环境了 但我也安装了虚拟环境包装器 我的问题是 在文档页面中它说要这样做 export WORKON HOME Envs mkdir p WORKON HOME source usr local
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 如何知道python运行脚本的路径?

    sys arg 0 给我 python 脚本 例如 python hello py 返回 sys arg 0 的 hello py 但我需要知道 hello py 位于完整路径中的位置 我怎样才能用Python做到这一点 os path a
  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • Flymake的临时文件可以在系统临时目录下创建吗?

    我目前正在使用以下代码在 emacs 中连接 Flymake 和 Pyflakes defun flymake create temp in system tempdir filename prefix make temp file or
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 如何从邻接表高效创建稀疏邻接矩阵?

    我正在与last fm http labrosa ee columbia edu millionsong lastfm数据集来自百万歌曲数据集 http labrosa ee columbia edu millionsong 数据以一组 j
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 如何在引发异常时将变量传递给异常并在异常时检索它?

    现在我只有一个空白的异常类 我想知道如何在引发变量时给它一个变量 然后在 try except 中处理它时检索该变量 class ExampleException Exception pass 为其构造函数提供一个参数 将其存储为属性 然后
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • PyQt5按钮lambda变量变成布尔值[重复]

    这个问题在这里已经有答案了 当我运行下面的代码时 它显示如下 为什么 x 不是 x 而是变成布尔值 这种情况仅发生在传递到用 lambda 调用的函数中的第一个参数上 错误的 y home me model some file from P
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不
  • 从 Django 运行 shell 命令

    我正在 Django 中开发一个网页 使用 apache 服务器 需要调用 shell 命令来启用 禁用一些守护进程 我尝试这样做 os system service httpd restart 1 gt HOME out 2 gt HOM

随机推荐

  • DBWn 进程和 DB_WRITER_PROCESSES/DBWR_IO_SLAVES 参数

    1 DBWn进程 Database Writer Process DBWn The database writer process DBWn writes the contents of database buffers to data f
  • 【Qt】modbus之串口模式写操作

    00 目录 文章目录 00 目录 01 概述 02 开发环境 03 写Coils程序示例 04 写HoldingRegisters程序示例 05 综合示例 01 概述 Qt中几个常用的串口modbus类 QModbusRtuSerialSl
  • 网站迁移或者调整页面链接的方法

    背景 这两天我在重新规划我的博客网站逐步前行STEP 将改版导航以及整体内容结构 将单纯的博客网站打造成集博客 资讯 工具 社区于一体的综合站点 这必然涉及到要重新规划原有的路由 直接修改路由将导致搜索引擎收录的链接或者访客收藏的网址失效
  • UNIX网络编程卷一 学习笔记 第十一章 名字与地址转换

    到目前为止 本书中所有例子都用数值地址表示主机 如206 6 226 33 用数值端口号来标识服务器 如端口13代表daytime服务器 但出于某些理由 我们应使用名字而非数值 名字比较容易记住 数值地址可以变动而名字保持不变 随着往IPv
  • ajax基础

    ajax基础 ajax get ajax post ajax get query ajax post body ajax post 用户注册 ajax post 用户登陆 ajax get h1 这是第一个ajax网页 h1
  • OpenMMLab实战营第四课:目标检测与MMDetection

    什么是目标检测 目标检测应用 目标检测vs图像分类 滑窗 Sliding Window 简介 设定一个固定大小的窗口 遍历图像所有位置 所到之处用分类模型 假设已经训练好 识别窗口中的内容 为了检测不同大小 不同形状的物体 可以使用不同大小
  • mseloss pytorch_PyTorch现的一个简单线性回归的样例

    线性回归基本概念 线性回归是利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 表达形式为y wx e 其中e为误差服从均值为0的正态分布 回归分析中 只包括一个自变量和一个因变量 且二者的关系可用一条直
  • java list 和数组区别_java list和数组的区别

    展开全部 List和ArrayList的区别在于 1 在编程语言中ArrayList类是 Net Framework提供的用于数据存储和检索的专用类 List 类可以简单视之为双向62616964757a686964616fe78988e6
  • ClickHouse之常见的时间周期函数

    文章目录 前言 时区相关 timeZone toTimeZone timeZoneOf 年相关 toYear toStartOfYear toStartOfISOYear toRelativeYearNum toISOYear 季度相关 t
  • VS2008解决“MSVCRT”与其他库的使用冲突的警告

    警告信息如下 1 gt LINK warning LNK4098 默认库 MSVCRT 与其他库的使用冲突 请使用 NODEFAULTLIB library 原因 在使用多线程调试dll MDd 模式的时候 lt 位置 配置属性 c c 代
  • 如何将github项目上传至gitlab

    一 修改远程分支关联 删除远程分支关联 将指向github的远程分支关联关系删除 git remote rm origin 添加新的远程分支关联 新的remote地址指向gitlab相应地址 git remote add origin lt
  • 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第二周作业

    中文 吴恩达课后编程作业 Course 4 卷积神经网络 第二周作业 Keras入门与残差网络的搭建 上一篇 课程4 第二周测验 回到目录 下一篇 课程4 第三周测验 资料下载 下载1 本文所使用的资料已上传到百度网盘 点击下载 15 97
  • 【小程序】为什么使用let that=this

    this 会随着上下文环境而变换它的指向 在当前作用域中设置一个变量用来存储 this 可以防止在其他地方找不到 this 的错误 一般情况 举个例子 btn click function var that this 这里this和that
  • react项目:react拦截器和token问题

    登录获取token后 如何对后面的接口统一在请求头header里面设置token 让后面的请求header都带有token axios拦截器 interceptor 作用 当一个请求发出的时候 会先流过 interceptors 的 req
  • virtualbox禁用硬件虚拟化_Mac版Virtualbox6.1开启嵌套虚拟化

    Virtualbox从6 0版本后 支持起了Intel cpu的嵌套虚拟化 很多用Virtualbox的朋友开始陷入了茫然 为何在BIOS或EFI中开启了CPU硬件虚拟化后 Virtualbox中的vm菜单中启用嵌套虚拟化的框还是灰色不可用
  • 我一下子说出4种分布式ID生成方案,把面试官给搞懵了!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 上一篇文章 我们聊了一下分库分表相关的一些基础知识 具体可以参见 支撑日活百万用户的高并发系统 应该如何设计其数据库架构 这篇文章 我们就接着分库分表的知识 来具体聊
  • 在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)

    对于游戏公司而言 采用游戏脚本lua python等进行开发也很常见 但是很多童鞋对脚本并没有很熟悉的概念 本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法 Lua和python这些详细介绍的话 请不太熟悉的童鞋自行百度百科哈
  • 50道SQL练习题及答案与详细分析:

    流传较广的50道SQL训练 奋斗了不知道多久终于写完了 前18道题的难度依次递增 从19题开始的后半部分算是循环练习和额外function的附加练习 难度恢复到普通状态 第9题非常难 我反正没有写出来 如果有写出来了的朋友还请赐教 这50道
  • 教育平台的线上课程智能推荐策略

    题目来自 http www tipdm org 一 背景 近年来 随着互联网与通信技术的高速发展 学习资源的建设与共享呈现出 新的发展趋势 各种网课 慕课 直播课等层出不穷 各种在线教育平台和学习 应用纷纷涌现 尤其是 2020 年春季学期
  • 用Python学习吴恩达机器学习——梯度下降算法理论篇

    开篇词 CSDN专供 欢迎阅读我的文章 本文起先是在B站上进行投稿 一开始是采用吴恩达机器学习2012年版的 目前已经出了十二期了 现在我决定将我摸索出来的学习笔记在各个平台上进行连载 保证同时更新 半年已过 谁知道AI领域已发生很大的变数