job

I love Baidu

算法岗面试细节整理

Posted by Kylin on April 10, 2023

[TOC]

一面

  • 自我介绍
  • 项目介绍,主要追问了论文(background、contribution、实验设置、算法框架、EKF)
  • 算法题:下面哪些函数实现了swap功能?swap实现的是值交换而不是地址交换
void swap1(int p, int q)
{
  int temp;
  temp = p;
  p = q;
  q = temp;
}

// swap1 不行,因为只是交换了形参,实际p、q没变

void swap2(int *p, int *q)
{
  int *temp;
  *temp = *p;
  *p = *q;
  *q = *temp;
}

// swap2 可行,利用指针交换了两个值

void swap3(int *p, int *q)
{
  int *temp;
  temp = p;
  p = q;
  q = temp;
}

// swap3 不可行,交换了p、q的地址

void swap4(int *p, int *q)
{
  int temp;
  temp = *p;
  *p = *q;
  *q = temp;
}

// swap4 可行,交换了p、q的地址所指向的值

void swap5(int &p, int &q)
{
  int temp;
  temp = p;
  p = q;
  q = temp;
}

// swap5 可行,使用引用交换了p、q的值
  • 软件开发流程

需求阶段,设计阶段,开发阶段,测试阶段,上线收集

  • 设计模式

https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

二面

  • 自我介绍
  • 追问了研究生阶段的科研课题(分布式异构计算),追问了本科的paper(研究背景、contribution、系统流程、训练集采集划分、网络细节、EKF)
  • 介绍一下BN

BN是对一个batch的同一特征维度进行归一化,并学习$\beta$、$\gamma$ 将数据分布线性变换到原始分布

测试时一个个预测,没有batch概念,就要用全局训练数据的均值方差和$\beta$、$\gamma$。

  • 说一下BN的优缺点:

优点:

  1. 加速收敛速度:神经网络的训练过程中,每层的输入分布可能会发生变化,导致后续层的参数更新变得复杂。Batch normalization 可以通过标准化每个 mini-batch 的输入数据,将每个神经元的输入均值和方差约束到一个较小的范围内,使得模型在训练的过程中收敛速度更快。
  2. 降低过拟合风险:在训练过程中,batch normalization 可以起到一定的正则化作用,降低模型的过拟合风险。
  3. 减少梯度消失和梯度爆炸的问题
  4. 提高模型泛化性能

缺点:

  1. batch 太小,会造成波动大
  2. 对于文本数据,不同有效长度问题
  • BN和LN区别?

Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。

  • LN 中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
  • BN 中则针对不同神经元输入计算均值和方差,同一个 batch 中的输入拥有相同的均值和方差。

所以,LN 不依赖于 batch 的大小和输入 sequence 的长度,因此可以用于 batchsize 为 1 和 RNN 中 sequence 的 normalize 操作。

  • 过拟合怎么处理?
  1. 增加数据量:增加训练数据可以减少模型对于训练数据的过度学习,从而减轻过拟合现象。
  2. 减少模型复杂度:可以通过减少模型中的参数或通过正则化技术来减少模型的复杂度,从而避免过度拟合。
  3. 交叉验证:使用交叉验证技术可以帮助确定模型的泛化能力,从而避免过度拟合。
  4. 正则化:减少模型不相关特征。
  5. 提前停止训练:当模型在验证集上的表现不再提升时,可以停止训练以避免过度拟合。
  • 训练时梯度出现Nan怎么排查

https://blog.csdn.net/ytusdc/article/details/122321907

  • 算法题
用c++实现kmeans

三面

leader面,让我介绍了项目,问了一些非技术性的细节

问了我如果入职,有没有什么想法?(应用毫米波技术在他们的项目上)