机器学习有关问题

机器学习训练中可能出现的问题:

梯度消失爆炸的根本原因是反向传播训练法则,前面层上的梯度是后面层上梯度的乘积。

神经网络训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差值,根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。训练普遍使用BP算法,核心思想是,计算输出值与标签值之间的损失函数值,然后计算其相对于每个神经元的梯度,进行权值的迭代。

梯度消失和梯度爆炸:

在反向传播中,当网络模型层次较多时,梯度爆炸和梯度消失不可避免。梯度爆炸:前面层比后面层的梯度变化更大(对激活函数求导>1,梯度会以指数形式增加);梯度消失:前面层比后面层的梯度变化更小对激活函数求导<1,梯度会以指数形式衰减)。

什么是梯度消失:

梯度下降方法通过参数的细小变化来影响整个神经网络的输出,当这种参数的变化不能影响输出或影响很小,整个网络不能有效学习,在梯度消失的问题中,神经网络在最前面层的梯度变的非常小,即使前几层的参数变化很多,对神经网络的输出也影响不大。

梯度消失的后果:

梯度消失会造成权值更新缓慢,模型的训练难度增加。

梯度消失、爆炸的原因:

1.根本原因是反向传播训练法则,前面层上的梯度是后面层上梯度的乘积。

2.许多激活函数会将输出值挤压在很小的区间里,在激活函数(sigmoid)两端较大的定义域内梯度为0,造成学习停止。当多层激活函数叠加时,情况会更加严重,第一层将大的输入区间映射到一个小的范围内,下一层将会映射到更小的范围内,因此即使第一层的参数变化很大,对输出的影响也不会很大

梯度消失、爆炸的解决方法:

  • 预训练模型+微调

    每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。先寻找局部最优,然后整合寻找全局最优。

  • 梯度剪切+正则化

    梯度剪切,设置一个梯度剪切阈值,当梯度超过这个阈值的时候,强制限制在这个范围内

    权重正则化(regularization),通过对网络权重做正则来控制过拟合

    L1正则:X向量各个元素的绝对值之和

    L2正则:X向量各个元素的平方和的1/2次方

    Lp范数:X向量各个元素的p次方之和的1/p次方

    如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生

  • relu、leakrelu、elu等激活函数

    Relu: $y= max(0,x)$,思想就是当激活函数的导数为1,那就不存在梯度消失和爆炸的问题,每层的网络都可以有相同的更新速度。

    优点:解决了梯度爆炸和消失的问题;计算方便,计算速度快;加速了网络的训练。

    缺点:负数部分恒为零,导致一些神经元无法激活(可通过设置小学习率解决);输出不以0为中心。

    leakrelu就是为了解决relu的0区间带来的影响,其数学表达为:$leakrelu=max(k∗x,x)$,其中k是leak系数,一般选择0.01或者0.02,或者通过学习而来。

  • 批规范化(batch normalization,BN )

    BN 调整了数据的分布,不考虑激活函数,它让每一层的输出归一化到均值为0 方差为1的分布,这保证了梯度的有效性,可以解决梯度反向传播过程中的梯度问题。

    反向传播中,经过每一层的梯度会乘以该层的权重:正向传播中 $f2 = f1(wT*x+b)$, 那么反向传播中 $\frac{\partial f2}{\partial x} = \frac{\partial f2}{\partial f1}\omega $, 反向传播中有w 的存在,所以w的大小影响了梯度的消失和爆炸,batch normalization 通过对每一层的输出规范为均值和方差一致,消除w带来放大缩小的影响,可以理解为BN将输出从饱和区拉到非饱和区

  • 残差结构

    残差中有跨层连接结构,引入了残差的捷径(shortcut)部分。shortcut可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。

  • LSTM 使用了那些门

    主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“

过拟合 overfitting

什么是过拟合

一个模型过于复杂之后,它会过于集中于学习训练中的随机噪音的部分而忘记去“训练”数据中的通用趋势。从有限的训练集期待学到具有无限表达能力的网络,本来就是伪命题,overfitting是一件不可根除、只能减轻的事情

过拟合的表现

模型在训练集上的损失函数较小,预测准确率较高;但是在测试集上损失函数较大,预测准确率低

过拟合的原因

1.训练数据与模型复杂度不匹配,训练数据过少,模型过于复杂。

2.训练集和测试集的特征分布不同

3.训练数据中的噪音过大

4.训练的迭代次数过多,导致学习到了训练数据中不具有代表性的特征

解决过拟合的方法

  1. 数据集增强data augmentation

    增加训练数据

  2. Dropout

    我们在前向传播时,让某个神经元的激活值以一定的概率p停止工作,这样模型的泛化能力更强,因为它不会依赖某些局部特征

  3. Early stop

    使用迭代次数截断来防止过拟合,在模型对训练数据集迭代收敛之前停止迭代防止过拟合

    具体做法:在训练过程中,记录到目前为止最好的最好的validation accuracy,当连续多少个epoch后没能达到最佳accuracy,则认为accuracy 不再提高,可以停止迭代。

  4. 正则化 regularization

    所谓正则化,简单来说就是惩罚函数

    参数范数惩罚(parameter norm penalties):机器学习中常使用正则化措施是去限制模型的能力。

    L0范数惩罚:

    我们需要拟合数据的分布规律,就是选择多项式函数的模型,我们通过控制高次多项式系数为不为0来限制。L0范数惩罚,从不为0的参数出发限制,即不等于0的个数限制在一定范围内以达到限制模型的目的

    假设我们要拟合一群二次函数分布的数据,但并不知道其真实的分布规律(知道也就不用学习了)。学习的本质其实就是不停地尝试,先从一次函数进行尝试,然后是五次函数,九次函数,三次函数,二次数等,然后选出其中效果最好的一个,便是那最佳模型。以上方法有些令人失望,但未尝不是一个好方法。当然,为了显得“高端”些,我们需要将上面的内容粉饰一下。我们知道九次多项式包含了前八次多项式,那么为了节省力气,我们想要八次多项式时,只需要将九次项系数设置为0就可以了。有了这种想法,多项式函数的模型选择,其实就变成了高次多项式系数的限制。从高次多项式数一直到二次多项式函数的尝试,其实就是在限制参数的个数,如下式所示的九次多项式。

    ​ $f(x) = \omega 1x^{9}+ \omega 2x^{8}+….+ \omega 8x^{2}+ \omega 9x^{1}+ \omega 10x^{0}$

    只保留前三阶的的多项式如下:

    ​ $f(x) = 0x^{9}+0x^{8}+….+ \omega 8x^{2}+ \omega 9x^{1}+ \omega 10x^{0}$

    简单来说就是高阶的系数为零,使用数学表示即使用约束条件进行表示如下:

    ​ $min(J(w))$

    ​ $s.t.w1 = w2 = …=0$

    这是一个思路,但是实际使用中还是不实用,因为一个网络拥有上百万个参数,按照上面的还需要都标记,开销很大,因此在基础上需要继续简化,如何简化呢?从不为零的参数出发进行限制,即使不等于0的个数限制在一定的范围内以此达到限制模型的目的,而这种方法就称为L0范数惩罚,如下:

    $min(J(w))$

    ​ $s.t.\sum_{i=1}^{m}I\left { w_{i} \neq 0\right }\leq c$

    ​ 其中I的英文不为零的个数状语从句:

L1范数惩罚:

也称为参数稀疏性惩罚,参数数值的总和限制在某个范围内,参数的总和要小于某个值。虽然这样高阶项的系数不为零,但是也是很小的数字基本被忽略到可以接受的程度。绝对值之和

$min(J(w))$

​ $s.t.\sum_{i=1}^{m}\left | w_{i} \right |\leq c$

L1范数正则化通过向成本函数中添加L1范数,使得学习到的结果满足稀疏化,从而方便特征提取

L2范数惩罚:

称为权重衰减惩罚,L1中的约束条件中带有绝对值,这在数学上不好处理,加入平方项就能避免正负相抵消

​ $ min(J(w))$

​ $s.t.\sum_{i=1}^{m} \left ( w_{i} \right )^{2} \leq c$

通过C值来控制学习算法模型的能力,C越大模型能力越强,C越小模型能力越小。

​ 在LOSS函数后加入正则项。

L2参数正则化

​ 正则项是权值的平方和,本质是限制空间范围,缩小解空间,控制模型复杂度

​ 分别对加了正则项的LOSS函数求求导,L2正则项在权值为0的时候导数为0,而L1正则项在权值为0时的导数为正负lambda,则引入L2正则对Loss函数在权值为0 时的导数不产生影响,但是引入L1正则会使得Loss函数在权值为0时突变,若左右导数异号则说明此值为极小值,所以容易得到权值为0.

L1参数正则化

​ 正则项为权值的绝对值之和

​ 限制更加严格,也就是个更加稀疏,稀疏性也就是我们最终优化到的参数中有 许多0。稀疏性有利于特征提取。由于大多数参数都是0,而这些参数对应的特 征就没有利用,实际上我们就选择出了一些重要特征对数据进行预测,并自动 过滤掉一些无用的特征,无用特征很大程度上都是噪声特征

神经网络的泛化能力

泛化能力(generation capability)是指机器学习方法训练出一个模型,对于训练集的表现良好,对于未知数据集也应该表现良好的能力。过拟合的原因就是模型的泛化能力不足。

提高模型的泛化能力的两种方法:

  1. Relational inductive bias 关系性推断偏好,是一种直接提高模型泛化能力的方法。RIBs指的是网络本身设计所强加的一些特质、服从的一些规则。这些规则约束了网络可能呈现的样子和形式,相比于原本暴力的pure data-driven的,完全依赖和相信训练数据的、忽视网络可以服从的一些自然界存在的先验信息的训练,将训练过程变成更加可控、更加符合自然规律。我们将网络的训练理解为在一个高维的参数空间选择一个最好的点,RIBs通过先验和规则,将搜索空间变小,让一些离谱的参数组合,网络模型直接在训练时被淘汰
  2. 太overfit在了训练集中一些“高频”的、低varaince的特性特征,一些并不是普世存在而是训练集采样得到的个例noise。

对这种高频的noise的边缘化和控制,有两种思路:

1.让网络更加全面的均匀的关注所有的特征。因为高频噪声在所有特征中只占少数,因此对所有特征均匀关注等同于冲淡对高频特征的关注

2.引入随机性,stochastic behaviors of the network。这种随机性呈现出一种网络结构的整合或者重组。可以理解为对特征的二次筛选和过滤。高频罕见的噪声可以保留的概率自然比低频普世特征要低,所以等同于冲淡或者边缘化高频噪声。

未完。。。。。

模型不收敛的原因

激活函数,损失函数,各个层

作用怎么写

梯度下降算法的原理,相关的学习率和batch size

深度学习算法

SVM之类的是干什么的

神经网络调参:

损失函数是否合适

学习率选择是否合适

batch size 是否合适

训练样本是否正常,是否需要增强

是否设置 batch normlaztion

激活函数的类型是否选择恰当

是否选择合适的优化算法(梯度下降,Adam)

是否存在过拟合