lossBN

news2024/11/15 14:08:38

still tips for learning

    • classification and regression
    • 关于softmax的引入和作用
    • 分类问题损失函数 - MSE & Cross-entropy⭐
    • Batch Normalization(BN)⭐
      • 想法:直接改error surface的landscape,把山铲平
      • feature normalization
      • 那我们如何继续传播normalization的参数呢?
      • 添加参数γ,​β调整输出分布
      • testing (又叫inference中),pytorch提供moving average
      • 对batch normalization的研究结果
    • 援引

classification and regression

分类和回归做的事情都差不多,不同的是最后输出结果,分类输出的 y 是向量,不是数值,最后的 y’ 要把 y 经过一个softmax函数再输出,使 y’ 的值在0~1之间
之前分类宝可梦,讲到 把分类问题向回归问题靠拢,分类的输出应当如何表示?

把每一类当作一个数字,但是数字之间有关系,类别之间不一定和数字之间的关系保持一致比如大小,是否相邻

实际问题中,有可能真的存在这种类别间的相似关系。例如:用身高和体重预测学生的年级。一年级和二年级的身高和体重比较接近,但一年级和三年级的身高和体重比较不相似。

在这里插入图片描述

若将分类问题当做回归问题,正确的类别编码方式是:将类别表示为独热码one-hot vector。这种向量表示法,不会使类别间产生不存在的相似关系,神经网络需要输出的结果不再是一个数值,而是一个向量,向量的元素个数与类别个数相同。

关于softmax的引入和作用

从generative的model开始讲起,一路讲到logistic regression

因为softmax是从generative model的后验概率式子推出来的

softmax的输入往往被叫做 Logit

softmax的作用:除了normalize以外,还可以对最大值做强化,因为在做第一步的时候,对原始输出z取exponential会使大的值和小的值之间的差距被拉得更开,也就是强化大的值。

浅浅打一个问号????

分类问题损失函数 - MSE & Cross-entropy⭐

在这里插入图片描述

cross-entropy,win!!! cross-entropy常用到 cross-entropy 和 softmax 在pytorch里面是绑在一起的
copy cross-entropy,里面自动内建了softmax,使用cross-entropy的时候,pytorch自动把softmax加在network的最后一层

why win?
explain1:交叉熵其实是用极大似然式子推出来的???
explain1:
从optimization的角度
1、数学证明 链接废了
2、举例说明
根据 label data可以知道最终的分类结果是y1
y3进行exp运算后非常小,可以忽略不记,看y1,y2

y1越大y2越小自然就是loss最小的情形啦,如右下角
左上角反之
在这里插入图片描述
通过cross-entropy,左上角有斜率,有办法通过gradient往下走,
卡住了,在loss很大的地方很平坦,gradient非常小趋近于0,离目标又很远,很大可能性就train不下去

因为Cross-entropy的左上角比较陡峭,所以收敛更快更好,MSE左上角比较平缓,所以收敛较慢。

loss function的定义都能影响train的容易程度

Batch Normalization(BN)⭐

想法:直接改error surface的landscape,把山铲平

常用在 CNN、影像处理

直接改landscape,error surface 很崎岖的时候比较难train
把山铲平,让他容易train一点

when error surface is confessed,是个碗的形状,都不见得很好train

假设两个参数对loss的斜率差别非常大,在w1这个方向变化很小,在w2这个方向变化很大,坡度非常不一样,在固定的learning rate上很难得到好的结果

需要adapted Learning rate,如Adam,等进阶的optimization

或者一个更直接的想法:直接改landscape
两个参数对loss的斜率差别非常大,这种现象产生的根本原因是什么

在w1这个方向变化很小,可能输入很小,对L影响很小
w1改变一点,对L影响不大

于是 制造出近似于"圆形"(各方向平滑)的 error surface,有很多办法,统一命名为Feature Normalization,下面是一种Feature Normalization。

让feature里面不同的dimension 有相同的数值范围,制造一个比较好的error surface
很多种方法,统称为feature normalization

feature normalization

在这里插入图片描述

这种操作其实叫做标准化,standardization,,除以的是标准差(Standard Deviation)

得到normalization以后的数值放回每一行相应的位置,这样的好处是

1、做完 normalize 以后,每个维度上面的数值就会平均是 0,然后它的 方差和就会是 1,所以这一排数值的分布就都会在0 00 上下
2、对每一个维度都做一样的 normalization,就会发现所有 feature 不同维度的数值都在 0 上下,那因为不同x
xx的取值范围接近,可能会制造出一个好的error surface,让loss收敛得更快一点,达到训练加速的效果。

3、因为我们大多都采用Sigmoid
Function,它的图象是越远离0越不敏感,存在着一定的饱和区间,这样将数据都集中在0附近可以更快更新梯度。

假设 x ⃗ 1 \vec x^1 x 1 x ⃗ R \vec x^R x R是我们所有的训练资料 的 feature vector
在这里插入图片描述
我们将 x ~ r \tilde{x}^r x~r 传到神经网络后,与 w ~ r \tilde{w}^r w~r相乘得到 Z ~ r \tilde{Z}^r Z~r ,虽然我们的
x ~ r \tilde{x}^r x~r 经过了Normalization,但 Z ~ r \tilde{Z}^r Z~r
还是再不同的区间,他们的分布仍然有很大的差异的化,我们再训练下一层的时候还是会遇到相同的困难,所以我们这边要对 Z ~ r \tilde{Z}^r Z~r
或者是 a ~ r \tilde{a}^r a~r 也进行一次Normalization的操作

在activation function之前还是之后做normalization呢,差别不大

但如果选择得是sigmoid function,推荐在activation function之前做feature normalization,因为sigmoid函数S形状嘛,在0附近斜率比较大,选择在 Z ~ r \tilde{Z}^r Z~r后面进行Normalization的操作,把所有的挪到0附近,gradient就比较大

那我们如何继续传播normalization的参数呢?

方法如下:那你就把 Z ~ r \tilde{Z}^r Z~r 想成是另外一种 feature ,我们这边有 Z 1 ~ r \tilde{Z1}^r Z1~r Z 2 ~ r \tilde{Z2}^r Z2~r Z 3 ~ r \tilde{Z3}^r Z3~r
,我们就把 Z 1 ~ r \tilde{Z1}^r Z1~r Z 2 ~ r \tilde{Z2}^r Z2~r Z 3 ~ r \tilde{Z3}^r Z3~r 拿出来,算一下它的 mean,
这边的 μ ~ \tilde{μ} μ~ 是一个 vector
(嗯?如果我没理解错的话,这里说 μ ~ \tilde{μ} μ~ σ ~ \tilde{σ} σ~ 都是代表着vector是因为整体数据分成了若干个batch,每个batch对应一个μ和σ,但愿,没理解错★),
我们就把 Z 1 ~ r \tilde{Z1}^r Z1~r Z 2 ~ r \tilde{Z2}^r Z2~r Z 3 ~ r \tilde{Z3}^r Z3~r 这三个 vector 算他们的平均值得到 μ ~ \tilde{μ} μ~,再算他们的标准差得到 σ ~ \tilde{σ} σ~ , 它也代表了一个 vector,
然后

在这里插入图片描述
把两个向量对应的element进行相除

在这里插入图片描述
之前独立处理,现在变得彼此关联了
z 1 z^1 z1 改变,123都跟着改变
在这里插入图片描述

看来一定要有个够大的batch size,这个batch才足以表示整个copes的分布

添加参数γ,​β调整输出分布

往往还有这样的设计

γ,​β,是network的参数,另外再learn出来的

输出的平均值是0,也许会给network一些限制,带来一些负面影响, 于是设计γ,​β来调整输出的分布
在这里插入图片描述
那为什么要加上β 跟 γ 呢,如果我们做 normalization 以后,那这边的z ,它的平均就一定是 0那也许,今天如果平均是 0 的话,就是给那 network一些限制,也许这个限制会带来什么负面的影响,所以我们把 β 跟 γ 加回去,后面network会自己调整 β 跟 γ的值。
但这不是和之前我们初衷相背离了嘛,我们之前就是想要他们保持在0附近并且range一样。其实没有,我们最开始的时候β ββ 的初始值里面全部都是0向量, γ γγ 就是里面全部都是1的向量,所以在训练开始阶段每一个dimension 的分布是比较接近的,但训练一段时间后已经找到一个比较好的 error surface,那再把γ 跟β 学习出其他的值慢慢地加进去。

在这里插入图片描述

testing (又叫inference中),pytorch提供moving average

不一定会一次性给定所有数据,或者是给够一个batch的数据,不能说等累计到一个batch再开始运算,于是pytorch提供了一个方法,moving average,大概就是在不完全具备一个batch的数据的时候就可以计算出一个 μ ~ \tilde{μ} μ~

在这里插入图片描述

对batch normalization的研究结果

在这里插入图片描述

一般都会选择relu,sigmoid比较难train,但是加BN还是可以train起来

learning rate 变大30倍

援引

batch normalization这块的内容,笔记有照抄这位博主,笔记真难记!
BatchNorm和LayerNorm——通俗易懂的理解(还没学齐,据说解释的好,先码住!!!

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

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

相关文章

夯实c语言基础

夯实c语言基础 转义字符 • \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。 • \ :⽤于表⽰字符常量 • \" :⽤于表⽰⼀个字符串内部的双引号 • \\ :⽤于表…

分享微信卸载重装恢复记录的3个方法!

微信是一款功能丰富、便捷实用的通信应用程序,为用户提供了方便、快速的即时通讯功能。无论您身在何处,通过微信,您可以轻松与家人、朋友保持紧密联系。有时候,为了能扩大手机内存空间,一些小伙伴可能会选择把微信卸载…

Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)

正文 SqlServer用三种方法来组织其分区中的数据或索引页: 1、聚集索引结构 聚集索引是按B树结构进行组织的,B树中的每一页称为一个索引节点。每个索引行包含一个键值和一个指针。指针指向B树上的某一中间级页(比如根节点指向中间级节点中的…

【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《软件工程》

在软考中软件工程模块主要包含以下考点: 文章目录 软件过程模型🌟🌟🌟🌟逆向工程🌟基于构件的软件工程🌟🌟软件开发与软件设计与维护净室软件工程软件模型软件需求 软件过程模型&am…

Makefile 基础教程:从零开始学习

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动构建程序,管理程序依赖关系,提高开发效率。本篇博客将从基础开始,介绍Makefile的相关知识,帮助大家快速掌握Makefile的使用方法 Makefil…

专转本VS工作,两年后有什么区别?

很多同学在面对“是否要专转本”这件事上,还在摇摆不定,抱着不转本就工作的想法,觉得“工作赚钱”会更好。选择转本还是进入社会工作,这可能是每个大三生都有过思索的。之所以纠结,无非就是想要提升学历但害怕考不上&a…

【Javascript】ajax(阿甲克斯)

目录 什么是ajax? 同步与异步 原理 注意 写一个ajax请求 创建ajax对象 设置请求方式和地址 发送请求 设置响应HTTP请求状态变化的函数 什么是ajax? 是基于javascript的一种用于创建快速动态网页的技术,是一种在无需重新加载整个网页的情况下&#xff0c…

『力扣刷题本』:合并两个有序链表(递归解法)

一、题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出&#x…

K8s概念汇总-笔记

目录 1.Master 1.1在Master上运⾏着以下关键进程 2.什么是Node? 1.2在每个Node上都运⾏着以下关键进程 3.什么是 Pod ? 4. 什么是Label ? 5.Replication Controller 6.Deployment 6.1Deployment的典型场景: 7.Horizontal Pod Autoscaler TODO…

Node.js的基本概念node -v 和npm -v 这两个命令的作用

Node.js 是一个开源且跨平台的 JavaScript 运行时环境,它可以让你在服务器端运行 JavaScript 代码。Node.js 使用了 Chrome 的 V8 JavaScript 引擎来执行代码,非常高效。 在 Node.js 出现之前,JavaScript 通常只在浏览器中运行,用…

物联网和互联网医院小程序:如何实现医疗设备的远程监测和管理?

物联网(IoT)技术的发展为医疗设备的远程监测和管理提供了巨大的机会。结合互联网医院小程序,我们可以实现对医疗设备的远程访问、监控和管理,从而提高医疗服务的质量和效率。本文将介绍如何实现医疗设备的远程监测和管理&#xff…

漏洞复现-phpmyadmin_SQL注入 (CVE-2020-5504)

phpmyadmin SQL注入 _(CVE-2020-5504) 漏洞信息 CVE-2020-5504sql注入漏洞Phpmyadmin 5.00以下 描述 ​ phpMyAdmin是Phpmyadmin团队的一套免费的、基于Web的MySQL数据库管理工具。该工具能够创建和删除数据库,创建、删除、修改数据库表&…

Microsoft.Extensions 简介

Microsoft.Extensions 简介 一、Microsoft.Extensions 简介 .NET Extensions 是一套官方的、开源的、跨平台的 API 集合,提供了一些常用的编程模式和实用工具,例如依赖项注入、日志记录、缓存、Host以及配置等等。该项目的大多数 API 都被用在 .NET 平…

Ocelot简易教程目录

Ocelot简易教程目录 这里写目录标题 Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么Ocelot简易教程(二)之快速开始1Ocelot简易教程(二)之快速开始2Ocelot简易教程(三)之主要特…

计算机网络基础一

任务背景 由于某些原因,某公司搬迁至新地方,现需要对公司网络环境重新调整规划,申请了一个 B 类 IP 地址 : 172.25.0.0 ,子 网掩码为 255.255.224.0 。需要根据公司部门和电脑数进行子网划分并分配 IP 。公司目前有 6 个部门&am…

如何监听/抓取两个设备/芯片之间“UART串口”通信数据--监视TXD和RXD

案例背景&#xff1a;全网仅此一篇&#xff01;&#xff01;&#xff01; 两个设备/芯片之间采用UART串口通信。我们如何实现芯片1 TXD – > 芯片2 RXD&#xff0c;芯片2 TXD <-- 芯片1 RXD两个单线链路上的数据抓取和监听&#xff1f;这篇博客将告诉您。 目录 1 什么是…

VR结合|山海鲸虚拟展厅解决方案

方案背景 虚拟现实技术是另一项革命性的创新&#xff0c;它可以将用户带入一个完全虚拟的环境中。借助VR头盔和控制器&#xff0c;用户可以亲临虚拟现实中&#xff0c;与数字世界互动&#xff0c;仿佛置身于其中。 山海鲸根据用户实际需求变化将数字孪生与虚拟现实技术相结合…

EtherNet/IP转profienrt协议网关连接EtherNet/IP协议的川崎机器人配置方法

EthernetIP 协议一般用于采集机器人&#xff0c;控制器等设备的数据。 下面介绍通过远创智控YC-EIPM-PN网关把EtherNet/IP协议的川崎机器人通过西门子1500PLC的控制方法。有些 EIP 的从站设备提供了 EDS 文件&#xff0c;可以从EDS 文件中获取点位信息。这些信息是需要填写到网…

nginx配置反向代理和动静分离应用

一. Nginx配置反向代理和实现动静分离与虚拟主机流程图&#xff1a; 二 .Nginx配置反向代理和实现动静分离与虚拟主机实现详细配置和效果图 2.1 nginx 配置反向代理 #在nginx.conf配置server同级下配置 include tomcat.conf# vim tomcat.conf upstream api.z.mukewang.com{…

docker应用部署---Tomcat的部署配置

1. 搜索tomcat镜像 docker search tomcat2. 拉取tomcat镜像 docker pull tomcat3. 创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建tomcat目录用于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcatdocker run -id --namec_tomcat \ -p 8080:8080 \ -v $PWD:…