学习笔记:深度学习(1)——基础概念和激活函数

学习时间:2022.04.08~2022.04.09

1. 神经网络基础概念

1.1 什么是神经网络

人工神经网络(Artificial Neural Networks,ANN)也简称为神经网络,是一种模仿生物神经网络行为特征,进行分布式并行信息处理的数学模型。

这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

生物神经网络中,单个神经元的结构:

在这里插入图片描述

1.2 从神经元模型到感知机模型

1.2.1 M-P神经元模型

1943年,心理学家Warren McCulloch和数学家Walter Pitts合作提出 基于生物神经网络的麦卡洛克-皮茨神经元模型(McCulloch-Pitts′ neuron model)。其基本思想是抽象和简化生物神经元的特征性成分。

  • 每个神经元都是一个多输入单输出的信息处理单元;
  • 神经元输入分兴奋性输入和抑制性输入两种类型;
  • 神经元具有空间整合特性和阈值特性;
  • 神经元输入与输出间有固定的时滞,主要取决于突触延搁;
  • 忽略时间整合作用和不应期;
  • 神经元本身是非时变的,即其突触时延和突触强度均为常数。

McCulloch-Pitts模型公式如下:
O j ( t + 1 ) = f { [ ∑ i = 1 n ω i j χ i ( t ) ] − T j } O_j(t+1) = f\{[\sum^n_{i=1}ω_{ij}χ_i(t)]-T_j\} Oj(t+1)=f{ [i=1nωijχi(t)]Tj}
O j O_j Oj为输出信号;

χ i χ_{i} χi为加于输入端(突触)上的输入信号, ( i = 1 , 2 , … , n ) (i=1, 2, …, n) (i1,2,,n)

ω i j ω_{ij} ωij为相应的突触连接权重系数,它是模拟突触传递强度的一个比例系数;

∑ i = 1 n \sum^n_{i=1} i=1n表示突触后信号的空间累加;

T j T_j Tj表示神经元的阈值;

f f f表示神经元的响应函数。作用:①控制输入对输出的激活作用;②对输入输出进行函数转换;③对可能是无限域的输入进行变换。

运作规则:时间离散,时刻 t ( t = 0 , 1 , 2 , … … ) t(t=0, 1, 2, ……) t(t=0,1,2,)得到兴奋型输入 χ i χ_{i} χi,如果膜电位( ∑ i = 1 n ω i j χ i ( t ) \sum^n_{i=1}ω_{ij}χ_i(t) i=1nωijχi(t))等于或大于阈值( T j T_j Tj)以及抑制型输入为0,则在时刻 t + 1 t+1 t1,神经元细胞输出( O j ( t + 1 ) O_j(t+1) Oj(t+1))为1,否则为0。

img

1.2.2 感知机(Perceptron)模型

但是M-P模型缺乏一个对人工智能而言至关重要的学习机制——“赫布法则”(1949年-Donald Hebb-《行为的组织》)。通俗来讲就是两个神经细胞交流越多,它们连接的效率就越高,反之就越低。

在美国康奈尔大学航天实验室工作的心理学家弗兰克·罗森布拉特(Frank Rosenblatt)受到赫布基础性工作的启发,于1957年提出了"感知机" (Perceptron)模型。

img

这是第一个用算法来精确定义神经网络的模型,感知机由两层神经元组成,输入层接收外界信号,输出层是M-P神经元,即阈值逻辑单元,也称为神经网络的一个处理单元(PE,Processing Element)。

罗森布拉特给出感知机一个简单直观的学习方案:给定一个有输入输出实例的训练集,感知机「学习」一个函数:对每个例子,若感知机的输出值比实例低太多,则增加它的权重,否则若比实例高太多,则减少它的权重。该算法如下:

  1. 给权重系数置初值;

  2. 对于训练集中一个实例的输入值,计算感知机的输出值;

  3. 如若感知机的输出值和实例中默认正确的输出值不同:

    (1)若输出值应该为0但实际为1,减少输入值是1的例子的权重;

    (2)若输出值应该为1但实际为0,增加输入值是1的例子的权重;

  4. 对于训练集中下一个例子做同样的事,重复步骤2~3,直到感知机不再出错为止;

  5. 通过将计算结果馈送到激活函数(or传递函数),把计算结果变成输出信号。

    引入激活函数的目的是在模型中引入非线性因素。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

preview

感知器本质上就是一个通过加权计算函数进行决策的工具。

单层感知机、多层感知机、包含一个隐层的多层感知机,如下图:

imgimgimg

1.3 激活函数

1.3.1 激活函数的定义

激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数/传递函数)。

img

1.3.2 为什么要使用激活函数?

使用非线性激活函数,能够从输入输出之间生成非线性映射。

因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

1.3.3 激活函数的作用

  • 增加模型的非线性分割能力;

  • 提高模型鲁棒性:可以拟合各种不同情形中的数据;

  • 缓解梯度消失(Vanishing Gradients)问题;

    假设神经元输入Sigmoid的值特别大或特别小,对应的梯度约等于0,即使从上一步传导来的梯度较大,该神经元权重(w)和偏置(bias)的梯度也会趋近于0,导致参数无法得到有效更新。

    梯度爆炸:梯度误差是在神经网络训练期间计算的方向和梯度,神经网络以正确的方向和数值更新网络权重。在深度网络或递归神经网络中,梯度误差可能在更新过程中累积,造成非常大的梯度。这反过来会导致网络权重的大量更新,进而导致网络不稳定。在极端情况下,权重值可能变得太大,以至于溢出并导致NaN值现成梯度爆炸现象。

  • 加速模型收敛等。

    神经元死亡:ReLU函数尽管可以提升计算高效性,但同样也可能阻碍训练过程。通常,激活函数的输入值有一偏置项(bias),假设bias变得太小,以至于输入激活函数的值总是负的,那么反向传播过程经过该处的梯度恒为0,对应的权重和偏置参数此次无法得到更新。如果对于所有的样本输入,该激活函数的输入都是负的,那么该神经元再也无法学习,称为神经元”死亡“问题。

1.3.4 激活函数的分类

激活函数主要分为饱和激活函数(Saturated)和非饱和函数(One-sided / Non-Saturated)。

  • 假设 h ( x ) h(x) h(x)是一个激活函数:

    • n n n趋近于负无穷时,激活函数的导数趋近于0( l i m n → − ∞ h ′ ( x ) = 0 lim_{n→-∞} h'(x) = 0 limnh(x)=0),则该激活函数为左饱和;当 n n n趋近于正无穷时,激活函数的导数趋近于0( l i m n → + ∞ h ′ ( x ) = 0 lim_{n→+∞} h'(x) = 0 limn+h(x)=0),则该激活函数为右饱和。当一个函数既满足左饱和、又满足右饱,则为饱和函数。

    • 不满足饱和函数条件的函数则称为非饱和激活函数。

img
饱和激活函数
1. Sigmoid函数

Sigmoid函数也叫Logistic函数,曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。

函数的表达式及图像如下:
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1
img

  • 优点:
    • 它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1;
    • 优化稳定,可以用作输出层;
    • 求导容易: f ′ ( x ) = x ( 1 − x ) f^′(x) = x(1−x) f(x)=x(1x),导数在0处取得最大值0.25。
  • 缺点:
    • 其输出并不是以0为中心的;
    • 在取值很大或很小的时候,导数非常小,会导致参数的更新速度很慢;
    • 其解析式中含有幂运算,计算机求解时相对来讲比较耗时;
    • 容易在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
2. TanH函数

TanH激活函数(读作Hyperbolic Tangent),又称双曲正切激活函数(hyperbolic tangent activation function),它解决了Sigmoid函数的不是zero-centered输出问题,然而梯度消失和幂运算的问题仍然存在。

函数的表达式及图像如下:
t a n H ( x ) = e x − e − x e x + e − x = 2 1 + e − 2 x − 1 tanH(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}} = \frac{2}{1+e^{-2x}} - 1 tanH(x)=ex+exexex=1+e2x21
img

我们可以发现Tanh函数可以看作放大并平移的Sigmoid函数(Logistic函数),其值域是(−1, 1)。Tanh与sigmoid的关系如下:
f ( x ) = 2 s i g m o i d ( 2 x ) − 1 f(x) = 2sigmoid(2x) - 1 f(x)=2sigmoid(2x)1

  • 优点:
    • 比Sigmoid函数收敛速度更快;
    • 相比Sigmoid函数,其输出以0为中心;
    • 求导容易: f ′ ( x ) = 1 − ( f ( x ) ) 2 f^′(x) = 1-(f(x))^2 f(x)=1(f(x))2
  • 缺点:
    • 激活函数运算量大,包含幂的运算;
    • 还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。
  • 注意:在一般的二元分类问题中,tanh函数用于隐藏层,而sigmoid函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。
3. Softmax函数

Softmax是soft(软化)的max。Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。

对于长度为K的任意实向量,Softmax可以将其压缩为长度为K,值在(0,1)范围内,并且向量中元素的总和为1的实向量。

函数的表达式及图像如下:

其中,i、j分别是第i和j个节点的输出值?

S i = e i ∑ j = 1 j e j S_i = \frac{e^i}{\sum_{j=1}^je^j} Si=j=1jejei

img
  • 优点:
    • Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关;
  • 缺点:
    • 在零点不可微;
    • 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
非饱和激活函数
1. ReLU函数

ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanH函数的梯度消失问题,在目前的深度神经网络中被广泛使用。本质上是一个斜坡(ramp)函数。

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient。ReLU虽然简单,但却是近几年的重要成果。

函数的表达式及图像如下:
f ( x ) = M a x ( 0 , x ) = { 0 x ≤ 0 x x > 0 f(x) = Max(0, x) = \begin{cases}0 & x≤0\\x & x>0\end{cases} f(x)=Max(0,x)={ 0xx0x>0
img

  • 优点:
    • 相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛;
    • Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现;
    • 由于当x>0时的梯度值一直为1,有效缓解了梯度弥散、梯度爆炸的问题;
    • 在没有无监督预训练的时候也能有较好的表现;
    • 提供了神经网络的稀疏表达能力(Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生);
    • 被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高)。
  • 缺点:
    • ReLU的输出不是zero-centered;
    • 随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了;
    • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
2. LReLU函数、PReLU函数

人们为了解决Dead ReLU Problem和梯度消失问题,提出了将ReLU的前半段(当x<0时)设为 γ x γx γx而非0(通常 γ = 0.01 γ=0.01 γ=0.01),由此提出了LReLU函数(Leaky ReLU)。

函数的表达式如下:
f ( x ) = M a x ( α x , x ) = { γ x x ≤ 0 x x > 0 f(x) = Max(\alpha x, x) = \begin{cases}γx & x≤0\\x & x>0\end{cases} f(x)=Max(αx,x)={ γxxx0x>0
LReLU是在ReLU的基础上针对存在的问题进行的扩展。除此以外也可以从其他角度进行扩展,不让x乘常数项,而是让x乘超参数,这看起来比LReLU效果要好,这一种扩展就是PReLU函数(Parametric ReLU),即为带参数的ReLU函数。其中是 γ i x γ_ix γix超参数,对应了x≤0时函数的斜率。

这里引入了一个随机的超参数,它可以被学习,可以对它进行反向传播。不同神经元可以有不同的参数,其中的i对应了第i个神经元,这使神经元能够选择负区域最好的梯度,有了这种能力,它们可以变成ReLU或Leaky ReLU。如果 γ i = 0 γ_i=0 γi=0,那么PReLU 就退化为ReLU;如果 γ i γ_i γi为一个很小的常数,则PReLU 可以看作Leaky ReLU;PReLU 可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。

函数的表达式如下:
f ( x ) = M a x ( γ i x , x ) = { γ i x x ≤ 0 x x > 0 f(x) = Max(γ_ix, x) = \begin{cases}γ_ix & x≤0\\x & x>0\end{cases} f(x)=Max(γix,x)={ γixxx0x>0
函数图像如下:

img
  • 优点:
    • leaky有助于扩大ReLU函数的范围,Leaky ReLU的函数范围是(负无穷到正无穷);
  • 缺点:
    • 尽管Leaky ReLU具备 ReLU 激活函数的所有特征(如计算高效、快速收敛、在正区域内不会饱和),但并不能完全证明在实际操作中Leaky ReLU 总是比 ReLU 更好;
    • 在很多情况下,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 进行实践,看看哪一种方式是否更适合你的问题。
3. ELU函数、SELU函数

ELU(Exponential Linear Unit) 的提出同样也是针对解决 ReLU负数部分存在的问题,由Djork等人提出,被证实有较高的噪声鲁棒性。ELU激活函数对 x x x小于零的情况采用类似指数计算的方式进行输出。与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。

函数的表达式及图像如下:
f ( x ) = { α ( e x − 1 ) x ≤ 0 x x > 0 f(x) = \begin{cases}α(e^x-1) & x≤0\\ x & x>0\end{cases} f(x)={ α(ex1)xx0x>0
img

Self-Normalizing Neural Networks (SNNs)论文中SNN基于缩放的指数线性单位“ SELU”,可诱导自标准化属性(例如方差稳定化),从而避免了梯度的爆炸和消失。 SELU函数是给ELU函数乘上系数 λ λ λ

函数的表达式及图像如下:
f ( x ) = λ ⋅ E L U ( X ) = λ { α ( e x − 1 ) x ≤ 0 x x > 0 f(x) = λ·ELU(X) = λ\begin{cases}α(e^x-1) & x≤0\\ x & x>0\end{cases} f(x)=λELU(X)=λ{ α(ex1)xx0x>0
在这里插入图片描述

  • 优点:
    • ELU没有 Dead ReLU 问题,输出的平均值接近 0,以 0 为中心;
    • ELU通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;
    • ELU在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。
  • 缺点:
    • 计算强度更高,计算量较大,目前在实践中没有充分的证据表明ELU总是比 ReLU 好。
4. Swish函数

Swish激活函数又叫作自门控激活函数。 β β β为可学习的参数或一个固定超参数, f ( x ) ∈ ( 0 , 1 ) f(x) ∈(0,1) f(x)(0,1)可以看做是一种软性的门控机制。当 s i g m o i d ( β x ) sigmoid(βx) sigmoid(βx)接近于1时,门处于“开”状态,激活函数的输出近似于x本身;当 s i g m o i d ( β x ) sigmoid(βx) sigmoid(βx)接近于0时,门处于“关”状态,激活函数的输出近似于0。

β = 0 β=0 β=0时,Swish函数变成线性函数 x 2 \frac{x}{2} 2x;当 β = 1 β=1 β=1时,Swish 函数在 x > 0 x>0 x>0时近似线性,在 x < 0 x<0 x<0时近似饱和,同时具有一定的非单调性;当 β β β趋于正无穷时, s i g m o i d ( β x ) sigmoid(βx) sigmoid(βx)函数趋向于离散的0~1函数,Swish函数近似为ReLU函数;因此,Swish 函数可以看作线性函数和ReLU函数之间的非线性插值函数,其程度由参数 β β β控制。

函数的表达式及图像如下:
f ( x ) = x ⋅ s i g m o i d ( β x ) = x 1 + e − β x f(x) = x·sigmoid(βx) = \frac{x}{1+e^{-βx}} f(x)=xsigmoid(βx)=1+eβxx
img

  • 优点:
    • ReLU有无上界和有下界的特点,而Swish相比ReLU又增加了平滑和非单调的特点,这使得其在ImageNet上的效果更好。
  • 缺点:
    • 引入了指数函数,增加了计算量。
5. Mish函数

Diganta Misra的一篇题为“Mish: A Self Regularized Non-Monotonic Neural Activation Function”的新论文介绍了一个新的深度学习激活函数——Mish激活函数,该函数在最终准确度上比Swish(+.494%)和ReLU(+ 1.671%)都有提高。

函数的表达式及图像如下:
f ( x ) = x ⋅ t a n h ( l n 1 + e x ) f(x) = x·tanh(ln^{1+e^x}) f(x)=xtanh(ln1+ex)
img

  • 优点:
    • 无上界(unbounded above):可以防止网络饱和,即梯度消失;
    • 有下界(bounded below):提升网络的正则化效果;
    • 平滑(smooth):首先在0值点连续相比ReLU可以减少一些不可预料的问题,其次可以使网络更容易优化并且提高泛化性能;
    • 非单调(nonmonotonic):可以使一些小的负输入也被保留为负输出,提高网络的可解释能力和梯度流。
  • 缺点:
    • 引入了指数函数,增加了计算量。
6. Softplus函数

Softplus函数是Sigmoid函数原函数,即softplus函数求导的结果就是sigmoid函数。Softplus可以看做是ReLU函数的一个平滑版本。

函数的表达式及图像如下:
f ( x ) = l o g 1 + e x f ′ ( x ) = s i g m o i d ( x ) f(x) = log^{1+e^x}\\ f'(x) = sigmoid(x) f(x)=log1+exf(x)=sigmoid(x)
preview

Softplus函数加了1是为了保证非负性。Softplus可以看作是强制非负校正函数max(0,x)平滑版本。红色的即为ReLU。

Softplus函数其导数刚好是Logistic 函数。Softplus函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活。

7. MaxOut函数

Maxout可以看做是在深度学习网络中加入一层激活函数层,包含一个参数k。这一层相比ReLU,sigmoid等,其特殊之处在于增加了 n n n个神经元,然后输出激活值最大的值。(《Maxout Networks》,Goodfellow,ICML2013)

假设网络某一层的输入特征向量为: X = ( x 1 , x 2 , … , x d ) X = ( x_1, x_2, …, x_d ) X=(x1,x2,,xd),也就是我们输入是 d d d个神经元。Maxout隐藏层每个神经元的计算公式如下:
h i ( x ) = M a x j ∈ [ 1 , n ]   z i j h_i(x) = Max_{j∈[1,n]}\ z_{ij} hi(x)=Maxj[1,n] zij
上面的公式就是Maxout隐藏层神经元 i i i的计算公式。其中,k就是Maxout层所需要的参数的数量了,由我们人为设定大小。就像dropout一样,也有自己的参数 p(每个神经元dropout概率),maxout的参数是 k。公式中Z的计算公式为:
z i j = x T W … i j + b i j z_{ij} = x^TW…_{ij} + b_{ij} zij=xTWij+bij
权重 W W W是一个大小为 ( d , m , k ) (d,m,k) (d,m,k)三维矩阵, b b b是一个大小为 ( m , k ) (m,k) (m,k)的二维矩阵,这两个就是我们需要学习的参数。如果我们设定参数 k = 1 k=1 k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络。

常见的隐含层节点输出: h i ( x ) = s i g m o i d ( x T W … i + b i ) h_i(x) = sigmoid(x^TW…_i + b_i) hi(x)=sigmoid(xTWi+bi)

传统的MLP算法,网络第 i i i层到第 i + 1 i+1 i+1层的参数只有1组。如果将ReLU或sigmoid等激活函数替换掉,引入Maxout,那么将在这一层同时训练 n n n组的 W W W b b b参数,然后选择激活值最大的 z z z来作为下一层神经元的激活值,这个 M a x j ∈ [ 1 , n ]   z i j Max_{j∈[1,n]}\ z_{ij} Maxj[1,n] zij即充当了激活函数。

img
  • 优点:
    • Maxout的拟合能力非常强,可以拟合任意的凸函数;
    • Maxout具有ReLU的所有优点,线性、不饱和性,同时没有ReLU的一些缺点。如:神经元的死亡;
    • 实验结果表明Maxout与Dropout组合使用可以发挥比较好的效果。
  • 缺点:
    • 从上面的激活函数公式中可以看出,每个神经元中有两组(w,b)参数,那么参数量就增加了一倍,这就导致了整体参数的数量激增。
8. 其他函数
  • Step阶梯函数/阶跃函数: f ( x ) = { 0 x ≤ 0 1 x > 0 f(x) = \begin{cases}0&x≤0\\1&x>0\end{cases} f(x)={ 01x0x>0
  • Sgn符号函数: f ( x ) = { − 1 x ≤ 0 1 x > 0 f(x) = \begin{cases}-1&x≤0\\1&x>0\end{cases} f(x)={ 11x0x>0
  • Linear线性函数: f ( x ) = x f(x) = x f(x)=x
  • Ramp饱和线性函数: f ( x ) = { 0 x < 0 x 0 ≤ x ≤ 1 1 x > 1 f(x) = \begin{cases}0&x<0\\x&0≤x≤1\\1&x>1\end{cases} f(x)=0x1x<00x1x>1
函数汇总
img

1.3.5 如何选择激活函数

  1. 深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度;

  2. 除非在二分类问题中,否则请小心使用Sigmoid函数;

  3. 当输入数据特征相差明显时,用tanh的效果会很好,且在循环过程中会不断扩大特征效果并显示出来。不过其他大多数情况下它的效果会比不上ReLU和Maxout;

  4. 如果你不知道应该使用哪个激活函数, 那么请优先选择ReLU;

  5. 如果你使用了ReLU, 需要注意一下Dead ReLU问题, 此时你需要仔细选择 Learning rate, 避免出现大的梯度从而导致过多的神经元 “Dead” 。如果发生了Dead ReLU问题, 可以尝试一下leaky ReLU、PReLU、ELU、Maxout等, 说不定会有很好效果。

1.4 神经网络结构

神经网络一般由输入层、隐含层(也称中间层)和输出层构成 ,其中隐含层有一层或者多层。每一层可以有若干个节点。层与层之间节点的连接状态通过权重来体现。

  • 输入层:信息的输入端;
  • 隐藏层:信息的处理端,用于模拟一个计算的过程;
  • 输出层:信息的输出端,也就是我们要的结果(可以有多个)。
img 只有一个隐含层:传统的浅层神经网络;有多个隐含层:深度学习的神经网络。

猜你喜欢

转载自blog.csdn.net/Morganfs/article/details/124071564