吴恩达 深度学习笔记

最近在看吴恩达深度学习系列课程,简单做一个基本框架笔记。
如感兴趣或了解更多内容,推荐看原课程
以前也做过一些与机器学习和深度学习有关的笔记,过分重复的就一笔带过了。

01 第一门课 神经网络和深度学习

1.1 第一周:深度学习引言

1.2 第二周:神经网络的编程基础

需要基本了解:

  1. 二分类
  2. 逻辑回归
  3. 逻辑函数的代价函数(理解为什么要有代价函数)
  4. 梯度下降法(参数如何更新)
  5. 导数(理解微积分即可)
  6. 计算图(关于这个,“鱼书”将很好很详细,推荐,用来理解反向传播很方便)
  7. 利用计算图求导数(本质上就是求导的链式法则)
  8. 逻辑回归中的梯度下降
  9. m个样本的梯度下降
  10. 向量化(是为了解决若采用for循环的慢速,向量化更高效,但要注意维度对应上)
  11. python中的广播(broadcasting)

1.3 第三周:浅层神经网络

以两层神经网络为例,基本逻辑:

  1. 结构(包括输入层,隐藏层,输出层)
  2. 单个神经元的计算
  3. 多样本的向量化
  4. 激活函数(常用种类,为什么要用非线性激活函数,激活函数的导数)
  5. 神经逻辑的梯度下降(与前面逻辑回归的梯度下降的基本思路,基本一致)
  6. 随机初始化(对于一个神经网络,把权重等参数都初始化为0,梯度下降将不会再起作用)

关于第六点的详细解释:
详细解释

1.4 第四周:深层神经网络

隐藏层的数量可看作一个可自由选择大小的超参数
如果有比较多的隐藏层(网络比较深),总体上能够学更复杂的函数
前向传播和后向传播的基本逻辑,和浅层神经网络一致

02 第二门课 改善深层神经网络:超参数调试,正则化以及优化

2.1 第一周:深度学习的实践层面

2.1.1 训练,验证,测试集

先利用训练集,执行算法进行训练,通过验证集或简单交叉验证集选择最好的模型(比如超参数等的选择)。
经过充分验证,选定了最终模型,在测试集上进行评估。

在小数据量时代,常见做法是将所有数据三七分,即70%验证集+30%测试集,如果没有明确设置验证集,也可以按照 60%训练,20%验证和 20%测试集来划分。
在现在大数据阶段,验证集和测试集占数据总量的比例会趋向于变得更小。

2.1.2 偏差,方差

图片
最左边的图片,用逻辑回归进行拟合,并不能很好地拟合该数据,这是高偏差(high bias)的情况,称为“欠拟合”(underfitting)。

最右边的图片,拟合方式分类器方差较高(high variance),数据过度拟合(overfitting)。

理解偏差和方差的两个关键数据是训练集误差(Train set error)和验证集误差(Dev set error)

  • 假定训练集误差是 1%,验证集误差是 11%,可以看出训练集结果非常好,而验证集结果相对较差。我们可能过度拟合了训练集,泛化能力(适用于没训练的数据的结果较差)在某种程度上,验证集并没有充分利用交叉验证集的作用,像这种情况称为“高方差”。
  • 假设训练集误差是 15%,验证集误差是 16%。且假设该案例中人的错误率几乎为 0%。可得知,算法并没有在训练集中得到很好训练,如果训练数据的拟合度不高,就是数据欠拟合,就可以说这种算法偏差比较高。
  • 假设训练集误差是 15%,验证集的错误率达到 30%。在这种情况下,会认为这是方差偏差都很糟糕的情况。
  • 如果训练集误差是 0.5%,验证集误差是 1%,则是很好的情况,偏差和方差都很低。

最优误差也被称为贝叶斯误差。
如果最优误差或贝叶斯误差非常高,比如 15%。此时训练误差 15%,验证误差 16%,15%的错误率对训练集来说也是非常合理的,偏差不高,方差也非常低。

需要根据实际情况(高偏差,还是高方差),采取不同的措施。

2.1.3 L2 正则化

前面提到了过拟合的问题—高方差。有两个解决方法,一个是正则化,一个是准备更多的数据。

对w用L2正则化:
图片
为什么一般对w用2范数?
因为w通常是一个高维参数向量,几乎可以涵盖所有参数。是否对b使用2范数的正则化,并不太影响最终结果。

L2正则化是最常见的正则化函数。

提问,为什么正则化有利于预防过拟合?
当处于过拟合状态时,若正则化𝜆设置得足够大,权重矩阵𝑊被设置为接近于 0 的值,直观理解就是把多隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响。(0这里算时比较极端的假设)
𝜆会存在一个中间值,于是会有一个接近“Just Right”的中间状态。

2.1.4 dropout 正则化

除了𝐿2正则化,还有一个非常实用的正则化方法——“Dropout(随机失活)”.

假设我们需要训练的神经网络图如下,存在过拟合现象:
神经网络图

dropout 会遍历网络的每一层,并设置消除神经网络中节点的概率
假设网络中的每一层,设置每个节点得以保留和消除的概率都是 0.5。
设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络。
图片

对于其他样本,我们同样这样设置概率,保留一类节点集合,删除其它类型的节点集合。
对于每个训练样本,我们都将采用一个精简后神经网络来训练它。

如何实施 dropout 呢?
下面主要讲inverted dropout(反向随机失活)。
出于完整性考虑,用一个三层(𝑙 = 3)网络来举例说明。

  1. 首先要定义向量𝑑,𝑑[3]表示一个三层的 dropout 向量:
    d3 = np.random.rand(a3.shape[0],a3.shape[1])
  2. 然后看它是否小于某数,我们称之为 keep-prob,keep-prob 是一个具体数字。例如前面我们就设置的0.5。
  3. 接下来,从第三层中获取激活函数,叫做𝑎[3]。使用 a3=np.multiply(a3,d3),就可以利用乘法运算,得到相应元素的输出。
  4. 最后,进行调整,使用a3/=keep-prob。
    解释原因:
    50 个神经元,在一维上𝑎[3]是 50,我们通过因子分解将它拆分成50 × 𝑚维的。
    假设保留和删除它们的概率分别为 80%和 20%,这意味着最后被删除或归零的单元平均有 10(50×20%=10)个。
    看𝑧[4],𝑧[4] = 𝑤[4]𝑎[3] + 𝑏[4],我们的预期是,𝑎[3]减少 20%,也就是说𝑎[3]中有 20%的元素被归零,为了不影响𝑧[4]的期望值,我们需要用𝑤[4]𝑎[3]/0.8,它将会修正或弥补所需要的那20%,a[3]的期望不会变。

显然在测试阶段,我们并未使用 dropout。
因为在测试阶段进行预测时,我们不期望输出结果是随机的,如果测试阶段应用 dropout 函数,预测会受到干扰。

2.1.5 理解dropout

一种理解是:
不依赖于任何一个特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传播下去,并为单元的四个输入增加一点权重,通过传播所有权重。
dropout将产生收缩权重的平方范数的效果,和之前讲的𝐿2正则化类似;实施 dropout 的结果实它会压缩权重,并完成一些预防过拟合的外层正则化;𝐿2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。
(可粗略理解为:dropout特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除。机器不愿意把所有赌注都放在一个节点上,不愿意给任何一个输入加上太多权重,因为它可能会被删除,因此该单元将通过这种方式积极地传播开,并为单元的四个输入增加一点权重,通过传播所有权重)

不担心过拟合问题的,keep-prob 可以为 1。
过拟合问题比较严重的,keep-prob会需要小一点。

dropout的缺点是,代价函数J不再被明确定义,每次迭代,都会随机移除一些节点。如果要再三检查梯度下降的性能,很难进行复查。

2.1.6 其他正则化方法

除了𝐿2正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合:

  1. 数据扩增
    通过随意翻转和裁剪图片等方式,我们可以增大数据集,额外生成假训练数据。
    和全新的,独立的猫咪图片数据相比,这些额外的假的数据无法包含像全新数据那么多的信息,但我们这么做基本没有花费,代价几乎为零,除了一些对抗性代价。
  2. early stopping
    术语early stopping表示提早停止训练神经网络(如验证集误差开始上升的位置)

2.1.7 归一化输入

训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为 2 维。

归一化需要两个步骤:

  1. 零均值
  2. 归一化方差;

使用归一化输入,是为了让各特征能够从输入同等考虑。

2.1.8 梯度消失/梯度爆炸

训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。

假设深度为150层,在这样一个深度神经网络中,如果激活函数或梯度函数以与𝐿相关的指数增长或递减,它们的值将会变得极大或极小,从而导致训练难度上升,尤其是梯度指数小于𝐿时,梯度下降算法的步长会非常非常小,梯度下降算法将花费很长时间来学习。

2.1.9 神经网络权重的初始化

03后记

🥲关于吴恩达《深度学习》的笔记就到这了,应该暂时就当这了。
个人觉得吴恩达的课程,较李宏毅的课和“鱼书的讲解,还是有点冗长了。
目前打算看看别的书,或者更有针对性一点的论文/期刊之类的。

其实很早之前就学过一些deep learning的东西,目前读研换方向,算是“文艺复兴”了,不过就这么几年,人工智能发展也真的很快了。
粘贴一下以前在coursera学习上获得的证书,以前还申请了学生免费上课,🥹全当是纪念了
助学金
证书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94796.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025数字马力一面面经(社)

2025数字马力一面面经(社) 日常自我介绍js数据类型有哪些(报完菜名后简单分析了一下使用引用类型)谈谈对const、var、let的理解(变量提升、let和const的主要区别、使用const命名引用类型的时可以对引用类型进行操作&am…

PyQt 中 pyqtSignal 的使用

目录 基本用法 示例代码 关键特性 常见用途 一、信号的定义规则 二、完整用法步骤 1. 导入必要模块 2. 定义带信号的类 3. 定义接收信号的槽函数 4. 连接信号与槽 5. 发射信号 6. 断开连接(可选) 三、高级特性 1. 跨线程通信 2. 信号连接方式 3. 信号与匿名函数 4. 信号转发 …

使用Python验证常见的50个正则表达式

什么是正则表达式?正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。此处的Regular即是规则、规律的意思,Regular Expression即“描述某种规则的表达式”之意。本文收集了一些常见的正则表达式用…

Redis是单线程性能还高的原因

Redis是单线程Redis单线程是指Redis的网络IO和键值对读写是由一个线程完成的,其他功能还是使用多线程执行Redis主干业务使用单线程的原因Redis本质就是一个大的共享资源,共享资源是需要对其进行并发控制的,即使增加了线程,大部分线程也是在等待互斥锁,并行变串行,而且还需要进行…

若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用

一 Mybatis 1、Maven依赖 在ruoyi父项目的pom文件中有一个分页插件的依赖 <!-- pagehelper 分页插件 --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version&…

灌区信息化智能管理系统解决方案

一、方案背景 灌区作为农业灌溉的重要基础设施&#xff0c;承担着保障粮食安全和促进农业可持续发展的关键作用。然而&#xff0c;传统灌区管理方式普遍存在信息孤岛、数据滞后、调度不精准等问题&#xff0c;导致水资源浪费和管理效率低下。在此背景下&#xff0c;灌区信息化智…

软件包管理、缓存、自定义 YUM 源

1. 软件包管理是啥 你可以把软件包管理器理解成 Linux 的“应用商店 安装工人”&#xff1a; 应用商店&#xff1a;帮你找到软件&#xff08;包&#xff09;安装工人&#xff1a;帮你下载安装、配置、升级、卸载管理账本&#xff1a;记录系统里都安装了啥、版本号是多少、依赖…

Pthon 本质详解

理解 Python 的本质&#xff0c;不能仅仅停留在“它是一门编程语言”这个层面&#xff0c;而要深入其设计哲学、核心机制、以及它在编程世界中所扮演的角色。 可以把 Python 的本质概括为一句话&#xff1a;Python 的本质是一种以“简洁优雅、易于读写”为核心设计哲学&#xf…

在Word文档中用键盘直接移动(复制)内容

如何快速在Word文档中剪切或复制内容到本文档的其他位置&#xff1f;不用剪切或复制&#xff0c;再粘贴&#xff0c;只需要先选中内容&#xff0c;然后按下F2&#xff08;ShiftF2&#xff09;剪切&#xff08;复制&#xff09;内容&#xff0c;再把光标放到目标位置按下回车键就…

VRTE 的应用程序部署到Ubuntu上 报错:bash: ./rb_exmd: No such file or directory

&#x1f6e0;️ 如何在 Ubuntu 上部署 VRTE 3.5 的 AraCM_IPC 应用程序在将 VRTE 3.5 的 AraCM_IPC 应用部署到 Ubuntu 系统时&#xff0c;可能会遇到运行失败的问题&#xff0c;提示类似&#xff1a;bash: ./rb_exmd: No such file or directory这通常并非文件不存在&#xf…

WD5202 非隔离降压转换芯片,220V降5V,输出电流80MA

解锁高效电源新境界&#xff1a;WD5202 非隔离降压转换芯片在当今电子设备飞速发展的时代&#xff0c;高效、稳定且低成本的电源解决方案至关重要。WD5202 作为一款卓越的非隔离降压转换芯片&#xff0c;正以其独特的性能和广泛的适用性&#xff0c;在众多领域崭露头角&#xf…

库函数版独立按键用位运算方式实现(STC8)

位运算&#xff1a;更加简便&#xff0c;单片机的内存就小&#xff0c;占的内存空间小一点案例&#xff1a; #include "GPIO.h" #include "Delay.h" #include "UART.h" // 串口配置 UART_Configuration #include "NVIC.h" // 中断…

RA4M2_MINI开发(15)----配置RTC时钟及显示时间

RA4M2_MINI开发.15--配置RTC时钟及显示时间 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置SWD调试口设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_ua…

使用Prometheus + Grafana + node_exporter实现Linux服务器性能监控

监控与告警系统部署&#xff1a;项目示例: "使用Prometheus Grafana node_exporter实现Linux服务器性能监控"描述: 在目标服务器部署node_exporter采集系统指标(CPU, 内存, 磁盘, 网络)。部署配置Prometheus Server&#xff0c;抓取node_exporter数据。部署配置Gra…

IP防护等级及检验方法说明

IP防护等级说明&#xff1a; IP (Ingress Protection) 防护等级系统是由 IEC 60529 标准定义的&#xff0c;用于衡量电气设备外壳对固体异物和液体进入的防护能力。IP代码通常由两位数字组成&#xff1a;第一位数字表示防固体异物等级(0-6)&#xff0c;第二位数字表示防水等级(…

最近看到的提示词相关内容汇总

看看能不能总结出来一些提示词最佳实践 一定要动手实践。 目前已经知道的提示词好习惯 角色扮演 操作步骤 质量要求 结构化输出 案例 Anthropic 视频中提到,实际上作为一门科学,我们可以通过以下手段尝试它。 最初的提示词,不断的尝试,直到最终的提示词。 优质提示词结…

github代理

自己整理的github代理 代理网址 https://g.cachecdn.ggff.net/ https://gitcode.com/ https://git.mxg.pub/ https://xiake.pro/ https://github.akams.cn/ 手动更新 hosts 方法 适合临时使用&#xff0c;Github 的ip经常变 Linux / MacOS hosts 路径&#xff1a;/etc/host…

交换机100G模块远距离连接踩坑记录

一、业务需求场景 两个办公场地之间相距较远,大约有几百米。网络系统规划两个办公场地的局域网之间通过100G 网络连接,几百米的距离使用多模光纤是不能满足需求的,因此选择使用单模光纤连接,交换机的模块选择使用华为QSFP28-100G-PSM4 模块,这个模块使用的是MPO接口。 两个…

精通Python异步编程:深入理解Async/Await在LLM应用中的实践

简介 在现代高性能应用开发中,特别是在处理大型语言模型(LLM)时,高效处理I/O密集型操作至关重要。Python的async和await关键字通过异步编程提供了优雅的解决方案。本综合指南将探讨如何利用这些特性构建响应迅速、高效的LLM驱动应用。 目录 理解同步与异步执行 Async/Await…

嵌入式第二十三课 !!!树结构与排序(时间复杂度)

二叉树树概念 树是 n(n > 0) 个结点的有限集合。若 n0 &#xff0c;为空树。在任意一个非空树中&#xff1a; &#xff08;1&#xff09;有且仅有一个特定的根结点&#xff1b;&#xff08;2&#xff09;当 n>1 时&#xff0c;其余结点可分为 m 个互不相交的有…