十万个深度学习为什么?

十万个深度学习为什么?

逻辑回归是一个分类算法,那么它是在回归什么呢?

答:

逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达到将数据二分类的目的。
逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种广义线性回归模型,解决的是分类问题。

分类问题为什么不用 MSE,而是要用交叉熵?

答:

常见的损失函数,常见的激活函数,ELU 函数 了解吗?

答:

常见的损失函数:0-1 损失函数,绝对值损失函数,log 对数损失函数,平方损失函数,指数损失函数,hinge 损失函数,交叉熵损失函数等。

0-1 损失函数

\[L(Y, f(X))=\left\{\begin{array}{l} 1, Y \neq f(X) \\ 0, Y=f(X) \end{array}\right. \]

绝对值损失函数

\[L(Y, f(x))=|Y-f(x)| \]

log 对数损失函数

\[L(Y, P(Y \mid X))=-\log P(Y \mid X) \]

平方损失函数

\[L(Y \mid f(X))=\sum_{N}(Y-f(X))^{2} \]

交叉熵损失函数

\[C=-\frac{1}{n} \sum_{x}[y \ln a+(1-y) \ln (1-a)] \]

Sigmoid 函数:

\[f(x)=\frac{1}{1+e^{-x}} \]

特点:
它能够把输入的连续实值变换为 0 和 1 之间的输出,特别的,如果是非常大的负数,那么输出就是 0;如果是非常大的正数,输出就是 1。
缺点:

  1. 在深度神经网络中梯度反向传递时导致梯度消失,其中梯度爆炸发生的概率非常小,而梯度
    消失发生的概率比较大。
  2. Sigmoid 的 output 不是 0 均值(即 zero-centered)。
  3. 其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这
    会较大地增加训练时间。

Tanh 函数:

\[\tanh (x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} \]

特点:它解决了 Sigmoid 函数的不是 zero-centered 输出问题,收敛速度比 sigmoid 要快,然而,
梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

ReLU 函数:

\[f(x)=\max (0, x) \]

特点:

  1. ReLu 函数是利用阈值来进行因变量的输出,因此其计算复杂度会比剩下两个函数低(后两个函数都是进行指数运算)

  2. ReLu 函数的非饱和性可以有效地解决梯度消失的问题,提供相对宽的激活边界。

  3. ReLu 的单侧抑制提供了网络的稀疏表达能力。

缺点:

  1. ReLU 的局限性:在于其训练过程中会导致神经元死亡的问题。这是由于函数 f(x)=max(0,x)导致负梯度在经过该 ReLU 单元时被置为 0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为 0,不对任何数据产生响应。在实际训练中,如果学习率(Learning Rate)设置较大,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。

Leaky ReLu 函数:

\[f(x)=\left\{\begin{array}{ll} x & (x>0) \\ a x & (x \leqslant 0) \end{array}\right. \]

LReLU 与 ReLU 的区别在于, 当 z<0 时其值不为 0,而是一个斜率为 a 的线性函数,一般 a 为一个很小的正常数, 这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方面,a 值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。
基于此,参数化的 PReLU(Parametric ReLU)应运而生。它与 LReLU 的主要区别是将负轴部分斜率 a 作为网络中一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。而另一个LReLU 的变种增加了“随机化”机制,具体地,在训练过程中,斜率 a 作为一个满足某种分布的随机采样;测试时再固定下来。Random ReLU(RReLU)在一定程度上能起到正则化的作用。

ELU 函数:

\[f(x)=\left\{\begin{array}{cl} x & , x>0 \\ \alpha\left(e^{x}-1\right) & , x \leq 0 \end{array}\right. \]

ELU 函数是针对 ReLU 函数的一个改进型,相比于 ReLU 函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除 ReLU 死掉的问题,不过还是有梯度饱和和指数运算的问题。

熵,交叉熵的概念

答:

在信息论和概率统计中,熵是表示随机变量不确定的度量,随机边量 X 的熵定义如下:

\[H(X)=-\sum_{x} p(x) \log p(x) \]

熵只依赖于 X 的分布,与 X 的取值无关。
条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性,H(Y|X)定义为在给定条件 X 下,Y 的条件概率分布的熵对 X 的数学期望:

\[H(Y \mid X)=\sum_{i=1}^{n} p_{i} H\left(Y \mid X=x_{i}\right) \]

Batch-norm 作用和参数

答:

  1. batch norm 对于输入数据做了零均值化和方差归一化过程,方便了下一层网络的训练过程,从而加速了网络的学习。不同 batch 的数据,由于加入了 batch norm,中间层的表现会更加稳定,输出值不会偏移太多。各层之间受之前层的影响降低,各层之间比较独立,有助于加速网络的学习。梯度爆炸和梯度消失现象也得到了一些缓解(我自己加上去的)。

  2. batch norm 利用的是 mini-batch 上的均值和方差来做的缩放,但是不同的 mini-batch 上面的数据是有波动的,相当于给整个模型引入了一些噪音,从而相当于有了一些正则化的效果,从而提升表现。
    实际 batch norm 在训练过程中,y,b 参数和 w 相似,直接利用梯度值乘以学习率,更新值就好了。
    需要注意的是,batch norm 中的 z 的均值和方差都是通过每一个 mini-batch 上的训练数据得到的。在测试过程中,不能通过单独样本的数据计算均值和方差,我们可以通过让训练过程中的每一个 mini-batch 的均值和方差数据,计算指数加权平均,从而得到完整样本的均值和方差的一个估计。在测试过程中,使用该值作为均值和方差,从而完成计算。

LR 的损失函数推导

答:

逻辑回归损失函数及梯度推导公式如下:

\[\begin{array}{c} L(w)=\sum_{i}\left(y_{i} * \operatorname{logh}\left(x_{i}\right)+\left(1-y_{i}\right) * \log \left(1-h\left(x_{i}\right)\right)\right) \\ =\sum_{i} y_{i}\left(\operatorname{logh}\left(x_{i}\right)-\log \left(1-h\left(x_{i}\right)\right)\right)+\log \left(1-h\left(x_{i}\right)\right) \\ =\sum_{i} y_{i} \log \frac{h\left(x_{i}\right)}{1-h\left(x_{i}\right)}+\log \left(1-h\left(x_{i}\right)\right) \\ =\sum_{i} y_{i}\left(w^{T} x_{i}\right)+\log \left(1-\frac{1}{1+e^{-w x_{i}}}\right) \\ =\sum_{i}\left(y_{i} *\left(w^{T} x_{i}\right)-\log \left(1+e^{w^{T} x_{i}}\right)\right) \end{array} \]

求导得:

\[\begin{array}{c} \frac{d L}{d w}=y x-\frac{1}{1+e^{w^{T} x}} * e^{w^{T} x} * x \\ =x(y-h(x)) \end{array} \]

残差网络有哪些作用?

答:

解决梯度消失和网络退化问题。

解决梯度消失:

残差模块能让训练变得更加简单,如果输入值和输出值的差值过小,那么可能梯度会过小,导致出现梯度小时的情况,残差网络的好处在于当残差为 0 时,改成神经元只是对前层进行一次线性堆叠,使得网络梯度不容易消失,性能不会下降。

解决网络退化:

随着网络层数的增加,网络会发生退化现象:随着网络层数的增加训练集 loss 逐渐下降,然后趋于饱和,如果再增加网络深度的话,训练集 loss 反而会增大,注意这并不是过拟合,因为在过拟合中训练 loss 是一直减小的。

而残差网络在前向传播时,输入信号可以从任意低层直接传播到高层。由于包含了一个天然的恒等映射,一定程度上可以解决网络退化问题。

交叉熵损失,二分类交叉熵损失和极大似然什么关系?

答:

什么是交叉熵损失?
机器学习的交叉熵损失函数定义为:假设有 N 个样本,

\[J(w)=\frac{1}{N} \sum_{n=1}^{N} H\left(p_{n}, q_{n}\right) \]

其中:

\[H(p, q)=-\sum_{i=1}^{K} p\left(x_{i}\right) \log q\left(x_{i}\right) \]

从一个直观的例子感受最小化交叉熵损失与极大似然的关系。

\[J(w)=-\frac{1}{N} \sum_{n=1}^{N}\left[y_{n} \log \hat{y_{n}}+\left(1-y_{n}\right) \log \left(1-\hat{y}_{n}\right)\right] \]

去掉 1/N 并不影响函数的单调性,机器学习任务的也可以是最小化下面的交叉熵损失:

\[J(w)=-\sum_{n=1}^{N}\left[y_{n} \log \hat{y_{n}}+\left(1-y_{n}\right) \log \left(1-\hat{y_{n}}\right)\right] \]

等价于最大化下面这个函数:

\[J(w)=\sum_{n=1}^{N}\left[y_{n} \log \hat{y_{n}}+\left(1-y_{n}\right) \log \left(1-\hat{y_{n}}\right)\right] \]

不难看出,这其实就是对伯努利分布求极大似然中的对数似然函数(log-likelihood)。
也就是说,在伯努利分布下,极大似然估计与最小化交叉熵损失其实是同一回事。

梯度爆炸和梯度消失原因,解决方案

答:

梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生。

梯度爆炸:(1)隐藏层的层数过多;(2)权重的初始化值过大。

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:
(1)用 ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout 等替代 sigmoid 函数。
(2)用 Batch Normalization。
(3)LSTM 的结构设计也可以改善 RNN 中的梯度消失问题。

你对 fast rcnn 了解多少?

答:

两阶段目标检测算法
Fast RCNN,是 RCNN 算法的升级版,之所以提出 Fast R-CNN,主要是因为 R-CNN 存在以下几个问题:

  1. 训练分多步。通过上一篇博文我们知道 R-CNN 的训练先要 fine tuning 一个预训练的网络,然后针对每个类别都训练一个 SVM 分类器,最后还要用 regressors 对 bounding-box 进行回归,另外region proposal 也要单独用 selective search 的方式获得,步骤比较繁琐。
  2. 时间和内存消耗比较大。在训练 SVM 和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间消耗还是比较大的。
  3. 测试的时候也比较慢,每张图片的每个 region proposal 都要做卷积,重复操作太多。虽然在 Fast RCNN 之前有提出过 SPPnet 算法来解决 RCNN 中重复卷积的问题,但是 SPPnet 依然存在和 RCNN 一样的一些缺点比如:训练步骤过多,需要训练 SVM 分类器,需要额外的回归器,特征也是保存在磁盘上。因此 Fast RCNN 相当于全面改进了原有的这两个算法,不仅训练步骤减少了,也不需要额外将特征保存在磁盘上。

池化的作用

答:

  1. 保留主要特征的同时减少参数和计算量,防止过拟合。
  2. invariance(不变性),这种不变性包括 translation(平移),rotation(旋转),scale(尺度)。

BN 的作用 ,如何做

答:

数据分布更一致,收敛速率增加,可以达到更好的精度。

常见的 attention 机制,说明 channel attention 和 self attention 的原理

答:

self-attention、channel attention、spatial attention、multi-head attention、transformer
自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

softmax 求导

auc 含义公式

AUC 是 ROC 曲线下面的面积,AUC 可以解读为从所有正例中随机选取一个样本 A,再从所有负例中随机选取一个样本 B,分类器将 A 判为正例的概率比将 B 判为正例的概率大的可能性。AUC 反映的是分类器对样本的排序能力。AUC 越大,自然排序能力越好,即分类器将越多的正例排在负例之前

公式如下:

\[A U C=\frac{\sum_{i \text { ∈positiveClass }} \operatorname{rank}_{i}-\frac{M(1+M)}{2}}{M \times N} \]

posted @ 2021-11-26 14:40  梁君牧  阅读(64)  评论(0编辑  收藏  举报