【三年面试五年模拟】算法工程师的求职面试秘籍
> 从
ReLU 到 GELU,一文概览神经网络的激活函数
https://github.com/DWCTOD/interview/blob/master/detail/%E4%BD%9C%E4%B8%9A%E5%B8%AE%20%E8%A7%86%E8%A7%89%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88%20%E9%9D%A2%E7%BB%8F%EF%BC%882020%E5%B1%8A%EF%BC%89.md
https://github.com/GYee/CV_interviews_Q-A
图像处理与计算机视觉基础
基本概念
原理
图像预处理
特征提取
对象检测
图像分类
图像分割
OpenCV 库
读写图像
图像滤波
几何变换
特征检测与描述
深度学习基础
梯度下降
滑动平均
模型微调(Fine-tuning)
基础模块
池化层 Pooling Layer
归一化层 Normalization Layer
- BN,Batch Normalization
- IN,Instance Normalization
- LN,Layer Normalization
- GN,Group Normalization
BN 是怎么做,作用是什么
激活层
常见激活函数
- Sigmoid
- Tanh
- ReLU
- LeakyReLU
- SoftPlus
- ELU
- SELU,自归一化
- Swish,类 Sigmoid 作为开关
- GELU
- GLU
特性
- 梯度消失 存在偏导过小
- 梯度爆炸 偏导累乘过大
- 梯度裁剪
- 输出均值为 0 能避免每次权重只能往单一反向变化
- ReLU 计算复杂度低
- ReLU
的负半轴为输出值增加稀疏性,减少计算量,但同时会让一些神经元不能更新
- SoftPlus,ReLU 的平滑
全连接层 Linear
嵌入层 Embedding
卷积层 Convolution
转置卷积层 Transpose
Convolution
优化模块
残差结构 Residual Connection
将输入与层输出相加
空间金字塔池化(Spatial
Pyramid Pooling,SPP)
空洞空间金字塔池化(Atrous
Spatial Pyramid Pooling,ASPP)
HDC
可分离卷积 Separable
Convolution
模块结构
- 多头自注意力机制(Multi-Head Self-Attention Mechanism)
- 前馈神经网络(Feed-Forward Neural Network)
- 层归一化(Layer Normalization)
- 残差连接(Residual Connections)
Self-Attention
除以的原因
- 矩阵计算导致的元素值整体偏大,从而引发梯度消失
- 计算后的数据平方差为,除以,将分布的方差纠正回接近 1
并行化的体现
影响计算量的因素
优势
缺点
Cross-Attention
Convolutional Attention
基础模型
前馈神经网络
卷积神经网络(CNN)
循环神经网络(RNN)
长短时记忆网络(LSTM)
Inception
模型调优
模型优化
正则化
损失函数
已知 softmax 输出概率序列与实际分布概率序列,计算两者交叉熵
超参数调整
在深度学习中,超参数(Hyperparameters)是指在训练开始前设置的模型参数,不是通过训练学习得到的。超参数的选择对模型性能有很大的影响,不同的超参数设置可能导致显著不同的训练结果。
优化器选择
学习率衰减
LR 中的连续值特征是如何处理的 为什么 LR 要先对数据进行归一化处理 LR
用了 sigmoid 函数,那么 LR 是线性模型还是非线性模型,为什么
缩放法则 Scaling-Law
在 AI
领域中,描述模型性能如何随着模型规模(如参数数量、训练数据量、计算资源等)变化而变化的一组经验法则
应用
设计更大规模的模型
指导研究人员如何设计和训练更大规模的模型,以实现更高的性能
优化资源分配
如确定是否应增加模型参数数量、增加训练数据量,还是增加计算资源,以实现最优的性能提升
预测性能
根据现有模型的性能和缩放法则,可以预测更大规模模型的性能
常见模型评估指标
准确率
召回率
F1 分数
浮点数运算次数 FLOPs
帧每秒 FPS
深度学习框架
训练范式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| dataloader = DataLoader()
model = MyModel()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
for epoch in range(num_epochs): for inputs, labels in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step()
|
评估范式
1 2 3 4 5 6 7
| model.eval()
with torch.no_grad(): for inputs, labels in test_dataloader: outputs = model(inputs)
|
PyTorch
Tensor
存储
- 头信息区(Tensor):tensor
的形状(size)、步长(stride)、数据类型(type)等
- 存储区(Storage):数据
stride 属性
指定维度中一个元素到下一个元素的步长
维度变换
维度顺序 |
permute |
指定维度重排,返回共享存储区的 tensor |
|
transpose |
交换维度,返回共享存储区的 tensor |
形状变换 |
view |
返回共享存储区 tensor,要求存储连续,否则调用 contiguous |
|
contiguous |
开辟新的存储区构建连续 tensor |
|
reshape |
若连续则返回原 tensor,否则创建新 tensor |
广播 |
broadcast_to |
|
冗余维度 |
squeeze |
压缩维度 |
|
unsqueeze |
展开维度 |
扩展维度 |
expand |
扩展大小为 1 的维度 |
|
repeat |
按照指定维度重复 tensor |
展平维度 |
flatten |
|
|
ravel |
|
维度剪裁 |
narrow |
|
维度展开 |
unfold |
|
张量乘法
torch.matmul() |
多维矩阵相乘 |
torch.mm() |
2 维矩阵相乘 |
torch.bmm() |
批矩阵相乘 |
torch.dot() |
点积 |
torch.mv() |
矩阵向量相乘 |
torch.einsum() |
复杂张量运算
torch.einsum('ij,jk->ik', a, b) |
张量合并与拆分
- stack 扩展维度拼接
- cat 根据维度拼接
- split 按大小分
- chunk 按块分
nn.Module
模块基类
nn.Sequential
线性模块容器
- 计算图
- 环境搭建
- 数据加载
- 模型定义
- 训练
- 验证
- 保存
- 加载模型
PytorchLightning
逻辑思维与项目经验
逻辑思维
准备通过解决实际问题来展示你的逻辑思维能力和数据分析洞察力,可以是以往项目中的案例分析。
团队合作与挑战接受度
思考并准备实例说明你如何在团队中有效沟通、协作解决问题,以及面对技术挑战时的态度和解决策略。