2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍

之前的20个问题的文章在这里:

https://zhuanlan.zhihu.com/p/148656446

其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。

本文涉及到的代码可以在这里找到:

https://github.com/DA-southampton/NLP_ability

问题基本上都可以在网上找到答案,所以大家可以先去搜一搜,自己理解一下,我也不会重新把答案回答一遍,而是列出来我看到的比较好的回答,然后加上点自己的注解帮助大家理解,在这里感谢那些大佬回答者,今天整理了其中的五个,剩下的我抽空在整理一下。

这里我先小声说一下,写这些笔记有两个目的。

一个是方便大家,好多题目都太散了,没有人归纳一下。

二个就是方便自己重新复习一遍,所以我也不可能是直接把答案一粘就完事,这对我自己就没啥帮助了。所以没啥别的目的,不是为了博关注粉丝之类的,因为这些如果做不到大V基本没啥用,我也没那时间去经营成为大V,工作忙的要死,就是想要有个一起沟通的渠道而已。

公众号/知乎/github基本同步更新,大家关注哪一个都可以,不过可能微信链接跳转不方便,知乎编辑不方便,github对有些同学不太方便打开。大家看自己情况关注吧。

正文

1.Transformer为何使用多头注意力机制?(为什么不使用一个头)

答案解析参考这里:为什么Transformer 需要进行 Multi-head Attention?
https://www.zhihu.com/question/341222779

注解:简单回答就是,多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。其实本质上是论文原作者发现这样效果确实好,我把作者的实验图发在下面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?

答案解析参考这里:transformer中为什么使用不同的K 和 Q, 为什么不能使用同一个值? - 知乎
https://www.zhihu.com/question/319339652

注解:简单回答就是,使用Q/K/V不相同可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力。

3.Transformer计算attention的时候为何选择点乘而不是加法?两者计算复杂度和效果上有什么区别?

答案解析:为了计算更快。矩阵加法在加法这一块的计算量确实简单,但是作为一个整体计算attention的时候相当于一个隐层,整体计算量和点积相似。在效果上来说,从实验分析,两者的效果和dk相关,dk越大,加法的效果越显著。更具体的结果,大家可以看一下实验图(从莲子同学那里看到的,专门去看了一下论文):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.为什么在进行softmax之前需要对attention进行scaled(为什么除以dk的平方根),并使用公式推导进行讲解

答案解析参考这里:transformer中的attention为什么scaled? - LinT的回答 - 知乎
https://www.zhihu.com/question/339723385/answer/782509914

注解:针对大佬回答的第二个问题,也就是方差的问题,我简单的写了一个代码验证了一下,不愿意看公式推导的同学直接看代码结果就可以。代码如下:

import numpy as np 
arr1=np.random.normal(size=(3,1000))
arr2=np.random.normal(size=(3,1000))
result=np.dot(arr1.T,arr2)
arr_var=np.var(result)
print(arr_var) #result: 2.9 (基本上就是3,和就是我们设定的维度)
5.在计算attention score的时候如何对padding做mask操作?

答案解析:padding位置置为负无穷(一般来说-1000就可以)。对于这一点,涉及到batch_size之类的,具体的大家可以看一下抱抱脸实现的源代码,位置在这里:

https://github.com/huggingface/transformers/blob/aa6a29bc25b663e1311c5c4fb96b004cf8a6d2b6/src/transformers/modeling_bert.py#L720

这个是最新版,比较老版本的实现地址我也罗列一下,应该没啥区别,我没细看,一直用的老版本的:

https://github.com/DA-southampton/Read_Bert_Code/blob/0605619582f1bcd27144e2d76fac93cb16e44055/bert_read_step_to_step/transformers/modeling_bert.py#L607

参考链接:
关于Transformer,面试官们都怎么问?
写的很好,面试题总结的很好,把整体梳理了一遍。

关于Transformer的若干问题整理记录 - Adherer的文章 - 知乎
https://zhuanlan.zhihu.com/p/82391768

关于Transformer的若干问题整理记录 - Adherer的文章 - 知乎
https://zhuanlan.zhihu.com/p/82391768 和上面是一个文章,在知乎

Transformer的细节与技巧 - 沧海一栗的文章 - 知乎
https://zhuanlan.zhihu.com/p/69697467
讲了几个代码上的小细节

NLP预训练模型:从transformer到albert - Serendipity的文章 - 知乎
https://zhuanlan.zhihu.com/p/85221503
大佬主要是大白话讲了一下代码的实现,包括维度的变化

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

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

相关文章

微信小程序建议录音机

在小程序中实现录音机功能,可以通过使用小程序提供的wx.getRecorderManager() API来获取录音管理对象,然后使用这个对象的start()方法来开始录音,使用stop()方法来停止录音,并使用onStop()方法来监听录音的结束。以下是一个简单的…

Spring响应式编程之Reactor核心接口

响应式流的核心接口 核心接口包括&#xff1a;Publisher<T>、Subscriber<T>、Subscription 和 Processo<T,R> &#xff08;1&#xff09;Publisher<T> Publisher接口代表数据流的生产者&#xff0c;根据收到的请求向Subscriber发布数据。接口定义如…

C语言中的字符输入/输出和验证输入

在C语言中&#xff0c;字符输入/输出功能允许程序与用户进行交互&#xff0c;读取用户的输入信息并展示输出结果。同时&#xff0c;验证输入的作用在于确保用户输入的数据符合预期&#xff0c;以提高程序的稳定性和可靠性&#xff0c;防止无效输入引发的错误或异常行为&#xf…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

【408考点之数据结构】特殊矩阵压缩存储的代码实现

特殊矩阵压缩存储的代码实现 为了更好地理解特殊矩阵的压缩存储&#xff0c;下面提供一些C语言的代码示例&#xff0c;展示如何实现这些矩阵的压缩存储和操作。 1. 稀疏矩阵的三元组表示 #include <stdio.h>#define MAX_TERMS 100typedef struct {int row;int col;int…

Java 比较器

Java 比较器 文章目录 Java 比较器自然排序java.lang.Comparable对象排序java.util.Comparator两种方式的对比 基本数据类型&#xff0c;可以直接使用比较运算符进行比较&#xff0c;但引用数据类型不能直接通过运算符进行比较运算。 实现对象的排序&#xff0c;可以考虑两种方…

【目标检测】DAB-DETR

一、引言 论文&#xff1a; DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 作者&#xff1a; IDEA 代码&#xff1a; DAB-DETR 注意&#xff1a; 该算法是对DETR的改进&#xff0c;在学习该算法前&#xff0c;建议掌握多头注意力、Sinusoidal位置编码、DETR等相…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

【06】数据模型和工作量证明-工作量证明

1. 工作量证明的背景 比特币是通过工作量证明来竞争记账权,并获得比特币奖励。简单来讲就是谁能够根据区块数据更快的计算得到满足条件的哈希值,谁就可以胜出,这个块才会被添加到区块链中。我们把这个过程称为挖矿。比特币每10分钟产生1个区块。 2. 工作量证明算法 1. 获…

追梦与立足:专业与学校的双重选择

在人生的关键节点上&#xff0c;选择总是如影随形。对于即将步入大学的学生而言&#xff0c;选择一个合适的专业和学校&#xff0c;无疑是人生道路上的一大抉择。特别是在分数限制下&#xff0c;如何在追梦与立足之间找到平衡点&#xff0c;做出明智的双重选择&#xff0c;成为…

C# Chart 不间断补充

基础步骤 1: 添加引用步骤 2: 创建图表控件步骤 3: 配置图表步骤 4: 添加数据系列步骤 5: 显示图表一个简单的示例注意事项 个人学习首先其次目前用到的判断某个 Series 是否存在设置某个 ChartAreas 的XY轴坐标的范围 基础 在 C# 中使用图表通常涉及到以下几个步骤。这里以 W…

Python18 数据结构与数据类型转换

1.python中的数据结构 在Python中&#xff0c;数据结构是用来存储、组织和管理数据的方式&#xff0c;以便有效地执行各种数据操作。Python提供了几种内置的数据结构&#xff0c;每种都有其特定的用途和操作方法。以下是Python中一些主要的数据结构&#xff1a; 1.列表&#…

攻防世界-2-1

下载附件&#xff0c;发现是一张损坏的png文件&#xff0c;扔winhex里面修改文件头 修改之后发现还是打不开&#xff0c;提示CRC错误&#xff0c;脚本跑一下 循环冗余校验CRC&#xff08;Cyclic Redundancy Check&#xff09;是数据通信领域常用的一种数据传输检错技术。通过在…

记录Nuxt3部署线上pm2启动项目修改端口

看官方文档&#xff1a; TNND&#xff0c;修改这个端口号顶个P用&#xff0c;毛用也没有 实际上应该是这样&#xff1a; 好了&#xff0c;误人子弟&#xff5e;

Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Jun 2024)

Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Jun 2024) Windows 11, version 23H2&#xff0c;企业版 arm64 x64 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者…

全球芯片的关键节点

在制造1纳米级别的芯片过程中&#xff0c;涉及到多个关键方面&#xff0c;每个方面都至关重要&#xff0c;包括设备、关键原材料的供应、芯片设计和操作人员的技能与决策能力。 首先&#xff0c;设备是实现1纳米芯片制造的基础。阿斯麦&#xff08;ASML&#xff09;等公司提供…

vue3实现无缝滚动列表-vue3-seamless-scroll

vue3-seamless-scroll-无缝滚动 vue3-seamless-scroll&#xff0c;顾名思义是应用在vue3项目中&#xff0c;在Vue3项目中难免会遇到让列表无缝滚动的需求&#xff0c;本篇文章介绍了关于vue3项目中如何实现表格内容无缝滚动及其属性的使用&#xff0c;需要的朋友可以参考一下。…

太速科技-基于AD916X的直流至 12 GHz 矢量信号发生器 FMC子卡

基于AD916X的直流至 12 GHz 矢量信号发生器 FMC子卡 一、DAC 性能指标&#xff1a; ● DAC 型号&#xff1a;AD9163。 ● 分辨率&#xff1a;16bits。 ● DAC 更新速率&#xff1a;12GSPS。 ● 6GSPS 直接 RF 频率合成。 ● 直流至 3GHz&#xff08;不归零 NRZ 模式&…