【NLP面试QA】激活函数与损失函数
2020-04-04 11:37
1166 查看
[TOC]
#### Sigmoid 函数的优缺点是什么
优点:
- 输出范围优先,可以将任意范围的输出映射到 (0, 1) 范围内,在输出层可以用于表示二分类的输出概率
- 易于求导
缺点:
- Sigmoid 函数容易饱和,且梯度范围为 (0, 0.25] ,在反向传播中容易导致梯度消失问题。
#### ReLU的优缺点
优点
- ReLU的非饱和性可以提供相对宽的激活边界。
- 梯度只有 0, 1 两个变量,有效地解决梯度消失的问题。
- ReLU的单侧抑制提供了网络的稀疏表达能力。
缺点
- 训练过程中会导致神经元死亡的问题。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活。那么,这个神经元自身参数的梯度永远都会是 0,在以后的训练过程中永远不能被更新。这种现象称为死亡 ReLU 问题 (Dying ReLU Problem)
#### 什么是交叉熵
- 交叉熵刻画的是两个概率分布之间的距离,**描述了真实分布和预测分布之间的差异性**。
- 交叉熵的公式:$H(p, q) = -\sum_x p(x) log\ q(x)$,其中,x为一个样本中每一个类别的概率
#### 为什么分类问题的损失函数为交叉熵而不能是 MSE?
从建模上来看:
- **MSE** 是假设数据符合高斯分布时,概率分布的负条件对数似然。表示两个向量之间的欧几里得距离
- **CE**是假设模型分布为多项式分布时,概率分布的负条件对数似然。表示真实分布和预测分布之间的差异性
从梯度上来看:
- MSE 的梯度 $\frac{\partial L}{\partial \hat y_i} = 2(\hat y_i - y_i)$
- CE 的梯度 $\frac{\partial L}{\partial \hat y_i} = \frac{y_i}{\hat y_i}$
MSE 在优化后期侧残差会趋于零,非常小,导致优化速度减慢。而 CE 在优化后期正确类别的分量是趋于 1 的,而非正确类别的分量恒为 0,优化速度更快。
直观上来看:
- MSE 无差别得关注全部类别上预测概率和真实概率的差。
- CE 关注的是正确类别的预测概率。
#### 多分类问题中,使用 sigmoid 和 softmax 作为最后一层激活函数的区别
- sigmoid 函数的每次输出是相互独立的,不能体现样本之间的相关性。
- 而softmax 的归一化意味着一个输出增大必然伴随着其他输出的减小,这更符合概率规则,体现了样本互斥的关系。
- 如果是一个样本隶属于多个样本,且各个样本是相互独立的分类问题,可以采用 sigmoid 作为每个输出的激活函数;而对于类别互斥的分类问题则应该采用 softmax 作为最后的激活函数。
#### 为什么 LSTM 中的激活函数为 tanh 和 sigmoid 而不用 Relu
在 LSTM 中,sigmoid 作用为门函数的作用,取值范围为 (0, 1),是无法替代的
使用 Relu 的目的是为了解决梯度消失问题,而在 LSTM 中,由于时序上的残差机制,梯度消失问题已经大大减弱了。
另一方面,tanh 能够将模型输出映射在 (-1, 1) 范围内,更易于优化
#### softmax 的反向传播
对于多分类问题,输出层激活函数为softmax的单层神经网络分类器只考虑权重参数 $W$,采用SGD的优化方法,输入样本为 $x$,标注为 $y$,样本特征维度为 $m$,类别个数为 $n$,其前向传播和反向传播公式:
- 前向传播:
$$
\begin{aligned}
&z = Wx \\
&p_i = softmax(z) = \frac{exp(z_i)}{\sum_{j=1}^{n} exp(z_j)} \\
&L(\hat{y}, y) = -\sum_{i=1}^ny_i\ log\ p_i
\end{aligned}$$
- 反向传播:
$$\frac{\partial L}{\partial p_i} = -\sum_{i=1}^n\frac{y_i}{p_i} $$
$$
\begin{cases}
\frac{\partial p_i}{\partial z_j} = \frac{exp(z_j)\sum_{k=1}^{n} exp(z_k) - exp(z_j)^2}{(\sum_{k=1}^{n} exp(z_k))^2} = p_j(1-p_j) & , i = j\\
\frac{\partial p_i}{\partial z_j} = -\frac{exp(z_j)exp(z_i)}{(\sum_{k=1}^{n} exp(z_k))^2} = -p_ip_j & , i \ne j
\end{cases}
$$
则
$$
\begin{aligned}
&\frac{\partial L}{\partial z_i} = \frac{\partial p_i}{\partial z_i} \frac{\partial p_i}{\partial z_i}\\
&= - \frac{y_i}{p_i}p_i(1-p_i) - \sum_{j\ne i}\frac{y_j}{p_j}(-p_ip_j) \\
&= -y_i + p_iy_i + p_i\sum_{j\ne i}y_j \\
&= -y_i + p_i \sum_{j=1}^ny_j \\
&= p_i - y_i
\end{aligned}$$
表示为矩阵为:$\frac{\partial L}{\partial z} = p - y$
相关文章推荐
- 神经网络激活函数与损失函数
- class4---tensorflow:损失函数-激活函数、交叉熵、softmax函数
- 激活函数和损失函数
- 深度神经网络(DNN)损失函数和激活函数的选择
- 激活函数和损失函数
- 神经网络——sigmod函数、激活函数、损失函数
- 激活函数和损失函数
- 干货 | 深度学习之损失函数与激活函数的选择
- 深度学习笔记(三):激活函数和损失函数
- 深度学习笔记(三):激活函数和损失函数
- CNN中激活函数,优化器,损失函数的选择
- 深度神经网络(DNN)损失函数和激活函数的选择
- 深度学习中的激活函数和损失函数
- 感知机、梯队下降、激活函数、损失函数
- 深度神经网络(DNN)损失函数和激活函数的选择
- 深度学习关于激活函数和损失函数的调研
- 深度学习笔记——TensorFlow学习笔记(二)激活函数、损失函数、优化算法和正则项
- 一次面试引发的问题:激活函数Relu,sigmoid ,tanh的角逐
- Keras中的损失函数与激活函数
- 深度学习基础(三):激活函数和损失函数