神经网络 面试相关整理

其他面试整理在这里

基本概念

损失函数

  1. 损失函数,代价函数和目标函数
    1)损失函数:通常是针对单个训练样本而言,给定一个模型输出 y i ′ y_i' yi 和一个真实标签 y i y_i yi,损失函数输出一个实值损失 L = f ( y i , y i ′ ) L=f(y_i, y_i') L=f(yi,yi)
    2)代价函数 Cost Function 通常是针对整个训练集(或一个batch)的总损失 J = ∑ i = 1 n f ( y i , y i ′ ) J=\sum_{i=1}^{n}f(y_i, y_i') J=i=1nf(yi,yi)
    3)目标函数是一个更通用的术语,表示任意希望被优化的函数,用于机器学习领域和非机器学习领域
  2. 常见的损失函数
名称 损失函数 导数
欧氏距离 L = 1 2 n ∑ i = 1 n ∥ y i ′ − y i ∥ 2 L=\frac{1}{2n}\sum_{i=1}^{n}\|y_i'-y_i\|^2 L=2n1i=1nyiyi2 ∇ y ′ L = 1 n ∑ i = 1 n ( y i ′ − y i ) \nabla_{y'}L=\frac{1}{n}\sum_{i=1}^{n}(y_i'-y_i) yL=n1i=1n(yiyi)
均方误差 L = 1 n ∑ i = 1 n ( y i − y i ′ ) 2 L=\frac{1}{n}\sum_{i=1}^{n}(y_i-y_i')^2 L=n1i=1n(yiyi)2 ∇ y ′ L = 2 n ∑ i = 1 n ( y i ′ − y i ) \nabla_{y'}L=\frac{2}{n}\sum_{i=1}^{n}(y_i'-y_i) yL=n2i=1n(yiyi)
softmax y i ′ = exp ⁡ ( x i ) ∑ j = 1 k exp ⁡ ( x j ) L = − 1 n ∑ i = 1 n y i T ln ⁡ y i ′ y_i'=\frac{\exp (x_i)}{\sum_{j=1}^{k}\exp(x_j)} \\L=-\frac{1}{n}\sum_{i=1}^{n}y_i^T\ln y_i' yi=j=1kexp(xj)exp(xi)L=n1i=1nyiTlnyi ∇ x L = 1 n ( y i ′ − y i ) \nabla_{x}L=\frac{1}{n}(y_i'-y_i) xL=n1(yiyi)
sigmoid p i ′ = 1 1 + e − x i L = − 1 n ∑ i = 1 n ( p i ln ⁡ p i ′ + ( 1 − p i ) ln ⁡ ( 1 − p i ′ ) ) p_i' = \frac{1}{1+e^{-x_i}} \\ L=-\frac{1}{n}\sum_{i=1}^{n}(p_i\ln p_i' + (1-p_i)\ln(1-p_i')) pi=1+exi1L=n1i=1n(pilnpi+(1pi)ln(1pi)) ∂ L ∂ x i = 1 n ( p i ′ − p i ) \frac{\partial L}{\partial x_i}=\frac{1}{n}(p_i'-p_i) xiL=n1(pipi)
hinge loss L = 1 n ∑ i = 1 n ∑ j = 1 k ( ∥ max ⁡ ( 0 , 1 − δ { l i = j } t i j ) ∥ p L=\frac{1}{n}\sum_{i=1}^{n}\sum_{j=1}^{k}(\|\max (0, 1-\delta \{l_i=j\}t_{ij})\|^p L=n1i=1nj=1k(max(0,1δ{li=j}tij)p ∂ L ∂ t i j = { − 1 n δ { l i = j } 0 \frac{\partial L}{\partial t_{ij}}=\left\{\begin{matrix}-\frac{1}{n}\delta\{l_i=j\}\\0 \end{matrix}\right. tijL={n1δ{li=j}0
hinge loss(另一种表达) L ( y , y ′ ) = 1 n ∑ i = 1 n max ⁡ ( 0 , 1 − y i y i ′ ) L(y, y') = \frac{1}{n}\sum_{i=1}^n\max(0, 1-y_iy_i') L(y,y)=n1i=1nmax(0,1yiyi)
  1. 为什么分类问题中不采用均方差损失
    因为分类任务不满足误差服从高斯分布的假设
  2. hinge loss的特点
    1)hinge loss一般用于二分类,且分类标签为 -1/1
    2)一般预测值,在-1到1之间, 并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差
    3)健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。
  3. sigmoid和softmax的关系
    当处理二分类问题时候,softmax退化为sigmoid
  4. MAE和MSE的区别
    1)MAE(平均绝对值误差),MSE(均方误差)
    2)均方误差损失可以更快地收敛:MSE的梯度的 scale 会随误差大小变化,而MAE的梯度的 scale 则一直保持为 1,即便在绝对误差很小的时候 MAE 的梯度 scale 也同样为 1
    3)绝对值损失对于异常值更加健壮:当数据中出现一个误差非常大的异常值时,MSE 会产生一个非常大的损失,对模型的训练会产生较大的影响

激活函数

  1. 常见的激活函数
名称 激活函数 导数 特点
sigmoid f ( x ) = 1 1 + exp ⁡ ( − x ) f(x)=\frac{1}{1+\exp(-x)} f(x)=1+exp(x)1 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x)) 将输入变换为0和1之间的输出,特别地,非常大的负数输出为0;非常大的正数输出为1
tanh f ( x ) = exp ⁡ ( 2 x ) − 1 exp ⁡ ( 2 x ) + 1 f(x)=\frac{\exp(2x)-1}{\exp(2x)+1} f(x)=exp(2x)+1exp(2x)1 f ′ ( x ) = 1 − f 2 ( x ) f'(x)=1-f^2(x) f(x)=1f2(x) 负输入将被强映射为负,而零输入被映射为接近零
ReLU f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x) f ′ ( x ) = { 1 , x > 0 0 , x ≤ 0 f'(x)=\left\{\begin{matrix}1,x>0\\0,x\leq0 \end{matrix}\right. f(x)={1x>00x0
BNLL f ( x ) = ln ⁡ ( 1 + exp ⁡ ( x ) ) f(x)=\ln(1+\exp(x)) f(x)=ln(1+exp(x)) f ′ ( x ) = exp ⁡ ( x ) 1 + exp ⁡ ( x ) f'(x)=\frac{\exp(x)}{1+\exp(x)} f(x)=1+exp(x)exp(x)
  1. relu的优缺点
    优点
    1) 解决了梯度消失问题
    2)计算速度非常快
    3)收敛速度远快于sigmoid和tanh
    缺点
    1)ReLU的输出不是zero-centered
    2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
  2. tanh的缺点
    1)梯度消失
    2)包含幂运算
  3. sigmoid的缺点
    1)容易导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。当权值初始化为 [ 0 , 1 ] [0, 1] [0,1] 之间的随机值出现梯度消失现象;当网络权值初始化为 ( 1 , ∞ ) (1, ∞) (1,) 区间内的值,则会出现梯度爆炸情况。
    2)Sigmoid 的 output 不是0均值。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 这样在反向传播的过程中权重的更新会有捆绑效果(同时向正/负方向更新),使得收敛缓慢。
    3)解析式中含有幂运算,计算机求解时相对来讲比较耗时。
  4. softmax的计算公式
  5. 为什么softmax使用指数函数
    为了让“概率值”为正
  6. 激活函数有什么作用
    让神经网络能处理非线性情况
  7. 激活函数的误差传播公式
    δ ( l ) = δ ( l + 1 ) ⊙ f ′ ( u ) \delta^{(l)}=\delta^{(l+1)}\odot f'(u) δ(l)=δ(l+1)f(u)

批归一化

  1. 批归一化(batch normalization)公式
    x ′ = x − E ( x ) V a r ( x ) x'=\frac{x-E(x)}{\sqrt{Var(x)}} x=Var(x) xE(x)
  2. 批归一化的正向传播流程
    假设输入的批量数据为 B = { x 1 , x 2 , … , x m } B=\{x_1, x_2, \dots, x_m\} B={x1,x2,,xm},训练参数有缩放参数 γ \gamma γ 和平移参数 β \beta β
    1)计算均值
    μ B = 1 m ∑ i = 1 m x i \mu_B=\frac{1}{m}\sum_{i=1}^{m}x_i μB=m1i=1mxi
    2)计算方差
    σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2=\frac{1}{m}\sum_{i=1}^{m}(x_i-\mu_B)^2 σB2=m1i=1m(xiμB)2
    3)归一化
    x i ′ = x i − μ B σ B 2 + ϵ x_i'=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} xi=σB2+ϵ xiμB
    4)数据的缩放和平移
    y i = γ x i ′ + β y_i=\gamma x_i'+\beta yi=γxi+β
  3. 测试过程中批归一化的均值&方差计算
    测试阶段由于每次只针对一个样本进行预测,因此没办法计算“mini-batch”的均值和方差,所以使用训练时的均值和方差
    均值为
    E [ x ] = E B [ μ B ] E[x]=E_B[\mu_B] E[x]=EB[μB]
    方差为
    V a r [ x ] = m m − 1 E B [ σ B 2 ] Var[x]=\frac{m}{m-1}E_B[\sigma_B^2] Var[x]=m1mEB[σB2]
  4. 批归一化的反向传播
    就是传播更新缩放参数 γ \gamma γ 和平移参数 β \beta β
  5. 批归一化的特性
    让数据具有0均值和单位方差
  6. 批归一化的作用
    神经网络更新参数的时候,会导致后一层的输入数据的分布不断发生变化,因此在训练时候每一次迭代,每一层都要适应新的输入数据的分布,批归一化可以对前一层的输入数据进行批量归一化,然后送入下一层进行处理,从而加速神经网络的训练过程
  7. 批归一化的好处
    1)解决了ICS(内部协变量漂移)现象(作用中提到的适应新分布)
    2)解决了梯度消失
    3)减小了对于学习率和初始化的依赖
    4)引入了一定的泛化效果。

优化器

  1. 有哪些优化器
    1)基于一阶导:最速下降法(梯度下降)/ SGD(随机梯度下降)/ AdaGrad / Adam / RMSProp / Momentum
    2)基于二阶导:牛顿法 / 拟牛顿法

  2. AdaGrad简述
    目标:自适应地为各个参数分配不同学习率的算法。赋予更新频繁的梯度以较小的学习率,赋予更新不频繁的梯度以较大的学习率。
    是梯度下降法最直接的改进,根据前几轮迭代的历史梯度值动态调整学习率,且优化向量的每一个分量都有自己的学习率下式中 α \alpha α 是学习因子, g t g_t gt 是第 t t t 次迭代参数的梯度向量, ϵ \epsilon ϵ 是一个很小的正数,下标 i i i 表示响亮的分量
    ( x t + 1 ) i = ( x t ) i − α ( g t ) i ∑ j = 1 t ( ( g j ) i ) 2 + ϵ (x_{t+1})_i=(x_t)_i-\alpha\frac{(g_t)_i}{\sqrt{\sum_{j=1}^t ((g_j)_i)^2+\epsilon}} (xt+1)i=(xt)iαj=1t((gj)i)2+ϵ (gt)i
    历史数据绝对值越大,分量学习率越小。

  3. AdaGrad的缺点
    虽然实现了自适应学习率,但是需要人工设置全局的学习率 α \alpha α,而且随着时间的积累,分母会越来越大,导致学习率趋向于0,参数无法有效更新

  4. AdaGrad和标准梯度下降(最速下降)的区别
    多出了分母,累积了到本次迭代为止梯度的历史信息用于生成梯度下降的系数值

  5. RMSProp算法
    对AdaGrad进行了改进,避免了长期积累梯度值导致的学习率趋向于0的问题。具体做法是由梯度值构造一个向量RMS,初始化为0,按照衰减系数累积了历史梯度平方值, δ \delta δ 为人工设定的超参数,RMS更新公式为
    R M S ( ( x t ) i ) = δ R M S ( ( x t − 1 ) i ) + ( 1 − δ ) ( g t ) i 2 RMS((x_t)_i)=\delta RMS((x_{t-1})_i) + (1-\delta)(g_t)_i^2 RMS((xt)i)=δRMS((xt1)i)+(1δ)(gt)i2
    RMSProp将历史梯度平方值按照 δ t \delta^t δt 衰减之后再累加,参数更新公式为
    ( x t + 1 ) i = ( x t ) i − α ( g t ) i R M S ( ( x t ) i ) (x_{t+1})_i=(x_t)_i-\alpha \frac{(g_t)_i}{\sqrt{RMS((x_t)_i)}} (xt+1)i=(xt)iαRMS((xt)i) (gt)i

  6. 最速下降法的缺点
    1)靠近极小值时收敛速度减慢
    2)直线搜索时可能会产生一些问题
    3)可能会“之字形”地下降

  7. 牛顿法和最速下降法的区别
    牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。
    牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。
    从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

  8. 牛顿法
    基于当前位置的切线来确定下一次的位置

  9. 牛顿法的缺点
    牛顿法每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂

  10. 牛顿法的改进
    拟牛顿法:拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。

  11. SGD(随机梯度下降)
    当小批量所含的训练样本数为 1 的时候,小批量梯度下降法就变成了随机梯度下降法(SGD)。SGD以单个样本为训练单元,训练速度会很快,但牺牲了向量化运算所带来的便利性,在较大数据集上效率并不高
    缺点:梯度更新太快,容易产生梯度震荡,使收敛不稳定

  12. 最速下降,批梯度下降,随机梯度下降的区别
    从本质上看,梯度下降法、小批量梯度下降法和随机梯度下降法,并没有区别。唯一的区别就在于它们执行一次训练过程所需要用到的训练样本数
    梯度下降法用到的是全集训练数据,随机梯度下降则是单个样本数据,而小批量则是介于二者之间。

  13. Momentum算法
    目的:使收敛更快,减少震荡,使收敛更稳定。(梯度方向不变时,收敛更快;梯度方向改变时,减小震荡)。后一个使收敛更稳定是针对SGD进行的( g t g_t gt是第 t t t次迭代的梯度值, x x x是输入值)
    x t = ρ x t − 1 − η g t x_t = ρx_{t-1} - \eta g_t xt=ρxt1ηgt
    ρ ρ ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。

  14. Adam算法
    Adam 全称为 Adaptive Moment Estimation,就是Momentum+RMSprop,是在带动量的梯度下降法的基础上融合了一种称为 RMSprop(加速梯度下降)的算法而成的。相较于带动量的梯度下降法,无论是RMSprop 还是 Adam,其中的改进思路都在于如何让横轴上的学习更快以及让纵轴上的学习更慢。RMSprop 和 Adam 在带动量的梯度下降法的基础上,引入了平方梯度,并对速率进行了偏差纠正。

其他基本概念

  1. 什么是鞍点
  2. 为什么神经网络容易拟合到鞍点
  3. 反向传播的原理
  4. 神经网络中每一轮的迭代过程
    1)对输入数据进行正向传播,得到损失函数值,并记住每一层的输出值
    2)执行反向传播函数,计算每一层参数的梯度值和每一层的误差项,如果有必要,将误差项传递给前一层
    3)求解器Solver(优化器Optimizer)根据计算出的参数梯度值进行更新操作,更新参数的值
  5. 梯度下降陷入局部最优有什么解决方法
  6. 为什么在神经网络的优化中一般使用梯度下降而不是用牛顿法(二阶优化)
    1)神经网络参数规模太大,梯度下降法一轮迭代的时间复杂度是 O ( n ) O(n) O(n),牛顿法一轮迭代的时间复杂度是 O ( n 2 ) O(n^2) O(n2),时间开销太大
    2)神经网络是复杂的复合函数,层数过多的时候计算Hessian矩阵或者其他近似矩阵都不容易
  7. dropout前向和反向的处理
    dropout的做法是在训练的时候随机选择一部分神经元进行正向和反向的传播,另外一些神经元的参数值保持不变,以减轻过拟合
  8. 梯度消失的出现原因
    1)当网络层数过深,求导链就会非常长,导致梯度消失
    2)较小的中间结果值,经过链式的累成作用,最终求得的梯度值就会接近于零。
  9. 梯度消失的解决方案
    1)选用合适的激活函数。比如 ReLU 或者 Leaky ReLU。
    2)采用 Batch Normalization 层,对网络中计算得到中间值进行归一化,使得中间计算结果的取值在均值为 0,方差为 1 这样的分布内。那么此时,在 sigmoid 和 tanh 中,函数取值处于中间变化较大的部分,梯度取值也相对较大,从而防止过拟合。
    3)使用残差结构,在反向传播计算时,减少梯度传播的路径长度,以缓解梯度消失的问题。
    4) 在 RNN 网络中,可以通过使用 LSTM,解决信息遗忘和梯度传播的问题
  10. 过拟合的解决方案
    1)l1/l2正则
    2)dropout
    3)bagging/boosting

普通神经网络

  1. 全连接神经网络反向传播算法的误差项是什么
    是损失函数对当前层输出 u ( l ) u^{(l)} u(l) (不包括激活函数)的梯度
    u ( l ) = W ( l ) x ( l − 1 ) + b ( l ) u^{(l)} = W^{(l)}x^{(l-1)}+b^{(l)} u(l)=W(l)x(l1)+b(l)
    ※ 对输出求损失函数的梯度是需要计算激活函数的导数的(因为会包含在链式求导里面)
  2. 全连接神经网络反向传播算法的误差项递推公式是什么
    δ ( l ) = ∇ u ( l ) L = { ( x ( l ) − y ) ⊙ f ′ ( u ( l ) ) , l = n l ( W ( l + 1 ) ) T ( δ ( l + 1 ) ) ⊙ f ′ ( u ( l ) ) , l ≠ n l \delta^{(l)}=\nabla_{u^{(l)}}L=\left\{ \begin{aligned} (x^{(l)} - y)\odot f'(u^{(l)}), \qquad &l=n_l \\ (W^{(l+1)})^T(\delta^{(l+1)}) \odot f'(u^{(l)}), \qquad &l\neq n_l\\ \end{aligned} \right. δ(l)=u(l)L={(x(l)y)f(u(l)),(W(l+1))T(δ(l+1))f(u(l)),l=nll=nl
    最后一层的终点是输出层,所以误差项可以直接求出,其他层的误差项由后一层的误差项递推求出
  3. 误差项和权重/偏置的梯度关系
    ∇ w ( l ) L = δ ( l ) ( x ( l − 1 ) ) T ∇ b ( l ) L = δ ( l ) \begin{aligned} \nabla_{w^{(l)}}L&=\delta^{(l)}(x^{(l-1)})^T\\ \nabla_{b^{(l)}}L&=\delta^{(l)} \end{aligned} w(l)Lb(l)L=δ(l)(x(l1))T=δ(l)
  4. 权重/偏置的负梯度更新公式
    W ( l ) = W ( l ) − η ∇ w ( l ) L b ( l ) = b ( l ) − η ∇ b ( l ) L \begin{aligned} W^{(l)} &= W^{(l)} - \eta \nabla_{w^{(l)}}L\\ b^{(l)} &= b^{(l)} - \eta \nabla_{b^{(l)}}L \end{aligned} W(l)b(l)=W(l)ηw(l)L=b(l)ηb(l)L

循环神经网络

RNN

  1. RNN的损失计算和全连接神经网络/卷积神经网络损失计算的区别
    1)全连接神经网络/卷积神经网络:训练样本之间相互独立,所以计算所有样本的损失均值
    2)一个训练样本包含的时间序列之间互相不独立,所以计算训练样本所有时间序列输出值损失的和
  2. RNN的反向传播算法和BP一样吗
    不一样,RNN的反向传播算法是BPTT(Back Propagation Through Time),BPTT是基于时间轴进行的,循环层的参数在任意时刻都是一致的
  3. RNN更新参数的时间
    训练时对训练样本中时间序列的每个时刻的输出值进行正向传播,再计算损失和作为总损失,反向传播更新参数
  4. RNN的前向传播
    对一个循环层中所有时刻,该循环层都共享输入-隐藏权重 W x h W_{xh} Wxh,隐藏层内权重(状态转移权重) W h h W_{hh} Whh,以及隐藏层(循环层)偏置 b h b_h bh
    u t = W x h x t + W h h h t − 1 + b h h t = f ( u t ) v t = W o h t + b o y t ′ = g ( v t ) \begin{aligned} u_t &= W_{xh}x_t+W_{hh}h_{t-1} + b_h\\ h_t &= f(u_t)\\ v_t &= W_oh_t + b_o\\ y_t' &= g(v_t) \end{aligned} uthtvtyt=Wxhxt+Whhht1+bh=f(ut)=Woht+bo=g(vt)
  5. RNN的输出层是否具备记忆功能
    不具备,对训练样本时间序列的每个时刻都有输出
  6. RNN是否需要确保每个训练样本的时间序列长度相同
    不需要
  7. RNN的循环层误差项计算
    误差项:该层经历激活函数前的输出 u ( l ) u^{(l)} u(l) 对总损失函数 L L L 的梯度
    δ T = W o T ( ∇ v T L ) ⊙ f ′ ( u T ) δ t = ∇ u t L t + ( W h h T δ t + 1 ) ⊙ f ′ ( u t ) = ( W o T ( ∇ y ′ L t ⊙ g ′ ( v ) ) ) ⊙ f ′ ( u t ) + ( W h h T δ t + 1 ) ⊙ f ′ ( u t ) \begin{aligned} \delta_T&=W_o^T(\nabla_{v_T}L)\odot f'(u_T)\\ \delta_t &= \nabla_{u_t}L_t + (W_{hh}^T\delta_{t+1})\odot f'(u_t)\\ &=(W_o^T(\nabla_{y'}L_t\odot g'(v)))\odot f'(u_t) + (W_{hh}^T\delta_{t+1})\odot f'(u_t) & \end{aligned} δTδt=WoT(vTL)f(uT)=utLt+(WhhTδt+1)f(ut)=(WoT(yLtg(v)))f(ut)+(WhhTδt+1)f(ut)
  8. RNN循环层的参数更新梯度(假设输出的激活函数为softmax,损失为交叉熵)
    ∇ W h h L = ∑ t = 1 T = ∑ t = 1 T δ t h t = 1 T ∇ W x h L = ∑ t = 1 T δ t x t T ∇ b h L = ∑ t = 1 T δ t \begin{aligned} \nabla_{W_{hh}}L &= \sum_{t = 1}^T =\sum_{t=1}^T\delta_t h_{t=1}^T\\ \nabla_{W_{xh}}L &= \sum_{t = 1}^T \delta_t x_t^T\\ \nabla_{b_h}L &= \sum_{t = 1}^T \delta_t \end{aligned} WhhLWxhLbhL=t=1T=t=1Tδtht=1T=t=1TδtxtT=t=1Tδt
  9. RNN输出层的参数更新梯度(假设输出的激活函数为softmax,损失为交叉熵)
    ∇ b o L = ∑ t = 1 T ∇ b o L t = ∑ t = 1 T ( y t ′ − y t ) ∇ W o L = ∑ t = 1 T ∇ W o L t = ∑ t = 1 T ( y t ′ − y t ) h t T \begin{aligned} \nabla_{b_o}L &= \sum_{t = 1}^T\nabla_{b_o}L_t = \sum_{t=1}^T(y_t'-y_t)\\ \nabla_{W_o}L &= \sum_{t = 1}^T\nabla_{W_o}L_t = \sum_{t=1}^T(y_t'-y_t)h_t^T \end{aligned} boLWoL=t=1TboLt=t=1T(ytyt)=t=1TWoLt=t=1T(ytyt)htT
  10. 为什么RNN会更容易遇到梯度消失和梯度爆炸
    因为时间轴,出现在输入序列的长度过大的情况下进行的矩阵多次乘积
  11. 除了LSTM还有什么能解决RNN的劣势
    relu,bn,合理初始化

LSTM

  1. LSTM的信息传递机制是什么
    隐藏层的每个神经元都有3个输入
    1)上一层输出
    2)上一个时刻该神经元的隐藏状态值
    3)上一个时刻该神经元的细胞状态值
    通过输入门、遗忘门、输出门三个门控制信息的流量完成时许信息传递
  2. LSTM和RNN比有什么优势
    对循环层单元进行改造,避免使用连乘公式直接计算隐藏层的状态值,使用另一种方式由 h t − 1 h_{t-1} ht1 计算 h t h_t ht
  3. 每个门的组成
    三个门的计算公式是一样的,但分别有各自的权重和偏置
    每一个门的计算公式都是sigmoid层 + 点乘操作
    1)输入门
    i t = σ ( W x i x t + W h i h t − 1 + b i ) i_t=\sigma(W_{xi}x_t+W_{hi}h_{t-1}+b_i) it=σ(Wxixt+Whiht1+bi)
    2)遗忘门
    f t = σ ( W x f x t + W h f h t − 1 + b f ) f_t=\sigma(W_{xf}x_t+W_{hf}h_{t-1}+b_f) ft=σ(Wxfxt+Whfht1+bf)
    3)输出门
    o t = σ ( W x o x t + W h o h t − 1 + b o ) o_t=\sigma(W_{xo}x_t+W_{ho}h_{t-1}+b_o) ot=σ(Wxoxt+Whoht1+bo)
  4. sigmoid的作用
    以 [0, 1] 的输出限制了可通过该门的信息量
  5. tanh函数的作用
    用于创建一个新的细胞状态的候选向量,将输入数据规范到[-1, 1]之间
  6. 细胞状态和隐藏状态
    细胞状态通过输出门和tanh激活函数规范到隐藏状态
    1)隐藏状态更新公式
    h t = o t ⋅ tan ⁡ h ( c t ) h_t = o_t\cdot \tan h(c_t) ht=ottanh(ct)
    2)细胞状态更新公式
    c t = f t ⋅ c t − 1 + i t ⋅ tan ⁡ h ( W x x x t + W h c h t − 1 + b c ) c_t = f_t\cdot c_{t-1} + i_t \cdot \tan h (W_{xx}x_t + W_{hc} h_{t-1} + b_c) ct=ftct1+ittanh(Wxxxt+Whcht1+bc)
  7. LSTM为什么能减少梯度消失
    有一部分最早时刻的输入值避免了与权重矩阵的累次乘法
  8. LSTM 有哪些门,为什么要用这些门
    1)输入门:控制当前时刻的输入有多少可以进入记忆单元
    2)遗忘门:决定记忆单元上一时刻的值会有多少被传递到当前时刻
    3)输出门:决定记忆单元中存储的记忆值有多大比例可以被输出
    三个门都起到了信息的流量控制作用
  9. BiLSTM和LSTM的区别

GRU

  1. GRU和LSTM的区别

CNN

  1. CNN的特点
    适用于局部空间相关性的数据,如图像/语音/自然语言等,具有如下4个特点
    1)局部连接:可以提取局部特征
    2)权值共享:减少参数数量,降低训练难度
    3)降维:通过池化或卷积stride实现
    4)多层次结构:将低层次的局部特征组合成较高层次的特征,不同层级的特征可以对应不同任务
  2. CNN的原理
    卷积网络的卷积操作分为两步
    1)线性变换:将数据先行投影到更低维度的空间
    2)激活函数变换:对数据的压缩进行非线性变换
  3. CNN的卷积层参数量
  4. 卷积层的误差计算公式
    u i j ( l ) u_{ij}^{(l)} uij(l) 为 第 l − 1 l-1 l1 层输出数据 x i j x_{ij} xij 在第 l l l 层未经过激活函数的输出,卷积核大小为 p × q p\times q p×q
    u i j ( l ) = ∑ p = 1 s ∑ q = 1 s x i + p − 1 , j + q − 1 ( l − 1 ) × k p q ( l ) + b ( l ) u_{ij}^{(l)} = \sum_{p=1}^{s} \sum_{q=1}^{s}x_{i+p-1, j+q-1}^{(l-1)}\times k_{pq}^{(l)} + b^{(l)} uij(l)=p=1sq=1sxi+p1,j+q1(l1)×kpq(l)+b(l)
    l l l i j ij ij 位置的误差项为一个矩阵 δ i j ( l ) \delta_{ij}^{(l)} δij(l)
    δ i j ( l ) = ∂ L ∂ u i j ( l ) = ∂ L ∂ x i j ( l ) ∂ x i j ( l ) ∂ u i j ( l ) = ∂ L ∂ x i j ( l ) f ′ ( u i j ( l ) ) \delta_{ij}^{(l)}=\frac{\partial L}{\partial u_{ij}^{(l)}}=\frac{\partial L}{\partial x_{ij}^{(l)}}\frac{\partial x_{ij}^{(l)}}{\partial u_{ij}^{(l)}}=\frac{\partial L}{\partial x_{ij}^{(l)}}f'(u_{ij}^{(l)}) δij(l)=uij(l)L=xij(l)Luij(l)xij(l)=xij(l)Lf(uij(l))
  5. 卷积层的误差更新公式
    1)旋转定义:卷积核为 K K K,rot180为顺时针旋转180°
    δ ( l − 1 ) = δ ( l ) × r o t 180 ( K ) ⊙ f ′ ( u ( l − 1 ) ) \delta^{(l-1)}=\delta^{(l)}\times rot 180(K)\odot f'(u^{(l-1)}) δ(l1)=δ(l)×rot180(K)f(u(l1))
  6. 卷积层的权重/偏置梯度求解公式
    1)权重梯度(卷积核梯度)
    ∂ L ∂ k p q ( l ) = ∑ i ∑ j ( δ i j ( l ) x i + p − 1 , j + q − 1 ) = c o n v ( X ( l − 1 ) , δ ( l ) ) \frac{\partial L}{\partial k_{pq}^{(l)}}=\sum_i\sum_j(\delta_{ij}^{(l)}x_{i+p-1, j+q-1})=conv(X^{(l-1)}, \delta^{(l)}) kpq(l)L=ij(δij(l)xi+p1,j+q1)=conv(X(l1),δ(l))
    2)偏置梯度
    ∂ L ∂ b ( l ) = ∑ i ∑ j ( δ i j ( l ) ) \frac{\partial L}{\partial b^{(l)}}=\sum_i\sum_j(\delta_{ij}^{(l)}) b(l)L=ij(δij(l))
  7. pooling层和普通层的更新区别
    pooling层没有参数,做是下采样的工作,因此不需要更新参数,仅需要讲误差传递个上一层,若pooling的输入数据大小为 m × n m \times n m×n,输出数据大小为 m ′ × n ′ m' \times n' m×n,则反向传播时接收的上一层误差数据大小为 m ′ × n ′ m' \times n' m×n,输入给下一层的误差数据大小为 m × n m \times n m×n
  8. average pooling层回传方式
    假设上一层传来的误差为 δ ( l ) \delta^{(l)} δ(l),pooling大小为 s × s s\times s s×s,则将每一个误差都扩充为 s × s s\times s s×s个误差,且值为 δ i ( l ) s × s \frac{\delta_i^{(l)}}{s\times s} s×sδi(l),即对 δ ( l ) \delta^{(l)} δ(l) 的每一个误差 δ i ( l ) \delta_i^{(l)} δi(l),扩充为如下 s × s s\times s s×s 的矩阵
    δ i ( l ) s × s ⋯ δ i ( l ) s × s ⋮ ⋱ ⋮ δ i ( l ) s × s ⋯ δ i ( l ) s × s \begin{matrix} \frac{\delta_i^{(l)}}{s\times s} & \cdots & \frac{\delta_i^{(l)}}{s\times s}\\ \vdots & \ddots & \vdots \\ \frac{\delta_i^{(l)}}{s\times s} & \cdots & \frac{\delta_i^{(l)}}{s\times s} \end{matrix} s×sδi(l)s×sδi(l)s×sδi(l)s×sδi(l)
  9. max pooling层回传方式
    在正向传播中记录最大值所在位置,在最大处置为 δ i ( l ) \delta_i^{(l)} δi(l),其余位置处置为0
    0 ⋯ 0 ⋮ ⋱ ⋮ δ i ( l ) ⋯ 0 \begin{matrix} 0 & \cdots & 0\\ \vdots & \ddots & \vdots \\ \delta_i^{(l)} & \cdots & 0 \end{matrix} 0δi(l)00
  10. 卷积核为什么都是奇数
    1)便于进行padding。
         在卷积时,若要卷积前后的尺寸不变。需要对原图进行padding。假设图像的大小为 n ∗ n n ∗ n nn 卷积核大小为 k ∗ k k ∗ k kk,就可以设置padding为 k − 1 2 \frac{k-1}{2} 2k1,保证卷积的输出大小仍为 n ∗ n n ∗ n nn,此是如果k是偶数, k − 1 2 \frac{k-1}{2} 2k1 就不是整数,无法计算。
    2)容易找到卷积锚点
         奇数相对于偶数,有中心点,对边沿、对线条更加敏感,可以更有效的提取边沿信息。保证了 padding 时,图像的两边依然相对称
  11. 如何通过卷积矩阵计算卷积
    这个不太好说明,直接举个例子。
    假设输入图像为
    [ x 11 x 12 x 13 x 14 x 21 x 22 x 23 x 24 x 31 x 32 x 33 x 34 x 41 x 42 x 43 x 44 ] \left[ \begin{matrix} x_{11} & x_{12}& x_{13}& x_{14}\\ x_{21}& x_{22}& x_{23}& x_{24}\\ x_{31}&x_{32} & x_{33}& x_{34}\\ x_{41}& x_{42} & x_{43}& x_{44} \end{matrix} \right] x11x21x31x41x12x22x32x42x13x23x33x43x14x24x34x44
    卷积核矩阵为
    [ k 11 k 12 k 13 k 21 k 22 k 23 k 31 k 32 k 33 ] \left[ \begin{matrix} k_{11} & k_{12}& k_{13}\\ k_{21}& k_{22}& k_{23}\\ k_{31}&k_{32} & k_{33}\\ \end{matrix} \right] k11k21k31k12k22k32k13k23k33
    可以将输入矩阵按行拼接为列向量 x x x
    [ x 11 x 12 x 13 x 14 x 21 x 22 x 23 x 24 x 31 x 32 x 33 x 34 x 41 x 42 x 43 x 44 ] T [ x_{11}\quad x_{12}\quad x_{13}\quad x_{14} \quad x_{21} \quad x_{22} \quad x_{23} \quad x_{24} \quad x_{31}\quad x_{32} \quad x_{33}\quad x_{34}\quad x_{41} \quad x_{42} \quad x_{43}\quad x_{44} ]^T [x11x12x13x14x21x22x23x24x31x32x33x34x41x42x43x44]T
    对应的卷积核矩阵 C C C
    [ k 11 k 12 k 13 0 k 21 k 22 k 23 0 k 31 k 32 k 33 0 0 0 0 0 0 k 11 k 12 k 13 0 k 21 k 22 k 23 0 k 31 k 32 k 33 0 0 0 0 0 0 0 0 k 11 k 12 k 13 0 k 21 k 22 k 23 0 k 31 k 32 k 33 0 0 0 0 0 0 k 11 k 12 k 13 0 k 21 k 22 k 23 0 k 31 k 32 k 33 ] \left[ \begin{matrix} k_{11} & k_{12} & k_{13} & 0 & k_{21} & k_{22} & k_{23} & 0 & k_{31} & k_{32} & k_{33} & 0 & 0 & 0 & 0 & 0 \\ 0 & k_{11} & k_{12} & k_{13} & 0 & k_{21} & k_{22} & k_{23} & 0 & k_{31} & k_{32} & k_{33} & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & k_{11} & k_{12} & k_{13} & 0 & k_{21} & k_{22} & k_{23} & 0 & k_{31} & k_{32} & k_{33} & 0 \\ 0 & 0 & 0 & 0 & 0 &k_{11} & k_{12} & k_{13} & 0 & k_{21} & k_{22} & k_{23} & 0 & k_{31} & k_{32} & k_{33} \end{matrix} \right] k11000k12k1100k13k12000k1300k210k110k22k21k12k11k23k22k13k120k230k13k310k210k32k31k22k21k33k32k23k220k330k2300k31000k32k3100k33k32000k33
    所以前向传播时候的卷积运算为 y = C x y=Cx y=Cx
    反向传播时候的卷积运算为 δ ( l − 1 ) = C T δ ( l ) \delta^{(l - 1)} = C^T \delta^{(l)} δ(l1)=CTδ(l)
  12. 什么是 1 × 1 1\times 1 1×1 的卷积核
    它只在通道上进行卷积,相当于对多个输入通道进行加权平均。这种卷积不会改变图像的高度和宽度,只改变通道数量(变为1),被用于全卷积网络和通道降维
  13. 给定卷积核和步长计算output维度

残差网络

  1. 残差网络出现的原因
    增加网络的层数会提高网络的性能,但是增加到一定层数之后,随着层数的增加,神经网络的训练误差和测试误差会增大,这个问题称之为退化。
  2. 残差网络的基本思想
    使用跨层链接;拟合误差项的手段来解决深层网络难以训练的问题
    增添了网络多样性:如果有 n n n 个跨层结构,则数据通过的路径有 2 n 2^n 2n 种可能。
  3. 残差的定义
    假设神经网络要拟合的函数为 H ( x ) H(x) H(x),输入向量为 x x x,则残差定义为 F ( x ) = H ( x ) − x F(x)=H(x)-x F(x)=H(x)x

GNN

你可能感兴趣的:(算法整理,机器学习,神经网络)