[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的优缺点:
优点:
- 加速收敛速度:神经网络的训练过程中,每层的输入分布可能会发生变化,导致后续层的参数更新变得复杂。Batch normalization 可以通过标准化每个 mini-batch 的输入数据,将每个神经元的输入均值和方差约束到一个较小的范围内,使得模型在训练的过程中收敛速度更快。
- 降低过拟合风险:在训练过程中,batch normalization 可以起到一定的正则化作用,降低模型的过拟合风险。
- 减少梯度消失和梯度爆炸的问题
- 提高模型泛化性能
缺点:
- batch 太小,会造成波动大
- 对于文本数据,不同有效长度问题
- BN和LN区别?
Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。
- LN 中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
- BN 中则针对不同神经元输入计算均值和方差,同一个 batch 中的输入拥有相同的均值和方差。
所以,LN 不依赖于 batch 的大小和输入 sequence 的长度,因此可以用于 batchsize 为 1 和 RNN 中 sequence 的 normalize 操作。
- 过拟合怎么处理?
- 增加数据量:增加训练数据可以减少模型对于训练数据的过度学习,从而减轻过拟合现象。
- 减少模型复杂度:可以通过减少模型中的参数或通过正则化技术来减少模型的复杂度,从而避免过度拟合。
- 交叉验证:使用交叉验证技术可以帮助确定模型的泛化能力,从而避免过度拟合。
- 正则化:减少模型不相关特征。
- 提前停止训练:当模型在验证集上的表现不再提升时,可以停止训练以避免过度拟合。
- 训练时梯度出现Nan怎么排查
https://blog.csdn.net/ytusdc/article/details/122321907
- 算法题
用c++实现kmeans
三面
leader面,让我介绍了项目,问了一些非技术性的细节
问了我如果入职,有没有什么想法?(应用毫米波技术在他们的项目上)