上海合合信息科技有限公司--深度学习算法实习生--面试题整理

机器学习

  • 一个机器学习模型包含哪几个部件,谈谈您对每个部件的理解
    特征提取部件:提取特征
    损失函数部件:引导模型的优化方向
    优化器部件:模型的优化,参数更新方法
    评价指标:对模型性能的评估

  • softmax、交叉熵、正则函数在这里插入图片描述
    3.1 p ( y = 0 ∣ x ) = 1 1 + e − w x p(y=0 | x)=\frac{1}{1+e^{-wx}} p(y=0x)=1+ewx1
    p ( y = 1 ∣ x ) = e − w x 1 + e − w x \quad p(y=1 | x)=\frac{e^{-wx}}{1+e^{-wx}} p(y=1x)=1+ewxewx
    3.2 L ( y ^ , y ) = − 1 N ∑ i = 1 N ( y i l o g y ^ i + ( 1 − y i ) l o g ( 1 − y ^ i ) ) L(\hat y, y)=-\frac{1}{N} \sum_{i=1}^N (y_i log\hat y_i + (1-y_i)log(1-\hat y_i)) L(y^,y)=N1i=1N(yilogy^i+(1yi)log(1y^i))
    3.3 交叉熵损失函数求导 CSDN:https://blog.csdn.net/qq_40859461/article/details/89788880
    3.4 加入正则项,例如 L + 1 2 λ w 2 L+\frac{1}{2} \lambda w^2 L+21λw2

  • BP算法推导
    在这里插入图片描述
    知乎: https://zhuanlan.zhihu.com/p/23270674

  • k-means 算法
    在这里插入图片描述
    K-means 算法流程:

  1. 随机选取 K 个聚类中心
  2. 计算每个样本到聚类中心之间的距离
  3. 将样本按照最小距离原则分配给聚类中心
  4. 重新计算新的样本聚类中心
  5. 当新聚类中心与之前聚类中心距离小于阈值或达到最大迭代步数,迭代结束;否则跳到步骤2
    K-means 聚类算法的弊端:
    弊端1:初始聚类中心的位置和数目是随机选择的,可能会导致算法的收敛过慢
    改进:K-Means++:
    a) 从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1
    b) 对于数据集中的每一个点xi,计算它与已选择的聚类中心中最近聚类中心的距离
    D ( x ) = m i n ∑ r = 1 k s e l e c t e d ∣ ∣ x i − u r ∣ ∣ 2 D(x)=min \sum_{r=1}^{k_{selected}} ||x_i-u_r||^2 D(x)=minr=1kselectedxiur2
    c) 选择一个新的数据点作为新的聚类中心,选择的原则是: D ( x ) D(x) D(x)较大的点,被选取作为聚类中心的概率较大
    d) 重复b和c直到选择出k个聚类质心
    e) 利用这k个质心来作为初始化质心去运行标准的K-Means算法
    弊端2:每次迭代时需要计算全部样本点到聚类中心之间的距离,耗费时间较长
    改进距离计算优化 elkan K-Means
    利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算;
    第一种规律是对于一个样本点 x x x和两个质心 μ j 1 , μ j 2 μ_{j_1},μ_{j_2} μj1,μj2。如果我们预先计算出了这两个质心之间的距离 D ( j 1 , j 2 ) D(j_1,j_2) D(j1,j2),则如果计算发现 2 D ( x , j 1 ) ≤ D ( j 1 , j 2 ) 2D(x,j_1)≤D(j_1,j_2) 2D(x,j1)D(j1,j2), 我们立即就可以知道 D ( x , j 1 ) ≤ D ( x , j 2 ) D(x, j_1)≤D(x, j_2) D(x,j1)D(x,j2)。此时我们不需要再计算 D ( x , j 2 ) D(x,j_2) D(x,j2), 也就是说省了一步距离计算;
    第二种规律是对于一个样本点 x x x和两个质心 μ j 1 , μ j 2 μ_{j_1}, μ_{j_2} μj1,μj2。我们可以得到 D ( x , j 2 ) ≥ m a x 0 , D ( x , j 1 ) − D ( j 1 , j 2 ) D(x,j_2)≥max{0,D(x,j_1)−D(j_1,j_2)} D(x,j2)max0,D(x,j1)D(j1,j2)。这个从三角形的性质也很容易得到;
    大样本优化 Mini Batch K-Means
    用样本集中的一部分的样本来做传统的K-Means,可以避免样本量太大时的计算难题,算法收敛速度大大加快,代价就是聚类的精确度也会有一些降低

编程题

  • NMS 在这里插入图片描述
    伪代码
    假设有有一个候选的 boxes 的集合 B 和其对应的 scores 集合 S:
    STEP1: 在集合 S 中找出置信度最高的样本 M;
    STEP2: 将 M 对应的 box 从 B 中删除;
    STEP3: 将删除的 box 添加到集合 D 中;
    STEP4: 从 B 中删除与 M 对应的 box 重叠区域大于阈值的框;
    STEP5: 判断 B 中是否为空,为空则结束,否则跳到STEP1;
    python实现

    import numpy as np
    
    def NMS(dets, thresh):
        """Pure Python NMS baseline."""
        #x1、y1、x2、y2、以及score赋值
        x1 = dets[:, 0]
        y1 = dets[:, 1]
        x2 = dets[:, 2]
        y2 = dets[:, 3]
        scores = dets[:, 4]
    
        #每一个候选框的面积
        areas = (x2 - x1 + 1) * (y2 - y1 + 1)
        #order是按照score降序排序的
        order = scores.argsort()[::-1]
    
        keep = []
        while order.size > 0:
            i = order[0]
            keep.append(i)
            #计算当前概率最大矩形框与其他矩形框的相交框的坐标,得到的是向量
            xx1 = np.maximum(x1[i], x1[order[1:]])
            yy1 = np.maximum(y1[i], y1[order[1:]])
            xx2 = np.minimum(x2[i], x2[order[1:]])
            yy2 = np.minimum(y2[i], y2[order[1:]])
    
            #计算相交框的面积,注意矩形框不相交时w或h算出来会是负数,用0代替
            w = np.maximum(0.0, xx2 - xx1 + 1)
            h = np.maximum(0.0, yy2 - yy1 + 1)
            inter = w * h
            #计算重叠度IOU:重叠面积/(面积1+面积2-重叠面积)
            ovr = inter / (areas[i] + areas[order[1:]] - inter)
    
            #找到重叠度不高于阈值的矩形框索引
            inds = np.where(ovr <= thresh)[0]
            #将order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把这个1加回来
            order = order[inds + 1]
        return keep
        
    if __name__ == "__main__":
        dets = np.array([[30, 20, 230, 200, 1], 
                         [50, 50, 260, 220, 0.9],
                         [210, 30, 420, 5, 0.8],
                         [430, 280, 460, 360, 0.7]])
        thresh = 0.35
        keep_dets = NMS(dets, thresh)
        print(keep_dets)
        print(dets[keep_dets])
    
  • 中位数在这里插入图片描述
    http://www.voidcn.com/article/p-peoomiwy-ra.html

  • 走迷宫
    在这里插入图片描述

  • 图像插值
    在这里插入图片描述
    知乎 https://zhuanlan.zhihu.com/p/45863015

  • 发红包
    在这里插入图片描述
    最小金额0.01元;
    所有人的总钱数为红包总金额;
    最大金额为 红包总额-人数*0.01;

    import random
    import numpy as np
    
    def redpackage(money, people):
        sum_m = 0
        num = 0
        result = []
        while True:
            try:
                m = random.randint(1, money*100-people*1-sum_m)
                result.append(m/100.)
                sum_m += m
                num += 1
                if num == people-1:
                    break
            except:
                sum_m = 0
                num = 0
                result = []
                continue
        result.append((money*100.-sum_m)/100.)
        return result
    
    if __name__ == '__main__':
        num = 100
        while num > 0:
            res = redpackage(100, 10)
            print res, len(res), sum(res)
            num -= 1
    
    
  • 多线程在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值