机器学习知识点记录

立此贴记录机器学习的知识点,供优化调试时候开个思路

深度学习如何防止过拟合?

  • 过拟合:在模型参数拟合过程种,由于训练数据包含抽样误差,训练时复杂的模型将抽样误差也考虑在内进行了较好的拟合。具体表现为训练集上效果很好,但是在测试集上效果差,模型泛化能力弱。

  • 产生的原因:
    (1)在进行模型训练时,训练数据不够,即训练数据无法对整个数据的分布进行估计
    (2)权值学习迭代次数足够多,拟合了训练数据中的噪声和训练集中没有代表性的特征。

  • 解决方案:
    (1)提前停止训练过程(Early stopping)
    在迭代收敛之前停止迭代,具体做法:在每个Epoch结束时,计算验证集的accuracy,当accuracy不再提高时就停止训练。(一个Epoch是对所有的训练数据的一轮遍历)。
    在训练的过程中,记录到目前为止最好的validation accuracy,当连续次Epoch(N根据实际情况取值,例如10,20,30)没达到最佳accuracy时,则可以认为accuracy不再提高了。
    (2)扩大数据集
    核心思想:需要得到更多的符合要求的数据,即和已知的数据是独立同分布的,或近似
    从数据源获取更多数据;
    数据增强:通过一定规则扩充数据。如在物体分类问题里,物体在图像中的位置、姿态、尺度,整体图片明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充;
    (3)正则化:
    在损失函数中加入一个额外项,使得在反向传播时能够达到权重衰减的目的,在训练的时候限制权值变大
    不能够一味的去减小损失函数,你还得考虑到模型的复杂性
    常见的正则化包括L1正则化L2正则化
    L1:
    C=C0+λniwi C=C_0+\frac{\lambda}{n}*\sum_{i}w_i
    L2:
    C=C0+λ2niwi2 C=C_0+\frac{\lambda}{2n}*\sum_{i}w_i^2
    w:参数
    (4)dropout(随机失活)
    在训练时,每次随机(例如50%概率)忽略隐层的某些节点,类似bagging的做法
    只用于训练模型,但是无法完成反向传播的调试,因为每次随机删除的节点不一样,因此不能计算J。

- Bacth Normalization
学习参考https://www.cnblogs.com/guoyaohua/p/8724433.html
(1) 为什么需要BN?
每个隐层会面临covariate shift的问题,即隐层的输入分布会有变化,(发生在网络内部),变化的趋势是逐渐往非线性函数的取值区间的左右两极端靠近,两端处梯度较小,这导致反向传播时低层神经网络的梯度消失,导致深度神经网络的收敛越来越慢。
(2)什么是BN?
BN就是一种规范化手段,把中间神经元的输入值拉回到【0,1】标准正态分布,从而输入保持相同的分布。这样可以使得大部分**后的值落入非线性函数(例如sigmoid)的线性区内(敏感区),其对应的导数远离导数饱和区,避免梯度消失,这样来加速梯度下降的收敛过程。
如果多层的线性函数跟一层先行网络是等价的,这意味着降低了网络的表达能力,深度也就没有意义了。所以BN为了保持非线性,对变换后的x又加了scale和shift参数,使x值从正中心的线性区域往非线性挪动。从而找到一个线性和非线性的平衡点。scale和shift是通过训练得到。
(3)训练阶段如何做BN
机器学习知识点记录
机器学习知识点记录
机器学习知识点记录
- 常用**函数

**函数的作用是给神经网络加入非线性因素,所以**函数一般都是非线性函数,从而使得神经网络进行非线性数据建模。
**函数的性质:
*非线性: 当**函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。
*可微性: 当优化方法是基于梯度的时候,这个性质是必须的。单调性: 当**函数是单调的时候,单层网络能够保证是凸函数。: 当**函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
*输出值范围: 当**函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当**函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.

常见的**函数:

  1. 线性函数
  2. 斜面函数
    (1)ReLU:修正线性单元
    f(x)=max(0,x) f(x)=max(0,x)
    (2)ReLU改进
    LReLU,PReLU,RReLU
    ELU
  3. 阈值函数
  4. S型函数

(1)sigmoid
f(x)=11+ex f(x)=\frac{1}{1+e^-x}
输出范围:0~1
(2)tanh
f(x)=1e2x1+e2x f(x)=\frac{1-e^-2x}{1+e^-2x}
输出范围:0~1
(3)softplus
f(x)=log(ex+1) f(x)=log(e^x+1)
(4)softsign
f(x)=xx+1 f(x)=\frac{x}{|x|+1}
输出范围:(-1,1)

更详细可以参考:
https://blog.csdn.net/App_12062011/article/details/56277622

  • 池化层如何选择,max还是average?

池化层是跟在卷积层之后对数据进行下采样,通常来讲max_pooling效果更好,这里进行以下分析:
卷积层的作用主要是做特征提取,特征提取的误差主要来自两个方面:
(1)邻域大小受限造成的估计值方差增大
一般来讲,average-pooling能减小第一种误差,更多的保留图像背景信息,更多的保留信息完整性,比如说DenseNet中的模块之间的连接大多采用average-pooling,在全局平均池化操作中应用也比较广,在ResNet和Inception结构中最后一层都使用了平均池化。
(2)卷积层参数误差造成估计均值的偏移
max-pooling能减小第二种误差,保留更多的纹理信息,更像是做特征选择