机器学习算法面试总结

一. BP的推导

在这里插入图片描述
假设网络输入为 X = [ x 1 , x 2 , … , x M ] X = [x_1, x_2, \ldots , x_M] X=[x1,x2,,xM],网络实际输出 Y ^ = [ y ^ 1 , y ^ 2 , … , y ^ C ] \hat Y = [{\hat y_1},{\hat y_2}, \ldots ,{\hat y_C}] Y^=[y^1,y^2,,y^C],期望输出 Y = [ y 1 , y 2 , … , y C ] Y = [y_1, y_2, \ldots , y_C] Y=[y1,y2,,yC],损失函数为 L ( Y , Y ^ ) = 1 2 ∑ c = 1 C ( y c − y ^ c ) 2 L(Y,\hat Y) = \frac{1}{2}\sum\limits_{c = 1}^C {({y_c} - } {{\hat y}_c}{)^2} L(Y,Y^)=21c=1C(ycy^c)2

  1. 正向传播
    输入层:输入和输出都是 X = [ x 1 , x 2 , … , x M ] X = [x_1, x_2, \ldots , x_M] X=[x1,x2,,xM]
    隐藏层:输入 U H = [ u 1 H , u 2 H , … , u K H ] U^{H} = [u_1^H, u_2^H, \ldots ,u_K^H] UH=[u1H,u2H,,uKH],其中 u k H = ∑ i = 1 M w i k x i u_{k}^{H} = \sum\limits_{i = 1}^M {{w_{ik}}{x_i}} ukH=i=1Mwikxi;输出 V H = [ v 1 H , v 2 H , … , v K H ] V^{H} = [v_1^H, v_2^H, \ldots ,v_K^H] VH=[v1H,v2H,,vKH],其中 v k H = s i g m o i d ( u k H ) v_{k}^{H} = sigmoid(u_{k}^{H} ) vkH=sigmoid(ukH)
    输出层:输入 U O = [ u 1 O , u 2 O , … , u C O ] U^{O} = [u_1^O, u_2^O, \ldots ,u_C^O] UO=[u1O,u2O,,uCO],其中 u c O = ∑ k = 1 K w k c v k H u_{c}^{O} = \sum\limits_{k = 1}^K {{w_{kc}}{v_k^H}} ucO=k=1KwkcvkH;输出 Y ^ = [ y ^ 1 , y ^ 2 , … , y ^ C ] \hat Y = [{\hat y_1},{\hat y_2}, \ldots ,{\hat y_C}] Y^=[y^1,y^2,,y^C],其中 y ^ c = s o f t m a x ( u c O ) \hat y_c = softmax(u_{c}^{O} ) y^c=softmax(ucO)
  2. 反向传播
    损失函数到输出层: ∂ L ∂ y ^ c = y ^ c − y c \frac{{\partial L}}{{\partial {{\hat y}_c}}} = {{\hat y}_c} - {y_c} y^cL=y^cyc
    输出层到隐藏层: ∂ L ∂ w k c = ∂ L ∂ y ^ c ⋅ ∂ y ^ c ∂ u c O ⋅ ∂ u c O w k c = ( y ^ c − y c ) ⋅ s o f t m a x ′ ( u c O ) ⋅ v k H \frac{{\partial L}}{{\partial {w_{kc}}}} = \frac{{\partial L}}{{\partial {{\hat y}_c}}} \cdot \frac{{\partial {{\hat y}_c}}}{{\partial u_c^O}} \cdot \frac{{\partial u_c^O}}{{{w_{kc}}}} = ({{\hat y}_c} - {y_c}) \cdot softmax'(u_c^O) \cdot v_k^H wkcL=y^cLucOy^cwkcucO=(y^cyc)softmax(ucO)vkH w k c ′ = w k c − η ⋅ ∂ L ∂ w k c w_{kc}' = {w_{kc}} - \eta \cdot \frac{{\partial L}}{{\partial {w_{kc}}}} wkc=wkcηwkcL
    输出层到输入层: ∂ L ∂ w i k = ∂ L ∂ y ^ c ⋅ ∂ y ^ c ∂ u c O ⋅ ∂ u c O ∂ v k H ⋅ ∂ v k H ∂ u k H ⋅ ∂ u k H ∂ w i k = ( ∑ c = 1 C ( y ^ c − y c ) ⋅ s o f t m a x ′ ( u c O ) ⋅ w k c ) ⋅ s i g m o i d ′ ( u k H ) ⋅ x i \frac{{\partial L}}{{\partial {w_{ik}}}} = \frac{{\partial L}}{{\partial {{\hat y}_c}}} \cdot \frac{{\partial {{\hat y}_c}}}{{\partial u_c^O}} \cdot \frac{{\partial u_c^O}}{{\partial v_k^H}} \cdot \frac{{\partial v_k^H}}{{\partial u_k^H}} \cdot \frac{{\partial u_k^H}}{{\partial {w_{ik}}}} = (\sum\limits_{c = 1}^C {({{\hat y}_c} - {y_c}) \cdot softmax'(u_c^O)} \cdot {w_{kc}}) \cdot sigmoid'(u_k^H) \cdot {x_i} wikL=y^cLucOy^cvkHucOukHvkHwikukH=(c=1C(y^cyc)softmax(ucO)wkc)sigmoid(ukH)xi w i k ′ = w i k − η ⋅ ∂ L ∂ w i k w_{ik}' = {w_{ik}} - \eta \cdot \frac{{\partial L}}{{\partial {w_{ik}}}} wik=wikηwikL

二. 特征值在图像处理中的意义是什么?推一遍怎么求的

  1. 特征值与特征向量的几何或物理意义:一般来说,线性变换相当于进行了矩阵乘法。原向量主要发生旋转,伸缩的变化。如果矩阵对某些向量只发生伸缩变换,不产生旋转效果,那么这些向量就成为这个矩阵的特征向量,伸缩的比例就是特征值。
  2. 在图像处理中的意义:特征值表示图像空间各个角度上的能量,特征向量表示该角度上的特征。
  3. 推导:求解 d e t ( λ I − A ) = 0 det(\lambda I - A) = 0 det(λIA)=0

三. 优化方法有哪些,公式分别是哈,参数代表什么含义,怎么设置的

  1. SGD:随机梯度下降。对于训练数据集,我们首先将其分成n个batch,每个batch中包含m个样本。每次更新都利用一个batch的数据,即: x t + 1 = x t + Δ x t , Δ x t = − η g t x_{t+1}=x_{t} + \Delta x_t, \Delta x_t = - \eta g_t xt+1=xt+ΔxtΔxt=ηgt其中 η \eta η为学习率, g t g_t gt为x在t是和的梯度。
    缺点:更新方向完全依赖于当前batch,不太稳定,容易陷入局部极小值点
  2. Momentum:物理学中的动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的方向。这样就可以在一定程度上增加稳定性并具有一定跳出局部极小点的能力: Δ x t = ρ Δ x t − 1 − η g t \Delta x_t = \rho \Delta x_{t-1}- \eta g_t Δxt=ρΔxt1ηgt其中 ρ \rho ρ代表momentum,表示以多大程度保留原来的更新方向,值在0到1之间; η \eta η是学习率,表示当前batch的梯度影响最终更新方向的程度,与在SGD的含义相同。
  3. Nesterov
    Nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。对于Momentum,上一时刻的动量 m t − 1 m_{t-1} mt1并没有改变当前梯度 g t g_t gt,所以Nesterov的改进是让 m t − 1 m_{t-1} mt1影响到 g t g_t gt。即:
    g t = ∇ x t − 1 f ( x t − 1 − η ⋅ μ ⋅ m t − 1 ) g_t = \nabla_{x_{t-1}}f(x_{t-1}-\eta \cdot \mu \cdot m_{t-1}) gt=xt1f(xt1ημmt1) m t = μ m t − 1 + g t m_t = \mu m_{t-1}+g_{t} mt=μmt1+gt Δ x t = − η m t \Delta x_t = - \eta m_t Δxt=ηmt
  4. Adagrad
    Adagrad对所有模型参数的学习率进行了自适应调整,缩放程度反比于每个参数所有梯度历史平方值的总和的平方根
    累计平方梯度: r t = r t − 1 + g t 2 累计平方梯度:r_{t}=r_{t-1} + g_t^2 累计平方梯度:rt=rt1+gt2 计算更新: Δ x t = − η δ + r t g t 计算更新:\Delta x_t=- \frac{\eta }{{\delta + \sqrt {{r_t}} }} g_t 计算更新:Δxt=δ+rt ηgt其中 δ \delta δ是一个小的常量,为了避免分母为0,其数值大约设为 1 0 − 7 10^{-7} 107
    特点:前期 g t g_t gt较小,学习率缩放程度较大,能够放大梯度;后期 g t g_t gt较大,学习率缩放程度较小,能够约束梯度。
    缺点:a)仍依赖于人工设置一个全局学习率;b)学习率设置过大的话,会使得约束过于敏感,对梯度调节太大;c)中后期,分母上梯度平方的累加将会越来越大,使得梯度趋近于0,导致训练提前结束
  5. AdaDelta
    AdaDelta是对Adagrad的扩展,针对Adagrad在中后期训练提前结束的问题,AdaDelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。即: 累计平方梯度: r t = ρ r t − 1 + ( 1 − ρ ) g t 2 累计平方梯度:r_{t} = \rho r_{t-1} + (1 - \rho)g_t^2 累计平方梯度:rt=ρrt1+(1ρ)gt2 计算更新: Δ x t = − η δ + r t g t 计算更新:\Delta x_t=- \frac{\eta }{{\delta + \sqrt {{r_t}} }} g_t 计算更新:Δxt=δ+rt ηgt在此处AdaDelta其实还是依赖于全局学习率的,但是作者做了一定处理,用该变量梯度历史平方值期望的平方根代替学习率 η \eta η。即: 累计梯度: E [ g 2 ] t = ρ E [ g 2 ] t − 1 + ( 1 − ρ ) g t 2 累计梯度:E[g^2]_t = \rho E[g^2]_{t-1} + (1 - \rho)g_t^2 累计梯度:E[g2]t=ρE[g2]t1+(1ρ)gt2 计算更新: Δ x t = − R M S [ Δ x ] t − 1 R M S [ g ] t g t 计算更新:\Delta x_t=- \frac{RMS[\Delta x]_{t-1} }{{RMS[g]_{t}}} g_t 计算更新:Δxt=RMS[g]tRMS[Δx]t1gt 累计更新: E [ Δ x 2 ] t = ρ E [ Δ x 2 ] t − 1 + ( 1 − ρ ) Δ x t 2 累计更新:E[\Delta x^2]_t = \rho E[\Delta x^2]_{t-1} + (1 - \rho)\Delta x_t^2 累计更新:E[Δx2]t=ρE[Δx2]t1+(1ρ)Δxt2 参数更新: x t + 1 = x t + Δ x t 参数更新:x_{t+1}=x_{t} + \Delta x_t 参数更新:xt+1=xt+Δxt此时可以看出AdaDelta已经不需要全局学习率了。
  6. RMSprop
    RMSprop可以算作AdaDelta的一个特例,使用RMS作为学习率的约束。适合处理非平稳目标,对RNN效果很好。
  7. Adam
    Adam本质上是带有动量项的RMSprop,他利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式如下: m t = μ m t − 1 + ( 1 − μ ) g t m_{t} = \mu m_{t-1} + (1 - \mu)g_t mt=μmt1+(1μ)gt n t = ν n t − 1 + ( 1 − ν ) g t 2 n_{t} = \nu n_{t-1} + (1 - \nu)g_t^2 nt=νnt1+(1ν)gt2 m ^ t = m t 1 − μ t \hat m_{t} = \frac{m_t}{1 - \mu^t} m^t=1μtmt n ^ t = n t 1 − ν t \hat n_{t} = \frac{n_t}{1 - \nu^t} n^t=1νtnt Δ x t = − m ^ t δ + n ^ t η \Delta x_t=- \frac{\hat m_{t}}{{\delta + \sqrt {{\hat n_{t} }} }}\eta Δxt=δ+n^t m^tη其中 μ , ν \mu, \nu μ,ν为衰减率, μ \mu μ通常为0.9, ν \nu ν通常为0.999, m t , n t m_t,n_t mt,nt分别是对梯度的一阶矩估计和二阶矩估计,可以看做是对期望 E [ g 2 ] t , E [ g 2 ] t E[g^2]_t,E[g^2]_t E[g2]t,E[g2]t的估计; m ^ t , n ^ t \hat m_t, \hat n_t m^t,n^t是对 m t , n t m_t,n_t mt,nt的校正,这样可以近似为对期望的无偏估计。而 m ^ t δ + n ^ t \frac{\hat m_{t}}{{\delta + \sqrt {{\hat n_{t} }} }} δ+n^t m^t对学习率形成了一个动态约束,而且有明确范围。

四. 激活函数有哪些,公式写一下,解释一下,sigmoid函数求导

  1. sigmoid
    公式: f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1
    求导公式: f ′ ( x ) = − e − x ( 1 + e − x ) 2 = 1 1 + e − x ( 1 − 1 1 + e − x ) = f ( x ) ( 1 − f ( x ) ) f'(x)= -\frac{e^{-x}}{(1+e^{-x})^2}=\frac{1}{1+e^{-x}}(1 - \frac{1}{1+e^{-x}})=f(x)(1-f(x)) f(x)=(1+ex)2ex=1+ex1(11+ex1)=f(x)(1f(x))
    特点:将任意输入的 x x x映射到0-1之间。
    缺点:在深层神将网络中梯度反向传播时容易导致梯度消失或者梯度爆炸问题。
  2. tanh
    公式: f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+exexex
    特点:将任意输入的 x x x映射到-1到1之间,一般在RNN中使用。
    缺点:梯度消失问题仍然存在。
  3. relu
    公式: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
    特点:将小于0的值置为0,大于0的值置为本身。
    优点:解决了梯度消失问题;求导简单,计算速度快;收敛速度快。
    缺点:由于对负值直接置为0,使用relu容易导致一些神经元死亡。
  4. leaky relu与prelu
    公式: f ( x ) = m a x ( α x , x ) f(x)=max(\alpha x, x) f(x)=max(αx,x)
    优点:当x为负值时,不在置为0,解决了relu导致神经元死亡的问题。
    leaky relu与prelu的区别:leaky relu的 α \alpha α值是人工赋值的,而prelu是根据数据来定的,换句话说,是通过学习学出来的。
  5. ELU
    公式: y = { x x > 0 α ( e x − 1 ) o t h e r w i s e y=\begin{cases} x & x>0 \\ \alpha(e^x-1) & otherwise \end{cases} y={xα(ex1)x>0otherwise
    优点:也是为了解决dead relu问题
  6. maxout
    公式:
    在这里插入图片描述
    特点:权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,这两个就是我们需要学习的参数。如果我们设定参数k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络,如左边图所示。我们可以这么理解,本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不这么干了,我们在这一层同时训练k组的w、b参数,然后选择激活值Z最大的作为下一层神经元的激活值,这个max(z)函数即充当了激活函数,如右边图所示。

在这里插入图片描述

五. GBDT的原理,和随机森林等算法做比较

  1. GBDT的原理:它是一种boosting算法,即每一次新训练的基分类器都是为了改进上一次的结果。其核心在于:传统的boosting改进结果的策略是加大预测错误的样本权重,而GBDT的每一次迭代是为了是之前的模型的残差往梯度方向减小
  2. 随机森林和GBDT的区别:
    (1)随机森林采用的bagging思想,而GBDT采用的是boosting思想。这两种方法都是Bootstrap思想的应用,即又放回的抽样方法思想。二者区别在于:bagging采用有放回的均匀取样,而boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重)。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
    (2)组成随机森林的数可以是分类树,也可以是回归树;而GBDT只能是回归树组成;
    (3)组成随机森林的树可以并行生成;而GBDT只能是串行生成;
    (4)对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来;
    (5)随机森林对异常值不敏感,GBDT对异常值敏感;
    (6)随机森林每个弱分类器只看部分样本数据,而GBDT每个弱分类器看全部样本;
    (7)随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能。

六. GBDT和XGBoost的区别

(1)将树模型的复杂度加入到正则项中,来避免过拟合,因此泛化性能会由于GBDT。
(2)损失函数是用泰勒展开式展开的,同时用到了一阶导和二阶导,可以加快优化速度。
(3)和GBDT只支持CART作为基分类器之外,还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化。
(4)引进了特征子采样,像RandomForest那样,这种方法既能降低过拟合,还能减少计算。
(5)在寻找最佳分割点时,考虑到传统的贪心算法效率较低,实现了一种近似贪心算法,用来加速和减小内存消耗,除此之外还考虑了稀疏数据集和缺失值的处理,对于特征的值有缺失的样本,XGBoost依然能自动找到其要分裂的方向。
(6)XGBoost支持并行处理,XGBoost的并行不是在模型上的并行,而是在特征上的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。这个block也使得并行化成为了可能,其次在进行节点分裂时,计算每个特征的增益,最终选择增益最大的那个特征去做分割,那么各个特征的增益计算就可以开多线程进行。

五. SVM的损失函数推导

  1. 核心思想
    找到一个最优的决策平面,使得样本中距离决策平面最近的点,让它们到决策平面的距离越远越好。
  2. 函数间隔与几何间隔
    (1)函数间隔:定义超平面(w,b)关于某个样本点( x i , y i x_i, y_i xi,yi)的函数间隔为: γ ^ i = y i ( w ⋅ x i + b ) \hat \gamma_i=y_i(w \cdot x_i + b) γ^i=yi(wxi+b)。定义超平面(w,b)关于训练数据集T的函数间隔为T中所有样本点的函数间隔最小值,即: γ ^ = m i n γ ^ i i = 1 , 2 , ⋯   , N \hat \gamma=\mathop {min \hat \gamma_i}\limits_{i = 1,2, \cdots ,N} γ^=i=1,2,,Nminγ^i
    (2)几何间隔:最大化函数间隔并不能可行,因为只要成比例的改变w和b,超平面没有改变,但是函数间隔却成为原来的2倍。因此需要对超平面的法向量w进行规范化,使得间隔是确定的,这时函数间隔就变成几何间隔。即: γ i = y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{w}{||w||} \cdot x_i+\frac{b}{||w||}) γi=yi(∣∣w∣∣wxi+∣∣w∣∣b), γ = m i n γ i i = 1 , 2 , ⋯   , N \gamma=\mathop {min \gamma_i}\limits_{i = 1,2, \cdots ,N} γ=i=1,2,,Nminγi
    (3)函数间隔与几何间隔的关系: γ i = γ ^ i ∣ ∣ w ∣ ∣ \gamma_i=\frac{\hat \gamma_i}{||w||} γi=∣∣w∣∣γ^i, γ = γ ^ ∣ ∣ w ∣ ∣ \gamma=\frac{\hat \gamma}{||w||} γ=∣∣w∣∣γ^
  3. 几何间隔最大化:
    求解一个几何间隔最大的分离超平面可以表示为下面的约束最优化问题: m a x w , b γ \mathop {max}\limits_{w,b} \gamma w,bmaxγ s . t .   y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) ≥ γ ,   i = 1 , 2 , ⋯   , N s.t. y_i(\frac{w}{||w||} \cdot x_i+\frac{b}{||w||}) \ge \gamma, i=1,2,\cdots,N s.t. yi(∣∣w∣∣wxi+∣∣w∣∣b)γ, i=1,2,,N由函数间隔和几何间隔的关系可将这个问题改写成: m a x w , b γ ^ ∣ ∣ w ∣ ∣ \mathop {max}\limits_{w,b} \frac{\hat \gamma}{||w||} w,bmax∣∣w∣∣γ^ s . t .   y i ( w ⋅ x i + b ) ≥ γ ^ ,   i = 1 , 2 , ⋯   , N s.t. y_i(w \cdot x_i + b) \ge \hat \gamma, i=1,2,\cdots,N s.t. yi(wxi+b)γ^, i=1,2,,N
    函数间隔 γ ^ \hat \gamma γ^的取值并不影响最优化问题的解。这样就可以取 γ ^ = 1 \hat \gamma=1 γ^=1。另外最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1和最小化 1 2 ∣ ∣ w 2 ∣ ∣ \frac{1}{2}||w^2|| 21∣∣w2∣∣是等价的,于是就得到最终的线性可分支持向量机的最优化问题: m i n w , b 1 2 ∣ ∣ w 2 ∣ ∣ \mathop {min}\limits_{w,b} \frac{1}{2}||w^2|| w,bmin21∣∣w2∣∣ s . t .   y i ( w ⋅ x i + b ) ≥ 1 ,   i = 1 , 2 , ⋯   , N s.t. y_i(w \cdot x_i + b) \ge 1, i=1,2,\cdots,N s.t. yi(wxi+b)1, i=1,2,,N
    这是一个约束最优化问题,可以用拉格朗日乘子法求解。
  4. 软间隔最大化-加入松弛因子
    为了避免某些outlier对模型产生影响,因此需要对每个样本点 ( x i , y i ) (x_i,y_i) (xi,yi)引进一个松弛变量 ξ i ≥ 0 \xi_i \ge 0 ξi0。此时优化问题就变为:
    m i n w , b 1 2 ∣ ∣ w 2 ∣ ∣ + C ∑ i = 1 N ξ i \mathop {min}\limits_{w,b} \frac{1}{2}||w^2|| + C\sum\limits_{i = 1}^N {{\xi _i}} w,bmin21∣∣w2∣∣+Ci=1Nξi s . t .   y i ( w ⋅ x i + b ) ≥ 1 − ξ i ,   i = 1 , 2 , ⋯   , N s.t. y_i(w \cdot x_i + b) \ge 1-\xi_i, i=1,2,\cdots,N s.t. yi(wxi+b)1ξi, i=1,2,,N ξ i ≥ 0 ,   i = 1 , 2 , ⋯   , N \xi_i \ge 0, i=1,2,\cdots,N ξi0, i=1,2,,N
  5. 推导合页损失函数
    (1)损失函数形式: ∑ i = 1 N [ 1 − y i ( w ⋅ x i + b ) ] + + λ ∣ ∣ w ∣ ∣ 2 \sum\limits_{i = 1}^N {{[1-y_i(w \cdot x_i+b)]_+}}+\lambda ||w||^2 i=1N[1yi(wxi+b)]++λ∣∣w2,第1项是经验损失或者经验风险。下表"+"表示以下取正值的函数: [ z ] + = { z z > 0 0 z ≤ 0 [z]_+=\begin{cases} z & z>0 \\ 0 & z \le 0 \end{cases} [z]+={z0z>0z0,这就是 说,当样本点( x i , y i x_i,y_i xi,yi)被正确分类且函数间隔 y i ( w ⋅ x i + b ) y_i(w \cdot x_i+b) yi(wxi+b)大于1时,损失为0,否则损失是 1 − y i ( w ⋅ x i + b ) 1-y_i(w \cdot x_i+b) 1yi(wxi+b)
    (2)合页损失函数与软间隔最优化问题的等价性
    证明:令 [ 1 − y i ( w ⋅ x i + b ) ] + = ξ i [1-y_i(w \cdot x_i+b)]_+=\xi_i [1yi(wxi+b)]+=ξi,则 ξ i ≥ 0 \xi_i \ge 0 ξi0,满足软间隔最优化问题的第二个约束条件。当 1 − y i ( w ⋅ x i + b ) > 0 1-y_i(w \cdot x_i+b) > 0 1yi(wxi+b)>0时,有 y i ( w ⋅ x i + b ) = 1 − ξ i y_i(w \cdot x_i+b)=1-\xi_i yi(wxi+b)=1ξi 1 − y i ( w ⋅ x i + b ) ≤ 0 1-y_i(w \cdot x_i+b) \le 0 1yi(wxi+b)0时, ξ i = 0 \xi_i=0 ξi=0,有 y i ( w ⋅ x i + b ) ≥ 1 − ξ i y_i(w \cdot x_i+b) \ge 1-\xi_i yi(wxi+b)1ξi。所以合页损失函数可写成 m i n w , b ∑ i = 1 N ξ i + λ ∣ ∣ w 2 ∣ ∣ \mathop {min}\limits_{w,b} \sum\limits_{i = 1}^N {{\xi _i}} + \lambda||w^2|| w,bmini=1Nξi+λ∣∣w2∣∣若取 λ = 1 2 C \lambda=\frac{1}{2C} λ=2C1,则 m i n w , b 1 C ( 1 2 ∣ ∣ w 2 ∣ ∣ + C ∑ i = 1 N ξ i ) \mathop {min}\limits_{w,b} \frac{1}{C}(\frac{1}{2}||w^2|| + C\sum\limits_{i = 1}^N {{\xi _i}}) w,bminC1(21∣∣w2∣∣+Ci=1Nξi)证毕。

六. 朴素贝叶斯公式

朴素贝叶斯属于生成模型的典型算法。所谓的生成模型,就是先根据训练数据集的先验概率分布 P ( Y = c k ) , k = 1 , 2 , ⋯   , K P(Y=c_k),k=1,2,\cdots,K P(Y=ck),k=1,2,,K和条件概率分布 P ( X = x ∣ Y = c k ) P(X=x|Y=c_k) P(X=xY=ck)学习联合概率分布 P ( X = x , Y = c k ) P(X=x,Y=c_k) P(X=x,Y=ck),其中条件概率分布满足条件独立性假设,即 P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)} | Y=c_k)=\prod\limits_{j = 1}^n P(X^{(j)}=x^{(j)}|Y=c_k) P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)然后通过贝叶斯公式学习后验概率 P ( Y = c k ∣ X = x ) = P ( X = x , Y = c k ) P ( X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ k = 1 K P ( X = x ∣ Y = c k ) P ( Y = c k ) P(Y=c_k|X=x)=\frac{P(X=x,Y=c_k)}{P(X=x)}=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum\limits_{k = 1}^K {{P(X=x|Y=c_k)P(Y=c_k)}}} P(Y=ckX=x)=P(X=x)P(X=x,Y=ck)=k=1KP(X=xY=ck)P(Y=ck)P(X=xY=ck)P(Y=ck)

七. 逻辑回归的推导

  1. 原理
    逻辑回归是一种线性分类器,通过logistic函数,将特征映射成一个概率值,来判断输入数据的类别。当概率大于0.5,判断类别为1,否则类别为0。
  2. 交叉熵损失函数的推导
    (1)预测函数: h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^T x}} hθ(x)=g(θTx)=1+eθTx1
    (2)在条件X每个样本发生的概率: 当 y = 1 时, p ( y = 1 ∣ x ; θ ) = h θ ( x ) 当y=1时,p(y=1|x;\theta)=h_\theta(x) y=1时,p(y=1∣x;θ)=hθ(x) 当 y = 0 时, p ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) 当y=0时,p(y=0|x;\theta)=1-h_\theta(x) y=0时,p(y=0∣x;θ)=1hθ(x)合并两个公式得 p ( y ∣ x ; θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y p(y|x;\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y} p(yx;θ)=hθ(x)y(1hθ(x))1y
    由最大似然估计得: p ( Y ∣ X ; θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m h θ ( x ( i ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) p(Y|X;\theta)=\prod\limits_{i = 1}^m p(y^{(i)}|x^{(i)};\theta)=\prod\limits_{i = 1}^m h_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}} p(YX;θ)=i=1mp(y(i)x(i);θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))1y(i)对等式两边取负对数并除以样本总数得到交叉熵损失函数为: L ( θ ) = − 1 N ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) L(\theta)=-\frac{1}{N}\sum\limits_{i=1}^m{y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))} L(θ)=N1i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))由上式可知,当 θ T x \theta^Tx θTx大于0时, h θ ( x ) h_\theta(x) hθ(x)大于0.5,类别为1;反之则类别为0。当 y ( i ) = 1 y^{(i)}=1 y(i)=1时, h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))越接近于1,损失函数越小;当 y ( i ) = 0 y^{(i)}=0 y(i)=0时, h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))越接近于0,损失函数越小。
  3. 参数 θ \theta θ的更新
    利用梯度下降法对 L ( θ ) L(\theta) L(θ)求导,求导过程略,结果为: θ j + 1 = θ j − η ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_{j+1}=\theta_j-\eta\sum\limits_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}} θj+1=θjηi=1m(hθ(x(i))y(i))xj(i)其中j代表特征,假设有n个特征,那么 j = 1 , ⋯   , n j=1,\cdots,n j=1,,n

八. 决策树

  1. 原理
    依托树中的决策规则来预测未知样本的类别和值。
  2. 过程
    (1)特征选择:从训练数据的特征中选择一个特征作为当前的分裂标准;
    (2)决策树生成:依据特征选择标准,从上至下递归生成子结点,直到数据集不可再分;
    (3)决策树剪枝:缩小树的结构和规模。
  3. 种类以及对应的选择标准
    (1)ID3:信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA) H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g ( ∣ C k ∣ ∣ D ∣ ) H(D)=-\sum\limits_{k=1}^K{\frac{|C_k|}{|D|}log(\frac{|C_k|}{|D|})} H(D)=k=1KDCklog(DCk) H ( D ∣ A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) H(D|A)=-\sum\limits_{i=1}^n{\frac{|D_i|}{|D|}H(D_i)} H(DA)=i=1nDDiH(Di)其中 H ( D ) H(D) H(D)是数据集 D D D的熵, H ( D i ) H(D_i) H(Di)是数据集 D i D_i Di的熵, H ( D ∣ A ) H(D|A) H(DA)是数据集 D D D对特征 A A A的条件熵, D i D_i Di D D D中特征 A A A取第 i i i个值的样本子集, C k C_k Ck D D D中属于第 k k k类的样本子集。 n n n是特征 A A A取值的个数, K K K是特征A的取值个数。
    (2)C4.5:信息增益比 g R ( D , A ) = g ( D , A ) H ( D ) g_R(D,A)=\frac{g(D,A)}{H(D)} gR(D,A)=H(D)g(D,A)
    (3)CART(sklearn中的决策树实现策略):基尼指数 G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D k ∣ ) 2 Gini(D)=1-\sum\limits_{k=1}^K{(\frac{|C_k|}{|D_k|})^2} Gini(D)=1k=1K(DkCk)2,特征A条件下集合D的基尼指数: G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)

九. 聚类算法

总体上分为三大类:原型聚类密度聚类层次聚类

A. 原型聚类(将聚类结构通过原型刻画)
  1. kmeans算法(通过原型向量来刻画聚类结构)
    算法流程
    (1)确定要聚类的簇的个数,即k值,然后随机初始化k个点作为每个簇的中心点;
    (2)计算每一个样本点与每个簇中心的距离,样本点距离哪个中心点最近就划分到哪一类中;
    (3)计算每一类内所有点的平均值,作为新的簇中心;
    (4)重复(2)(3)步骤,直到每一个簇中心在每次迭代后变化不大为止。
    优点: 速度快,计算简单。
    缺点: 需要预选确定k值的大小;聚类结果对簇中心的初始选择非常敏感。
    改进方法: kmeans++:先随机选一个簇中心,再选离该中心最远的为第二个簇中心,以此类推;K-Medians:用数据集的中位数来计算数据的中心点。其优点是使用中位数来计算中心点不受异常值的影响;缺点是计算中位数需要对数据进行排序,速度相对于kmeans较慢。
  2. LVQ(学习向量量化:通过原型向量来刻画聚类结构)
    算法流程
    (1)初始化一组原型向量,每个原型向量代表一个聚类簇中心;
    (2)从样本集中随机选取一个样本,计算它到所有聚类中心的距离并留下距离最近的一个;
    (3)查看该聚类中心的标签是否和样本的标签一致,若一致,则聚类中心靠近样本,否则该聚类中心远离样本;
    (4)重复(2)(3)步骤,知道每一个聚类中心在每次迭代后变化不大为止。
    与kmeans的区别
    (1) kmeans的样本没有标签,属于无监督算法;而LVQ的样本有标签,属于有监督算法;
    (2)kmeans更新聚类中心的方法是计算该中心所有样本的均值;而LVQ是通过标签的一致性不断移动聚类中心。
  3. 高斯混合聚类(采用概率模型来表达聚类原型)
    算法原理
    找到可以刻画样本的原型{ α , μ , ∑ \alpha,\mu,\sum\limits α,μ,}参数,通过EM算法迭代得到{ α , μ , ∑ \alpha,\mu,\sum\limits α,μ,}参数的最优解。
    算法流程
    (1)初始化高斯混合分布的模型参数{ ( α i , μ i , ∑ i ∣ 1 ≤ i ≤ k ) (\alpha_i,\mu_i,\sum\limits{_i}|1 \le i \le k) (αi,μi,i∣1ik)},k为高斯混合成分的个数;
    (2)根据贝叶斯原理利用最大似然法求出计算各混合成分的后验概率;
    (3)利用后验概率计算各混合成分新的{ α i , μ i , ∑ i \alpha_i,\mu_i,\sum\limits{_i} αi,μi,i}参数,并进行更新;
    (4)重复(2)(3)步骤直至满足停止条件(达到最大迭代次数或似然函数增长幅度很小);
    (5)根据最终的{ α , μ , ∑ \alpha,\mu,\sum\limits α,μ,参数}再次通过贝叶斯原理确定样本属于哪类簇。
B. 密度聚类(将聚类结构通过样本分布的紧密程度确定)
  1. DBSCAN
    算法原理
    从样本密度的角度来考察样本间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
    名词解释
    (1)核心对象:若 x j x_j xj ε \varepsilon ε-邻域内至少包含MinPts个样本,则 x j x_j xj是一个核心对象;
    (2)密度直达:若 x j x_j xj位于 x i x_i xi ε \varepsilon ε-邻域中,且 x i x_i xi是核心对象,则称 x j x_j xj x i x_i xi密度直达;
    (3)密度可达:对 x i x_i xi x j x_j xj,若存在样本序列相邻样本之间可以密度直达,则称 x j x_j xj x i x_i xi密度可达;
    (4)密度相连:对 x i x_i xi x j x_j xj,若存在 x k x_k xk使得 x i x_i xi x j x_j xj均由 x k x_k xk密度可达,则称 x i x_i xi x j x_j xj密度相连。
    在这里插入图片描述
    算法流程
    (1)初始化核心对象集合;
    (2)根据给定的邻域参数( ε , M i n P t s \varepsilon,MinPts ε,MinPts)找出所有的核心对象;
    (3)以任一核心对象出发,找出由其密度可达的样本生成聚类簇;
    (4)根据生成的聚类簇更新核心对象集合
    (5)重复(3)(4),直至所有核心对象均被访问过为止。
C. 层次聚类(将聚类结构通过树形结构刻画)
  1. AGNES
    算法原理
    从不同层次对数据集进行划分,从而形成树形的聚类结构。
    算法流程
    (1)将数据集中的每个样本看做一个初始聚类簇;
    (2)计算每两个簇的距离;
    (3)找出距离最近的两个聚类簇进行合并;
    (4)重复(2)(3),直至达到预设的聚类簇个数。
    优点
    在树状图的特定层次上进行分割,可得到相应的簇划分结果。
    缺点
    计算复杂度高,对outlier敏感。

十. L1与L2正则化的目的和区别

  1. 目的
    惩罚模型中权值较大的参数,防止过拟合,提高模型的泛化能力。
  2. 区别
    L1正则化趋向于得到稀疏特征,可以用于特征选择,从而防止过拟合;L2正则化会选择更多的特征,但这些特征都会接近于0。
  3. L1得到稀疏解的原因
    L1和L2的梯度更新公式如下:在这里插入图片描述
    由公式可知,L1权值每次更新都固定减少一个特定值,那么经过若干次迭代之后,权值就有可能减少到0;L2的权值更新和w有关,随着w的减小,每次改变的数值越来越小,这样可以收敛到较小的值但不是0。

十一. 生成模型和判别模型的区别

对于分类问题,一般都是再求条件概率 P ( Y ∣ X ) P(Y|X) P(YX)。生成模型先学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),再用贝叶斯公式学习条件概率分布P(Y|X),这类的模型包括:朴素贝叶斯,LDA(线性判别分析,监督学习的降维算法),混合高斯模型等等。而判别模型直接学习P(Y|X),根据输入的特征X,就直接预测出类别Y,这类的模型包括:逻辑回归,svm,决策树等等。

十二. 逻辑回归与SVM的联系与区别

  1. 联系
    (1)都是监督的分类算法;
    (2)在svm不考虑核函数时,都是线性分类方法;
    (3)都属于判别模型、
  2. 区别
    (1)LR是参数模型,SVM是非参数模型;
    (2)损失函数不同。LR的目标函数是logistic loss,SVM采用的hinge loss
    (3)SVM只考虑分类面上的点(支持向量),而LR考虑所有点;
    (4)在解决非线性问题时,SVM采用核函数的机制,而LR通常采用构造多项式特征;
    (5)SVM自带结构风险最小化,LR是经验风险最小化;
    (6)处理数据规模的不同。对于小规模数据集,SVM的效果一般好于LR。但是当数据规模特别大时,SVM的计算复杂度受到限制,而LR训练简单,所以会被大量采用。

十三. 结构风险最小化与经验风险最小化的区别

当样本容量很小时,经验风险最小化容易产生过拟合。结构风险最小化(structural risk minimization, SRM)是为了防止过拟合而提出的策略,具体的,他是在经验风险的基础上加上正则化项。

十四. PCA的原理和意义

PCA目的是对原数据降维,从而减少计算复杂度和节省内存空间

  1. 求给定数据集的协方差矩阵
    协方差是衡量两个随机变量之间的相关性,对于样本数据X来说,利用协方差矩阵可以计算不同维度之间的协方差。即
    在这里插入图片描述
  2. 求协方差矩阵的特征值和特征向量
    通过解 d e t ( λ A − I ) = 0 det(\lambda A-I)=0 det(λAI)=0
  3. 主成分的选择
    按照特征值由大到小进行排列,假定需要降维到p个维度,那么就选择选择前p个特征值对应的特征向量。
  4. PCA中特征值和特征向量的物理意义
    从物理意义上将,PCA的目的其实再找某个维度,使得原始在该维度上投影后的方差最大(除了数学),即数据的区分度最高,蕴含的信息量越大。所以特征值对应的特征向量就是该维度的方向,特征值代表原始数据在该特征向量上投影后的方差值
    在这里插入图片描述
    可以看到将点投影到x1这个维度上看的话,图1的数据离散性最高,图3较低,图2数据离散性是最低的。

十五. LDA(线性判别分析)和PCA的联系和区别

  1. 相同点
    (1)两者均可以对数据进行降维;
    (2)两者在降维时均使用了矩阵特征分解的思想;
    (3)两者都假设数据符合高斯分布
  2. 不同点
    (1)LDA属于有监督的降维方法,PCA是无监督的;
    (2)LDA最多降维到类别数K-1的维数,PCA没有这个限制;
    (3)LDA可以用于降维,也可以用于分类,PCA只能用来降维;
    (4)LDA选择分类性能最好的投影方向,PCA选择数据具有最大方差的投影方向;
    (5)LDA对降维后的数据解释性强,即更能反应样本间的差异,PCA的解释性较为模糊。

十六. 海量数据的问题

参考博客1博客2

十七. 机器学习中的评价指标

  1. 分类
    (1) 混淆矩阵:在这里插入图片描述
    (2)准确率: a c c u r a c y = ( T N + T P ) / ( T N + T P + F N + F P ) accuracy=(TN + TP)/(TN+TP+FN+FP) accuracy=(TN+TP)/(TN+TP+FN+FP),但是对于极度偏斜的数据,该指标有很大缺陷;比如一个癌症预测系统,预测的准确度是99.9%,如果癌症产生的概率只有0.01%,系统只要预测所有人都是健康,既可以达到99.9%的准确率;
    (3)精准率: p r e c i s i o n = T P / ( T P + F P ) precision=TP/(TP+FP) precision=TP/(TP+FP),其含义是在所有预测为1的样本中到底预测对了多少;
    (4)召回率: r e c a l l = T P / ( T P + F N ) recall=TP/(TP+FN) recall=TP/(TP+FN),在所有真实为1的样本中到底预测对了多少;
    (5)F1 score:精准率和召回率的调回平均值。 1 F 1 = 1 2 ( 1 p r e c i s i o n + 1 r e c a l l ) \frac{1}{F_1}=\frac{1}{2}(\frac{1}{precision}+\frac{1}{recall}) F11=21(precision1+recall1),即 F 1 = 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 F_1=\frac{2*precision*recall}{precision+recall} F1=precision+recall2precisionrecall
    (6)P-R曲线:即precision-recall曲线,原始的逻辑回归决策边界是 θ T x = 0 \theta^Tx=0 θTx=0,其实我们引入一个超参数threshold使得 θ T x = t h r e s h o l d \theta^Tx=threshold θTx=threshold。通过设置多个不同的threshold ,可以得到不同的precision和recall,从而绘制出P-R曲线。其中thresholds可以这样设置: t h r e s h o l d s = n p . a r a n g e ( n p . m i n ( d e c i s i o n _ s c o r e ) , n p . m a x ( d e c i s i o n _ s c o r e ) ) thresholds = np.arange(np.min(decision\_score), np.max(decision\_score)) thresholds=np.arange(np.min(decision_score),np.max(decision_score))在这里插入图片描述
    (7)ROC曲线:描述TPR(用TP除以所有真实为1的样本)和FPR(用FP除以所有真实为0的样本)之间的关系: T P R = T P / ( T P + F N ) , F P R = F P / ( F P + T N ) TPR=TP/(TP+FN), FPR=FP/(FP+TN) TPR=TP/(TP+FN),FPR=FP/(FP+TN)。ROC曲线也需要设置thresholds,设置方法和P-R曲线一样。在这里插入图片描述
    (8)AUC:ROC曲线与坐标轴的未成区域的面积。本质是一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性。编程实现:假设总共有(m+n)个样本,其中正样本m个,负样本n个,总共有m×n个样本对,计数,正样本预测为正样本的概率值大于负样本预测为正样本的概率值记为1,累加计数,然后除以(m*n)就是AUC的值
import numpy as np
def auc_calculate(labels, preds):
	pos = [i for i in range(len(labels)) if labels[i] == 1]
	neg = [i for i in range(len(labels)) if labels[i] == 0]
	auc = 0
	for i in pos:
		for j in neg:
			if preds[i] > preds[j]:
				auc += 1
			elif preds[i] == preds[j]:
				auc += 0.5

(9)应用场合:precision和recall应用于有偏数据,precision应用场景是股票预测,recall应用场景是癌症预测。ROC和AUC应用判断模型孰优孰劣。当数据集正负样本比例变化的话,ROC曲线和AUC能够保持不变。
2. 回归
(1)均方误差MSE: M S E = 1 m ∑ i = 1 m ( y ^ − y ) 2 MSE=\frac{1}{m}\sum\limits_{i=1}^m{(\hat y - y)^2} MSE=m1i=1m(y^y)2
(2)平均绝对误差MAE: M A E = 1 m ∑ i = 1 m ∣ y ^ − y ∣ MAE=\frac{1}{m}\sum\limits_{i=1}^m{|\hat y - y|} MAE=m1i=1my^y
(3)均方根误差RMSE: R M S E = M S E RMSE=\sqrt {MSE} RMSE=MSE
(4) R 2 R^2 R2 score(sklearn中的标准)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 分割
(1)precision,recall,F1 score
(2)IOU:真实值与预测值的交并比, I O U = T P / ( T P + F P + F N ) IOU=TP/(TP+FP+FN) IOU=TP/(TP+FP+FN)
(3)meanIOU:在每类上求IOU在平均。

十八. 机器学习中如何选择分类器

首先,分类器依据学习的方式可以分为非监督学习和监督学习。
可以根据以下四个要点来选取合适的分类器:

  1. 泛化能力和拟合能力之间的权衡;
  2. 问题的复杂度和训练数据的大小;
  3. 输入的特征空间的维度;
  4. 输入的特征向量的特点(特征向量如果包含离散的,像svm,线性回归,逻辑回归就不适用;这些分类器要求输入的特征必须是连续的而且可以归一化,即对数据均一性更加敏感;如果特征向量之间存在复杂的相互关系,那么决策树和神经网络适合这类问题)

十九. 梯度消失和梯度爆炸

  1. 原因
    (1)梯度消失的原因:在深层网络中采用了不合适的损失函数,比如sigmoid。
    (2)梯度爆炸的原因:深层网络中权值初始化太大。
    (3)在反向传播时,对激活函数进行求导,如果此部分大于1,那么越往前梯度越大,导致梯度爆炸;若此部分小于1,那么越往前梯度越小,导致梯度消失。
    (4)从深层网络角度来讲,不同层之间的学习速度差异很大,表现为网络中靠近输出的层学习很好,靠近输入的层学习很慢。因此梯度消失和梯度爆炸的根本原因在于反向传播训练法则
  2. 解决方案
    (1)梯度剪切;(2)使用relu,leaky_relu,elu等激活函数;
    (3)加入bn层:通过规范化操作将输入的分布从饱和区拉到了非饱和区;
    (4)对于cnn的话,可以使用残差结构;
    (5)对于rnn的话,可以使用lstm。

二十. 过拟合和欠拟合

  1. 现象
    (1)欠拟合:在训练数据集和测试集上性能都差;
    (2)过拟合:在训练数据集上性能好,在测试集上差;
  2. 解决
    (1)过拟合:a)数据增强;b)降低模型的复杂度;c)正则化;
    d)dropout;e)集成学习;f)提前停止;
    (2)欠拟合:a)添加新特征;b)增加模型复杂度;c)减少正则化系数

二十. 怎样消除漏检和误检

  1. 漏检问题:如果是小目标被漏检,那么可以放大搜索框;还有可能是因为正样本不够丰富,这时应该增加正样本。
  2. 误检问题:那就是将非目标认为成目标,我认为可以添加更多的特征或者加大它在损失函数中的权重,通过训练,尽量降低误检。

二十一. 机器学习中距离度量

欧式距离(平方距离),曼哈顿距离,余弦距离
余弦相似度(就是两个向量求余弦),取值范围为[-1,1],相同的两个向量余弦相似度为1.
余弦距离与余弦相似度的关系:余弦距离= 1 - 余弦相似度,所以余弦距离的取值范围为[0,2],相同的两个向量余弦距离为0.

二十二. LR中特征离散化的作用

  1. 离散特征的增加和减少都很容易,有利于模型的快速迭代;
  2. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  3. 离散化后的特征对异常数据有很强的鲁棒性;比如年龄大于30的ID为1,否则为0。如果没有离散化,一个异常数据“年龄300岁”会给模型造成很大困扰;
  4. 逻辑回归属于广义线性模型,表达能力有限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型 ;
  5. 特征离散化之后,起到了简化逻辑回归模型的作用,降低了过拟合的风险。

二十三. 随机森林的随机体现在哪里

随机森林有很多棵决策树组成的,每棵树分配的训练样本是随机的,树中每个结点的分裂属性集合也是随机选择确定的。

二十四. BN,LN,IN,GN的区别

  1. 聊聊bn
    (1)BN层是对每个神经元做归一化处理,甚至只需要对某一个神经元进行归一化,而不是对一整层网络的神经元进行归一化。既然BN是对单个神经元的运算,那么在CNN中卷积层上要怎么搞?假如某一层卷积层有6个特征图,每个特征图的大小是100x100,这样就相当于这一层网络有6x100x100个神经元,如果采用BN,就会有6x100x100个参数γ、β,这样岂不是太恐怖了。因此卷积层上的BN使用,其实也是使用了类似权值共享的策略,把一整张特征图当做一个神经元进行处理
    (2)卷积神经网络经过卷积后得到的是一系列的特征图,假设网络某一层输入数据可以表示为四维矩阵(N,C,H,W),N为min-batch size,C为特征图个数,H、W分别为特征图的高和宽。在cnn中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:NxHxW,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化
    (3)参考这篇博客
  2. 几种norm的区别
    接下来,我们先用一个示意图来形象的表现BN、LN、IN和GN的区别(图片来自于GN这一篇论文),在输入图片的维度为(NCHW)中,HW是被合成一个维度,这个是方便画出示意图,C和N各占一个维度
    在这里插入图片描述
    (1)BN的计算就是把每个通道的NHW单独拿出来归一化处理,即如图所示蓝色区域为一个像素集,在每一个像素集中先计算方差和均值然后对每一个像素进行归一化即可完成这个像素集的归一化,那么要将整个输入都BN完则需要每个channel像素集分别进行归一化。针对每个channel我们都有一组γ,β,所以可学习的参数为2xC。缺点是当batch size越小,BN的表现效果也越不好,因为计算过程中所得到的均值和方差不能代表全局。而LN,IN,GN可以摆脱这种依赖;
    在这里插入图片描述
    BN的代码实现,其中x为(NxHxW,C):
mu = np.mean(x, axis=0) #(C)
sigma2 = np.var(x, axis=0) #(C)
x_hat = (x - mu) / mp.sqrt(sigma2 + eps)
out = gamma * x_hat + beta

bn层的参数量:从上面可知bn层可学习的参数量是2xC,实际上除此之外,还有两个不可学习的参数moving_mean和moving_variance,其参数量也为2xC。因此,bn层总的参数量为4xC
(2)LN避开了batch维度,对channel维进行norm,即沿着[C,H,W]的维度归一化。LN的前向传播的代码实现,其中x为(N,CxHxW):

    x = x.T  # (D, N)
    mu = np.mean(x, axis=0)  # (N,)
    sigma2 = np.var(x, axis=0)  # (N,)
    x_hat = (x - mu) / np.sqrt(sigma2 + eps)  
    x_hat = x_hat.T   # (N, D)
    out = gamma * x_hat + beta
    inv_sigma = 1 / np.sqrt(sigma2 + eps)
    cache = (x_hat, gamma, mu, inv_sigma)

(3)IN是对batch和channel同时norm。
(4)GN介于LN和IN之间,其首先将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N*G,C//G , H, W],然后沿着channel维度进行归一化。
(5)事实上,GN的极端情况就是LN和IN,分别对应G等于1和G等于C。

参考这篇博客

二十五. SENet的泛化性和效果好体现在哪里?

  1. 泛化性:在较低的层上,他可以学习去激励科信息化的特征,从而加强较低层级表征的信息共享质量;
  2. 具像性:在较高的层上,SE模块变得越来越具体化,对不同的输入有高度的具体类别响应。
  3. 作用:通过显示的对卷积层特征之间的通道相关性进行建模来提升模型的表征能力,以此提出了特征重校准机制:通过使用全局信息来选择性的增强信息化的特征并同时压缩那些无用的特征。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值