Layer Normalization

news/2024/11/16 5:40:26/文章来源:https://www.cnblogs.com/xiaxuexiaoab/p/18325271

一、Layer Norm

1.1 介绍

LayerNorm(Layer Normalization)是2016年提出的,随着Transformer等模型的大规模推广,LayerNorm出现频率也随之越来越高。其大体思想类似于BatchNorm,对输入的每个样本进行归一化处理,具体就是计算每个输入的均值和方差,归一化到均值为0,方差为1,另外还会学习\(\mathrm{g}\)\(b\)来将方差和均值缩放从任意值。

1.2 作用

LayerNorm可以帮助模型收敛,原文中解释是因为其对输入进行了归一化操作,使得数据的分布更加稳定。

另外一篇文章Understanding and Improving Layer Normalization从梯度的角度对LayerNorm进行了分析,这篇文章的作者发现了以下两个结论,并提出了一个改进方法称为AdaNorm。

  • LayerNorm 中引入的 gain 和 bias,可能会导致 overfitting,去掉他们能够在很多情况下提升性能
  • 和前向的 normalization 相比,norm 操作之中因为均值和方差而引入的梯度在稳定训练中起到了更大的作用

二、和Batch Norm区别

前面提到其思想和Batch Norm大体一致,而BatchNorm通常用于CV领域,LayerNorm通常用于NLP领域,那它们之间的差别点在哪儿呢。接下来先从二维向量进行说明,然后在扩展到三维情况。

2.1 二维对比

下图表示6个输入样本(行),每个样本对应的特征长度为5(列),那BatchNorm就是对进行操作,而LayerNorm是对进行操作。

所以 如果要计算LayerNorm,可以把输入向量进行转置,求出BN后再转回去。

2.2 三维对比

实际情况大多的特征不是二维向量而是三维向量,将上述情况扩展到三维后如下图所示,BatchNorm是竖切而LayerNorm是横切。NLP邻域采用LayerNorm主要是考虑到特征的长度不一,如果按照BatchNorm训练得到一个参考均值和方差,那下次如果遇到一个训练没遇到过的长度(远远超出训练的长度),那么之前训练好的就会失效,因此采用LayerNorm对单个样本之间自己进行归一化操作,这样可以带来一定的优化效果。

三、参考资料

Layer Normalization
Understanding and Improving Layer Normalization
Transformer论文逐段精读【论文精读】25分左右

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

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

相关文章

20、flask-进阶-自定义静态文件static和模板文件templates的路径配置

自定义static目录和templates目录的路径原本flask默认的static和templates目录是在App目录下的:如下图如果想把这两个目录更改位置,如放在根目录下:代码如下: __init__.pyfrom flask import Flask from .views import blue from .exts import init_exts import os# 获取项目…

七天.NET 8操作SQLite入门到实战 - 第七天Blazor学生管理页面编写和接口对接(3)

前言 本章节我们的主要内容是完善Blazor学生管理页面的编写和接口对接。 七天.NET 8 操作 SQLite 入门到实战详细教程第一天 SQLite 简介 第二天 在 Windows 上配置 SQLite 环境 第三天 SQLite 快速入门 第四天 EasySQLite 前后端项目框架搭建 第五天引入 SQLite-net ORM 并封装…

苹果系统注入三码,避免封号,解锁iCloud/FaceTime/iMessage/随航!

黑苹果遇到的问题多种多样,这是一篇比较简单直接的、适合大部分配置的教程,如果解决不了你的问题,请参考相关博文文章: https://www.cnblogs.com如果完成三码注入后 iMessage 和 FaceTime 仍不能正常工作,需要考虑主板NVRAM支持问题。随航功能(Sidecar)仅支持 macOS Cata…

18、flask-进阶-插件-缓存flask-caching - 钩子函数(中间件)

1.认识flask-caching插件 使用插件1.安装$ flask install flask-caching2.初始化 在exts.py中导入并初始化from flask_caching import Cache#初始化插件 cache = Cache(config={CACHE_TYPE: simple # 缓存类型})#和app对象绑定 def init_exts(app):cache.init_app(app)3.在视图…

Java 中的集合

Java 中的集合分类,ArrayList、HashMap 的源码和底层数据结构分析。Author: ACatSmiling Since: 2024-07-28概述 在 Java 语言中,数组(Array)和集合都是对多个数据进行存储操作的结构,简称Java 容器。此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储。 数组在…

log工具类

package com.atheima.controller.utils;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class BaseLog {private Class clazz = null;public static Logger log;public BaseLog(){clazz = this.getClass();log = LoggerFactory.getLogger(clazz);}//第二中实…

周期信号的傅里叶级数和频谱

傅里叶级数和信号频谱 对于一个确定的时域信号,我们只需要知道它的函数表达式就可以在任意时刻确定一个信号,但是各种场景下中我们需要的往往并不是这样的解析式,因为这些复杂的式子首先难以快速准确地获得,另外难以进行快速进行分析,其中所蕴含的信息也难以提取。因此需要…

mysqld: Table '.mac_vod' is marked as crashed and should be repaired

mysqld: Table '.mac_vod' is marked as crashed and should be repaired 这类问题大多是重启服务器后导致的故障, 一般可以理解为表损坏。 解决方法其实也简单, 通过数据库管理工具,进行表修复就可以。 REPAIR TABLE mac_vod 这里的mac_vod 替换成自己的数据表名称。…

【WPF】Command 的一些使用方案

Command,即命令,具体而言,指的是实现了 ICommand 接口的对象。此接口要求实现者包含这些成员: 1、CanExecute 方法:确定该命令是否可以执行,若可,返回 true;若不可,返回 false; 2、CanExecuteChanged 事件:发送命令(命令源)的控件可以订阅此事件,当命令的可执行性…

leetcode-7

题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 推导:代码:class Solution { public:int reverse(int x) {int res = 0;while (x != 0) {int tmp = x % 10;if (re…

QOJ5090 妙妙题

将白色看作 \(0\),黑色看作 \(1\),并将所有人等距离排在圆上,若知道所有人颜色的异或和,就可以根据自己看见的颜色集合判断自己的颜色,且将圆等切为两半一定有少的一边的人数 \(\ge \lfloor \frac{n-1}{2} \rfloor\),但若圆两边的黑点关于切线翻转对称(如下图),则会出…

Vulfocus靶场搭建以及镜像管理界面没有镜像可以拉取的解决办法

Vulfocus靶场搭建 1.拉取vulfocue镜像 docker pull vulfocus/vulfocus:latest拉取成功2.开启靶场 首先使用ifconfig查看一下虚拟机的IP,发现为x.x.x.x 然后使用物理机去ping一下这个IP地址看看是否能ping通 若能ping通则继续下面的操作 生成docker容器 docker create -p 80:80…