admin管理员组

文章数量:1130349

最近已有不少大厂开启春招宣讲了。

节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。

总结链接如下:

  • 《大模型面试宝典》(2025版) 正式发布


这是星球成员面试小米大模型的一个面试,全程都是基本功的拷问。

这篇笔记我们就来看看,面试中把这位候选人拷打麻了的一个 Transformer 面试连环炮,到底应该如何作答?

01

面试题解析

第一轮拷问:transformer 的结构?

这个相信大部分同学都能回答上,Transformer 是由编码端和解码端组成,而编码端和解码端又由多个网络结构相同的 Block 堆叠组成。

每个 Block 由多头注意力层和前馈神经网络层组成。解码端跟编码部分类似,不同的是注意力机制采用的是 masked self-attention。

第二轮拷问:Transformer 输入向量的维度?

问这个问题,面试官其实主要是想考察你对 Transformer 的网络结构参数了不了解。

这里要答出两点:

  • 输入 token 序列的维度:【batch, seqlen】

  • 经过 embedding 之后的维度:【batch,seqlen,D】

其中 seqlen 是序列长度,D 是隐藏层的维度。后面多头注意力机制的变换,都是在 tensor 之间加权组合,不会改变这个输入的 shape。

举个例子:假如输入的原始句子是"我爱机器学习",我们按最简单的基于字的分词,这个样本的单词长度是 6,也就是 ‘我’ ‘爱’ ‘机’ ‘器’ ‘学’ ‘习’,这六个字。

经过 embedding 之后,每个词的 embedding 向量是 4096。那"我爱机器学习"这个句子 embedding 之后的维度就是【4096 】,如果是批量输入,那么 embedding 后的维度就是【batch, 4, 4096】

第三轮拷问:为什么在注意力机制这里要除以根号d?

这是一个老牌经典面试题了,对于这种题目,要注意的点就是,不要背八股答案,要用自己的话全程讲述出来。

我们对照公式来看:

这里主要有两点原因:首先,softmax 是一个 S 形的非线性函数,当输入很大时,输出趋近于 1,梯度会趋近于 0。

不过这只是直观上的,那为什么要除以根号 d,而不是其他数呢?

所以更深层的原因是,选择根号 d,可以让输入 softmax 的分布,也就是 Q*K^T 更加趋近一个标准的正态分布,也就是均值为 0,方差为 1 的正态分布。

方差为 1,会使得训练过程,变的更加稳定,每一层的激活,不会产生较大的数据漂移。

到这里,我们的回答又更进一步了。不过我们还可以再继续往前延伸,跟其他面试候选人拉开差距。

其实 Transformer 在实际实现中,在获取输入词向量之后,也需要对 embedding 矩阵乘以根号 d。

原理是类似的,embedding 矩阵的初始化方式是 xavier,方差是 1/根号 d,因此乘以根号 d,可以让 embedding 矩阵的方差是 1,从而加速模型的收敛。

第四轮拷问:layernorm 是对哪一个维度进行的?

这个问题面试官想看看,你对 layernorm 的公式了不了解。

我们先给出公式:

前面说过,layernorm 的输入维度是 [batch,seqlen,D],它是在一句话的序列内做归一化。

这跟 batch norm 是有区别的,batch norm 是在多句话之间做归一化。

其次 LayerNorm 是每个样本自己算均值和方差,不需要存全局的均值和方差,不管样本长还是短,均值和方差都是在每个样本内计算。

所以 layernorm 的归一化的维度是第二个维度 seqlen,也就是对每个单词 embedding 进行标准化。所以 layernorm 层里面的两个可学习参数的维度也是 D。

最近已有不少大厂开启春招宣讲了。

节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。

总结链接如下:

  • 《大模型面试宝典》(2025版) 正式发布


这是星球成员面试小米大模型的一个面试,全程都是基本功的拷问。

这篇笔记我们就来看看,面试中把这位候选人拷打麻了的一个 Transformer 面试连环炮,到底应该如何作答?

01

面试题解析

第一轮拷问:transformer 的结构?

这个相信大部分同学都能回答上,Transformer 是由编码端和解码端组成,而编码端和解码端又由多个网络结构相同的 Block 堆叠组成。

每个 Block 由多头注意力层和前馈神经网络层组成。解码端跟编码部分类似,不同的是注意力机制采用的是 masked self-attention。

第二轮拷问:Transformer 输入向量的维度?

问这个问题,面试官其实主要是想考察你对 Transformer 的网络结构参数了不了解。

这里要答出两点:

  • 输入 token 序列的维度:【batch, seqlen】

  • 经过 embedding 之后的维度:【batch,seqlen,D】

其中 seqlen 是序列长度,D 是隐藏层的维度。后面多头注意力机制的变换,都是在 tensor 之间加权组合,不会改变这个输入的 shape。

举个例子:假如输入的原始句子是"我爱机器学习",我们按最简单的基于字的分词,这个样本的单词长度是 6,也就是 ‘我’ ‘爱’ ‘机’ ‘器’ ‘学’ ‘习’,这六个字。

经过 embedding 之后,每个词的 embedding 向量是 4096。那"我爱机器学习"这个句子 embedding 之后的维度就是【4096 】,如果是批量输入,那么 embedding 后的维度就是【batch, 4, 4096】

第三轮拷问:为什么在注意力机制这里要除以根号d?

这是一个老牌经典面试题了,对于这种题目,要注意的点就是,不要背八股答案,要用自己的话全程讲述出来。

我们对照公式来看:

这里主要有两点原因:首先,softmax 是一个 S 形的非线性函数,当输入很大时,输出趋近于 1,梯度会趋近于 0。

不过这只是直观上的,那为什么要除以根号 d,而不是其他数呢?

所以更深层的原因是,选择根号 d,可以让输入 softmax 的分布,也就是 Q*K^T 更加趋近一个标准的正态分布,也就是均值为 0,方差为 1 的正态分布。

方差为 1,会使得训练过程,变的更加稳定,每一层的激活,不会产生较大的数据漂移。

到这里,我们的回答又更进一步了。不过我们还可以再继续往前延伸,跟其他面试候选人拉开差距。

其实 Transformer 在实际实现中,在获取输入词向量之后,也需要对 embedding 矩阵乘以根号 d。

原理是类似的,embedding 矩阵的初始化方式是 xavier,方差是 1/根号 d,因此乘以根号 d,可以让 embedding 矩阵的方差是 1,从而加速模型的收敛。

第四轮拷问:layernorm 是对哪一个维度进行的?

这个问题面试官想看看,你对 layernorm 的公式了不了解。

我们先给出公式:

前面说过,layernorm 的输入维度是 [batch,seqlen,D],它是在一句话的序列内做归一化。

这跟 batch norm 是有区别的,batch norm 是在多句话之间做归一化。

其次 LayerNorm 是每个样本自己算均值和方差,不需要存全局的均值和方差,不管样本长还是短,均值和方差都是在每个样本内计算。

所以 layernorm 的归一化的维度是第二个维度 seqlen,也就是对每个单词 embedding 进行标准化。所以 layernorm 层里面的两个可学习参数的维度也是 D。

本文标签: 小米废了模型感觉