为什么神经网络需要激活函数层?

本文探讨了神经网络为何需要激活函数,指出没有激活函数的网络仅能实现线性变换,等价于单层网络。通过数学证明,阐述了激活函数引入的非线性特性对提升网络能力的重要性。

这个问题的原因,很多教材上讲是为了引入非线性,也就是说只有引入激活函数层建立的网络才具有非线性特征,那疑问就来了,没有激活函数层就没有非线性了吗?如果答案是肯定的话,是否存在严谨的理论证明?

以为下面的网络为例,它的每一层都是全连接层,并且没有激活函数层,我们列出各层之间的数据关系公式:

第一层输出:

\vec{y}=W_1\vec{x}+\vec{b_1}

第二层输出:

\vec{mid}=W_2\vec{y}+\vec{b_2}

...

最后一层:

\vec{o}=W_n\vec{z_n}+\vec{b_n}

逐层代入得到:

\boldsymbol{\\ \vec{o}=W_n\vec{z_n}+\vec{b_n}=Wn(W_{n-1}\vec{z_{n-1}} + \vec{b_{n-1}})+\vec{b_n} = \cdots = W_nW_{n-1}W_{n-2}\cdots W_1\vec{z_1} +W_n\vec{b_{n-1}}+W_nW_{n-1}\vec{b_{n-2}}+\cdots + W_nW_{n-1}\cdots W_{2}\vec{b_1} +\vec{b_n}}

由于Wn,Bn都为常函数,所以,根据上式可以看出,输出是输入的线性函数,所以网络一定是线性的,不具备非线性特征。

从联立后的式子可以看出,虽然神经网络引入了隐藏层,却依然等价于一个单层神经网络,输入和输出依然是线性关系。

上述问题的根源在于全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换。解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数,在代码中,全连接层经常被叫做affine layer(仿射层),也是这个意思。

上面的证明过程依赖于数形结合,下面用解析的方式,用更加数学的语言来证明这个结论:

对于一个没有激活函数的网络,假设

y^k_j

是第k层网络的第j个神经元输出,x_1,x_2,\cdots,x_n是这层网络的输入,所以,y^k_j可以表示为输入的线性函数:

y^k_j(x_1,x_2,\cdots,x_n)=b^k_j+\sum_{i=1}^{n}w^k_{ji}x_i

然后,另g为下一层的网络输出,则针对下一层来说,y^k_1\ \ \ y^k_2 \ \ \ \cdots \ \ y^k_m为这一层的输入,所以:

\\ g^{k+1}_s(y^k_1\ \ \ y^k_2 \ \ \ \cdots \ \ y^k_m)=b^{k+1}_s+\sum_{i=1}^{m}w^{k+1}_{si}y^k_i=b^{k+1}_s+\sum_{i=1}^{m}w^{k+1}_{si}\bigg(b^k_i+\sum_{p=1}^{n}w^k_{ip}x_p\bigg) \\ = b^{k+1}_s+\sum_{i=1}^{m}w^{k+1}_{si} b^k_i+\sum_{i=1}^{m}w^{k+1}_{si} \sum_{p=1}^{n}w^k_{ip}x_p=b^{k+1}_s+\sum_{i=1}^{m}w^{k+1}_{si} b^k_i+\sum_{p=1}^{n}x_p \sum_{i=1}^{m}w^{k+1}_{si} w^k_{ip} \\= c_0 +\sum_{i=1}^{n}c_ix_i

从而我们证明了,为什么一定要引入激活函数来给网络增加非线性。

附:

这是一篇论文中的证明,形式更加优雅:

结束!

### 激活函数的定义 激活函数神经网络中的一种数学函数,用于将输入信号转换为输出信号。它决定了神经元是否以及以何种程度被激活,从而影响网络的学习能力和表达能力[^2]。常见的激活函数包括 Sigmoid、ReLU(Rectified Linear Unit)、Tanh 和 Softmax 等。 --- ### 神经网络中使用激活函数的原因 神经网络需要引入非线性因素来解决线性模型表达能力不足的问题。如果没有激活函数,无论神经网络有多少,其本质上仍然是一个线性模型,无法拟合复杂的非线性关系。通过引入激活函数神经网络能够学习和表示复杂的非线性映射,从而具备更强的表达能力和泛化性能。 --- ### 激活函数的作用与重要性 #### 1. 引入非线性特征 激活函数的主要作用是向神经网络中加入非线性因素,使网络能够处理复杂的非线性问题。例如,在深度学习中,ReLU 函数因其简单且有效的非线性特性而成为隐藏的默认选择[^3]。 #### 2. 解决梯度消失问题 某些激活函数(如 Sigmoid 和 Tanh)在输入值较大或较小时会导致梯度接近于零,从而引发梯度消失问题。现代激活函数(如 ReLU 及其变体 Leaky ReLU)通过设计避免了这一问题,确保梯度在反向传播过程中不会过早消失。 #### 3. 增加网络的表达能力 激活函数能够增强神经网络的表达能力,使其可以更好地拟合数据分布。例如,GELU(Gaussian Error Linear Unit)作为一种平滑的激活函数,已在 Transformer 模型中表现出色,提升了模型的性能[^1]。 #### 4. 影响模型的训练速度和性能 不同的激活函数对模型的训练速度和最终性能有显著影响。例如,ReLU 的计算效率高且收敛速度快,但可能存在“死区”问题;而 Swish 等新型激活函数虽然计算复杂度稍高,但在某些任务上表现更优[^3]。 #### 5. 提供稀疏性和抑制性 某些激活函数(如 ReLU)能够自然地生成稀疏表示,有助于减少冗余并提高模型的解释性。此外,激活函数还可以通过抑制不重要的特征来提升模型的鲁棒性[^1]。 --- ### 示例代码:激活函数的应用 以下是一个简单的 TensorFlow 实现,展示了如何在神经网络中应用 ReLU 激活函数: ```python import tensorflow as tf from tensorflow.keras import layers, models # 构建一个简单的神经网络模型 model = models.Sequential([ layers.Dense(64, activation='relu', input_shape=(784,)), # 隐藏使用 ReLU 激活函数 layers.Dense(10, activation='softmax') # 输出使用 Softmax 激活函数 ]) # 打印模型结构 model.summary() ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值