2021年6月6日-6月16日,拼多多算法面试8道

215 阅读8分钟

#这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

1.GBDT原理

参考答案:

GBDT是梯度提升决策树,是一种基于Boosting的算法,采用以决策树为基学习器的加法模型,通过不断拟合上一个弱学习器的残差,最终实现分类或回归的模型。关键在于利用损失函数的负梯度在当前模型的值作为残差的近似值,从而拟合一个回归树。

对于分类问题:常使用指数损失函数;对于回归问题:常使用平方误差损失函数(此时,其负梯度就是通常意义的残差),对于一般损失函数来说就是残差的近似。

更多请看七月在线题库里的这题:www.julyedu.com/questions/i…

2.连续数组最大和(DP)

参考答案:

本题为剑指offer42题,和Leetcode第53题相同。

题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

解析:本题在面试时要求使用动态规划的方法,因此需要找到对应的状态定义(子问题)和状态转移方程(子问题之间的关系)

状态定义:dp[i]:表示以 nums[i] 结尾的连续子数组的最大和。

状态转移方程:

分两种情况考虑:dp[i-1] <= 0 和 dp[i-1] > 0

如果 dp[i - 1] > 0,那么可以把 nums[i] 直接接在 dp[i - 1] 表示的那个数组的后面,得到和更大的连续子数组;

如果 dp[i - 1] <= 0,那么 nums[i] 加上前面的数 dp[i - 1] 以后值不会变大。于是 dp[i] 「另起炉灶」,此时单独的一个 nums[i] 的值,就是 dp[i]。

得到状态转移方程如下:

整理可得:

代码如下:

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        size = len(nums)
        pre = 0
        res = nums[0]
        for i in range(size):
            pre = max(nums[i], pre + nums[i])
            res = max(res, pre)
        return res

3.ROC含义、AUC含义

参考答案:

ROC曲线是基于样本的真实类别和预测概率来画的,具体来说,ROC曲线的x轴是伪阳性率(false positive rate),y轴是真阳性率(true positive rate)。

其中:真阳性率=(真阳性的数量)/(真阳性的数量+伪阴性的数量)

伪阳性率=(伪阳性的数量)/(伪阳性的数量+真阴性的数量)

AUC是ROC曲线下面的面积,AUC可以解读为从所有正例中随机选取一个样本A,再从所有负例中随机选取一个样本B,分类器将A判为正例的概率比将B判为正例的概率大的可能性。AUC反映的是分类器对样本的排序能力。AUC越大,自然排序能力越好,即分类器将越多的正例排在负例之前。

更多题目,请看七月在线题库里的这题:www.julyedu.com/question/bi…

4.XGB原理,正则化操作

参考答案:

XGB原理:

首先需要说一说GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。

XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。

xgboost使用了如下的正则化项:

γ和λ,这是xgboost自己定义的,在使用xgboost时,可以设定它们的值,显然,γ越大,表示越希望获得结构简单的树,因为此时对较多叶子节点的树的惩罚越大。λ越大也是越希望获得结构简单的树。

5.L1与L2区别,效果差异

参考答案:

L1范数(L1 norm)是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。

比如 向量A=[1,-1,3], 那么A的L1范数为 |1|+|-1|+|3|.

简单总结一下就是:

L1范数: 为x向量各个元素绝对值之和。

L2范数: 为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数

Lp范数: 为x向量各个元素绝对值p次方和的1/p次方.

在支持向量机学习过程中,L1范数实际是一种对于成本函数求解最优的过程,因此,L1范数正则化通过向成本函数中添加L1范数,使得学习得到的结果满足稀疏化,从而方便人类提取特征,即L1范数可以使权值稀疏,方便特征提取。

L2范数可以防止过拟合,提升模型的泛化能力。

L1和L2的差别,为什么一个让绝对值最小,一个让平方最小,会有那么大的差别呢?看导数一个是1一个是w便知, 在靠进零附近, L1以匀速下降到零, 而L2则完全停下来了. 这说明L1是将不重要的特征(或者说, 重要性不在一个数量级上)尽快剔除, L2则是把特征贡献尽量压缩最小但不至于为零. 两者一起作用, 就是把重要性在一个数量级(重要性最高的)的那些特征一起平等共事(简言之, 不养闲人也不要超人)。

更多请看七月在线题库里的这题:www.julyedu.com/questions/i…

6.卷积计算过程

参考答案:

普通卷积计算:

(图像来源:zhuanlan.zhihu.com/p/29119239)

定义:输入图像大小:H_{in}*W_{in}*C_{in}; 输出图像大小:H_oW_oC_o

卷积核大小:kkD_{k}*C_{o}其中:D_{k}为卷积核的厚度等于C_{in},C_{o}为卷积

核的个数, 也是输出特征图的通道数。

标准卷积计算过程如上图所示,其中

输出图像大小计算公式为:

[H_{o}=W_{o}=[(W-F+2P)/S]+ 1=[8-3+20]/1]+1 = 6](zhuanlan.zhihu.com/write#)

参数量(不考虑偏置项):

Para = kkC_{in}*C_{o}

参数量即可训练的参数数量,卷积计算过程中参数共享,而且不同通道的卷积核参数也不一样,所以每个卷积核的参数量为kkC_{in},共有C_{o}个卷积核。

计算量:

Cal=[kkC_{in} + (k*k-1)*C_{in} + (C_{in} -1 )]H_{o}W_{o}C_{o} =(2kkC_{in}-1)*H_{o}*W_{o}*C_{o}

计算量包括加减乘除操作次数,其中1个卷积核1次卷积的计算量为kkC_{in} + (k*k-1)*C_{in} + (C_{in} -1 )

第1部分是卷积核在各通道进行1次乘法操作,

第2部分是乘法之后卷积核内部的加合操作,

第3部分是各通道间的加合操作;一个卷积核在一个输出通道上共进行H_{o}*W{o}次卷积操作,共有C_{o}各卷积核。

7.session与graph区别

参考答案:

graph即tf.Graph(),session即tf.Session(),是两个完全独立的概念。一个graph可以供多个session使用,而一个session不一定需要使用graph的全部,可以只使用其中的一部分。

graph定义了计算方式,是一些加减乘除等运算的组合。它本身不会进行任何计算,也不保存任何中间计算结果。

session用来运行一个graph,或者运行graph的一部分。它类似于一个执行者,给graph灌入输入数据,得到输出,并保存中间的计算结果。同时它也给graph分配计算资源(如内存、显卡等)。

8.最长不重复连续字符长度(DP)

参考答案:

方法:双指针 + sliding window

  • 定义两个指针 start 和 end 得到 sliding window
  • start 初始为0,用end线性遍历每个字符,用 recod 记录下每个字母最新出现的下标
  • 两种情况:一种是新字符没有在 record 中出现过,表示没有重复,一种是新字符 char 在 record 中出现过,说明 start 需要更新,取 start 和 record[char]+1 中的最大值作为新的 start。

需要注意的是:两种情况都要对record进行更新,因为是新字符没在record出现过的时候需要添加到record中,而对于出现过的情况,也需要把record中对应的value值更新为新的下标。

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        record = {}
        start,res = 0,0
        for end in range(len(s)):
            if s[end] in record:
                start = max(start, record[s[end]] + 1)
            record[s[end]] = end
            res = max(res, end - start + 1)
        return res

时间复杂度:O(n)

空间复杂度:O(1)


1分钱新课【2021大厂最新AI面试题】 ,主要更新大厂最新面试题,AI干货资料,会持续无限期更新,也就是1分钱购买此课终生享有此课的使用权,目前干货组汇总了今年3月-6月份,大厂面试题。

需要的小伙伴1分秒杀吧>>>2021大厂最新AI面试题 [含答案和解析, 更新到前105题] - 七月在线 (julyedu.com)

部分目录展示如下: