目录

一、神经网络概念

1.1 什么是神经网络

1.2 神经元模型

1.3 神经网络

二、激活函数

2.1 为什么需要非线性?

2.2 常见激活函数

Sigmoid 激活函数

ReLU 激活函数

Tanh 激活函数

2.3 如何选择激活函数

隐藏层激活函数选择

输出层激活函数选择


一、神经网络概念

1.1 什么是神经网络

人工神经网络(Artificial Neural Network,简称ANN或NN)是一种受生物神经系统启发的计算模型,它由大量相互连接的人工神经元(也称节点)组成,能够学习和识别复杂的数据模式,尤其擅长处理非线性问题。作为机器学习的核心模型之一,人工神经网络在深度学习领域发挥着重要作用。

我们可以将人脑看作一个生物神经网络,其中无数神经元通过电信号传递信息。每个神经元通过树突接收输入信号,在细胞体内进行处理,当累积的电荷达到一定电位时,神经元被激活,并通过轴突输出电信号。这一过程启发了人工神经网络的结构与工作机制。

下图展示了生物神经元的基本结构:

每个神经元:

  • 信号接收:通过树突接收来自其他神经元传递的信号

  • 信号整合:在细胞体内对所有接收到的信号进行汇总与处理

  • 激活判断:如果整合后的信号强度超过某个特定阈值,神经元则被激活

  • 信号传递:通过轴突将产生的电信号输出并传递给后续的神经元

1.2 神经元模型

人工神经元是神经网络的基本计算单元,神经网络由多个神经元组成

神经元参数:

  • 输入特征:x₁, x₂, ..., xₙ

  • 权重参数:w₁, w₂, ..., wₙ

  • 偏置项:b

神经元计算分为两个步骤:

步骤1:加权求和

神经元或隐藏单元的内部存储值,它反映了当前神经元接收到的输入、历史信息以及网络内部的权重计算结果。

公式:z = w^{T}x + b

其中:

  • w:权重矩阵

  • x:输入值

  • b:偏置

步骤2:激活函数

通过激活函数(如 ReLU、Sigmoid、Tanh)对内部状态值进行非线性变换后得到的结果。激活值决定了当前神经元的输出

公式:y = f(z)

其中:

  • f:激活函数

  • z:内部状态值

1.3 神经网络

1. 输入层

  • 本质:数据的特征向量表示层,是网络的接口而非计算层。

  • 功能:接收原始输入数据 x(维度为 n),并将其每个特征直接映射到一个神经元节点。该层不进行计算,仅实现数据的规范化分发至第一隐藏层

2. 隐藏层

  • 本质:进行特征抽象与非线性变换的核心函数复合层。

  • 功能:通过多层堆叠,网络实现从原始特征到高层抽象特征的层级化映射

3. 输出层

  • 本质:网络的预测与映射层,将内部表示转换到任务目标空间。

  • 功能:执行最终的映射计算

第0层(Input):

a^{^{(0)}} = x

第1层(Layer 1):

z^{(1)} = W^{(1)}a^{(0)} + b^{(1)}

a^{(1)} = f^{(1)}(z^{(1)})

第2层(Layer 2):

z^{(2)} = W^{(2)}a^{(1)} + b^{(2)}

a^{(2)} = f^{(2)}(z^{(2)})

第3层(Layer L):

z^{(3)} = W^{(3)}a^{(2)} + b^{(3)}

\hat{y} = f^{(3)}(z^{(3)})

关键符号说明

符号

含义

维度说明

x

输入特征向量

\mathbb{R}^{n(0)}

\hat{y}

网络预测输出

\mathbb{R}^{n(L)}

W_{l}

第 l 层权重矩阵

\mathbb{R}^{n(l)n(l-1)}

b_{l}

第 l 层偏置向量

\mathbb{R}^{n(l)}

f_{l}

第 l 层激活函数

非线性变换

n_{l}

第 l 层神经元数量

整数

L

网络总层数(不含输入层)

整数

二、激活函数

2.1 为什么需要非线性?

网络非线性因素的理解:

  • 若无激活函数,神经网络无论多深,都仅是线性变换的叠加,最终等效于一个线性模型,能力存在根本性局限

  • 激活函数为网络引入了非线性变换,使得多层网络能够学习并表征极其复杂的非线性关系,从而拥有逼近任意复杂函数的能力,这是解决现实世界中分类、识别等复杂问题的关键

构建一个只有线性层(即无激活函数)的网络:

y_{1} = W_{1}x + b_{1}

y_{2} = W_{2}y_{1} + b_{2}

将第一层代入第二层:

y_{2} = W_{2}(W_{1}x + b_{1}) + b_{2} = (W_{2}W_{1})x + (W_{2}b_{1} + b_{2})

这仍然是一个线性变换,无论叠加多少层,结果都等价于一个单层的线性模型

激活函数的作用:引入非线性,使网络能够学习和表示复杂的非线性关系

神经网络可视化https://playground.tensorflow.org/#activation=relu&batchSize=10&dataset=circle®Dataset=reg-plane&learningRate=0.03®ularizationRate=0.01&noise=0&networkShape=5,4,2&seed=0.97420&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false

增加激活函数后,对于线性不可分场景,神经网络的拟合能力更强

2.2 常见激活函数

Sigmoid 激活函数

激活函数公式:

f(x) = \frac{1}{1 + e^{-x}}

激活函数求导公式:

f'(x) = (\frac{1}{1 + e^{-x}})' = \frac{1}{1 + e^{-x}}(1 - \frac{1}{1+e^{-x}}) = f(x)(1-f(x))

特点:

  • 输出范围恒为(0, 1) 

  • 常用于二分类模型的输出层

  • 输出可解释为概率值

缺点:

  • 饱和区间梯度趋近于零,易引发梯度消失

  • 输出非零中心化,影响参数更新效率

ReLU 激活函数

激活函数公式:

f(x) = max(0, x)

激活函数求导公式:

f'(x) = 0\vee 1

特点:

  • 计算简单,训练收敛快

  • 在正区间梯度恒为 1,有效缓解梯度消失

  • 当前深度模型中最常用的激活函数之一

缺点:

  • 存在神经元死亡问题:输入持续为负时,梯度始终为零,导致参数无法更新

Tanh 激活函数

激活函数公式:

f(x) = \frac{1-e^{-2x}}{1 + e^{-2x}}

激活函数求导公式:

f'(x) = (\frac{1-e^{-2x}}{1+e^{-2x}})' = 1 - f^{2}(x)

特点:

  • 输出范围为(-1, 1)

  • 输出以零为中心,有利于优化收敛

  • 整体表现通常优于 Sigmoid 函数

缺点;

  • 两端仍存在饱和区,可能出现梯度消失,但程度较 Sigmoid 更轻

总结:

  • Sigmoid:S 型曲线,两端平坦

  • Tanh:类似 Sigmoid,但关于原点对称

  • ReLU:左半边为 0,右半边为线性

2.3 如何选择激活函数

隐藏层激活函数选择

  1. 优先使用 ReLU:计算简单、训练快、缓解梯度消失,是大多数情况的首选

  2. ReLU 效果不好时:尝试 Leaky ReLU 等改进版本

  3. 注意 Dead ReLU:避免因梯度为0导致神经元"死亡"

  4. 不推荐 Sigmoid:容易引起梯度消失,可考虑用 Tanh 替代

输出层激活函数选择

任务类型 推荐激活函数 说明
二分类 Sigmoid 输出概率值(0, 1)
多分类 Softmax 输出概率分布,各概率和为1
回归 恒等函数 直接输出连续值,不做变换

希望本文能帮助你更好地理解神经网络概念,在深度学习的学习和研究中取得更好的成果!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐