【深度学习】吴恩达课程笔记(五)——超参数调试、batch norm、Softmax 回归

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~

【吴恩达课程笔记专栏】
【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础
【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络
【深度学习】吴恩达课程笔记(三)——参数VS超参数、深度学习的实践层面
【深度学习】吴恩达课程笔记(四)——优化算法

吴恩达课程笔记——超参数调试、batch norm、Softmax 回归

  • 九、超参数调试
    • 1.调试处理
      • 超参数优先级
    • 2.超参数数值搭配选择方法
    • 3.为超参数选择合适的范围(标尺)
    • 4.超参数调整实践(Pandas VS Caviar)
      • 熊猫法
      • 鱼子酱法
  • 十、batch norm
    • 1.归一化网络的激活函数
    • 2.把batch norm拟合进神经网络
      • 使用的位置
      • batch norm拟合进神经网络
      • batch norm与minibatch一起使用
      • 𝑏[l]参数没有意义
    • 3.batch norm为什么好用?
      • 问题的提出
      • 总结
    • 4.测试时的batch norm
  • 十一、Softmax 回归
    • 1.Softmax 回归简介
      • 简介
      • 计算方法
      • softmax回归举例
    • 2.训练一个 Softmax 分类器
      • Softmax 名称来源
      • 怎样训练带有 Softmax 输出层的神经网络
      • 反向传播步骤或者梯度下降法

九、超参数调试

1.调试处理

超参数优先级

在这里插入图片描述
红色第一,黄色第二,紫色第三,没框的基本不调

2.超参数数值搭配选择方法

在这里插入图片描述
超参数少的时候可以像左面一样均匀取点研究效果。

超参数多的时候可以选择随机取点研究效果。如果此时发现某点及其附近的效果比其它部分好,那么就在这附近的区域较为密集地再多取一些点。如此研究直到得出足够满意的超参数搭配。如下图:
在这里插入图片描述

3.为超参数选择合适的范围(标尺)

举例说明:

  • 神经网络某层的神经元个数:可以取50-100间均匀随机值

  • 神经网络层数:可以取2-4间均匀随机值

  • 学习率:可以取0.0001-1间不均匀随机值

α = 1 0 − 4 ∗ n p . r a n d o n . r a n d ( ) 例子中的范围为 [ − 4 , 0 ] \alpha=10^{-4*np.randon.rand()}\\ 例子中的范围为[-4,0] α=104np.randon.rand()例子中的范围为[4,0]

在这里插入图片描述
标尺长上面这样。这样可以给不同的数量级分配相同的搜索资源。

  • 指数平均的 𝛽 :可以取0.9-0.999间不均匀随机值。

因为指数平均计算的是1/(1- 𝛽 )个数的平均值,这个式子在beta接近1的时候对beta更加敏感,因此应该令beta越接近1时,给相应的beta范围分配更多的搜索权重。
在这里插入图片描述
如图所示,对1- 𝛽 施以类似上面的学习率的计算,即可达到效果。

实际上,即使不使用这类换标尺的方法,只要有足够数据,或者能恰当的使用逐渐缩小超参数组合范围的方法,也可以较快的算出超参数的恰当值。

4.超参数调整实践(Pandas VS Caviar)

熊猫法

同时运行一个模型,观察其性能随时间变化,手动调整超参数
在这里插入图片描述

鱼子酱法

同时运行多个模型,不进行人工干预。全部训练完毕后选出训练结果较好的模型。
在这里插入图片描述

十、batch norm

1.归一化网络的激活函数

在这里插入图片描述

含义:将z进行归一化。即将z的分布调整到平均值为0,值分布调整到0-1之间(方差为1)。

目的:使得神经网络的参数计算更有效率

注意:在训练隐藏层的时候,有时候为了发挥sigmoid、tanh等的效果,你不希望数据的方差变为1,那么你就没必要对z归一化
z ( 1 ) , . . . , z ( m ) —— > z [ l ] ( i ) , i 为 1 到 m 的某个隐藏层 i μ = 1 m ∑ i m z ( i ) σ n o r m 2 = 1 m ∑ i m ( z i − μ ) 2 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z^{(1)},...,z^{(m)} ——>z^{[l](i)},i为1到m的某个隐藏层i\\ \mu=\frac{1}{m}\sum_{i}^{m}z^{(i)} \\ \sigma_{norm}^{2}=\frac{1}{m}\sum_{i}^{m}(z_i-\mu)^{2} \\ z_{norm}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\epsilon}}\\ z(1),...,z(m)——>z[l](i),i1m的某个隐藏层iμ=m1imz(i)σnorm2=m1im(ziμ)2znorm(i)=σ2+ϵ z(i)μ
但是有时候我们不希望z分布在0-1、平均值为0,也许分布在别的地方会更有意义。
z ˜ ( i ) = γ z n o r m ( i ) + β 如果 γ , β 如下 : γ = σ 2 + ϵ β = μ 那么: z ˜ ( i ) = z ( i ) \~z^{(i)}=\gamma z_{norm}^{(i)}+\beta\\ 如果\gamma ,\beta如下: \\ \gamma=\sqrt{\sigma^{2}+\epsilon} \\ \beta=\mu \\ 那么:\~z^{(i)}=z^{(i)} z˜(i)=γznorm(i)+β如果γβ如下:γ=σ2+ϵ β=μ那么:z˜(i)=z(i)

2.把batch norm拟合进神经网络

使用的位置

前向传播中:在计算出z后,使用激活函数前
在这里插入图片描述
每个单元负责计算两件事。第一,它先计算 𝑧,然后应用其到激活函数中再计算 𝑎 。每个圆圈代表着两步的计算过程。
在这里插入图片描述

batch norm拟合进神经网络

  1. 没有应用 Batch 归一化:

    把输入𝑋拟合到第一隐藏层,然后首先应用 𝑤[1] 和 𝑏[1] 计算 𝑧[1]

    接着,把 𝑧[1] 拟合到激活函数以计算 𝑎[1]

  2. 应用 Batch 归一化:Batch 归一化是发生在计算𝑧和𝑎之间的。

    • 把输入𝑋拟合到第一隐藏层,然后首先应用 𝑤[1] 和 𝑏[1] 计算 𝑧[1]

    • (第一层)将 𝑧[1] 值进行 Batch 归一化,简称 BN,此过程将由 𝛽[1] 和 𝛾[1] 两参数控制,这一操作会给你一个新的规范化的 𝑧[1] 值(𝑧̃[1] ),然后将其输入激活函数中得到 𝑎[1],即 𝑎[1] = 𝑔[1] (𝑧̃[l])。

    • (第二层)应用 𝑎[1] 值来计算 𝑧[2],此过程是由 𝑤[2] 和 𝑏[2] 控制的。与你在第一层所做的类似,通过 𝛽[2] 和 𝛾[2] 将 𝑧[2] 进行 Batch 归一化,得到 𝑧̃[2],再通过激活函数计算出 𝑎[2]

    注意:这里的这些( 𝛽[1], 𝛽[2]等等)和超参数𝛽没有任何关系。

    ( 𝛽[1], 𝛽[2]等等)是算法的新参数 ,接下来你可以使用想用的任何一种优化算法,比如使用梯度下降法来执行它。更新参数 𝛽为 𝛽[l] = 𝛽[l] - 𝛼 𝑑𝛽[l]。你也可以使用 Adam 或 RMSprop 或 Momentum,以更新参数 𝛽 和 𝛾,并不是只应用梯度下降法。

    后者是用于 Momentum、 Adam、 RMSprop 或计算各个指数的加权平均值。

batch norm与minibatch一起使用

在这里插入图片描述
第一个 mini-batch:𝑋{1}

  • 应用参数𝑤[1]和𝑏[1] ,计算𝑧[1]
  • Batch 归一化减去均值,除以标准差,由𝛽[1]和𝛾[1]得到𝑧̃[1]
  • 再应用激活函数得到𝑎[1]
  • 应用参数𝑤[2]和𝑏[2],计算𝑧[2]
  • 然后继续下去

继续第二个 mini-batch:𝑋{2}

继续第三个 mini-batch:𝑋{3}

𝑏[l]参数没有意义

在这里插入图片描述
在使用 Batch 归一化,其实你可以消除参数 𝑏[l],或者设置为 0,参数变成𝑧[l] = 𝑤[l]𝑎[[l-1]

然后对𝑧[l]进行归一化,𝑧̃[l] = 𝛾[l]z[l] +𝛽[l],最后会用参数𝛽[l],以便决定𝑧̃[l]的取值。

**总结:**Batch 归一化,z[l]所有的偏移最终都由归一化确定了, 𝑏[l]参数没有意义,所以由控制参数𝛽[l]代替来影响转移或偏置条件。

3.batch norm为什么好用?

问题的提出

在这里插入图片描述
如上图,如果你的训练集是左边的那些黑猫,那么你的训练样本分布可以由左侧坐标系图代替。如果你的训练集是右边那些花猫,那么你的样本分布可由右侧坐标图代替。

假设你分别用两组训练集训练两个模型,那么由于样本分布不同,最后得到的“找猫函数”也会不同。

现在你希望有一个模型,能同时识别黑猫和不同颜色的猫,但是由上可知,如果你同时用黑猫和花猫的训练集进行训练,就容易让神经元感到“迷惑”

总结

在这里插入图片描述

  1. Batch 归一化,从神经网络后层角度而言,前层不会左右移动的那么多,因为被均值和方差所限制,使后层的学习工作变得更容易些。
  2. Batch 归一化有轻微正则化效果

4.测试时的batch norm

μ = 1 m ∑ i m z ( i ) σ n o r m 2 = 1 m ∑ i m ( z i − μ ) 2 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z ˜ ( i ) = γ z n o r m ( i ) + β \mu=\frac{1}{m}\sum_{i}^{m}z^{(i)} \\ \sigma_{norm}^{2}=\frac{1}{m}\sum_{i}^{m}(z_i-\mu)^{2} \\ z_{norm}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^{2}+\epsilon}}\\ \~z^{(i)}=\gamma z_{norm}^{(i)}+\beta\\ μ=m1imz(i)σnorm2=m1im(ziμ)2znorm(i)=σ2+ϵ z(i)μz˜(i)=γznorm(i)+β

测试时,我们可能不使用minibatch,而是一个一个的过训练样本。这个时候训练集的平均数 𝜇 和方差 𝜎2 怎么获得呢?

  1. 使用指数加权平均计算

  2. 使用流动平均来粗略估算

  3. 使用深度学习框架自默认的方式估算

十一、Softmax 回归

1.Softmax 回归简介

简介

softmax回归是logistic回归的一般形式,它做的不只是二分分类,也可以做多分分类
在这里插入图片描述
区分四个种类(class),0-其他、1-猫、2-狗、3-鸡

定义C为种类数,这里C=4,可以看到输出层有四个神经元,他们分别输出结果是0、1、2、3的概率,且总和为1 ,输出结果是一个4*1的向量。

计算方法

在这里插入图片描述
左侧是softmax输出层激活函数计算方法:
z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] S o f t m a x 激活函数 : a [ l ] = g [ l ] ( z [ l ] ) t = e z [ l ] a [ l ] = e z [ l ] ∑ j = 1 4 t i a i [ l ] = t i ∑ j = 1 4 t i z^{[l]} = W^{[l]}a^{[l-1]} + b^{[l]} \\ Softmax 激活函数: a^{[l]}=g^{[l]}(z^{[l]})\\ t=e^{z^{[l]}} \\ a^{[l]}=\frac{e^{z^{[l]}}}{\sum_{j=1}^{4}t_i} \\ a_i^{[l]}=\frac{t_i}{\sum_{j=1}^{4}t_i} \\ z[l]=W[l]a[l1]+b[l]Softmax激活函数:a[l]=g[l](z[l])t=ez[l]a[l]=j=14tiez[l]ai[l]=j=14titi
右侧是一个例子:
在这里插入图片描述

softmax回归举例

在这里插入图片描述

2.训练一个 Softmax 分类器

Softmax 名称来源

hardmax 会把向量𝑧变成这个向量[1 0 0 0], 与hardmax 对比,Softmax所做的从𝑧到概率的映射更为温和
在这里插入图片描述

怎样训练带有 Softmax 输出层的神经网络

在这里插入图片描述

举例:单个样本为猫,这个样本中神经网络的表现不佳,这实际上是一只猫,但却只分配到 20%是猫的概率,所以在本例中表现不佳。

用什么损失函数来训练这个神经网络?

损失函数:
L ( y ^ , y ) = − ∑ j = 1 C y j l o g y ^ j y 1 = y 3 = y 4 = 0 , y 2 = 1 ,则 L ( y ^ , y ) = − l o g y ^ 2 L ( y ^ , y ) 越小越好,则 y ^ 2 需要尽量大 L(ŷ,y)=-\sum_{j=1}^{C}y_jlogŷ_j \\ y_1 = y_3 = y_4 = 0,y_2= 1,则L(ŷ,y)=-logŷ_2 \\ L(ŷ,y)越小越好,则ŷ_2需要尽量大 L(y^,y)=j=1Cyjlogy^jy1=y3=y4=0y2=1,则L(y^,y)=logy^2L(y^,y)越小越好,则y^2需要尽量大

反向传播步骤或者梯度下降法

公式:
d z [ l ] = y ^ − y dz^{[l]}=ŷ-y dz[l]=y^y

在这里插入图片描述

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

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

相关文章

前端安全策略保障

文章目录 前言后台管理系统网络安全XSSCSRFSQL注入 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端系列文章 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出…

AR贴纸特效SDK,无缝贴合的虚拟体验

增强现实(AR)技术已经成为了企业和个人开发者的新宠。它通过将虚拟元素与现实世界相结合,为用户提供了一种全新的交互体验。然而,如何将AR贴纸完美贴合在人脸的面部,同时支持多张人脸的检测和标点及特效添加&#xff0…

遵循开源软件安全路线图

毫无疑问,开源软件对于满足联邦任务所需的开发和创新至关重要,因此其安全性至关重要。 OSS(运营支持系统) 支持联邦政府内的每个关键基础设施部门。 联邦政府认识到这一点,并正在采取措施优先考虑 OSS 安全&#xff…

前端学习笔记--ES6

修正 ES6是ECMA为JavaScript制定的第6个标准版本,相关历史可查看此章节《ES6-ECMAScript6简介》。 标准委员会最终决定,标准在每年6月正式发布并作为当年的正式版本,接下来的时间里就在此版本的基础上进行改动,直到下一年6月草案…

LeetCode算法题解|LeetCode738. 单调递增的数字、LeetCode968. 监控二叉树

一、LeetCode738. 单调递增的数字 题目链接&#xff1a;738. 单调递增的数字 题目描述&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c…

milvus数据库-连接

Milvus 支持 19530 和 9091 两个端口&#xff1a; 端口 19530 用于 gRPC 和 RESTful API。 这是您使用不同 Milvus SDK 或 HTTP 客户端连接到 Milvus 服务器时的默认端口。 端口 9091 用于 Kubernetes 内的指标收集、pprof 分析和运行状况探测。 它用作管理端口。 1.连接到数…

新晋“学霸”夸克大模型拿下C-Eval和CMMLU双榜第一

11月16日&#xff0c;根据最新成绩&#xff0c;千亿级参数的夸克大模型登顶C-Eval和CMMLU两大权威评测榜单&#xff0c;多项性能优于GPT-4。在国内大模型赛道火热的当下&#xff0c;夸克自研大模型凭借过硬的研发能力及数据、行业、平台等优势成为新晋“学霸”。 作为国内最权…

深度学习损失函数

Loss 是深度学习算法中重要的一部分&#xff0c;它的主要功能是评价网络预测的准确性和指导权重更新。合适 Loss 可以让网络收敛更快&#xff0c;预测更准。这个项目介绍了损失函数的基本概念以及7种常用损失函数的形式&#xff0c;性质&#xff0c;参数&#xff0c;使用场景及…

[C++]:8.C++ STL引入+string(介绍)

C STL引入string(介绍&#xff09; 一.STL引入&#xff1a;1.什么是STL2.什么是STL的版本&#xff1a;2-1&#xff1a;原始版本&#xff1a;2-2&#xff1a;P. J 版本&#xff1a;2-3&#xff1a;RW 版本&#xff1a;2-4&#xff1a;SGL版本&#xff1a; 3.STL 的六大组件&…

为React Ant-Design Table增加字段设置 | 京东云技术团队

最近做的几个项目经常遇到这样的需求&#xff0c;要在表格上增加一个自定义表格字段设置的功能。就是用户可以自己控制那些列需要展示。 在几个项目里都实现了一遍&#xff0c;每个项目的需求又都有点儿不一样&#xff0c;迭代了很多版&#xff0c;所以抽时间把这个功能封装了…

【Electron】electron-builder打包失败问题记录

文章目录 yarn下载的包不支持require()winCodeSign-2.6.0.7z下载失败nsis-3.0.4.1.7z下载失败待补充... yarn下载的包不支持require() 报错内容&#xff1a; var stringWidth require(string-width)^ Error [ERR_REQUIRE_ESM]: require() of ES Module /stuff/node_modules/…

12 Go的接口

概述 在上一节的内容中&#xff0c;我们介绍了Go的作用域&#xff0c;包括&#xff1a;局部作用域、全局作用域、命名空间作用域等。在本节中&#xff0c;我们将介绍Go的接口。Go语言中的接口是一种类型&#xff0c;它定义了一组函数的集合。接口是一种抽象的描述&#xff0c;它…

一文浅入Springboot+mybatis-plus+actuator+Prometheus+Grafana+Swagger2.9.2开发运维一体化

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTFUL风格的Web服务,是非常流行的API表达工具。 Swagger能够自动生成完善的 RESTFUL AP文档,,同时并根据后台代码的修改同步更新,同时提供完整的测试页面来调试API。 Prometheus 是一个开源的服务监控系统和时…

葡萄酒质量预测python

葡萄酒质量预测是一个经典的机器学习问题&#xff0c;通常使用基于统计模型的机器学习方法来解决。在Python中&#xff0c;我们可以使用各种机器学习库&#xff0c;如scikit-learn&#xff0c;来构建和训练模型。 以下是一个简单的示例&#xff0c;展示如何使用scikit-learn库…

设计模式解码:软件工程架构的航标

引言 软件工程领域的设计模式&#xff0c;就像是建筑师手中的设计蓝图&#xff0c;它们是经验的总结&#xff0c;指导开发者如何在面对层出不穷的编程难题时&#xff0c;构建出既稳固又灵活的软件结构。就像一座经过精心设计的大厦能够经受住风雨的考验一样&#xff0c;一个利用…

基础框架代码解释

自定义的&#xff0c;用法就是等于号后面的 out是自己定义的层啊 nn.ReLU()是构造了一个ReLU对象&#xff0c;并不是函数调用&#xff0c;而F.ReLU()是函数调用 这里大佬能说一下&#xff0c;为什么forward里面不能用nn.RELU()函数吗&#xff0c;我只知道是因为参数的问题&a…

智慧城市怎么实时监测内涝积水的发生及解决办法?

随着城市化进程步伐不断加快&#xff0c;城市内涝问题越来越受到人们的关注。内涝不仅不便于人们的生活&#xff0c;还可能危害城市之中的基础设施比如路面等。因此实时监测内涝积水的发生并采取有效的解决办法是市政府的紧急任务&#xff0c;同时解决城市内涝也利于城市生命线…

OpenCV中的像素重映射原理及实战分析

引言 映射是个数学术语&#xff0c;指两个元素的集之间元素相互“对应”的关系&#xff0c;为名词。映射&#xff0c;或者射影&#xff0c;在数学及相关的领域经常等同于函数。 基于此&#xff0c;部分映射就相当于部分函数&#xff0c;而完全映射相当于完全函数。 说的简单点…

【算法】算法题-20231117

这里写目录标题 一、搜索插入位置&#xff08;35&#xff09;二、字符串相乘&#xff08;43&#xff09;三、两个相同字符之间的最长子字符串&#xff08;1624&#xff09;四、给你一个 有效括号字符串 s&#xff0c;返回该字符串的 s 嵌套深度 一、搜索插入位置&#xff08;35…

linux高级篇基础理论二(详细文档、LAMP、SHELL、sed正则表达式)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…