温州网站排名优化公司,合肥市建设工程造价管理站网站,学做网站 空间 域名,专业网站建设价格分析AI算法岗面试八股面经【超全整理】
概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…AI算法岗面试八股面经【超全整理】
概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【AI算法岗面试八股面经【超全整理】——NLP】CV 目录 1、激活函数2、Softmax函数及求导3、优化器4、残差连接5、梯度消失和梯度爆炸6、归一化7、评价指标8、浅层、深层网络区别9、防止过拟合10、Batch Normalization和Layer Normalization11、全连接层作用12、深度学习模型与树模型的优缺点 1、激活函数
激活函数特征
非线性激活函数满足非线性时才不会被单层网络替代神经网络才有意义可微性优化器大多数是用梯度下降法更新梯度如果不可微的话就不能求导也不能更新参数单调性激活函数是单调的能够保证网络的损失函数是凸函数更容易收敛
1、Sigmoid函数 f ( x ) 1 1 e − x f(x)\frac{1}{1e^{-x}} f(x)1e−x1
该函数的导数为 f ′ ( x ) e − x ( 1 e − x ) 2 f ( x ) ( 1 − f ( x ) ) {f}(x)\frac{e^{-x}}{(1e^{-x})^2}f(x)(1-f(x)) f′(x)(1e−x)2e−xf(x)(1−f(x)) 导数的值在0,0.25之间 Sigmoid函数是二分类算法尤其是逻辑回归算法中的常用激活函数主要有以下几个特点
能够将自变量的值全部缩放到(0,1)之间当x无穷大的时候函数值趋近于1当x无穷小的时候趋近于0。相当于对输入进行了归一化操作连续可导0点导函数的值最大并且两边逐渐减小
缺点
X在无穷大或者负无穷小的时候导数梯度为0即出现了梯度弥散现象所谓梯度弥散就是梯度值越来越小导数的值在0,0.25之间在多层神经网络中我们需要对输出层到输入层逐层进行链式求导。这样就导致多个0到0.25之间的小数相乘造成了结果取0梯度消失Sigmoid函数存在幂运算计算复杂度大训练时间长
2、Tanh函数 f ( x ) t a n h ( x ) e x − e − x e x e − x f(x)tanh(x)\frac{e^x-e^{-x}}{e^xe^{-x}} f(x)tanh(x)exe−xex−e−x 导数为 f ′ ( x ) 1 − ( e x − e − x e x e − x ) 2 1 − t a n h ( x ) 2 {f}(x)1-(\frac{e^x-e^{-x}}{e^xe^{-x}})^21-{tanh(x)}^2 f′(x)1−(exe−xex−e−x)21−tanh(x)2 梯度导数的取值在(0, 1]之间
特点
Tanh函数输出满足0均值当输入较大或者较小时输出的值变化很小导致导函数几乎为0也就是梯度很小从而不利于W、b的更新梯度导数的取值在(0, 1]之间最大梯度为1能够保证梯度在变化过程中不消减缓解了Sigmoid函数梯度消失的问题但是取值过大或者过小仍存在梯度消失同样地函数本身存在幂运算计算量大
3、ReLU函数 f ( x ) R e L U ( x ) m a x ( x , 0 ) s i g n ( x ) { 0 x 0 x x0 f(x)ReLU(x)max(x,0)sign(x)\begin{cases} 0 \text{x 0}\\x \text{x0} \end{cases} f(x)ReLU(x)max(x,0)sign(x){0xx 0x0
导数 f ′ ( x ) { 0 x 0 1 x0 {f}(x)\begin{cases} 0 \text{x 0}\\1 \text{x0} \end{cases} f′(x){01x 0x0 特点
函数本身在输入大于0的时候输出逐渐增加这样梯度值也一直存在从而避免了梯度的饱和正区间解决梯度消失问题函数本身是线性函数比Sigmoid或者Tanh函数要计算速度快同时函数的收敛速度要大于Sigmoid或者Tanh函数函数的输出不是以0为均值收敛慢Dead ReLU问题在负输入部分输入的值为0从而梯度为0导致参数无法更新造成神经元死亡在实际处理中我们可以减少过多的负数特征进入网络
4、Leaky ReLU问题 在小于0的部分引入一个斜率使得小于0的取值不再是0通常a的值为0.01左右 f ( x ) { a ⋅ x x 0 x x0 f(x)\begin{cases} a \cdot x \text{x 0}\\x \text{x0} \end{cases} f(x){a⋅xxx 0x0
导数 f ′ ( x ) { a x 0 1 x0 {f}(x)\begin{cases} a \text{x 0}\\1 \text{x0} \end{cases} f′(x){a1x 0x0
特点
具有和ReLU完全相同的特点而且不会造成Dead ReLU问题函数本身的取值在负无穷到正无穷负区间梯度也存在从而避免了梯度消失。但是实际运用中尚未完全证明Leaky ReLU总是比ReLU更好
2、Softmax函数及求导
Softmax函数又称归一化指数函数是基于Sigmoid二分类函数在多分类任务上的推广在多分类网络中常用Softmax作为最后一层进行分类。它将一个包含任意实数的K维向量K是类别数量映射为一个概率分布每个类别的预测值都在0到1之间所有类别的概率总和为1。Softmax函数的作用是将原始得分转换为概率值使得模型的输出更符合实际的概率分布。 函数公式 S i e a i ∑ K 1 K e a k S_i\frac{e^{a_i}}{\sum_{K1}^K{e^{a_k}}} Si∑K1Keakeai 其中 a a a是输入向量上述公式表示第 i i i个类别的输出概率 Softmax可以使正样本正数的结果趋近于1使负样本负数的结果趋近于0且样本的绝对值越大两极化越明显。 函数求导分类讨论 当 i j ij ij时 ∂ s i ∂ a j e a i ∑ − e a i e a j ∑ 2 s i − s i s j \frac{\partial s_i}{\partial a_j} \frac{e^{a_i}\sum-e^{a_i}e^{a_j}}{\sum^2}s_i-s_is_j ∂aj∂si∑2eai∑−eaieajsi−sisj 当 i ≠ j i\neq j ij时 ∂ s i ∂ a j 0 − e a i e a j ∑ 2 − s i s j \frac{\partial s_i}{\partial a_j} \frac{0-e^{a_i}e^{a_j}}{\sum^2}-s_is_j ∂aj∂si∑20−eaieaj−sisj
3、优化器
在深度学习中优化器optimizer是一种用于调整神经网络模型参数以最小化损失函数的算法。优化器的目标是分局输入数据和期望的输出标签来调整模型的权重和偏置使得模型能够更好地拟合训练数据并在未见过的数据上表现良好。 1、BGDBatch Gradient Descent 在更新参数时使用所有样本进行更新假设样本综述为N θ ( t 1 ) θ ( t ) − α ⋅ 1 N ∑ i 1 N ∇ θ J ( θ i ( t ) ) \theta ^{(t1)} \theta^{(t)}-\alpha \cdot \frac{1}{N}\sum_{i1}^N\nabla_\theta J(\theta_i^{(t)}) θ(t1)θ(t)−α⋅N1i1∑N∇θJ(θi(t)) 其中 θ ( t ) \theta^{(t)} θ(t)为第t次迭代时的参数值 α \alpha α为学习率 ∇ θ J ( θ i ( t ) ) \nabla_\theta J(\theta_i^{(t)}) ∇θJ(θi(t))为损失函数 J ( θ ) J(\theta) J(θ)关于模型参数 θ \theta θ的梯度。 BGD得到的是一个全局最优解但是每迭代一步都要用到训练集的所有数据如果样本数巨大那上述公式迭代起来则非常耗时模型训练速度很慢。
2、SGD随机梯度下降 更新参数时使用随机选取的一个样本来进行更新。 θ ( t 1 ) θ ( t ) − ∇ θ J ( θ i ( t ) ) \theta ^{(t1)} \theta^{(t)}-\nabla_\theta J(\theta_i^{(t)}) θ(t1)θ(t)−∇θJ(θi(t)) SGD的优点是实现简单、效率高缺点是收敛速度慢容易陷入局部最小值。
3、MDGDMini Batch梯度下降 介于批梯度下降和随机梯度下降之间每次更新参数时使用b个样本。 θ ( t 1 ) θ ( t ) − α ⋅ 1 b ∑ i 1 b ∇ θ J ( θ i ( t ) ) \theta ^{(t1)} \theta^{(t)}-\alpha \cdot \frac{1}{b}\sum_{i1}^b\nabla_\theta J(\theta_i^{(t)}) θ(t1)θ(t)−α⋅b1i1∑b∇θJ(θi(t)) 训练过程比较稳定BGD可以找到局部最优解不一定是全局最优解若损失函数为凸函数则BGD所求解一定为全局最优解。
4、AdaGradAdaptive Gradient自适应梯度优化器/自适应学习率优化器 AdaGrad优点是可以自适应学习率。该优化算法在较为平缓处学习速率达有比较高的学习效率在陡峭处学习率小在一定程度上可以避免越过极小值。 σ t 1 t 1 ∑ i 0 t ( g i ) 2 g t , i ∇ θ J ( θ i ( t ) ) \sigma ^t\sqrt{\frac{1}{t1}\sum_{i0}^t{(g_i)}^2} \quad g_{t,i}\nabla_\theta J(\theta_i^{(t)}) σtt11i0∑t(gi)2 gt,i∇θJ(θi(t)) θ ( t 1 ) θ ( t ) − α σ t φ ∇ θ J ( θ i ( t ) ) \theta ^{(t1)}\theta^{(t)}-\frac{\alpha}{\sigma^t\varphi}\nabla_\theta J(\theta_i^{(t)}) θ(t1)θ(t)−σtφα∇θJ(θi(t)) 其中 g i g_i gi代表函数第 i i i次迭代的维度 σ t \sigma ^t σt就是前面所有梯度的均值平方根。 φ \varphi φ为常数一般取 1 0 − 7 10^{-7} 10−7这是为了避免公式分母存在等于0的情况 α \alpha α为学习率。 AdaGrad可以自适应地调整学习率但随着迭代次数学习率不断降低可能导致训练过程中停滞。
5、RMSPropRoot Mean Square Propagation AdaGrad算法虽然解决了学习率无法根据当前梯度自动调整的问题但是过于依赖之前的梯度在梯度突然变化时无法快速响应。RMSProp为了解决这一问题在AdaGrad的基础上增加了衰减速率参数。也就是说在当前梯度与之前梯度之间添加了权重如果当前梯度的权重较大那么响应速度也就更快。 σ t η ( 1 t ∑ i 0 t − 1 ( g i ) 2 ) ( 1 − η ) ( g t ) 2 \sigma ^t\sqrt{\eta(\frac{1}{t}\sum_{i0}^{t-1}{(g_i)}^2)(1-\eta){(g_t)}^2} σtη(t1i0∑t−1(gi)2)(1−η)(gt)2 θ ( t 1 ) θ ( t ) − α σ t φ ∇ θ J ( θ i ( t ) ) \theta ^{(t1)}\theta^{(t)}-\frac{\alpha}{\sigma^t\varphi}\nabla_\theta J(\theta_i^{(t)}) θ(t1)θ(t)−σtφα∇θJ(θi(t))
6、AdamAdaptive Momen Estimation自适应动量估计 Adam优化算法是在RMSProp的基础上增加了动量。有时候通过RMSProp优化算法得到的值不是最优解有可能是局部最优解引入动量的概念后求最小值就像是一个球从高处落下落到局部最低点时会继续向前探索有可能得到更小的值。 m t β ⋅ m t − 1 ( 1 − β ) g t − 1 m_t \beta\cdot m_{t-1}(1-\beta)g^{t-1} mtβ⋅mt−1(1−β)gt−1 σ t η ( 1 t ∑ i 0 t − 1 ( g i ) 2 ) ( 1 − η ) ( g t ) 2 \sigma ^t\sqrt{\eta(\frac{1}{t}\sum_{i0}^{t-1}{(g_i)}^2)(1-\eta){(g_t)}^2} σtη(t1i0∑t−1(gi)2)(1−η)(gt)2 θ ( t 1 ) θ ( t ) − α σ t φ m t \theta ^{(t1)}\theta^{(t)}-\frac{\alpha}{\sigma^t\varphi}m_t θ(t1)θ(t)−σtφαmt 其中 m t m_t mt表示第 t t t次迭代时的动量同时在上一次动量和本次梯度之间加上一个权重系数 β \beta β当 β \beta β越大受到上一次动量的影响就越大。
4、残差连接
残差连接使用跳跃连接技术在模型中将输入信号与输出信号进行直接连接。 作用
促进信息传递 使模型更容易传递信息和梯度避免梯度消失或梯度爆炸特别是在处理深层网络时简化优化问题 可以简化优化问题使模型更容易优化和训练提高模型表达能力 允许模型保留更多的低层特征信息使模型更好地捕捉输入序列中的细节和上下文信息。
5、梯度消失和梯度爆炸
1、梯度消失原因
隐藏层的层数过多采用了不合适的激活函数容易产生梯度消失也有可能产生梯度爆炸
2、梯度爆炸原因
隐藏层的层数过多权重的初始化值过大
3、解决方法
使用ReLU导数为1、Leaky ReLU等Batch Normalization BN就是对每一层的输出规范为均值和方差一致的方法消除了权重带来的放大缩小的影响进而解决梯度消失和爆炸的问题或者可以理解为BN将输出从饱和区拉到非饱和区比如Sigmoid函数 Batch Normalization作用 1允许较大的学习率 2减弱对初始化的强依赖性 3保持隐藏层中数值的均值、方差不变让数值更稳定为后面网络提供坚实的基础 4有轻微的正则化作用相当于给隐藏层加入噪声类似DropoutLSTMResNet残差网络预训练加微调权重正则化解决梯度爆炸
6、归一化
归一化指把数据转换到[0, 1]之间或者[-1, 1]之间 1、最小最大归一化离散标准化 x ′ x − m i n ( x ) m a x ( x ) − m i n ( x ) {x}\frac{x-min(x)}{max(x)-min(x)} x′max(x)−min(x)x−min(x) 2、零一均值归一化 x ′ x − μ δ {x}\frac{x-\mu}{\delta} x′δx−μ 3、Softmax x ′ e x ∑ e x {x}\frac{e^x}{\sum{e^x}} x′∑exex
7、评价指标
1、TP、TN、FP、FN
TPTrue Positives预测为正样本并且预测对了真阳性TNTrue Negatives预测为负样本并且预测对了真阴性FPFalse Positives预测为正样本但是预测错了假阳性FNFalse Negatives预测为负样本但是预测错了假阴性
2、准确率Accuracy、精确率Precision、召回率Recall、F1-Score A c c u r a c y T P T N P N Accuracy\frac{TPTN}{PN} AccuracyPNTPTN所有预测正确的正例和负例占所有样本的比例 P r e c i s i o n T P T P F P Precision\frac{TP}{TPFP} PrecisionTPFPTP预测为正例并且确实是正例的部分占所有预测为正例的比例 R e c a l l T P T P F N Recall\frac{TP}{TPFN} RecallTPFNTP预测为正例并且确实正例的部分占所有确实是正例的比例 F 1 − S c o r e 2 1 P r e s i c i o n 1 R e c a l l 2 P r e c i s i o n ⋅ R e c a l l P r e c i s i o n R e c a l l 2 T P F P 2 T P F N F1-Score\frac{2}{\frac{1}{Presicion}\frac{1}{Recall}}\frac{2Precision\cdot Recall}{PrecisionRecall}\frac{2TP}{FP2TPFN} F1−ScorePresicion1Recall12PrecisionRecall2Precision⋅RecallFP2TPFN2TP 3、UF1、UARUnweighted Average Recall 由于标签分布不均采用传统的评价指标如Accuracy、Precision、Recall、F1将会导致对样本量多的那类过于乐观。使用未加权F1-ScoreUF1和未加权平均召回率UAR作为性能度量以避免所提出的方法对某个类别的过拟合。给定c个类别真阳性TPc、假阳性FPc和假阴性FNc可计算。 U F 1 ∑ i C U F 1 i C UF1\frac{\sum_i^C{UF1_i}}{C} UF1C∑iCUF1i UAR作为模型的评价指标表示没类数据样本召回率Recall的平均值。通过UAR反应异常检测诊断模型的整体性能。 U A R ∑ i C R e c a l l i C UAR\frac{\sum_i^C{Recall_i}}{C} UARC∑iCRecalli
8、浅层、深层网络区别
神经网络中权重参数是给数据做线性变换而激活函数给数据带来的非线性变换。增加某一层神经元数量是在增加线性变换的复杂性而增加网络层数是在增加非线性变换的复杂性。理论上浅层神经网络就能模拟任何函数但需要巨大的数据量而深层神经网络可以用更少的数据量来学习到更好的拟合。
解决欠拟合
增加网络复杂度增加特征
9、防止过拟合
Dropout。 每次训练时有一部分神经元不参与更新而且每次不参与更新的神经元是随机的。防止参数过分依赖训练数据增加参数对数据集的泛化能力。因为在实际训练的时候每个参数都有可能被随机Drop掉所有参数不会过分地依赖某一个特征。增大数据量。 过拟合是学习到了部分数据集的特有特征那么增大数据集就能有效的防止这种情况出现。Early Stop。 将数据集分为训练集、验证集、测试集每个epoch后都用验证集验证一下如果随着训练的进行训练集Loss持续下降而验证集Loss先下降后上升说明出现过拟合应该立即停止训练。Batch Normalization。 BN有两个功能一个是可以加快训练和收敛速度另外一个可以防止过拟合。 BN算法在实际使用的时候会把特征给强制性的归到均值为0方差为1的数学模型下。深度网络在训练过程中如果每层的数据分布都不一样的话将会导致网络非常难收敛和训练。而如果能把每层的数据转换到均值为0方差为1的状态下在梯度计算时会产生比较大的梯度值可以加快参数的训练更直观地说是把数据从饱和区直接拉到飞饱和区。更进一步这也可以很好地控制梯度爆炸和梯度消失现象因为这两种现象都和梯度有关。 在训练中BN的使用使得一个mini-batch中的所有样本都被关联在一起因此网络不再从某一个训练样本中生成确定的结果。L1正则化。 在原Loss上加入L1正则化后 L L 0 λ 2 n ∣ W ∣ LL_0\frac{\lambda}{2n}|W| LL02nλ∣W∣如果W为正相对于原梯度就减小如果W为负相对于原梯度就增大所以L1正则化使得参数W在更新时向0靠近使得参数具有稀疏性。而权重趋近于0也就相当于减小了网络复杂度防止过拟合。L2正则化。 在原Loss上加入L2正则化后 L L 0 λ 2 n ∣ W ∣ 2 LL_0\frac{\lambda}{2n}|W|^2 LL02nλ∣W∣2。在过拟合中由于对每个数据都拟合得很好所以函数的变化在小范围内往往很剧烈而要使函数在小范围内剧烈变化就是要W参数值很大。L2正则化抑制了这种小范围剧烈变化。不同于L1正则化L2正则化则是趋向于把所有参数w都变得比较小一般认为参数w比较小的时候模型比较简单。直观上来说L2正则化的解都比较小抗扰动能力强。
L1、L2对比
L0范数是指向量中非0元素的个数L1拉格朗日Lasso正则假设参数先验分布是Laplace分布可以使权重稀疏保证模型的稀疏性某些参数等于0产生稀疏权值矩阵用于特征选择L1可以进行特征选择趋向于产生少量的特征其他的特征都是0L2岭回归Ridge正则假设参数先验分布是Gaussian分布可以使权重平滑保证模型的稳定性也就是参数的值不会太大或太小L2会选择更多的特征这些特征都会接近于0在实际使用中如果特征是高维稀疏的则使用L1正则如果特征是低维稠密的则使用L2正则
梯度饱和 当激活函数的输入值非常大或非常小的时候激活函数对于输入的导数梯度会变得非常小接近于0Sigmoid、Tanh
10、Batch Normalization和Layer Normalization
为什么需要对输入数据做归一化处理
一方面神经网络学习过程本质就是为了学习数据特征以及数据的分布特征一旦训练数据与测试数据的分布不同那么网络的泛化性能也大大降低另外一方面一旦每批训练数据的分布各不相同Batch梯度下降那么网络就要在每次迭代都去学习适应不同的分布这样将会大大降低网络的训练速度这也正是为什么我们需要对数据都要做一个归一化预处理的原因
Batch Normalization
旨在提高神经网络的训练速度和稳定性。通过对每个小批量数据的输入进行归一化处理使得网络各层的输入分布保持相对稳定有助于解决训练过程中的内部协变量偏移问题。 对于具有形状【bchw】的输入其中
B是批量大小Batch sizeC是通道数channel countH是高度heightW是宽度width Batch Normalization会针对每个通道独立地进行对于给定的通道它将计算该通道内所有元素考虑所有的批量大小、高度、宽度的平均值和方差然后使用这些统计量来归一化该通道的值。 Layer Normalization
与 Batch Normalization 不同层归一化是对单个样本中所有特征进行归一化而不是在批量的维度上。这意味着层归一化不依赖于批量的大小使其特别适用于批量大小不一或需要归一化单个样本的场景。 层归一化会对每个样本的所有 chw 个特征一起进行归一化。具体来说对于每个样本在计算均值和方差时会考虑所有的通道、高度和宽度。 应用场景 BN一般用于CVLN一般用于NLP。对于不定长序列如果使用BN序列中的Padding会扰乱非padding的特征。
11、全连接层作用
特征融合分类。将前层卷积、池化等计算得到的特征空间映射到样本标记空间。简单地说就是将特征表示整合成一个值其优点在于减少特征位置对于分类结果的影响提高了整个网络的鲁棒性。FC可一定程度保留模型复杂度微调和迁移不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”特别是在源域与目标域差异较大的情况下FC可保持较大的模型capacity从而保证模型表示能力的迁移。
12、深度学习模型与树模型的优缺点
1、深度学习 优点
擅长处理复杂数据 对于大规模数据、高维数据和非线性关系深度学习模型通常能够提供更好的拟合能力。特征学习能力强 能够自动学习和提取数据的特征减少对特征工程的需求。泛化能力强 在大数据集上训练时深度学习模型可能会产生更好的泛化效果适用于更广泛的场景。
缺点
需要大量数据和计算资源 深度学习模型对于大规模数据集和复杂模型的训练需要大量的数据和高性能计算资源。需要调参和调优 模型架构复杂需要仔细调整超参数和优化模型结构。可解释性差
2、树模型 优点
易解释性强能够直观地展示特征重要性和决策过程。对少量数据处理得当 在数据较少或者数据质量较差的情况下树模型表现通常较好。训练和预测速度快 相对于深度学习模型树模型的训练速度快适合于处理中小规模的数据集。
缺点
容易过拟合 在某些情况下树模型容易过拟合尤其是当树的深度较大或没有采用适当的剪枝措施时。不擅长处理复杂关系 对于复杂的非线性关系树模型可能不如深度学习模型表现得好。需要人工特征工程 对于传统的决策树模型通常需要手动进行特征工程挑选和构建合适的特征