Chapter4.2:Normalizing activations with layer normalization

文章目录

  • 4 Implementing a GPT model from Scratch To Generate Text
    • 4.2 Normalizing activations with layer normalization

4 Implementing a GPT model from Scratch To Generate Text

4.2 Normalizing activations with layer normalization

通过层归一化(Layer Normalization)对激活值进行归一化处理。

  • Layer normalization (LayerNorm):将激活值中心化到均值为 0,归一化方差为 1,稳定训练并加速收敛。

    应用位置

    1. transformer block 中的 multi-head attention module 前后。

    2. 最终输出层之前。

    下图提供了LayerNormalization的直观概述

    从一个小例子看看LayerNormalization发生了什么

    torch.manual_seed(123)batch_example = torch.randn(2, 5) layer = nn.Sequential(nn.Linear(5, 6), nn.ReLU())
    out = layer(batch_example)
    print(out)
    print(out.shape)# 计算均值和方差
    mean = out.mean(dim=-1, keepdim=True)
    var = out.var(dim=-1, keepdim=True)print("Mean:\n", mean)
    print("Variance:\n", var)out_norm = (out - mean) / torch.sqrt(var)
    print("Normalized layer outputs:\n", out_norm)mean = out_norm.mean(dim=-1, keepdim=True)
    var = out_norm.var(dim=-1, keepdim=True)
    print("Mean:\n", mean)
    print("Variance:\n", var)"""输出"""
    tensor([[0.2260, 0.3470, 0.0000, 0.2216, 0.0000, 0.0000],[0.2133, 0.2394, 0.0000, 0.5198, 0.3297, 0.0000]],grad_fn=<ReluBackward0>)torch.Size([2, 6])Mean:tensor([[0.1324],[0.2170]], grad_fn=<MeanBackward1>)Variance:tensor([[0.0231],[0.0398]], grad_fn=<VarBackward0>)Normalized layer outputs:tensor([[ 0.6159,  1.4126, -0.8719,  0.5872, -0.8719, -0.8719],[-0.0189,  0.1121, -1.0876,  1.5173,  0.5647, -1.0876]],grad_fn=<DivBackward0>)Mean:tensor([[9.9341e-09],[0.0000e+00]], grad_fn=<MeanBackward1>)
    Variance:tensor([[1.0000],[1.0000]], grad_fn=<VarBackward0>)
    

    归一化会独立应用于两个输入(行)中的每一个;使用 dim=-1 表示在最后一个维度(在本例中为特征维度)上进行计算,而不是在行维度上进行计算。

    关闭科学计数法

    torch.set_printoptions(sci_mode=False) #关闭科学计数法
    print("Mean:\n", mean)
    print("Variance:\n", var)"""输出"""
    Mean:tensor([[    0.0000],[    0.0000]], grad_fn=<MeanBackward1>)
    Variance:tensor([[1.0000],[1.0000]], grad_fn=<VarBackward0>)
    
  • LayerNorm 类实现:基于归一化思路,实现一个 LayerNorm 类,稍后我们可以在 GPT 模型中使用它

    class LayerNorm(nn.Module):def __init__(self, emb_dim):super().__init__()self.eps = 1e-5self.scale = nn.Parameter(torch.ones(emb_dim))self.shift = nn.Parameter(torch.zeros(emb_dim))def forward(self, x):mean = x.mean(dim=-1, keepdim=True)var = x.var(dim=-1, keepdim=True, unbiased=False)norm_x = (x - mean) / torch.sqrt(var + self.eps)return self.scale * norm_x + self.shift
    

    层归一化公式(上面的例子中 γ = 1 \gamma = 1 γ=1 β = 0 \beta=0 β=0 ϵ = 0 \epsilon = 0 ϵ=0
    L a y e r N o r m ( x i ) = γ ⋅ x i − μ σ 2 + ϵ + β LayerNorm(x_i) = \gamma \cdot \frac{x_i-\mu}{\sqrt{\sigma^2 + \epsilon}} + \beta LayerNorm(xi)=γσ2+ϵ xiμ+β
    其中

    1. μ 、 σ 2 \mu 、 \sigma^2 μσ2 分别x在layer维度上的均值和方差

    2. γ 、 β \gamma 、\beta γβ 是可学习的缩放平移参数

    3. ϵ \epsilon ϵ 是一个小常数,用于防止除零错误。

    scaleshift:可训练参数,用于在归一化后调整数据的缩放和偏移。

    有偏方差:在上述方差计算中,设置 unbiased=False,意味着使用公式 ∑ i ( x − x ‾ ) n \frac{\sum_i(x- \overline x)}{n} ni(xx),不包含贝塞尔校正。其中 n 是样本大小(此处为特征或列的数量);该公式不包含贝塞尔校正(即在分母中使用 n-1),因此提供的是方差的有偏估计。(对于 LLMs,嵌入维度 n 非常大,使用 n 和 n-1 之间的差异可以忽略不计,GPT-2 是在归一化层中使用有偏方差进行训练的,因此为了与后续章节中加载的预训练权重兼容,我们也采用了这一设置。)

    ln = LayerNorm(emb_dim=5)
    out_ln = ln(batch_example)
    mean = out_ln.mean(dim=-1, keepdim=True)
    var = out_ln.var(dim=-1, unbiased=False, keepdim=True)print("Mean:\n", mean)
    print("Variance:\n", var)"""输出"""
    Mean:tensor([[    -0.0000],[     0.0000]], grad_fn=<MeanBackward1>)
    Variance:tensor([[1.0000],[1.0000]], grad_fn=<VarBackward0>)
    
  • 所以、本节至此,我们介绍了实现GPT架构所需的构建块之一,如下图中打勾的部分


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

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

相关文章

MyBatis-plus sql拦截器

因为业务需求&#xff0c;重新写了一套数据权限。项目中用的是mybtis-plus&#xff0c;正好MyBatis-Plus提供了插件数据权限插件 | MyBatis-Plus&#xff0c;那就根据文档来实现这个需求。 实现&#xff1a; 实现MultiDataPermissionHandler 首先创建MultiDataPermissionHan…

数据挖掘——关联规则挖掘

数据挖掘——关联数据挖掘 关联数据挖掘关联规则关联规则挖掘问题&#xff1a;具体挖掘过程Apriori 产生关联规则 关联数据挖掘 关联分析用于发现隐藏在大型数据集中的令人感兴趣的联系&#xff0c;所发现的模式通常用关联规则或频繁项集的形式表示。 关联规则反映一个事物与…

启航数据结构算法之雅舟,悠游C++智慧之旅——线性艺术:顺序表之细腻探索

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、线性表的概念二、顺序表1.概念与结构2.顺序表的分类静态顺序表动态顺序表 三、顺序表的实现1.顺序表的结构2.顺序表的初始化和销毁初…

数据库进阶教程之DDL语句(万字详解)

文章目录 一、数据库操作-上1.1、DDL概述1.2、创建数据库1.3、查看数据库 二、数据库操作-下2.1、修改数据库2.2、删除数据库2.3、使用数据库 三、数据库表操作-上3.1、创建表3.2、数据类型&#xff08;mysql&#xff09;3.3、查看表 四、数据库表操作-中4.1、快速建表4.2、删除…

自动驾驶三维重建

大概八成估计是未来的科研方向了 文章目录 自动驾驶中的NeRF[4]CLONeR&#xff1a;Urban Radiance Fields[6]S-NERFBlock-NeRFSwitch-NeRFSceneRFBehind the Scenes 大规模与自动驾驶场景重建:3D高斯VastGaussianPeriodic Vibration Gaussian&#xff08;复旦大学&#xff09;…

OWASP ZAP之API 请求基础知识

ZAP API 提供对 ZAP 大部分核心功能的访问,例如主动扫描器和蜘蛛。ZAP API 在守护进程模式和桌面模式下默认启用。如果您使用 ZAP 桌面,则可以通过访问以下屏幕来配置 API: Tools -> Options -> API。 ZAP 需要 API 密钥才能通过 REST API 执行特定操作。必须在所有 …

【小程序开发】- 小程序版本迭代指南(版本发布教程)

一&#xff0c;版本号 版本号是小程序版本的标识&#xff0c;通常由一系列数字组成&#xff0c;如 1.0.0、1.1.0 等。版本号的格式通常是 主版本号.次版本号.修订号 主版本号&#xff1a;当小程序有重大更新或不兼容的更改时&#xff0c;主版本号会增加。 次版本号&#xff1a…

电子应用设计方案85:智能 AI门前柜系统设计

智能 AI 门前柜系统设计 一、引言 智能 AI 门前柜系统旨在提供便捷、安全和智能的物品存储与管理解决方案&#xff0c;适用于家庭、公寓或办公场所的入口区域。 二、系统概述 1. 系统目标 - 实现无接触式物品存取&#xff0c;减少交叉感染风险。 - 具备智能识别和分类功能&am…

CG顶会论文阅读|《科技论文写作》硕士课程报告

文章目录 一、基本信息1.1 论文基本信息1.2 课程基本信息1.3 博文基本信息 二、论文评述&#xff08;中英双语&#xff09;2.1 研究问题&#xff08;Research Problem&#xff09;2.2 创新点&#xff08;Innovation/Contribution&#xff09;2.3 优点&#xff08;Why this pape…

Deepseek v3 的笔记

基本概述 Deepseek v3是Deepseek发布的旗舰模型&#xff0c;属于607B的混合专家&#xff08;MoE&#xff09;模型&#xff0c;其中活跃参数为37B。在当前的模型领域&#xff0c;它堪称最佳的开源模型&#xff0c;性能超越了Llama 3.1 405b、Qwen和Mistral等知名模型。根据基准…

基于单片机的家庭智能垃圾桶(论文+源码)

1系统整体方案设计 本次课题为基于单片机的家庭智能垃圾桶&#xff0c;在此将目标功能设计如下&#xff1a; &#xff08;1&#xff09;实现垃圾桶的智能开关盖当检测到有人停留三秒以上自动开启&#xff0c;并当人走后自动关闭开关盖&#xff1b; &#xff08;2&#xff0…

Niushop商城商业插件_cps联盟_包装转换_视频购物_同城配送_上门预约等插件的安装方法

一.简介 使用Niushop已经多年&#xff0c;积累下很多有用的常识&#xff0c;有人让我评价下这个系统&#xff01;怎么说呢&#xff01;系统是好系统因为它开源&#xff01;且更新也很及时几乎是一周一更新&#xff0c;开发团队也很尽职&#xff0c;在用户群内得到很高的评价&am…

一文讲清楚HTTP常见的请求头和应用

文章目录 一文讲清楚HTTP常见的请求头和应用1. 啥是个HTTP请求头2. 常见的请求头&#xff0c;作用和示例3.协商缓存4.会话状态 一文讲清楚HTTP常见的请求头和应用 1. 啥是个HTTP请求头 一句话&#xff0c;说白了就是限定HTTP传输的一些规则参数&#xff0c;比如Accept&#xf…

vim 的基础使用

目录 一&#xff1a;vim 介绍二&#xff1a;vim 特点三&#xff1a;vim 配置四&#xff1a;vim 使用1、vim 语法格式2、vim 普通模式&#xff08;1&#xff09;保存退出&#xff08;2&#xff09;光标跳转&#xff08;3&#xff09;文本删除&#xff08;4&#xff09;文本查找&…

RocketMQ面试题:进阶部分

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

设计模式之桥接设计模式

简介 与适配器模式类似&#xff0c;桥接设计模式也是结构型模式将抽象部分与实现部分分离&#xff0c;使它们都可以独立的变化通俗来说&#xff0c;是通过组合来桥接其它的行为/维度 应用场景举例 传统方式 使用桥接设计模式之后 编码示例 /*** 抽象角色&#xff1a;手机*/ …

个人健康信息系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

个人交友系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

每天40分玩转Django:Django Celery

Django Celery 一、知识要点概览表 模块知识点掌握程度要求Celery基础配置、任务定义、任务执行深入理解异步任务任务状态、结果存储、错误处理熟练应用周期任务定时任务、Crontab、任务调度熟练应用监控管理Flower、任务监控、性能优化理解应用 二、基础配置实现 1. 安装和…

canvas+fabric实现时间刻度尺+长方形数据展示

前言 我们前面实现了时间刻度尺&#xff0c;现在在时间刻度尺里面画一个长方形&#xff0c;长方形里面有数据展示。 效果 实现 1.先实现时间刻度尺 2.鼠标移动、按下事件监听并画出对应效果 3.在刻度尺里面画对应的长方形数据展示 <template><div><canvas…