推荐收藏!腾讯算法岗面试题9道(含答案)

65 篇文章 7 订阅
12 篇文章 2 订阅

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

今天我整理一下算法岗方向面试题,分享给大家,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以文末加入我们交流群。


问题1:描述下 Transformer 的结构

Transformer是一种深度学习模型架构,特别适用于序列到序列的任务,如机器翻译。其主要结构包括以下几个部分:

  • 编码器(Encoder):由多个相同的层组成,每个层包含两个子层,即多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feedforward Neural Network)。

  • 解码器(Decoder):同样由多个相同的层组成,每个层包含三个子层,分别是多头自注意力机制、多头注意力机制(用于处理编码器输出的信息)和前馈神经网络。

  • 嵌入层(Embedding):将输入序列的词嵌入到连续的向量空间中。

  • 位置编码(Positional Encoding):为输入序列的每个位置添加一个表示其位置的向量,以保留序列的顺序信息。

  • Layer Normalization和残差连接:在每个子层的输出上应用Layer Normalization,并使用残差连接将输入添加到子层的输出。

问题2:描述为什么 Transformer 可以处理多种模态,它是怎么处理的

Transformer之所以能够处理多种模态的数据,是因为其核心操作——自注意力机制(Attention Mechanism)是通用的,不依赖于数据的特定结构。自注意力机制能够在输入序列中动态地关注不同位置的信息,从而适应不同模态的输入。

对于多模态数据,例如图像和文本,可以通过将每个模态的数据分别表示为输入序列,然后将这些序列送入Transformer模型。这样,模型可以通过自注意力机制在不同模态之间建立关联,捕捉模态间的复杂关系。

问题3:BN的作用和好处

  • 作用:BN主要用于加速神经网络的训练过程。它在每个批次的数据上进行标准化,即将输入数据减去均值并除以标准差,然后通过缩放和平移进行线性变换。这有助于维持每个神经元激活的分布稳定,防止梯度消失或爆炸问题。

  • 好处:

  • 加速训练:BN有助于减小训练过程中的内部协变量转移(Internal Covariate Shift),从而提高网络训练的稳定性和速度。

  • 降低对初始参数的敏感性:BN使网络对初始权重的选择不那么敏感,减少了需要进行精细调整的依赖。

  • 正则化效果:BN在一定程度上具有正则化效果,可以减轻过拟合问题。

问题4:Dropout 的好处

Dropout通过随机地将一部分神经元的输出置零,强制模型去学习更健壮和泛化的特征,从而降低过拟合风险。

问题5:梯度消失的原因

梯度消失是指在深度神经网络中,梯度逐渐变得极小,导致底层网络参数几乎无法更新。主要原因包括:

  • 链式法则:在链式法则中,每个乘法项都会缩小梯度,多层网络中这些项的连续相乘导致梯度指数级地减小。

  • 激活函数的选择:一些传统的激活函数,如sigmoid和tanh,具有饱和区域,梯度在这些区域非常小,使得反向传播时梯度减小。

  • 深度网络结构:随着网络深度增加,梯度经过多次连续的权重矩阵相乘,导致梯度逐渐衰减。

问题6:Resnet 为什么能减缓梯度消失的原因

ResNet采用了残差连接(Residual Connection),通过将输入直接添加到网络层的输出,形成了一个“跳跃连接”。这种结构有助于缓解梯度消失问题的原因有:

  • 梯度直达:在反向传播中,由于有了跳跃连接,梯度能够直接通过残差块传播到较早的层,减轻了梯度逐层衰减的问题。

  • 易于学习恒等映射:残差连接使得网络可以更容易地学习恒等映射,即将输入直接映射到输出,这有助于减轻梯度消失问题。

问题7:在 nums 寻找最小的连续子数组使得它们的和大于所给的targets

方法:前缀和+二分

def search(s, k, n, t):
    t > s[n]:
        return -1
    l, r = k, n 
    res = n
    while l < r:
        mid = (l + r) >> 1
        if s[mid] >= t:
            res = mid
            r = mid - 1
        else:
            l = mid + 1
    return res


def func(targets, nums):
    if targets < sum(nums):
        return 0
    n = len(nums)
    s = [0] * (n + 1)
    for i in range(1, n+1):
        s[i] = s[i - 1] + nums[i]
    res = n
    for i in range(1, n+1):
        t = targets + s[i - 1]
        d = search(s, i, n, t)
        if d > i and d - i + 1 < res:
            res = d - i + 1
    return res


target = 7
nums = [2,3,1,2,4,3]
print(func(target, nums))

问题8:求一个数的N次幂

def pow(k, n):
    if k == 0 and n == 0:
        return None
    flag = 1
    if n < 0:
        flag = 0
    res = 1
    while n > 0:
        if (n & 1) == 1:
            res = res * k 
        k *= k
        n >>= 2
    if flag == 1:
        return res
    return 1.0 / res

问题9:全排列

输入: 5,3

输出: [(1,2,3),(1,2,4),(1,2,5),(2,3,4),(2,3,5),(3,4,5),…]

import copy
def dfs(l, res, n, m, index, level, tmp):
    if level > m:
        return
    if index > n:
        return
    if level == m:
        t = copy.deepcopy(tmp)
        res.append(tuple(t))
        return
    # print("index  ", index, "  n - m + level + 1  ", n - m + level + 1)
    for i in range(index, n - m + level + 1):
        # print("i ", i, " l[i] ", l[i])
        tmp.append(l[i])
        dfs(l, res, n, m, i+1, level+1, tmp)
        tmp.pop()


def pailie(n, m):
    l = range(1, n+1)
    res = []
    tmp = []
    dfs(l, res, n, m, 0, 0, tmp)
    return res


print(pailie(5, 3))

技术交流

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

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

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

用通俗易懂的方式讲解系列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值