【深度学习】神经网络结构

一、线性和非线性问题

在这里插入图片描述

线性可分

在这里插入图片描述

线性不可分

判断一堆数据是否能够线性可分的关键在于所在维度。
线性不可分→线性可分,可采用升高维度的方式。
线性可分和线性不可分的辩证统一思想:在低维空间中数据线性不可分,通过映射到高维空间是线性可分,回到低维空间又是线性不可分的,两者统一而矛盾。

在这里插入图片描述

线性不可分→线性可分

二、激活函数

1.激活函数的作用

  • 为模型提高非线性能力
  • 提高模型鲁棒性,让模型下降更加稳定,收敛更快

2.常用激活函数(本节部分截取自常用激活函数理解与总结

同时参考 深度学习领域最常用的10个激活函数,一文详解数学原理及优缺点

  • sigmoid函数(主要用于二分类)
    Sigmoid 是常用的非线性的激活函数,它的数学公式如下:
    f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1
    在这里插入图片描述

特点: 能够把输入的连续实值变换为0和1之间的输出。

缺点:

  1. 在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。如果我们初始化神经网络的权值为 [0,1] 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 ( 1 , + ∞ ) 区间内的值,则会出现梯度爆炸情况。

在这里插入图片描述

  1. Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如 x > 0 , f = w T x + b x > 0 , f = w T x + b x>0 ,f= w^Tx+bx>0, f=w^Tx+b x>0,f=wTx+bx>0,f=wTx+b,那么对 w w w求局部梯度则都为正,这样在反向传播的过程中 w w w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢
  2. 解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间
  • tanh函数(也用于二分类)
    f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+exexex
    在这里插入图片描述
    它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

  • ReLU函数
    f ( x ) = { x , x ≥ 0 0 , x < 0 f(x)=\left\{ \begin{array}{rcl} x ,&x≥0\\ 0,&x<0 \end{array} \right. f(x)={x0x0x<0
    f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
    在这里插入图片描述
    优点:
     1)解决了gradient vanishing问题 (在正区间)
     2)计算速度非常快,只需要判断输入是否大于0
     3)收敛速度远快于sigmoid和tanh
    注意点:
     1)ReLU的输出不是zero-centered
     2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1)非常不幸的参数初始化,这种情况比较少见 (2)learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

  • Leaky ReLU函数
    f ( x ) = { x , x ≥ 0 α x , x < 0 f(x)=\left\{ \begin{array}{rcl} x ,&x≥0\\ \alpha x,&x<0 \end{array} \right. f(x)={xαxx0x<0
    在这里插入图片描述

三、输出函数

1.目标

让损失最小化,也就是让输出和标签之间更加靠近。

2.常用的输出函数

  • Softmax(又称 归一化指数函数)
    公式: f ( z j ) = e z j ∑ i = 1 n e z i f(z_j)=\frac{e^{z_j}}{\sum_{i=1}^n e^{z_i}} f(zj)=i=1neziezj
    z j z_j zj是分类器前级输出单元的输出(即第 j j j个节点的输出), j j j表示类别索引,总类别个数为 n n n
    f ( z j ) f(z_j) f(zj)表示的是当前元素的指数与所有元素指数和的比值。
    Softmax将多分类的输出值转化为了相对概率。
    Softmax函数的输出具有排他性,当其中一个值变大时,其他的值会变小,总和为1。



    在这里插入图片描述
    直白来说就是将原来输出的3,1,-3通过softmax函数,映射成为(0,1)的值
    这些值的和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大)的结点,作为我们的预测目标

    知乎上看到一个十分形象的评论:SVM只选自己喜欢的男神,Softmax把所有备胎全部拉出来评分,最后还归一化一下
    (想更详细的了解Softmax可查看知乎文章:详解softmax函数以及相关求导过程

  • One-Hot独热编码

    又称为 一位有效编码,只有一个1,其他都是0

    独热编码优势:
    ①对特征进行扩充
    ②从一个权重变为多个权重,提升了模型非线性能力
    ③不需要参数进行归一化处理,每组特征之间距离一样,更合理
    ④随着将大权重拆分成几个小权重管理特征,降低了异常值对模型的影响,增加了模型稳定性
    ⑤生成了较大的稀疏矩阵(数值为0的元素远多于非0元素),计算速度更快

  • 其他函数
    l o g log log(压缩)、 e e e(扩大)、 y = x y=x y=x

四、损失函数

1.损失函数的作用

  • 衡量模型的输出和标签值的差异
  • 评估模型的预测值与真实值不一致的程度,也是神经网络中优化的目标函数。
    神经网络训练或者优化的过程就是最小损失函数的过程,损失函数越小说明模型的预测值越接近真实值,模型健壮性也就越好。

2.常用的损失函数(部分内容转自深度学习_损失函数)

  • MAE(平均绝对误差,也称L1损失)

    L1范数损失函数,也被称为最小绝对偏差(LAD),最小绝对值误差(LAE),其公式为:
    S = ∑ i = 1 n ∣ Y i − f ( x i ) ∣ S=\sum_{i=1}^n |Y_i-f(x_i)| S=i=1nYif(xi)
    由公式可以看出,它是把目标值 Y i Y_i Yi与估计值 f ( x i ) f(x_i) f(xi)绝对值的总和 S S S最小化。

    MAE是一种用于回归的损失函数,是目标值与预测值之差的绝对值之和,其公式为: M A E = ∑ i = 1 n ∣ f ( x i ) − Y i ∣ n MAE=\frac{\sum_{i=1}^n |f(x_i)-Y_i|}{n} MAE=ni=1nf(xi)Yi
    下图是平均绝对误差值的曲线分布,其中最小值为预测值=目标值的位置。在这里插入图片描述

  • MSE(均方差损失函数,也称L2损失)

    L2范数损失函数,也称为最小平方误差(LSE),其公式为: S = ∑ i = 1 n ( Y i − f ( x i ) ) 2 S=\sum_{i=1}^n (Y_i-f(x_i))^2 S=i=1n(Yif(xi))2
    由公式可以看出,它是把目标值 Y i Y_i Yi与估计值 f ( x i ) f(x_i) f(xi)差值的平方和 S S S最小化

    MSE是最常用的回归损失函数,是求预测值与真实值之间距离的平方和,其公式为: M S E = ∑ i = 1 n ( f ( x i ) − Y i ) 2 n MSE=\frac{\sum_{i=1}^n (f(x_i)-Y_i)^2}{n} MSE=ni=1n(f(xi)Yi)2
    下图是均方误差值的曲线分布,其中最小值为预测值=目标值的位置。我们可以看到随着误差的增加损失函数增加的更为迅猛。在这里插入图片描述

  • MAE和MSE的选择

    从梯度的求解以及收敛上,MSE是优于MAE的。MSE处处可导,而且梯度值也是动态变化的,能够快速的收敛;而MAE在0点处不可导,且其梯度保持不变。对于很小的损失值其梯度也很大,在深度学习中,就需要使用变化的学习率,在损失值很小时降低学习率。

    对离群(异常)值得处理上,MAE要明显好于MSE。

    如果离群点(异常值)需要被检测出来,则可以选择MSE作为损失函数;如果离群点只是当做受损的数据处理,则可以选择MAE作为损失函数。

  • Smooth L1损失函数

    即光滑后的L1损失函数,其公式为: S m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e SmoothL_1(x)=\begin{cases} 0.5x^2 &if |x|<1 \\ |x|-0.5 &otherwise \end{cases} SmoothL1(x)={0.5x2x0.5ifx<1otherwise
    在这里插入图片描述
    从上图可以看出,在[-1,1]之间实际上就是L2损失,这样解决了L1的不光滑问题,在[-1,1]区间外,实际上就是L1损失,这样就解决了离群点梯度爆炸的问题。

    在边框回归预测中,Smooth L1能从两个方面限制梯度:

    • 当预测框与 ground truth 差别过大时,梯度值不至于过大;
    • 当预测框与 ground truth 差别很小时,梯度值足够小。
  • 交叉熵损失函数(部分转自交叉熵损失函数原理详解

    • 信息熵
      用来表示所有信息量的期望(期望是试验中每次可能结果的概率乘以其结果的总和),其公式为 H ( p ) = − ∑ x p ( x ) l o g p ( x ) H(p)=-\sum_{x}p(x)logp(x) H(p)=xp(x)logp(x)

    • 相对熵(KL散度)
      如果对于同一个随机变量 X X X有两个单独的概率分布 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x),则我们可以使用KL散度来衡量这两个概率分布之间的差异。

      KL散度越小,表示 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x)的分布更加接近,可以通过反复训练 Q ( x ) Q(x) Q(x)来使 Q ( x ) Q(x) Q(x)的分布逼近 P ( x ) P(x) P(x)
      其公式如下:
      在这里插入图片描述

    • 交叉熵

      KL散度 = 交叉熵 - 信息熵

      交叉熵公式: H ( p , q ) = ∑ x p ( x ) l o g 1 q ( x ) = − ∑ x p ( x ) l o g q ( x ) H(p,q)=\sum_{x}p(x)log\frac{1}{q(x)}=-\sum_{x}p(x)logq(x) H(p,q)=xp(x)logq(x)1=xp(x)logq(x)
      交叉熵损失常和Softmax搭配使用,Softmax将输出的结果进行处理,使多个分类的预测值和为1,再使用交叉熵计算损失。

  • IOU损失函数

    I o U = ∣ A ∩ B ∣ ∣ A ∪ B ∣ L o s s = 1 − I o U IoU=\frac{|A\cap B|}{|A\cup B|}\\ Loss=1-IoU IoU=ABABLoss=1IoU
    I o U IoU IoU是真实框和预测框的交集和并集之比,当它们完全重合时, I o U IoU IoU就是1,那么对于 L o s s Loss Loss来说, L o s s Loss Loss是越小越好,说明他们重合度高,所以 I o U L o s s IoU Loss IoULoss就可以简单表示为 1 − I o U 1- IoU 1IoU

五、优化方法

1.梯度下降法

  • 标准梯度下降法(GD)(每个样本计算一次)在这里插入图片描述

    • 容易陷入局部最优解
    • 训练速度慢
  • 批量梯度下降法(BGD)(每批样本计算一次)在这里插入图片描述

    • 训练速度较快
    • 选择平均梯度最小的方向
  • 随机梯度下降法(SGD)(每批样本随机抽样计算一次)在这里插入图片描述
    在这里插入图片描述

    • 训练速度快(不需要计算每个样本的梯度或者平均梯度)
    • 从批样本随机选择一个方向(某次可能不正确,最终正确)

2.动量优化法

  • Momentum(动量梯度下降)在这里插入图片描述

    SGD with momentum
    • 训练速度快(积攒历史梯度,有惯性的下降)
    • 波动小(取前几次波动的平均值当做这次的w)
  • NAG算法
    在这里插入图片描述
    SGD-M 的步长计算了当前梯度(短蓝向量)和动量项(长蓝向量)。然而,既然已经利用了动量项来更新 ,那不妨先计算出下一时刻 θ θ θ的近似位置 (棕向量),并根据该未来位置计算梯度(红向量),然后使用和SGD-M中相同的方式计算步长(绿向量)。这种计算梯度的方式可以使算法更好的「预测未来」,提前调整更新速率。

    • 训练速度快(校正积攒梯度,提前预知下一次梯度)
    • 预知梯度底部位置(不仅增加了动量项,并且在计算参数的梯度时,在损失函数中减去了动量项。在底部速度会降下来,不会冲上另一个山坡)

3.自适应学习率优化算法

  • AdaGrad算法在这里插入图片描述

    • 每个变量用不同的学习率,学习率越来越慢(对于已经下降的变量,则减缓学习率,对于还没下降的变量,则保持较大的学习率)
    • 模型收敛稳定(由于学习率越来越小,接近目标的时候震荡小)
  • RMSProp算法在这里插入图片描述

    • 自适应调整学习率(避免了学习率越来越低的问题)
    • 模型收敛稳定(消除了摆动大的方向,各个维度的摆动都较小)
  • AdaDelta算法(结合了AdaGrad、RMSProp)在这里插入图片描述

    • 训练速度快(模型训练初中期速度效果好,速度快)
    • 模型收敛不稳定(模型训练后期会反复在局部最小值附近抖动)
  • Adam算法(结合了AdaDelta和RMSProp)在这里插入图片描述

    • 对内存需求较小(适用于大数据集和高维空间)
    • 不同参数有独立自适应的学习率(通过计算梯度的一阶矩估计和二阶矩估计)
    • 解决稀疏矩阵和噪声问题(结合了AdaDelta和RMSProp算法最优性能)

4.优化算法比较

在这里插入图片描述
我们可以看到不同算法在损失面等高线图中的学习过程,它们均同同一点出发,但沿着不同路径达到最小值点。
其中 Adagrad、Adadelta、RMSprop 从最开始就找到了正确的方向并快速收敛;SGD 找到了正确方向但收敛速度很慢;SGD-M 和 NAG 最初都偏离了航道,但也能最终纠正到正确方向,SGD-M 偏离的惯性比 NAG 更大。

在这里插入图片描述
这里展现了不同算法在鞍点处的表现。
SGD、SGD-M、NAG 都受到了鞍点的严重影响,尽管后两者最终还是逃离了鞍点;而 Adagrad、RMSprop、Adadelta 都很快找到了正确的方向。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值