• 实习面试复习


    商汤-上海 IRDC-算法开发实习生

    根据面经复习

    手写Conv2d

    BN,LN/LSTM/GRU/Transformer一些基础

    手写conv2d

    def corr2d(X, K):
        n, m = X.shape
        h, w = K.shape
        Y = torch.zeros((n - h + 1, m - w + 1))
        for i in range(Y.shape[0]):
            for j in range(Y.shape[1]):
                Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
        return Y
    
    class Conv2D(nn.module):
        def __init__(self, kernel_size):
            self.weight = nn.Parameter(torch.rand(kernel_size))
            self.bias = nn.Parameter(torch.zeros(1))
        def forword(self, x):
            return corr2d(x, self.weight) + self.bias
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    BN,batchNorm,批归一化

    独立同分布假设:假设训练数据和测试数据是满足相同分布的。
    如果输入层数据不做归一化,很多时候网络不会收敛。

    每一层经过运算之后,前面层训练参数的更新将导致后面层输入数据分布的变化。并且后面的层会将网络前几层微小的改变累积放大。会导致两个后果:

    1. 数值区别不大
    2. 导数很小,反向传播力度很小,网络难以收敛

    LSTM, 长短期记忆网络

    • 忘记门
    • 输入门
    • 输出门

    GRU,门控循环单元

    • 重置门
    • 更新门

    2022-11-22 一面

    1. 自我介绍
    2. 手写代码,判断两个方阵整体经过旋转后是否能完全一致
    3. 项目。问了问创新点在哪,职责是什么,有没有跑过实验。
    4. pytorch上的多机多卡并行,单机多卡并行,数据并行,模型并行具体都是什么
    5. 反问

    2022-11-23 二面

    1. 自我介绍

    2. 问项目。问的很详细。除了项目本身

      1. 一个GAN相关的,问了对比其他方法有什么好处,劣势。为什么选择GAN
      2. 异常分割相关,做一个综述。
    3. 算法题伪代码。完全背包最小方案数

    小米-武汉 视觉图像算法工程师实习生

    根据面经复习:https://www.nowcoder.com/discuss/post/398861072390778880

    1. 逐个介绍项目,问的很详细

    2. 从公式的角度说明一下L2损失为什么会平滑

    3. 解决模型过拟合的方法

    4. 为什么L1正则化可以缓解过拟合

    5. 代码

    (1)快排

    (2)手写卷积

    正则项

    L0,L1,L2 —— 简书

    L1稀疏,L2平滑

    为什么L1稀疏,L2平滑
    image-20221123095619527 image-20221123100053744
    L1为什么可以缓解过拟合

    L1范数是指向量中各个元素绝对值之和。

    参数值大小和模型复杂度是成正比的。越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,较大的参数值才能产生较大的导数。这就容易产生过拟合。

    因此复杂的模型,其L1范数就大,最终导致损失函数就大。最小化损失函数就是对参数值的大小进行限制。

    解决过拟合的办法

    1. 数据增广
    2. dropout
    3. 正则化 权值衰减weight decay
    4. 提前停止

    代码

    快排
    void qsort(int q[], int l, int r)
    {
        if (l >= r) return ;
        int i = l - 1, j = r + 1, x = q[l + r >> 1];
        while (i < j)
        {
            do i ++; while (q[i] < x);
            do j --; while (q[j] > x);
            if (i < j) swap(q[i], q[j]);
        }
        qsort(q, l, j);
        qsort(q, j + 1, r);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    卷积
    def corr(X, K):
        h, w = k.shape
        H, W = X.shape
        Y = torch.zeros((H - h + 1, W - w + 1))
        for i in range(Y.shape[0]):
            for j in range(Y.shape[1]):
                Y[i, j] = (X[i:i+h, j:j+w] * K).sum()
        return Y
    
    class Covn2d(nn.module):
        def __init__(self, kernel_size):
            self.weight = nn.Parameter(torch.rand(kernel_size))
            self.bias = nn.Parameter(torch.zeros(1))
        def forword(self, x):
            return corr(x, self.weight) + self.bias
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    Linux 进程通信深剖
    vue2+echarts:echarts在dialog弹框中不显示的解决方案
    中国油性油墨树脂行业供需态势与竞争趋势预测报告2022-2028年
    五子棋AI算法和开局定式(直指13式)破解
    MySQL 索引&事务
    只会 Python 不行,不会 Python 万万不行
    资源变现小程序开通流量主教程
    基础不牢地动山摇:JS逆向攻防对抗核心的博弈点在于对JS最基础部分的深刻理解和灵活应用——干货语法大全
    网络—TCP重传机制(超时,快速,SACK)
    C++头文件定义变量
  • 原文地址:https://blog.csdn.net/qq_45623497/article/details/128122190