我整理好的1000+面试题,请看 
大模型面试题总结-CSDN博客
或者

https://gitee.com/lilitom/ai_interview_questions/blob/master/README.md

最好将URL复制到浏览器中打开,不然可能无法直接打开

-------------------------------------------------------------------------------------------------

好了,我们今天针对上面的问题,

大模型训练模式和推理模式的主要流程和区别是什么?

在Transformer模型的训练和推理过程中,确实存在两种模式:训练模式和推理(生成)模式。这两种模式在处理解码器的输入时有所不同。训练模式在训练模式下,模型通常采用真正的目标序列(即真实的标签)作为解码器输入,以便学习目标的条件分布。这种方法称为“教师强制”(Teacher Forcing)。教师强制的好处是,它加速了训练收敛,并避免了错误传播。具体步骤如下:解码器输入: 解码器在每个时间步使用目标序列的前一个token作为当前时间步的输入。掩码机制: 使用遮罩机制(masking)来确保每个时间步只能看到之前的token,而不能看到未来的token。示例代码:

import torch
import torch.nn.functional as F

# 模拟Encoder和Decoder输入输出
encoder_outputs = torch.randn(1, 10, 512)  # (batch_size, seq_len, model_dim)
target_seq = torch.randint(low=0, high=100, size=(1, 12))  # (batch_size, target_seq_len)

# 解码器输入
decoder_input = target_seq[:, :-1]  # 在训练时,输入target_seq去掉最后一个token

# 假设有一个TransformerDecoder类
decoder_output = transformer_decoder(decoder_input, encoder_outputs)

# 计算损失
loss = F.cross_entropy(decoder_output.view(-1, decoder_output.size(-1)), target_seq[:, 1:].view(-1))

推理模式(生成模式)在推理模式下,即在实际生成文本时,解码器不再能使用真实的目标序列。相反,它必须基于已生成的token来逐步生成下一个token。解码器在每一步生成下一个token,然后将生成的token反馈到解码器的下一个时间步。这一过程通常称为自回归生成。具体步骤如下:初始输入: 解码器首先输入一个起始token(例如“”)。逐步生成: 在每个时间步生成一个token,并将这个token作为输入反馈到解码器的下一个时间步,一直到生成结束标志(例如“”)或达到最大长度。示例代码:

import torch

# 模拟Encoder输出
encoder_outputs = torch.randn(1, 10, 512)  # (batch_size, seq_len, model_dim)

# 解码器的初始输入:起始token
decoder_input = torch.tensor([[start_token]])  # 假设 start_token 是起始token的索引

generated_sequence = []

for _ in range(max_length):
    # 获取当前时间步的解码器输出
    decoder_output = transformer_decoder(decoder_input, encoder_outputs)
    
    # 获取最后一个token的概率分布
    last_token_logits = decoder_output[:, -1, :]
    
    # 采样或选择具有最高概率的token
    next_token = torch.argmax(last_token_logits, dim=-1).unsqueeze(0)
    
    # 将生成的token添加到已生成的序列中
    generated_sequence.append(next_token.item())
    
    # 更新解码器输入,添加生成的token
    decoder_input = torch.cat([decoder_input, next_token], dim=1)
    
    # 如果生成结束标志token,则停止生成
    if next_token.item() == end_token:
        break

# 最终生成的序列
generation = generated_sequence
print(generation)

总结
训练模式: 教师强制(Teacher Forcing),真实目标序列的前一个token作为解码器当前时间步的输入。
推理模式: 自回归生成(贪婪搜索或其他生成策略),解码器每一步生成一个token,并将其反馈为下一个时间步的输入。通过这两种模式的处理,Transformer能够既在优化过程中稳定高效地学习,又能够在推理过程中灵活生成高质量的序列。

参考:
[1] https://zhuanlan.zhihu.com/p/716595820

 

更多推荐