【机器学习笔录】机器学习中一些函数的概念及应用[二]

Posted by ShawnD on October 1, 2018

激活函数

  • 是什么? 目前主要的激活函数有以下几种:

    传统神经网络中最常用的两个激活函数为sigmoid和tanh,sigmoid被视为神经网络的额核心所在。

sigmoid: sigmoid

非线性的sigmoid函数对中央区的信号增益较大,对两侧区的信号增益较小,在信号的特征空间映射上,有很好的效果。

tanh: tanh.png

由于sigmoid和tanh激活函数左右两端在很大程度上接近极值,容易饱和,因此正在进行计算时当传递的数值过大或过小时会使神经元梯度接近于0,使得模型计算时会多次计算接近于0的梯度,花费了学习时间却使得权重没有更新。

ReLu: image.png

ReLu对于达到阈值的数据其激活力度随着数值的加大而增大,呈线性关系。 ReLu计算简单,单纯一个值的输入输出不需要进行一系列的复杂计算,从而获得激活值。 ReLu进行模型计算时,一部分神经元在计算时如果有一个大的梯度经过,则此神经元的梯度会被强行设置为0,而在整个其后的训练过程中这个神经元都不会被激活,这会导致数据多样化的丢失,但是也能防止过拟合。

Relu当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和sigmod函数、tanh函数有一样的问题。

ELU: image.png

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

PReLu: image.png

PReLU也是针对ReLU的一个改进型,在负数区域内,PReLU有一个很小的斜率,这样也可以避免ReLU死掉的问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但是不会趋于0,这算是一定的优势吧

  • 为什么? 对于神经网络的拟合,其过程可以认为是在不停地将相似的数据和特征叠加在一起,而激活函数就起到在这些叠加层之间进行切割的作用,使其在真实的贴近过程中还有一个能够被相互区分的能力

  • 怎么用? 来自于莫凡老师的说法,激活函数就是将输入”掰弯“,将神经元的输入映射到输出端。

卷积层

  • 是什么?

    卷积核是一个大小远远小于图像的矩阵,对于图像大矩阵中的每个像素,计算其周围的像素和卷积核对应位置的乘积,最后将将结果相加最终得到的值就是该像素的值,这样就完成了一次卷积。 数字图像处理卷积运算主要有两种思维: 稀疏矩阵:对于稀疏矩阵来说, 卷积网络具有稀疏性, 卷积核的大小远远小于输入数据矩阵的大小。这样能够在计算后获取更少的参数特征,极大地减少了后续的计算量。 参数共享:在提取特征过程中,一个模型在多个参数之中使用相同的参数

  • 为什么?

    卷积核中不同位置权重不同,因为权重不同,在卷积核在和图像的每个像素及其周围像素相乘时,可以提取图像的特征信息。

  • 怎么用? 在tensorflow中对卷积复杂的数学运算进行了很好的封装,调用函数
    1
    
    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
    

    池化层

  • 是什么?

    计算图像一个区域上的某个特定特征的平均值(或最大值)作为特征提取。这种聚合的操作叫做池化,根据不同的池化方式叫做平均池化和最大池化。

  • 为什么?

    理论上卷积后得到图像的特征,可以通过这些特征去训练分类器,但是这样会面临计算量的挑战,池化使得特征具有低得多的维度。

  • 怎么用? TensorFlow中池化运算的函数如下:
    1
    
    tf.nn.max_pool(value, ksize, strides, padding, name=None)
    

    全连接层

  • 是什么?

    正如其名,全连接层就起到将已经训练得到的特征(也就是卷积池化后的输出)和最终输出(也就是最终分类)连接起来的作用。

  • 为什么?

    全连接层将学习到的“分布式特征表示”映射到标记空间的作用 (其实就是将已经提取的特征,通过分类器,进行分类的过程(如softmax激励函数))

  • 怎么用? TensorFlow中使用分类器进行分类的过程其实也就是全连接的过程
    1
    
      tf.nn.softmax()
    

    如何防止过拟合

  • 是什么?

    在TensorFlow训练的过程中,因为去拟合偏离程度较大的点,导致曲线变形。

  • 为什么?
    1.  训练集的数量级和模型的复杂度不匹配,训练集的数量级要小于模型的复杂度。
    2.  训练集和测试集特征分布不一致;
    3.  样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;
    4.  权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征
  • 怎么用?

    1、使用Dropout,训练过程按一定几率关闭或忽略某些层的节点。 2、权重衰减(正则化):将权值大小加入到损失函数中

此外还有获取更多数据集,采用合适模型,Early Stopping, 可变化的学习率, 使用Batch_Normalization,交叉验证,PCA特征提取,增加各种噪音等方式来降低过拟合。