当前位置: 首页 > article >正文

拆分降采样与归一化(LN和BN)

拆分降采样:在ConvNeXt网络中使用一个步长为2的 2×2 卷积插入到不同的步骤之间,而且在降采样前后各加入了一个LN(一种归一化设计,这些归一化用来保持模型的稳定性)

为什么要进行归一化呢?

我们以BN为例

(1)在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。

(2)Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。

BN的主要思想:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。

BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;

LN在通道方向上,对C、H、W归一化,主要对RNN效果明显;

在这里插入图片描述

1、BN在单独的层级之间使用比较方便,比如CNN。而RNN层数不定,直接用BN不太方便,需要对每一层(每个time step)做BN,并保留每一层的mean和variance。由于RNN输入不定长(time step长度不定),会有validation 或 test的 time step 比 train 里面的任何数据都长,造成mean和variance不存在的情况。
2、BN会引入噪声(因为是mini batch而不是整个training),对噪声敏感的方法(如RL)不太适用。

BN(Batch Normalization)并不适用于RNN等动态网络和batch size较小的时候效果不好。
Layer Normalization(LN) 的提出有效的解决BN的这两个问题。
LN和BN不同点是归一化的维度是互相垂直的。

LayerNorm实际就是对隐含层做层归一化,即对某一层的所有神经元的输入进行归一化。(每hidden_size个数求平均/方差)
1、在training 和 inference 时没有区别,只需要对当前隐藏层计算mean and variance,不需要保 存每层的moving average mean and variance。
2、不受batch size限制,可通过online learning的方式一条一条的输入训练数据。
3、LN可以方便的在RNN中使用。


http://www.kler.cn/news/163219.html

相关文章:

  • websocket vue操作
  • 快速学会绘制Pyqt5中的所有图(下)
  • Kafka安全性探究:构建可信赖的分布式消息系统
  • 二叉树的非递归遍历(详解)
  • 一款可无限扩展的软件定时器开源框架项目代码
  • 三星AI笔电:年底大战一触即发,行业变革在即
  • 【数据结构和算法】种花问题
  • 快速搭建MyBatis源码调试环境
  • 麒麟V10服务器安装Apache+PHP
  • 基于OpenCV的人脸识别系统案例
  • 交换排序(冒泡排序)(快速排序(1))
  • ElasticSearch之Task management API
  • SQLite基本使用
  • mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析
  • 关于前端原生技术-Jsonp的理解与简述
  • 如何快速构建知识服务平台,打造个人或企业私域流量
  • 二维码智慧门牌管理系统:升级解决方案实现多领域数据综合应用
  • WPF实现文字纵向排布的TabItem
  • 使用 HTML 地标角色提高可访问性
  • printf二进制输出
  • 线程安全与并发区别
  • java中synchronized关键字的用法
  • 带你真正理解web地图切片规则
  • 智能优化算法应用:基于指数分布算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 初识 pytest 及断言使用
  • 风控反欺诈安全学习路标
  • JumpServer初探
  • nodejs流
  • 异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测
  • 使用消息队列遇到的问题—kafka