AI常见面试35题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AI常见面试35题相关的知识,希望对你有一定的参考价值。

参考技术A 交叉熵做损失函数,训练时传播的梯度和训练误差是成正比的(单调),而当采用均方误差做损失函数时,训练时传播的梯度和训练误差不是成正比的(非单调),具体表现是,训练误差从0开始增大,梯度增大(这点与我们预期相符),但训练误差继续增大,梯度开始下降(这点就与我们的预期不符了),这样就显得,模型在训练误差大的时候,根本不愿意继续学习,模型显得“自暴自弃”不肯学习。

决在低维空间 线性 不可分的问题,通过核函数把低维映射到高维,实现线性可分。

常见 核函数 有线性核函数,多项式核函数,高斯核函数,sigmoid 核函数

Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。GBDT通过负梯度来识别问题,通过计算负梯度来改进模型。

1.样本选择:bagging训练集是在原始集有放回的选取,每次选取训练集都是独立的.boosting:每一轮的训练集的数量不变,但是训练集里的样例比重根据上一轮的分类结果进行调整
2.样本权重:bagging:均匀取样,每个样例的权重都相等。boosting:根据您错误率不断调整样例的权值,错误率越大的则权重越大
3.预测函数:bagging每个基分类器投票,权重比例都是一样的,boosting每个分类器的权重是不一样的
4.运行规律:bagging:各个预测函数可以并行生成 boosting:每个基分类器都都是根据前一个分类器的结果调整过来的

之所以被称为“朴素”, 是因为它假定所有的特征在数据集中的作用是同样重要和独立的,正如我们所知,这个假设在现实世界中是很不真实的,因此,说是很“朴素的”。

1.线性回归
2.逻辑回归
3.岭回归
4.多项式回归

顺序关系,先求出特征值再来求SVD

PCA: 无监督学习,找到最优重构子空间,使主成分能刻画样本绝大部分的方差。
应用:数据降维、Eigenfaces、PCA-SIFT

CCA(Canonical Correlation Analysis): 无监督学习,对两组变量降维,找到一个最优相关子空间进行相关性分析。
应用:问卷调查中变量的相关性分析、跨模态学习。

LDA: 有监督学习,学习一个可分性最好的投影方向。相当于是白化(whitening) + PCA,得到的是假设条件下的最优分类子空间(假设每个类都是单模态高斯分布、每个类协方差矩阵相同)。
应用:数据降维、模式分类

ICA: 无监督学习,各个分量之间相互独立,利用数据的高阶统计信息而不是二阶信息得到用于信号分离的独立子空间。
应用:语音信号分离

随机森林中树的选择是随机选择的,生成每棵树的样本也是随机采样有放回产生的

预训练初始化:一般是在大规模数据上已经训练过的模型可以提供一个较好的参数初始值,并能提升模型的泛化能力(一种解释是预训练任务起到一定的正则化作用)。
随机初始化:如果全部初始化为0,在神经网络第一遍前向传播所有隐层神经网络激活值相同,反向传播权重更新也相同,导致隐层神经元没有区分性,称为“对称权重”现象。为打破这个平衡,比较好的方式是对每个参数进行随机初始化。
固定值初始化:比如对于偏置(bias)通常用0初始化,LSTM遗忘门偏置通常为1或2,使时序上的梯度变大,对于ReLU神经元,偏置设为0.01,使得训练初期更容易激活。

1.dropout
L2正则化方法就是通过使参数变小,进而使模型变得简单的方法。dropout方法原理类似,只不过它不是减少权值,而是随机的删除某些节点,使得模型的网络结构变得简单,起到正则化的效果。
直接限制模型参数的方法:

从数据集入手的方法:

集成化方法(通过训练多个不同的模型,并让所有模型一起表决测试集的输出):
baggingdropout
其他:
early stop交叉验证(bagging为又放回采样,而交叉验证可以理解为无放回模型平均)

self-attention:attention(q,t,v) = softmax(qk.T/根号DK)*v
多头的本质是多个独立的attention计算,作为一个集成的作用,不同的权重矩阵映射到不同的空间

RNN:输入与输出长度相等,很多时候机器翻译的输入跟输出是不等的
seq2seq:encoder+decoder 所有输入的信息都保存在隐藏层的最后一个印象里,作为解码器的初始隐向量,银项链称之为上下文向量,长度固定,当输入句子很长的时候,上下文向量会丢失相关信息,效果很差
seq2seq+attention:seq2seq忽略了输入跟输出之间的对应关系,利用attention来寻求输入跟输出之间的对应关系
tranfarmer:解决了翻译中网络训练时间过长,难以并行计算的问题,利用self-attention代替RNN实现并行计算,用postion embedding记录位置信息

类似cnn的多个卷积核,不同卷积核提取不同方面的特征,不同head关注不同的表示子控件,总和利用各方面的信息,获得更丰富的特征

由两个线性层组成,两个线性层直接具有relu激活函数

点乘注意力可以用高度优化的矩阵乘法来实现
速度更快,空间效率更高

概率密度函数:由已知计算未知
似然函数:对于不同的模型参数,出现已知的概率是多少

将各个特征分布调整到标准正态分布,若某些特征方差很大,会主导目标函数从而使得模型无法正确学习其他特征

将数据划分成K份,留作一份作为测试集,其他作为训练集
重复K次得到K个测试结果,取平均

进程是火车,线程是车厢

复杂的模型占用大量内存,且具有庞大的计算开销,导致模型难以被部署在手机等计算能力较差的设备上,抑或是时延要求较高的应用中。
模型压缩的主要方法可以分为:

1.系统级优化,包括单设备优化和多设备优化。比如ZeRO-Offload,就设计了精细的策略来安排CPU内存和GPU内存之间的交换,以便内存交换和设备计算能够尽可能多地重叠。
2.探索更高效的预训练方法和模型架构,以降低方案的成本。
3.模型压缩策略,包括参数共享、模型剪枝、知识蒸馏和模型量化。

深度学习时代,为了充分训练深层模型参数并防止过拟合,通常需要更多标注数据喂养。在NLP领域,标注数据更是一个昂贵资源。PTMs从大量无标注数据中进行预训练使许多NLP任务获得显著的性能提升。总的来看,预训练模型PTMs的优势包括:

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,这也是分布式表示:向量的每一维度都没有实际意义,而整体代表一个具体概念。

分布式表示相较于传统的独热编码(one-hot)表示具备更强的表示能力,而独热编码存在维度灾难和语义鸿沟(不能进行相似度计算)等问题。传统的分布式表示方法,如矩阵分解(SVD/LSA)、LDA等均是根据全局语料进行训练,是机器学习时代的产物。

PTMs的发展经历从浅层的词嵌入到深层编码两个阶段,按照这两个主要的发展阶段,我们归纳出PTMs两大范式:「浅层词嵌入」和「预训练编码器」。
浅层词嵌入的主要缺陷为:

PTMs范式为预训练编码器,主要目的是通过一个预训练的编码器能够输出上下文相关的词向量,解决一词多义的问题。这一类预训练编码器输出的向量称之为「上下文相关的词嵌入」

随着网络层数的增加,从前面的层传递到后面的层的梯度会越来越小,进而就梯度消失了
梯度消失和梯度爆炸,简单来说,就是因为激活函数sigmoid导致的,输入值过大或过小导致sigmoid函数趋于0和1,对应的求导趋近于0,而且sigmoid的导数在(0,1/4)之间,这就导致如果初始化W为0-1之间的比较小的值,通过过多的层数之后,梯度下降的时候,慢慢就会出现梯度消失。如果W初始化为较大的值,通过多层之后,梯度下降会导致梯度越来越大,产生爆炸。

当w越大,其wx+b很可能变的很大,而根据上面 sigmoid 函数导数的图像可以看到,wx+b越大,导数的值也会变的很小。因此,若要出现梯度爆炸,其w既要大还要保证激活函数的导数不要太小。
下面说下解决办法:

在数学上是一个函数,,意思就从高纬抽象空间映射到低纬具象空间
抽象-具象
词-语义
为什么要做embedding?
1.抽象的事物都应该有一个低纬的表示
2.计算机善于处理低纬度信息
3.解决one-hot编码带来的纬度爆炸问题
嵌入的好处?
1.计算词向量的相似度,扩充标签
2.累加得到一个文本向量
3.用于聚类会比词聚类有更好的聚类效果

1.输入层:前者用N-GRAM模型,后者是CBOW
2.输入到投影层的操作:前者是拼接,后者是累加求和
3.隐藏层:前者有,后者无
4.输出层:前者线性结构,后者是树形结构

1.导致全连接层爆炸
2.样本数量少于特征数会造成模型过拟合

饱和:sigmoid,tanh
缺点:出现梯度消失问题
非饱和:relu及其变体
优点:解决梯度消失问题
加快收敛速度
计算速度快

NLP网络第一层参数使用其他任务训练的word embedding ,高层参数仍然随机初始化
为什么可行?
因为网络底层提取出的特征是基础特征,跟具体任务相关性不大,具备任务的通用性,而网络高层提取出的特征跟具体任务密切相关

设有一个多层感知机模型,假设输出层只保留一个输出单元 ,且隐藏层使用相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。
在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有一个隐藏单元在发挥作用。
因此,通常对神经网络的模型参数,特别是权重参数进行随机初始化。随机初始化模型参数的方法有很多,可以使用正态分布的随机初始化方式。

1.赛题理解

2.数据探索跟预处理

3.特征工程

4.算法尝试

5 算法选择

1.随机欠采样:
优点:平衡数据的同事减小了数据量
缺点:数据减少会影响模型的特征学习能力跟泛化能力
2.随机过采样:
优点:没有导致数据信息的丢失
缺点:增加了过拟合的可能性

类别特征常用的处理方法:
1.序号编码:成绩的高中低,转成3,2,1
2.独热编码:比如血性中的a=[1,0,0,0],b = [0,1,0,0]
3.二进制编码:跟独热类似

把一阶离散特征两两组合,就构成高阶组合特征
中文 - 电影 = 中文电影,中文电视剧
英文-电视剧 = 英文电影,英文电视剧,
一般当引入id类型的特征,通常需要降维
组合特征
利用决策树方法来组合特征

朴素贝叶斯,逻辑回归,sVM,感知机,最大熵模型,em算法,决策树,主成分分析
感知机:是二类分类的线性分类模型,输入为实例的特征向量,输出是正负1
K近邻算法:是一种基本分类跟回归算法,算法步骤是,计算当前数据跟其他数据距离最近的K个数据点,然后查看他们的类,类最多的就是数据的分类类别
朴素贝叶斯:是一种基于贝叶斯定力跟条件独立假设的分类算法
决策树:是一种基本的分类跟回归方法,呈现树形结构,基于树的特征依次对实例进行分类
逻辑回归:对数线性模型分类回归方法

主要是为了加速,因为反向传播求导一次就可以求出所有的偏导数,反之前向传播因为数据的输入入口会变慢很多倍

pytorch是一个动态的框架,而TensorFlow是一个静态的框架。何为静态的框架呢?我们知道,TensorFlow的尿性是,我们需要先构建一个TensorFlow的计算图,构建好了之后,这样一个计算图是不能够变的了,然后我们再传入不同的数据进去,进行计算。这就带来一个问题,就是固定了计算的流程,势必带来了不灵活性,如果我们要改变计算的逻辑,或者随着时间变化的计算逻辑,这样的动态计算TensorFlow是实现不了的,或者是很麻烦

K折交叉法,留一法,留P法

网格搜索,也就是一种穷举的方法,划定一个范围,不断的尝试,所有的可能性,选出表现最好的参数

1.直接删除2.平均值填充,中值填充,众数填充3.预测模型填充

isnull:返回是否空值
notnull:isnull的否定
统计量填充:连续值
特殊值填充:比如0
不处理:xgb跟LGB会自动处理

主要是特征降维
1.过滤法:按照发散性跟相关性对各个特征进行评分,通过设定阈值或者带选择阈值的个数来选择特征
(代表:相关系数,互信息,卡方检验,信息增益)
2.包装法:根据预测效果得分,每次选择若干特征,或者排除若干特征
(代表:遗传算法,模拟退火算法)
3.嵌入发:使用机器学习算法进行训练,得到每个特征的权值系数,并根据系数从大到小选择特征
(代表:决策树-熵,信息增益,正则化)

1.第一,根据电化学模型进行温度修正,兼顾不同场景
2.电化学模型的RUL结果会作为LSTM的一个新特征输入

1.bagging,boosting
2.投票法,平均法,权重法,

1.网格搜索
2.随机森林

1.查看训练集特征变量信息
2.查看数据统计信息
3.查看数据字段信息
4.画箱线图探索数据
5.查看数据分布图
6.可视化线性回归关系
7.查看特征变量的相关性(画出相关性热力图,找出特征变量和target变量相关系数大于0.5的特征变量)
8.查看特征变量跟target变量的

1.删除异常值
2.最大最小值归一化
3.查看训练集数据和测试集数据分布情况
4.特征降维
5相关性初筛
6.多重共线性筛选降维
7.pca主成分降维
8.决策树构建新特征

1.平均绝对值误差:MAE是预测值跟真实值的绝对值
2.均方误差:mse指参数估计值跟参数真实值之差的平方
3.均方根误差:均方误差的平方根
4.R2:反映了回归模型在多大程度上解释了因变量的变化,换句话就是模型对观测值的拟合程度如何

个体学习模型的准确性越高,多样性越大,模型融合的提升效果越好

如果需要稀疏性就⽤l1,因为l1的梯度是1或-1,所以每次更新都稳步向0趋近。
⼀般多⽤l2因为计算⽅便“求导置零解⽅程”,l2只有最好的⼀条预测线⽽l1可能有多个最优解。
l1鲁棒性更强对异常值不敏感

归⼀化:对不同特征维度的伸缩变换的⽬的是使各个特征维度对⽬标函数的影响权᯿是⼀致的,即使得那些扁平分
布的数据伸缩变换成类圆形。这也就改变了原始数据的⼀个分布。
好处:
1 提⾼迭代求解的收敛速度,不归⼀化梯度可能会震荡
2 提⾼迭代求解的精度

标准化:对不同特征维度的伸缩变换的⽬的是使得不同度ᰁ之间的特征具有可⽐性。同时不改变原始数据的分布。
好处
1 使得不同度ᰁ之间的特征具有可⽐性,对⽬标函数的影响体现在⼏何分布上,⽽不是数值上
2 不改变原始数据的分布

以上是关于AI常见面试35题的主要内容,如果未能解决你的问题,请参考以下文章

39条常见的Linux系统简单面试题

酸了!会这个技能的 AI 工程师年薪至少35W起!

39条常见的Linux系统简单面试题

39条常见的linux系统管理面试题

最常见的Java面试题及答案汇总

圆你的大厂梦!字节跳动Java高频面试题真题:一/二/三面+常见问题