搜广推校招面经六十九
瓴岳科技:风控算法练习生一、先容GBDT
见【搜广推校招面经二十七】
二、有哪些位置编码的情势
位置编码(Positional Encoding)是Transformer等模子中用于引入序列中位置信息的一种机制,由于Transformer本身是没有位置信息的(不像RNN那样是按序次处置惩罚的)。
2.1. 正弦-余弦位置编码(Sinusoidal Positional Encoding)
这是 Transformer 原论文中使用的情势。
对于位置 pos 和维度 i:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 ( 2 i / d m o d e l ) ) P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 ( 2 i / d m o d e l ) ) PE(pos, 2i) = sin(pos / 10000^(2i/d_model)) \\ \ \\ PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model)) PE(pos,2i)=sin(pos/10000(2i/dmodel)) PE(pos,2i+1)=cos(pos/10000(2i/dmodel))
[*]pos:表现位置
[*]i:表现维度的索引
[*]d_model:词向量维度
特点:
[*]不必要学习参数(固定的)
[*]恣意长度可扩展
[*]可以捕获相对位置关系
2.2. 可学习的位置编码(Learnable Positional Embedding)
每个位置都有一个可练习的向量:
PositionEmbedding = Embedding(position_id)
特点:
[*]简单高效,通常结果不错
[*]无法外推到未见过的位置(比方练习最多512,测试用1024就不可)
2.3. 相对位置编码(Relative Positional Encoding)
重点建模“位置之间的相对关系”,比方 Transformer-XL、T5、DeBERTa 中使用。
特点:
[*]更强的泛化本事
[*]更适当语言使命(明白“前后”关系)
2.4. 旋转位置编码(RoPE, Rotary Positional Encoding)
应用于 GPT-NeoX、LLaMA、ChatGLM 等。
思绪是:将位置信息嵌入到 Self-Attention 中的 q 和 k 中,通过旋转操纵。
特点:
[*]易于实现
[*]支持更长的上下文扩展
2.5. 2D 或高维位置编码
用于图像(ViT)、音频或视频等使命。
[*]2D Sinusoidal Encoding:分别对行、列使用正弦编码再拼接
[*]2D Learnable Embedding:行和列方向各自 embedding,再拼接或相加
2.6. 总结
编码方式是否可学习是否支持恣意长度是否捕获相对位置实用场景Sinusoidal❌✅⚠️间接NLP根本使命Learnable✅❌❌短文本、通例分类使命Relative✅✅✅文本天生、问答等RoPE✅✅✅大模子、长文本2D/3D Pos Encoding✅/❌✅✅/❌图像、音频、视频三、旋转位置编码和三角函数位置编码的详细区别?
位置编码的目标是给序列中的每个位置引入位置信息。而,RoPE 和 Sinusoidal 都基于三角函数,但实现思绪和应用方式差异。
3.1. 三角函数位置编码(Sinusoidal Positional Encoding)
原理:
对每个位置 pos 和维度 i,用如下公式天生编码:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 ( 2 i / d m o d e l ) ) P E ( p o s , 2 i + 1 ) = c o s ( p o s / 1000 0 ( 2 i / d m o d e l ) ) PE(pos, 2i) = sin(pos / 10000^(2i/d_model)) \\ \ \\ PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model)) PE(pos,2i)=sin(pos/10000(2i/dmodel)) PE(pos,2i+1)=cos(pos/10000(2i/dmodel))
特点:
[*]编码是 固定的,不可学习
[*]通过差异频率的三角函数编码差异位置
[*]编码到场方式:加到输入 token embedding 上
优点:
[*]可推广到恣意长度
[*]生存位置间的隔断信息
缺点:
[*]不易直接捕获相对位置关系
[*]加法情势限定了表达本事
3.2. 旋转位置编码(Rotary Positional Encoding, RoPE)
原理:
将三角函数的位置编码融入 Attention 盘算中的 q 和 k,通过将其旋转肯定角度来表达差异位置。
令二维向量 通过如下旋转矩阵得到位置编码后的值:
R o P E ( x 1 , x 2 , θ ) = [ x 1 ∗ c o s ( θ ) − x 2 ∗ s i n ( θ ) , x 1 ∗ s i n ( θ ) + x 2 ∗ c o s ( θ ) ] RoPE(x₁, x₂, θ) = RoPE(x1,x2,θ)=
即把三角函数用作向量旋转操纵。
应用方式:
[*]不再是加到输入 embedding 上
[*]而是作用在 self-attention 的 q 和 k 上,编码随位置旋转
特点:
[*]编码是可推广的
[*]可以天然地表达相对位置差异
[*]更适当大模子、长文本
3.3. 对比总结
对比维度Sinusoidal Position EncodingRotary Position Encoding (RoPE)底子原理差异频率的 sin/cos 函数编码三角函数表现向量旋转是否可学习否否(但可与可学习联合)应用位置加到 token embedding 上应用于 attention 中的 q 和 k相对位置表达间接表达直接编码相对位置扩展性恣意长度恣意长度(RoPE 在 GPT 系列中表现精良)使用场景原始 Transformer, ViT 等GPT-NeoX, LLaMA, ChatGLM 等大模子四、3. 无重复字符的最宗子串(力扣hot100_滑动窗口)
https://i-blog.csdnimg.cn/direct/0d0b3872e4864c70abb98b4d2e23aab5.png
[*]思绪1:
滑动窗口,站在每个右端点,如果当前串内有重复的字符。依次移除左端点的
[*]代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = left = 0
cnt = defaultdict(int)# 维护从下标 left 到下标 right 的字符及其出现次数
for right, c in enumerate(s):
cnt += 1
while cnt > 1:# 窗口内有重复字母
cnt] -= 1# 移除窗口左端点字母
left += 1# 缩小窗口
ans = max(ans, right - left + 1)# 更新窗口长度最大值
return ans
[*]思绪2:
依次遍历s,不是重复字符直接到场并盘算长度,遇到重复字符,那么当前字符要退出到上一个重复位置。列表可接纳 list.index(i),找到i字符在列表中的位置。
[*]代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
tmp_s = []
max_len = 0
for i in s:
if i not in tmp_s:
tmp_s.append(i)
max_len = max(max_len, len(tmp_s))
else:
index = tmp_s.index(i)
tmp_s = tmp_s
tmp_s.append(i)
return max_len
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]