我面了昆仑天工大模型算法岗,题是真硬啊。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。


合集在这里:《大模型面试宝典》(2024版) 正式发布!


今天我们分享合集中一个同学的面试题,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以文末加入我们。

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了大模型算法岗技术与面试交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:技术交流

问题1、LLAMA 的结构有什么特点?

  • 前置的RMSNorm;

  • 在Q、K上使用RoPE旋转式位置编码,使用causal mask保证每个位置只能看到前面的tokens;

  • LLaMA可以将更早的K、V拼接到当前K、V前面,可以用Q查找更早的信息。

  • MLP表达式:\operatorname{down}(u p(x) \times \operatorname{SiLU}($ gate $(x))),其中down, up, gate都是线性层。

问题2、讲一下 LLAMA 的 layer norm。

RMS Norm是一般LayerNorm的一种变体,可以在梯度下降时令损失更加平滑,与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分(re-centering),只保留方差部分(re-scaling)。

问题3、讲一下 LLAMA 的激活函数。

SwiGLU激活: ReLU替换成了SwiGLU。SwiGLU是一种激活函数,它是Gated Linear Units (GLU)的一种变体,使用Swish函数代替sigmoid函数。它可以提高transformer模型的性能,比ReLU或GELU激活函数更好。SwiGLU的优点是它可以动态地调整信息流的门控程度,根据输入的不同而变化。ReLU的缺点是它会导致神经元死亡,即输出为零的情况。GELU的缺点是它比ReLU更复杂,计算量更大。

问题4、详细介绍一下 Transformer 的结构。

Transformer 的结构主要包括:

  • Encoder:由多层自注意力机制模块和全连接前馈神经网络组成,用于将输入序列编码成隐藏表示。

  • Decoder:由多层自注意力机制模块、编码器-解码器注意力机制模块和全连接前馈神经网络组成,用于生成目标序列。

问题5、为什么计算注意力 QK 分数要除以维度开根号?为什么不能直接除以维度?

在计算注意力 QK(Query-Key)分数时,除以维度的开根号是为了控制注意力分布的范围,使得注意力值的大小相对稳定,更加适应不同维度的输入。如果直接除以维度,可能会导致梯度过大或过小的情况,影响模型的训练效果。

问题6、讲一下对位置嵌入的了解。

位置嵌入是 Transformer 中用于引入序列位置信息的一种方式。它通过学习得到的位置编码向量,将位置信息嵌入到输入序列的表示中,使得模型能够区分不同位置的单词或标记。

问题7、讲一下 tokenizer 的分词方法有那些?

  • 基于规则的分词:根据语言的特点和规则进行分词,如中文的逐字分词或者英文的空格分词。

  • 基于词典的分词:利用预先构建好的词典,将输入文本切分成词语或者子词。

  • 子词切分:将词汇表中的单词进行进一步切分,得到更加细粒度的子词,如 Byte Pair Encoding(BPE)或者WordPiece。

问题8、Leetcode:岛屿数量。

def numIslands(grid):
    def dfs(grid, i, j):
        if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == '0':
            return
        grid[i][j] = '0'
        dfs(grid, i + 1, j)
        dfs(grid, i - 1, j)
        dfs(grid, i, j + 1)
        dfs(grid, i, j - 1)
    
    if not grid:
        return 0
    count = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            if grid[i][j] == '1':
                count += 1
                dfs(grid, i, j)
    return count

用通俗易懂方式讲解系列

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值