神经网络(Neural Network)
一种受人脑结构启发的计算模型,由相互连接的节点(神经元)组成,能够处理和解释数据。
这里的神经网络,具体而言应该指的是人工神经网络(Artificial Neural Networks,简称ANNs),而非生物学上的神经网络。其实人工神经网络是本身就是受生物神经网络启发的数学模型,用于模拟大脑处理信息的方式。但是现代神经网络模型在结构和功能上已经高度抽象化,虽然仍然比生物神经系统的复杂性,但是人工神经网络模型随着时间发展,不可解释性在进一步增强。
神经元 (Neuron)
神经网络中的基本单元,负责处理信息
在上一篇博客中,我介绍在早期人工神经网络模型中的基本组成单位——感知机,而在现代神经网络模型中的基本单元变成了神经元。
典型的人工神经元包括以下几个组成部分:
-
输入(Input): 输入是神经元接收到的信息。每个输入都与一个权重相关联,用于调节输入的相对重要性。
-
权重(Weights): 权重是与每个输入相关联的参数,用于调节输入的影响力。权重越大,对应输入的影响力就越大,反之亦然。
-
偏置(Bias): 偏置允许神经元在没有输入时也能产生输出,并且可以调整神经元对不同输入的敏感度。
-
激活函数(Activation Function): 激活函数是作用于经过权重加权以及偏置调整阈值后的输入的非线性函数,它将神经元的输出映射到一个特定的范围内。常见的激活函数包括Sigmoid、ReLU、Tanh等。
-
输出(Output): 输出是经过激活函数处理后的神经元的最终输出。位于隐藏层,可以作为下一层神经元的输入,位于输出层可以作为整个网络的输出。
人工神经元通常组成神经网络的不同层,其中输入层接收原始输入数据,输出层产生最终的输出结果,而中间的隐藏层用于对数据进行特征提取和表示学习。
激活函数的意义
在刚开始学习的时候,可能会有疑问说,为什么要引入激活函数,它的意义在哪里呢?
以下我将介绍引入激活函数的主要原因:
学习非线性:
- 现实特征的关系是复杂的,仅仅依靠线性函数(如 (y = ax + b))很难将特征关系表达出来,因为多个线性函数组合仍然只能表示线性关系,即随着网络层数增加,得到的特征之间的关系仍然是线性。并没很好的体现神经网络的优势和特点。引入非线性的激活函数,可以随着网络传播进行学习,模拟出复杂的非线性关系,来表征特征之间的关系。非线性的函数表达无疑是更符合表达复杂关系的需求。
控制神经元的激活:
- 激活函数决定了神经元在什么条件下应该被激活。在常用的激活函数中,部分函数有明显的阈值,如ReLU。阈值是激活函数从完全不激活(输出接近激活函数的下界)到开始激活(输出接近激活函数的上界)的临界点。只有当输入信号的加权和超过这个阈值时,神经元才会激活并传递信号。而不同的激活函数具有不同的函数映射特性,也就是输出的范围。例如,Sigmoid函数将输入压缩到0和1之间,适合用作二分类问题的输出层;而Tanh函数将输入压缩到-1和1之间,常用于隐藏层。
激活函数 (Activation Function)
用于在神经网络中引入非线性,使得网络能够学习和执行更复杂的任务
- Sigmoid函数:
数学表达式: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
导数表达式: σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma^{\prime}(x)=\sigma(x)(1-\sigma(x)) σ′(x)=σ(x)(1−σ(x))
优点:输出范围在0到1之间,适用于二分类问题或将输出映射到概率值的情况。
缺点:在输入非常大或非常小的时候,梯度接近于零,容易导致梯度消失问题(Gradient Vanishing),训练速度较慢。
-
ReLU函数(Rectified Linear Unit):
- 数学表达式: f ( x ) = max ( 0 , x ) f(x)=\max (0, x)