Transformer 面试题及详细答案120道(91-100)-- 理论与扩展

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux... 。

前后端面试题-专栏总目录

文章目录

  • 一、本文面试题目录
      • [91. 证明自注意力机制中,缩放因子(√d_k)可以缓解梯度消失问题](#91. 证明自注意力机制中,缩放因子(√d_k)可以缓解梯度消失问题)
      • [92. 分析Transformer的表达能力:它是否能模拟RNN或CNN的功能](#92. 分析Transformer的表达能力:它是否能模拟RNN或CNN的功能)
      • [93. 为什么Transformer在并行计算上比RNN更有优势](#93. 为什么Transformer在并行计算上比RNN更有优势)
      • [94. 自注意力机制与图注意力网络(GAT)有何异同](#94. 自注意力机制与图注意力网络(GAT)有何异同)
      • [95. Transformer中的"注意力权重"是否一定能反映token间的语义关联](#95. Transformer中的“注意力权重”是否一定能反映token间的语义关联)
      • [96. 如何可视化Transformer的注意力权重?有哪些工具或方法](#96. 如何可视化Transformer的注意力权重?有哪些工具或方法)
      • [97. 探讨Transformer在低资源语言任务中的挑战与解决方案](#97. 探讨Transformer在低资源语言任务中的挑战与解决方案)
      • [98. Transformer与强化学习(RL)结合的典型场景有哪些(如RLHF)](#98. Transformer与强化学习(RL)结合的典型场景有哪些(如RLHF))
      • [99. 什么是"注意力坍塌(Attention Collapse)"?如何避免?](#99. 什么是“注意力坍塌(Attention Collapse)”?如何避免?)
      • [100. 未来Transformer模型的发展趋势可能有哪些?](#100. 未来Transformer模型的发展趋势可能有哪些?)
  • 二、120道Transformer面试题目录列表

一、本文面试题目录

91. 证明自注意力机制中,缩放因子(√d_k)可以缓解梯度消失问题

在自注意力机制中,计算注意力分数时使用点积后除以(\sqrt{d_k})(其中(d_k)是键的维度),这可以缓解梯度消失问题。具体证明如下:

  • 原理说明 :随着维度(d_k)的增加,点积的结果会变得很大,这会使softmax函数的输出变得非常尖锐,几乎所有的注意力权重都集中在某个特定的token上。根据softmax函数(y_i=\frac{e{x_i}}{\sum_{j=1}{n}e^{x_j}}),当(x_i)很大时,(y_i)会趋近于1,而其他(y_j)((j\neq i))会趋近于0。这样在反向传播时,梯度会非常小,从而导致梯度消失问题。而除以(\sqrt{d_k})可以使点积结果的方差保持适中,避免softmax函数输出过于尖锐,从而缓解梯度消失问题。
  • 示例代码:以下是一个简单的自注意力机制中计算注意力分数的示例代码,其中包含了缩放因子的使用。
python 复制代码
import torch

def scaled_dot_product_attention(q, k, v, mask=None):
    """
    计算缩放点积注意力
    :param q: 查询矩阵,形状为 (batch_size, num_heads, seq_length, head_dim)
    :param k: 键矩阵,形状为 (batch_size, num_heads, seq_length, head_dim)
    :param v: 值矩阵,形状为 (batch_size, num_heads, seq_length, head_dim)
    :param mask: 掩码矩阵,形状为 (batch_size, 1, 1, seq_length) 或 None
    :return: 注意力输出,形状为 (batch_size, num_heads, seq_length, head_dim)
    """
    d_k = q.size(-1)
    # 计算点积
    attn_scores = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    if mask is not None:
        attn_scores = attn_scores.masked_fill(mask == 0, -1e9)
    # 计算注意力权重
    attn_probs = torch.softmax(attn_scores, dim=-1)
    # 计算注意力输出
    output = torch.matmul(attn_probs, v)
    return output

92. 分析Transformer的表达能力:它是否能模拟RNN或CNN的功能

Transformer具有很强的表达能力,可以模拟RNN和CNN的功能。

  • 原理说明
    • 模拟RNN:RNN通过循环结构来处理序列数据,能够捕捉序列中的长期依赖关系。Transformer通过自注意力机制,可以在一步计算中关注到序列中的所有位置,从而能够捕捉到长期依赖关系,在这一点上可以模拟RNN的功能。而且Transformer没有RNN的循环结构,避免了梯度消失和梯度爆炸等问题,能够更好地处理长序列。
    • 模拟CNN:CNN通过卷积核在局部区域上进行卷积操作,来提取局部特征。Transformer中的多头自注意力机制可以通过调整注意力权重,使得模型能够关注到局部区域的token,从而模拟CNN的局部特征提取功能。此外,Transformer还可以通过堆叠多层自注意力层和前馈神经网络层,来增加模型的深度,从而能够学习到更复杂的特征表示,这与CNN通过堆叠多个卷积层和池化层来学习特征的方式类似。
  • 示例代码:以文本分类任务为例,使用Transformer模拟RNN和CNN的功能。
python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

class TransformerForClassification(nn.Module):
    def __init__(self, vocab_size, d_model, num_heads, num_layers, max_seq_length):
        super(TransformerForClassification, self).__init__()
        self.embedding = nn.Embedding(vocab_size, d_model)
        self.position_encoding = nn.Parameter(torch.zeros(1, max_seq_length, d_model))
        self.transformer_encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model, num_heads),
            num_layers
        )
        self.fc = nn.Linear(d_model, 2)  # 假设是二分类任务

    def forward(self, x):
        x = self.embedding(x)
        x = x + self.position_encoding[:, :x.size(1), :]
        x = self.transformer_encoder(x)
        x = torch.mean(x, dim=1)
        x = self.fc(x)
        return F.log_softmax(x, dim=1)

93. 为什么Transformer在并行计算上比RNN更有优势

Transformer在并行计算上比RNN更有优势的原因如下:

  • 原理说明:RNN的计算过程是顺序的,任意时刻(t)的输入是时刻(t)的输入(x(t))和上一时刻的隐藏层输出(h(t-1)),经过运算后得到当前时刻隐藏层的输出(h(t)),这个(h(t))也即将作为下一时刻(t+1)的输入的一部分。这意味着RNN序列后面的信息只能等到前面的计算结束后,将历史信息通过隐藏状态传递给后面才能开始计算,形成链式的序列依赖关系,无法实现并行。而Transformer在自注意力层,无论序列的长度是多少,都可以一次性计算所有单词之间的注意力关系,这个计算过程是并行的,不需要依赖前面的计算结果,因此可以充分利用GPU等硬件的并行计算能力,大大提高计算效率。
  • 示例代码:以下是一个简单的Transformer自注意力层的并行计算示例代码。
python 复制代码
import torch

def self_attention(q, k, v):
    """
    自注意力计算
    :param q: 查询矩阵,形状为 (batch_size, seq_length, d_model)
    :param k: 键矩阵,形状为 (batch_size, seq_length, d_model)
    :param v: 值矩阵,形状为 (batch_size, seq_length, d_model)
    :return: 注意力输出,形状为 (batch_size, seq_length, d_model)
    """
    d_k = q.size(-1)
    attn_scores = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    attn_probs = torch.softmax(attn_scores, dim=-1)
    output = torch.matmul(attn_probs, v)
    return output

在这个代码中,计算注意力分数、注意力权重和注意力输出的过程都是并行进行的,没有顺序依赖。

94. 自注意力机制与图注意力网络(GAT)有何异同

自注意力机制与图注意力网络(GAT)有以下异同点:

  • 原理说明
    • 相同点:两者都基于注意力机制,通过计算节点或token之间的注意力权重来确定它们之间的关联程度,从而能够捕捉到不同元素之间的重要关系。都可以在不同的场景中用于特征提取和表示学习。
    • 不同点:自注意力机制主要用于处理序列数据,输入是一个线性的序列,每个位置的token都与序列中的其他所有token计算注意力权重。而GAT用于处理图结构数据,节点之间的连接关系是由图的拓扑结构决定的,每个节点只与它的邻居节点计算注意力权重。此外,GAT通常需要考虑节点的特征和图的结构信息,而自注意力机制主要关注序列中token的特征。
  • 示例代码
    • 自注意力机制示例代码:见91题答案中的示例代码。
    • 图注意力网络示例代码
python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

class GATLayer(nn.Module):
    def __init__(self, in_features, out_features, alpha=0.2):
        super(GATLayer, self).__init__()
        self.W = nn.Parameter(torch.zeros(size=(in_features, out_features)))
        nn.init.xavier_uniform_(self.W.data, gain=1.414)
        self.a = nn.Parameter(torch.zeros(size=(2 * out_features, 1)))
        nn.init.xavier_uniform_(self.a.data, gain=1.414)
        self.alpha = alpha

    def forward(self, h, adj):
        Wh = torch.mm(h, self.W)
        a_input = torch.cat([Wh.repeat(1, adj.shape[1], 1), Wh.repeat(adj.shape[1], 1, 1).transpose(0, 1)], dim=2)
        e = F.leaky_relu(torch.matmul(a_input, self.a).squeeze(2))
        zero_vec = -9e15 * torch.ones_like(e)
        attention = torch.where(adj > 0, e, zero_vec)
        attention = F.softmax(attention, dim=1)
        h_prime = torch.matmul(attention, Wh)
        return h_prime

95. Transformer中的"注意力权重"是否一定能反映token间的语义关联

Transformer中的"注意力权重"不一定能完全反映token间的语义关联。

  • 原理说明:注意力权重是通过计算查询向量和键向量的点积,然后经过softmax函数得到的,它主要反映的是两个token在特征空间中的相似程度。虽然在很多情况下,相似的token可能具有相似的语义,但是特征空间中的相似并不一定完全等同于语义上的关联。例如,在一些情况下,模型可能会因为数据的统计特性或者噪声的影响,使得注意力权重集中在一些与语义无关的token上。此外,模型的训练过程也可能会导致注意力权重不能准确地反映语义关联,比如模型可能会过拟合到训练数据中的一些虚假模式,而不是真正的语义关系。
  • 示例代码:暂无直接相关的示例代码,但可以通过分析注意力权重的可视化结果来验证这一点。例如,可以使用下面96题中提到的注意力权重可视化方法,观察注意力权重是否集中在具有语义关联的token上。

96. 如何可视化Transformer的注意力权重?有哪些工具或方法

可视化Transformer的注意力权重可以帮助我们理解模型的行为和决策过程。以下是一些常用的工具和方法:

  • 原理说明:通过将注意力权重以图形化的方式展示出来,比如使用热力图等形式,我们可以直观地看到每个token与其他token之间的注意力权重大小,从而分析模型在处理输入序列时关注的重点区域。
  • 示例代码
    • 使用Matplotlib和Seaborn
python 复制代码
import torch
import seaborn as sns
import matplotlib.pyplot as plt

def visualize_attention(attention_weights, tokens):
    """
    可视化注意力权重
    :param attention_weights: 注意力权重矩阵,形状为 (seq_length, seq_length)
    :param tokens: 输入序列的token列表
    """
    plt.figure(figsize=(10, 8))
    sns.heatmap(attention_weights, xticklabels=tokens, yticklabels=tokens, cmap='YlGnBu', annot=True, fmt=".2f")
    plt.xlabel('Query Tokens')
    plt.ylabel('Key Tokens')
    plt.title('Attention Weights Visualization')
    plt.show()

# 假设attention_weights是计算得到的注意力权重矩阵,tokens是输入序列的token列表
attention_weights = torch.rand(5, 5)
tokens = ['token1', 'token2', 'token3', 'token4', 'token5']
visualize_attention(attention_weights, tokens)
复制代码
- **使用TensorBoard**:在PyTorch中,可以使用TensorBoard来可视化注意力权重。首先需要安装TensorBoard,然后在代码中添加相关的可视化逻辑。
python 复制代码
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter()
# 假设attention_weights是计算得到的注意力权重矩阵
attention_weights = torch.rand(5, 5)
writer.add_heatmap('attention_weights', attention_weights, global_step=0)
writer.close()

然后在命令行中运行tensorboard --logdir=runs,并在浏览器中打开相应的链接,就可以查看注意力权重的可视化结果。

97. 探讨Transformer在低资源语言任务中的挑战与解决方案

Transformer在低资源语言任务中面临一些挑战,同时也有相应的解决方案。

  • 原理说明
    • 挑战:低资源语言任务中,训练数据较少,模型容易过拟合。此外,由于数据不足,模型可能无法学习到足够的语言特征和语义信息,导致性能下降。而且低资源语言可能缺乏一些必要的语言资源,如大规模的语料库、预训练模型等,这也给模型的训练和应用带来了困难。
    • 解决方案:可以采用迁移学习的方法,将在高资源语言上预训练好的模型迁移到低资源语言任务上,然后在低资源语言数据上进行微调。还可以使用数据增强技术,如回译、同义词替换等,来扩充训练数据。此外,设计更轻量级的模型结构,减少模型的参数数量,也可以降低模型过拟合的风险。例如,可以减少Transformer的层数、头数或者降低嵌入维度等。
  • 示例代码:以迁移学习为例,使用Hugging Face的Transformers库进行低资源语言任务的微调。
python 复制代码
from transformers import AutoModelForSequenceClassification, AutoTokenizer, Trainer, TrainingArguments
import torch

# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)  # 假设是二分类任务

# 准备低资源语言数据
train_texts = ["This is a sample sentence for low - resource language task.", "Another sample sentence."]
train_labels = [0, 1]
train_encodings = tokenizer(train_texts, truncation=True, padding=True)
train_dataset = torch.utils.data.TensorDataset(
    torch.tensor(train_encodings['input_ids']),
    torch.tensor(train_encodings['attention_mask']),
    torch.tensor(train_labels)
)

# 训练参数设置
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=16,
    save_steps=10_000,
    save_total_limit=2,
)

# 训练模型
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
)
trainer.train()

98. Transformer与强化学习(RL)结合的典型场景有哪些(如RLHF)

Transformer与强化学习结合的典型场景有以下几种:

  • 原理说明
    • 对话系统:在对话系统中,Transformer可以用于建模用户的历史对话记录,而强化学习可以用于优化对话策略,以生成更合适的响应动作。例如,可以将Transformer作为策略网络,根据用户的输入和历史对话信息,生成下一个对话动作的概率分布,然后通过强化学习来最大化累计奖励,如用户的满意度等。
    • 游戏AI:在复杂的游戏中,Transformer可以用于建模游戏状态的全局上下文,将游戏状态、动作和奖励等信息作为输入序列,利用多头自注意力机制提取全局特征。强化学习可以根据这些特征来学习最优的游戏策略,以最大化游戏得分或完成特定的游戏目标。
    • 决策制定:在一些决策任务中,如机器人控制等,Transformer可以将历史状态、动作和奖励等信息作为输入,通过自注意力机制提取特征,然后输出可以直接作为Q - value或概率分布供后续采样操作使用,强化学习可以根据这些输出进行决策制定,以优化决策策略。
  • 示例代码:以对话系统为例,以下是一个简单的Transformer与强化学习结合的示例代码框架。
python 复制代码
import torch
import torch.nn as nn
from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载预训练的Transformer模型和分词器
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 强化学习相关的定义
class PolicyNetwork(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(PolicyNetwork, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.fc2 = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        return torch.softmax(self.fc2(x), dim=-1)

policy_network = PolicyNetwork(768, 256, tokenizer.vocab_size)  # 假设Transformer输出维度为768

# 训练过程
def train_dialogue_system():
    # 初始化状态
    state = "Hello"
    total_reward = 0
    for _ in range(10):  # 假设对话长度为10
        # 将状态编码为模型输入
        input_ids = tokenizer.encode(state, return_tensors='pt')
        output = model(input_ids)
        # 获取Transformer的输出特征
        features = output.last_hidden_state.mean(dim=1)
        # 根据策略网络生成动作概率分布
        action_probs = policy_network(features)
       
### 98. Transformer与强化学习(RL)结合的典型场景有哪些(如RLHF)?
#### 原理说明
Transformer与强化学习(RL)的结合旨在通过RL的奖励机制优化Transformer的输出,使其更符合人类偏好或任务目标。典型场景包括:
- **RLHF(基于人类反馈的强化学习)**:先让Transformer生成候选输出,通过人类标注排序构建奖励模型(RM),再用RL(如PPO)微调模型以最大化奖励。
- **文本生成控制**:如控制生成文本的情感、长度或主题,通过RL定义对应奖励函数(如情感分类器得分)引导模型输出。
- **机器翻译优化**:针对特定指标(如BLEU值、语义一致性)设计奖励函数,用RL微调翻译模型以提升目标指标表现。

#### 示例代码(RLHF核心流程示意)
```python
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
from torch.optim import Adam

# 1. 初始化生成模型(Transformer)和奖励模型
generator = GPT2LMHeadModel.from_pretrained("gpt2")
reward_model = GPT2LMHeadModel.from_pretrained("gpt2")  # 实际中为训练好的奖励模型
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
tokenizer.pad_token = tokenizer.eos_token

# 2. 生成候选文本
def generate_text(prompt, model, max_length=50):
    inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
    outputs = model.generate(**inputs, max_length=max_length, do_sample=True)
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

# 3. 定义PPO损失(简化版)
def ppo_loss(generator, old_logits, new_logits, rewards, epsilon=0.2):
    old_probs = torch.softmax(old_logits, dim=-1)
    new_probs = torch.softmax(new_logits, dim=-1)
    ratio = new_probs / (old_probs + 1e-8)
    surr1 = ratio * rewards
    surr2 = torch.clamp(ratio, 1 - epsilon, 1 + epsilon) * rewards
    return -torch.min(surr1, surr2).mean()

# 4. 训练循环(简化)
prompt = "What is the meaning of life?"
optimizer = Adam(generator.parameters(), lr=1e-5)

for _ in range(10):
    # 生成旧输出并记录logits
    inputs = tokenizer(prompt, return_tensors="pt")
    old_outputs = generator(** inputs, output_logits=True)
    old_logits = old_outputs.logits
    
    # 生成新输出(带探索)
    new_outputs = generator(**inputs, output_logits=True, do_sample=True)
    new_logits = new_outputs.logits
    
    # 计算奖励(示例:用奖励模型打分)
    reward_inputs = tokenizer(generate_text(prompt, generator), return_tensors="pt")
    rewards = reward_model(** reward_inputs).logits.mean()  # 简化的奖励计算
    
    # 计算PPO损失并更新
    loss = ppo_loss(generator, old_logits, new_logits, rewards)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

99. 什么是"注意力坍塌(Attention Collapse)"?如何避免?

原理说明

注意力坍塌指Transformer的自注意力权重分布趋于均匀(所有token权重接近)或集中于少数token(如仅关注自身),导致模型无法有效捕捉关键语义关联的现象。其成因包括:

  • 训练初期参数随机初始化,注意力分布无显著偏好;
  • 输入序列过长或噪声过多,token间关联性被稀释;
  • 模型深度过深,注意力机制随层叠逐渐"退化"。
避免方法
  1. 初始化优化:采用更合理的参数初始化(如Xavier初始化),使注意力权重在训练初期即有区分度。
  2. 正则化约束
    • 加入注意力熵正则项,惩罚分布过均匀或过集中的权重(如loss += -alpha * torch.sum(attn_weights * torch.log(attn_weights + 1e-8)));
    • 对注意力权重施加稀疏性约束(如L1正则)。
  3. 改进注意力机制
    • 使用相对位置编码而非绝对位置编码,增强长序列中位置关联性;
    • 引入局部注意力掩码(如Transformer-XL的分段注意力),限制无意义关联的token参与计算。
  4. 训练策略调整
    • 采用预热学习率(warm-up),避免训练初期参数剧烈波动;
    • 对过长序列进行分段处理,减少噪声token的干扰。
示例代码(注意力熵正则化)
python 复制代码
import torch

def attention_with_entropy_reg(queries, keys, values, dropout=0.1, reg_alpha=0.01):
    d_k = queries.size(-1)
    scores = torch.matmul(queries, keys.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    attn_weights = torch.softmax(scores, dim=-1)  # 注意力权重
    
    # 计算注意力熵
    attn_entropy = -torch.sum(attn_weights * torch.log(attn_weights + 1e-8), dim=-1).mean()
    entropy_reg = reg_alpha * (1 - attn_entropy)  # 惩罚低熵(分布集中)或过高熵(分布均匀)
    
    attn_weights = torch.nn.functional.dropout(attn_weights, p=dropout, training=True)
    outputs = torch.matmul(attn_weights, values)
    return outputs, entropy_reg

# 在总损失中加入正则项
queries = torch.randn(2, 4, 64)  # (batch, seq_len, d_k)
keys = torch.randn(2, 4, 64)
values = torch.randn(2, 4, 64)
outputs, entropy_reg = attention_with_entropy_reg(queries, keys, values)
total_loss = task_loss + entropy_reg  # task_loss为任务损失(如分类损失)

100. 未来Transformer模型的发展趋势可能有哪些?

原理说明

Transformer的发展趋势将围绕效率提升能力扩展场景适配三大方向,具体包括:

  1. 高效轻量化
    • 设计更精简的注意力机制(如Flash Attention的IO优化、线性注意力替代软注意力);
    • 动态网络结构(如根据输入调整层数或注意力头数),平衡性能与计算成本。
  2. 多模态融合
    • 统一文本、图像、音频、视频的表示空间,实现跨模态理解与生成(如GPT-4、FLAVA);
    • 引入模态专属注意力机制(如针对图像的空间注意力与文本的语义注意力结合)。
  3. 可解释性增强
    • 改进注意力权重的可解释性,避免"虚假关联"(如通过因果推断过滤非语义相关的注意力);
    • 引入可解释模块(如注意力权重可视化工具、语义关联溯源机制)。
  4. 低资源与鲁棒性优化
    • 针对小样本、低资源语言任务设计更高效的预训练策略(如迁移学习+提示微调);
    • 增强模型对噪声、对抗样本的鲁棒性(如对抗训练、数据增强)。
  5. 与其他范式结合
    • 融合符号逻辑(如知识图谱),提升推理能力(如思维链Chain-of-Thought);
    • 结合强化学习(如更高效的RLHF)、元学习,实现模型自主进化与适应新任务。
示例(动态Transformer结构示意)
python 复制代码
import torch
import torch.nn as nn

class DynamicTransformerLayer(nn.Module):
    def __init__(self, d_model, nhead, max_layers=4):
        super().__init__()
        self.layers = nn.ModuleList([nn.TransformerEncoderLayer(d_model, nhead) for _ in range(max_layers)])
        self.layer_selector = nn.Linear(d_model, max_layers)  # 动态选择层数的控制器

    def forward(self, x):
        # 根据输入特征动态选择层数
        layer_scores = torch.softmax(self.layer_selector(x.mean(dim=1)), dim=-1)  # 基于序列均值的层数评分
        num_layers = torch.argmax(layer_scores).item() + 1  # 选择评分最高的层数(至少1层)
        
        # 前向传播(仅使用选定的层数)
        for i in range(num_layers):
            x = self.layers[i](x)
        return x

# 应用动态层的Transformer
d_model = 512
nhead = 8
dynamic_encoder = DynamicTransformerLayer(d_model, nhead)
inputs = torch.randn(32, 10, d_model)  # (batch, seq_len, d_model)
outputs = dynamic_encoder(inputs)  # 自动适配层数

二、120道Transformer面试题目录列表

文章序号 Transformer 120道
1 Transformer面试题及详细答案120道(01-10)
2 Transformer面试题及详细答案120道(11-20)
3 Transformer面试题及详细答案120道(21-30)
4 Transformer面试题及详细答案120道(31-40)
5 Transformer面试题及详细答案120道(41-50)
6 Transformer面试题及详细答案120道(51-60)
7 Transformer面试题及详细答案120道(61-70)
8 Transformer面试题及详细答案120道(71-80)
9 Transformer面试题及详细答案120道(81-90)
10 Transformer面试题及详细答案120道(91-100)
11 Transformer面试题及详细答案120道(101-110)
12 Transformer面试题及详细答案120道(111-120)
相关推荐
佛喜酱的AI实践5 小时前
Claude Code配置指南已死,这个一键安装工具才是未来
人工智能·claude
bytemaster5 小时前
国内开发者如何流畅、低成本地用上 Claude Code?有哪些接入 Kimi、通义千问的靠谱方案?
人工智能·程序员
小白狮ww5 小时前
小米开源端到端语音模型 MiMo-Audio-7B-Instruct 语音智能与音频理解达 SOTA
人工智能·深度学习·机器学习
AI袋鼠帝5 小时前
最强开源0.9B级OCR模型!本地Agent、知识库都有救了~
人工智能
Blossom.1185 小时前
把AI“绣”进丝绸:生成式刺绣神经网络让古装自带摄像头
人工智能·pytorch·python·深度学习·神经网络·机器学习·fpga开发
大力财经5 小时前
百度搜索开启公测AI短剧平台,将投入亿元基金、百亿流量扶持创作者
人工智能
RPA中国5 小时前
谷雨互动赵乾坤 | AI答案时代生存法则:从流量变迁到GEO实践
人工智能
paopaokaka_luck5 小时前
基于SpringBoot+Vue的数码交流管理系统(AI问答、协同过滤算法、websocket实时聊天、Echarts图形化分析)
vue.js·人工智能·spring boot·websocket·echarts