1、激活函数

  • 为什么需要激活函数:深度学习模型本质上是对函数的拟合,但是神经网络层都是线性,无法进行非线性建模,所以需要引入非线性的激活函数

  • 特点:非线性、可微性(不然无法反向传播)、单调性)

  • 为什么通常需要单调性:1、若不单调,反向传播更新时,导数有正有负,梯度方向不稳定;2、可能出现多个极小值,增加训练难度,难以收敛到全局最优解

  • 分类:饱和激活函数与非饱和激活函数,sigmoid 与 Tanh都是饱和的,即输入较大或较小时,输出变化不敏感,导致梯度过小,即梯度消失(所以饱和激活函数对于权重矩阵的初始化特别留意,初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习)

sigmoid激活函数:

导数如下图:

特点:

  • 输出映射到 0-1

  • 导数为 0-0.25,神经网络中有多个激活函数,如果多个 0-0.25 的值相乘,可能出现梯度消失(梯度弥散)问题

  • 函数输出的期望不是0,梯度有向特点方向移动的趋势,降低更新效率

  • sigmoid 存在幂运算,计算复杂度大

  • 饱和激活函数

Tanh激活函数:

特点:

  • 输出映射到 -1-1

  • 导数为 0-1

  • 梯度消失问题存在一点点改善

  • 任然存在计算复杂度、梯度消失的问题

  • 饱和激活函数

ReLU激活函数

特点:

  • 非饱和激活函数,避免了梯度消失的问题

  • 计算复杂度低

  • 训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活,所以,要设置一个合适的较小的学习率,来降低这种情况的发生

Softmax激活函数

  • 是一种归一化函数,其将输入值映射为0-1之间的概率实数,常用于多分类

2、反向传播

3、梯度消失(梯度弥散)和梯度爆炸

  • 梯度消失:softmax等激活函数,在值较大或较小时,变化很小,导致梯度很小,反向传播不断相乘导致梯度消失的问题

  • 梯度爆炸:神经网络有多次连乘,不断相乘梯度可能越来越大,出现梯度爆炸的问题

4、归一化的方法

  • 最大最小值归一化

  • 缺点:对异常值敏感,最大最小值容易被异常值影响

  • Z-score标准化

  • 对数据鲁棒性比较强,但是可能输出负数

  • 归一化和标准化区别:归一化是将数据缩放到一个固定的区间,不改变数据的分布,受异常点影响大

  • 标准化是调整数据的分布,比如说变成均值为0,标准差为1的分布,更鲁棒,受异常点影响更小

  • 如果对输出结果有特定的要求,数据较为稳定,不存在极端的极大极小值,用归一化

  • 如果数据存在较多异常值或者噪声,用标准化

5、去除异常点的方法

  • Z-score的方法,把每个数据标准化后的值和一个阈值对比,大于阈值上界或者小于阈值下界的就剔除

  • 通过聚类的方法去剔除异常点

  • 用散点图或者热力图的方式来剔除异常点

6、损失函数

回归损失函数:

  • MSE(均方误差)- 预测值和真实值距离的平方,MAE(平均绝对误差)- 预测值和真实值误差的绝对值

  • MSE因为有平方,所以对异常值很敏感,鲁棒性低于MAE

  • MAE因为导数不连续(需使用次梯度优化),求解效率更低,收敛更慢

  • 次梯度优化:处理非光滑凸函数的核心方法,是一个集合,可能包含多个方向的梯度

分类损失函数

  • 交叉熵损失函数,描述了两个概率分布之间的距离(log里面是标签),KL散度(两个概率相等时,KL散度为0)

  • 交叉熵 = KL散度 + 真实分布的熵,如果是one-hot编码,交叉熵等于KL散度,one-hot编码真实分布的熵为0

  • 熵:用来描述一个概率分布,也就是一个信息的不确定性、混乱程度,熵越大,也就表示这个概率分布越混乱,不确定性越高

  • 交叉熵和熵前面都有个负号,KL散度没有

分类为什么用交叉熵不用mse

因为分类通常会有sigmoid这样的激活函数在里面,sigmoid激活函数是饱和的,在x大于5的时候,梯度是很小的,mse反向传播的时候,计算导数的时候,会有一项sigmoid的导数,可能导致,误差大的时候,反而训练慢,但是交叉熵的话,求导数过程中,可以巧妙的把sigmoid的导数消去,所以不用mse

7、优化器的介绍

梯度下降

  • 梯度下降:用所有样本,效率低

  • 随机梯度下降:用小批量的样本

  • 缺点:学习率固定震荡大,收敛比较慢

  • 所以引入动量梯度下降,在计算梯度的时候,引入一个动量项,用来累计梯度变化方向减少震荡,加快收敛

  • 而普通的梯度下降,可能会使迭代点超出可行域投影梯度下降则在每次参数更新后,将更新的参数投影到可行域上,确保迭代点始终在可行域内

Adam和AdanW

  • Adam结合了动量自适应学习率,通过计算梯度的一阶矩(均值)和二阶矩(方差),融入到梯度下降公式中,同时在计算梯度的时候,涉及了L2正则化,防止了模型的过拟合(梯度是根据损失函数计算,损失函数中有正则化)

  • 缺点:Adam会自适应调整缩放更新量,这就导致,L2正则化项也被缩放,出现正则化不均的问题,影响模型效果

  • 引入了AdamW,采样了一种去耦合的方式,将原本梯度计算中L2正则化项,移到了参数更新的公式中去,避免了正则化不均的问题

8、L1正则化和L2正则化的分析

  • 都是为了降低过拟合的问题

  • L1正则化:在损失函数中添加权重的绝对值之和

  • L2正则化:在损失函数在添加权重的平方和

  • L1正则化对异常值更鲁棒L2正则化对异常值更敏感(平方会放大异常值的影响)

  • L1正则化可能产生稀疏解(部分权重被压缩为0),L2正则化则倾向于让权重接近0但不为0

  • 为什么可能产生稀疏解:因为 L1 正则化的导数是不连续的,在零点附近有正有负,可能会导致权重在零点附近震荡,被压缩为0

9、介绍下神经网络中的误差、偏差、方差

  • 误差:误差表示模型预测结果与真实值的差异,模型的目标就是通过训练减少这种误差

  • 偏差:偏差表示模型预测的平均误差,一个模型如果是高偏差的,也就是发生了欠拟合

  • 方差:方差表示模型预测值的变化程度,反映了模型对噪声的敏感程度,一个模型如果是高方差的,即对随机噪声过于敏感,模型过于复杂,也就是发生了过拟合

10、介绍下模型的欠拟合、过拟合

  • 数学角度来看,欠拟合是模型一个高偏差的拟合结果,过拟合是模型的一个高方差的拟合结果

  • 表现来看的话,欠拟合是指模型在训练集和测试集上变现均不佳,过拟合是值模型在训练集上表现很好,在测试集上表现不佳(泛化性不强)

  • 过拟合解决:正则化Dropout降低模型复杂度、通过旋转、加噪声的方式进行数据增强、引入集成学习降低方差

  • 欠拟合解决:减少正则化增强模型复杂度、通过特征工程添加新特征或者组合特征

11、样本不均衡的处理方法

12、参数初始化的方法

  • 初始化:可能会带来梯度消失,一般仅适用于偏执初始化;同时,零初始化可能会带来对称更新的问题,神经元会因为输入相同、权重相同,计算出完全相同的梯度;并且抑制了模型的多样性,即抑制了模型的学习能力

  • 随机初始化:高斯(正态)分布,均匀分布,如果方差较大或者较小,可能发生梯度爆炸或者梯度消失

  • Xavier初始化,Xavier初始化将权重初始化为均匀分布或高斯分布,其方差取决于前一层神经元数量n和后一层神经元数量m,搭配 ​​Sigmoid​​ 或 ​​Tanh​​ 等饱和激活函数,保证前向传播的方差稳定

  • He初始化,根据每一层的激活函数的特性来设置权重的初始范围,缓解ReLU在初始化时的“神经元死亡”问题(避免大量值集中在负区间)