吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.9-1.10

news2024/11/23 18:59:53

目录

  • 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
    • 第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)
      • 1.9 归一化输入(Normalizing inputs)
      • 1.10 梯度消失/梯度爆炸(Vanishing / Exploding gradients)

第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)

1.9 归一化输入(Normalizing inputs)

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

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

我们希望无论是训练集和测试集都是通过相同的μ和 σ 2 σ^2 σ2定义的数据转换,这两个是由训练集得出来的。
在这里插入图片描述

第一步是零均值化, μ = 1 m ∑ i = 1 m x ( i ) μ=\frac{1}{m}\sum_{i=1}^m{x^{(i)}} μ=m1i=1mx(i),它是一个向量,𝑥等于每个训练数据 𝑥减去𝜇,意思是移动训练集,直到它完成零均值化

第二步是归一化方差,注意特征 x 1 x_1 x1的方差比特征 x 2 x_2 x2的方差要大得多,我们要做的是给𝜎赋值, σ 2 = 1 m ∑ i = 1 m ( x ( i ) ) 2 σ^2 =\frac{1}{m}\sum_{i=1}^m{(x^{(i)})^2} σ2=m1i=1m(x(i))2 ,这是节点y 的平方, σ 2 σ^2 σ2是一个向量,它的每个特征都有方差,注意,我们已经完成零值均化, ( x ( i ) ) 2 {(x^{(i)})^2} (x(i))2元素 y 2 y^2 y2就是方差,我们把所有数据除以向量 σ 2 σ^2 σ2,最后变成上图形式。

x_1和x_2的方差都等于 1。提示一下,如果你用它来调整训练数据,那么用相同的 μ和 σ 2 σ^2 σ2来归一化测试集。尤其是,你不希望训练集和测试集的归一化有所不同,不论μ的值是什么,也不论 σ 2 σ^2 σ2的值是什么,这两个公式中都会用到它们。所以你要用同样的方法调整测试集,而不是在训练集和测试集上分别预估μ和 σ 2 σ^2 σ2。因为我们希望不论是训练数据还是测试数据,都是通过相同 μ 和𝜎2定义的相同数据转换,其中 μ和 σ 2 σ^2 σ2是由训练集数据计算得来的。

我们为什么要这么做呢?为什么我们想要归一化输入特征,回想一下右上角所定义的代价函数。
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(w,b) =\frac{1}{m}\sum_{i=1}^m{L(\hat{y}^{(i)},y^{(i)})} J(w,b)=m1i=1mL(y^(i),y(i))

如果你使用非归一化的输入特征,代价函数会像这样:

在这里插入图片描述
这是一个非常细长狭窄的代价函数,你要找的最小值应该在这里。但如果特征值在不同范围,假如𝑥1取值范围从 1 到 1000,特征𝑥2的取值范围从 0 到 1,结果是参数𝑤1和𝑤2值的范围或比率将会非常不同,这些数据轴应该是𝑤1和𝑤2,但直观理解,我标记为𝑤和𝑏,代价函数就有点像狭长的碗一样,如果你能画出该函数的部分轮廓,它会是这样一个狭长的函数。

然而如果你归一化特征,代价函数平均起来看更对称,如果你在上图这样的代价函数上运行梯度下降法,你必须使用一个非常小的学习率。因为如果是在这个位置,梯度下降法可能需要多次迭代过程,直到最后找到最小值。但如果函数是一个更圆的球形轮廓,那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长,而不需要像在左图中那样反复执行。

当然,实际上𝑤是一个高维向量,因此用二维绘制𝑤并不能正确地传达并直观理解,但总地直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是从 1 到 1000,0 到 1 的范围,而是在-1 到 1 范围内或相似偏差,这使得代价函数𝐽优化起来更简单快速。
在这里插入图片描述
实际上如果假设特征𝑥1范围在 0-1 之间,𝑥2的范围在-1 到 1 之间,𝑥3范围在 1-2 之间,它们是相似范围,所以会表现得很好。

当它们在非常不同的取值范围内,如其中一个从 1 到 1000,另一个从 0 到 1,这对优化算法非常不利。但是仅将它们设置为均化零值,假设方差为 1,就像上一张幻灯片里设定的那样,确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。

所以如果输入特征处于不同范围内,可能有些特征值从 0 到 1,有些从 1 到 1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,我通常会做归一化处理,虽然我不确定它能否提高训练或算法速度。

这就是归一化特征输入,下节课我们将继续讨论提升神经网络训练速度的方法。

1.10 梯度消失/梯度爆炸(Vanishing / Exploding gradients)

训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,也就是你训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。

这节课,你将会了解梯度消失或梯度爆炸的真正含义,以及如何更明智地选择随机初始化权重,从而避免这个问题。 假设你正在训练这样一个极深的神经网络,为了节约幻灯片上的空间,我画的神经网络每层只有两个隐藏单元,但它可能含有更多,但这个神经网络会有参数 W [ 1 ] , W [ 2 ] , W [ 3 ] W^{[1]},W^{[2]},W^{[3]} W[1]W[2]W[3]等等,直到 W [ l ] W^{[l]} W[l],为了简单起见,假设我们使用激活函数 g ( z ) = z g(z) = z g(z)=z,也就是线性激活函数,我们忽略𝑏,假设 b [ l ] = 0 b[l]=0 b[l]=0,如果那样的话,输出:
y = W [ L ] W [ L − 1 ] W [ L − 2 ] … W [ 3 ] W [ 2 ] W [ 1 ] x y = W^{[L]}W^{[L−1]}W^{[L−2]} … W^{[3]}W^{[2]}W^{[1]}x y=W[L]W[L1]W[L2]W[3]W[2]W[1]x

如果你想考验我的数学水平, W [ 1 ] x = z [ 1 ] W^{[1]}x = z^{[1]} W[1]x=z[1],因为b = 0,所以我想 z [ 1 ] = W [ 1 ] x , a [ 1 ] = g ( z [ 1 ] ) z^{[1]} = W^{[1]}x,a^{[1]} =g(z^{[1]}) z[1]=W[1]xa[1]=g(z[1]),因为我们使用了一个线性激活函数,它等于 z [ 1 ] z^{[1]} z[1],所以第一项 W [ 1 ] x = a [ 1 ] W^{[1]}x = a^{[1]} W[1]x=a[1],通过推理,你会得出 W [ 2 ] W [ 1 ] x = a [ 2 ] W^{[2]}W^{[1]}x = a^{[2]} W[2]W[1]x=a[2],因为 a [ 2 ] = g ( z [ 2 ] ) a^{[2]} = g(z^{[2]}) a[2]=g(z[2]),还等于 g ( W [ 2 ] a [ 1 ] ) g(W^{[2]}a^{[1]}) g(W[2]a[1]),可以用 W [ 1 ] x W^{[1]}x W[1]x替换 a [ 1 ] a^{[1]} a[1],所以这一项就等于 a [ 2 ] a^{[2]} a[2],这个就是 a [ 3 ] ( W [ 3 ] W [ 2 ] W [ 1 ] x ) a^{[3]}(W^{[3]}W^{[2]}W^{[1]}x) a[3](W[3]W[2]W[1]x)
在这里插入图片描述
所有这些矩阵数据传递的协议将给出 y ^ \hat{y} y^而不是𝑦的值。

假设每个权重矩阵 W [ L ] = [ 1.5 0 0 1.5 ] W^{[L]} =\begin{bmatrix}1.5 & 0 \\0 & 1.5 \end{bmatrix} W[L]=[1.5001.5],从技术上来讲,最后一项有不同维度,可能它就是余下的权重矩阵, y = W [ 1 ] [ 1.5 0 0 1.5 ] ( L − 1 ) x y= W^{[1]}\begin{bmatrix}1.5 & 0 \\0 & 1.5 \end{bmatrix}^{(L−1)}x y=W[1][1.5001.5](L1)x,因为我们假设所有矩阵都等于它,它是 1.5倍的单位矩阵,最后的计算结果就是 y ^ \hat{y} y^ y ^ \hat{y} y^也就是等于 1. 5 ( L − 1 ) x 1.5^{(L−1)}x 1.5(L1)x。如果对于一个深度神经网络来说𝐿值较大,那么 y ^ \hat{y} y^的值也会非常大,实际上它呈指数级增长的,它增长的比率是 1. 5 L 1.5^L 1.5L,因此对于一个深度神经网络,𝑦的值将爆炸式增长。

相反的,如果权重是 0.5, W [ L ] = [ 1.5 0 0 1.5 ] W^{[L]} =\begin{bmatrix}1.5 & 0 \\0 & 1.5 \end{bmatrix} W[L]=[1.5001.5],它比 1 小,这项也就变成了 0. 5 L 0.5^L 0.5L,矩阵 y = W [ 1 ] [ 0.5 0 0 0.5 ] ( L − 1 ) x y=W^{[1]}\begin{bmatrix}0.5 & 0 \\0 & 0.5 \end{bmatrix}^{(L−1)}x y=W[1][0.5000.5](L1)x,再次忽略 W [ L ] W^{[L]} W[L],因此每个矩阵都小于 1,假设 x 1 x_1 x1 x 2 x_2 x2都是 1,激活函数将变成 1 2 , 1 2 , 1 4 , 1 4 , 1 8 , 1 8 \frac{1}{2},\frac{1}{2},\frac{1}{4},\frac{1}{4},\frac{1}{8},\frac{1}{8} 212141418181等,直到最后一项变成 1 2 L \frac{1}{2^L} 2L1,所以作为自定义函数,激活函数的值将以指数级下降,它是与网络层数数量𝐿相关的函数,在深度网络中,激活函数以指数级递减。我希望你得到的直观理解是,权重W只比 1 略大一点,或者说只是比单位矩阵大一点,深度神经网络的激活函数将爆炸式增长,如果W比 1 略小一点,可能是 [ 0.9 0 0 0.9 ] \begin{bmatrix}0.9 & 0 \\0 & 0.9\end{bmatrix} [0.9000.9]

在这里插入图片描述

在深度神经网络中,激活函数将以指数级递减,虽然我只是讨论了激活函数以与𝐿相关的指数级数增长或下降,它也适用于与层数𝐿相关的导数或梯度函数,也是呈指数级增长或呈指数递减。

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

总结一下,我们讲了深度神经网络是如何产生梯度消失或爆炸问题的,实际上,在很长一段时间内,它曾是训练深度神经网络的阻力,虽然有一个不能彻底解决此问题的解决方案,但是已在如何选择初始化权重问题上提供了很多帮助。

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

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

相关文章

Dom获取属性操作

目录 1. 基本认知 1.1 目的和内容 1.2 什么是DOM 1.3 DOM对象 1.4 DOM树 2. 获取DOM元素对象 2.1 选择匹配到的第一个元素 2.2 选择匹配到的多个元素 2.3 其他获取DOM元素方法 3. 操作元素内容 3.1 元素对象.innerText 属性 3.2 元素对象.innerHTML 属性 4. 操作元…

力扣题目:寻找数组的中心下标

力扣题目:寻找数组的中心下标 题目链接: 724.寻找数组的中心下标 题目描述 代码思路 根据题目内容,维护好前后缀和,然后从左到右遍历寻找合适的下标 代码纯享版 class Solution {public int pivotIndex(int[] nums) {int sumleft 0, su…

Visual Studio安装MFC开发组件

MFC由于比较古老了,Visual Studio默认没有这个开发组件。最近由于一些原因,需要使用这个库,这就需要另外安装。 参考了网上的一些资料,根据实际使用,其实很多步骤不是必须的。 https://zhuanlan.zhihu.com/p/68117276…

ios CI/CD 持续集成 组件化专题四-(手动发布私有库-组件化搭建)

一 、创建私有索引库 1.1 、第一步 首先检查本地是否存在需要的私有索引库 pod repo list 例如:dp_base_ios_spec 在本地不存在该私有索引库 1.2 、第二步 在git下下创建一个新的库,这个库用来保存私有库的podspec文件,取名叫xxxSpec用以…

如何使用Go语言进行基准测试(benchmark)?

文章目录 一、基准测试的基本概念二、编写基准测试函数三、运行基准测试四、优化代码性能五、注意事项总结 在Go语言中,基准测试(benchmark)是一种评估代码性能的有效方式。通过基准测试,我们可以测量代码执行的时间、内存使用情况…

MAT分析内存溢出

一. 下载地址 MAT工具,可以单独下载,记得和JDK进行适配,可以不用下载eclipse 下载地址: https://eclipse.dev/mat/downloads.php 二. MAT内存溢出本地代码测试 package com.sohu.test.method;import java.util.ArrayList; import java.ut…

Dashboard 安装部署

Dashboard 安装部署 Dashboard 安装部署 一:下载 二:部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败,可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…

二叉树的遍历算法

目录 1.二叉树结构 2.广度优先搜索二叉树(迭代算法) 3.深度优先搜索二叉树(递归算法) 1.二叉树结构 一个父结点,至多可以连接左右两个子节点 Java构造树结构——其实是 自定义树结点类型 public class TreeNode {in…

【数据结构】链表专题3

前言 本篇博客我们继续来讨论链表专题,今天的链表算法题是经典中的经典 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 1.判断链表是否…

基于Springboot的在线博客网站

基于SpringbootVue的在线博客网站的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 博客标签 博客分类 博客列表 图库相册 后台登录 后台首页 用户管理 博客标…

layui中禁用div标签等操作

为了实现点击表格行后触发事件 然后去触发后进行操作 页面流程操作设置规定 不可编辑直接添加属性 class"layui-disabled"如果在最大的 div 设置不可编辑 但是内部有些还是可以触发使用的 所以就重写一下 取到当前 div 下的 所有的子元素 然后在给所有的子元素…

PE文件(三)节表作业

本次作业以notepad进行演示,如下是其在硬盘上的内存 1.手动解析节表 由标准pe头可知,一共由7个节也就是7个节表,可选pe头的大小是0X00F0,即240字节大小 根据上述我们所获取的信息,找到节表的首地址为0x01F8 .text …

Uniapp好看登录注册页面

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

docker 基础命令

docker 安装 更新系统 sudo apt update sudo apt -y dist-upgrade安装docker sudo apt-get -y install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/…

C语言——操作符保姆级教学(含整形提升及算数转换)

操作符 一.操作符的分类二.原码、反码、补码三.移位操作符1.左移操作符&#xff1a;<<2.右移操作符&#xff1a;>> 四.位操作符1.按位与—— &2.按位或—— |3.按位异或—— ^4.按位取反—— ~ 五.逗号表达式六.条件操作符七.操作符的属性&#xff1a;优先级、…

MATLAB 数据输出

MATLAB 数据输出 数据导出(或输出)在 MATLAB 的意思是写入文件。MATLAB 允许您在另一个读取 ASCII 文件的应用程序中使用您的数据。为此&#xff0c;MATLAB 提供了几个数据导出选项。 您可以创建以下类型的文件- 数组中的矩形、分隔的ASCII数据文件。 击键的日记&#xff08…

导数之光:探寻机器学习中的微变奥秘

在当今这个数据驱动的时代&#xff0c;机器学习以其强大的学习和预测能力&#xff0c;成为了推动科技进步的重要力量。而在机器学习的背后&#xff0c;数学原理&#xff0c;尤其是导数的应用&#xff0c;为其提供了坚实的理论支撑。本文将详细探讨导数在机器学习中的体现&#…

细说SVPWM原理及软件实现原理,关联PWM实现

细说SVPWM原理及软件实现原理&#xff0c;关联PWM实现 文章目录 细说SVPWM原理及软件实现原理&#xff0c;关联PWM实现1. 前言2. 基础控制原理回顾2.1 FOC 原理回顾2.2 细说 SVPWM2.2.1 矢量扇区计算2.2.2 矢量作用时间计算 2.2.3 如何理解 U4 U6 2/3Udc?2.2.4 如何理解 U4m…

flash attention 参数(笔记)

目录 一、flash attention官方 1.1、flash attention安装 二、flash attention 常见函数 2.1、flash_attn_varlen_qkvpacked_func 2.2、flash_attn_varlen_kvpacked_func 2.3、flash_attn_varlen_func ​​​​​​​2.4、flash_attn_with_kvcache 2.5、flash_attn_func 一、…

1. 深度学习笔记--神经网络中常见的激活函数

1. 介绍 每个激活函数的输入都是一个数字&#xff0c;然后对其进行某种固定的数学操作。激活函数给神经元引入了非线性因素&#xff0c;如果不用激活函数的话&#xff0c;无论神经网络有多少层&#xff0c;输出都是输入的线性组合。激活函数的意义在于它能够引入非线性特性&am…