【机器学习-05】-激活函数的选择-神经网络使用激活函数的必要性

【机器学习-05】-激活函数的选择,如神经网络使用激活函数的必要性


神经网络如果不适用激活函数 就和线性回归一样了

1. 核心总结:不同任务的激活函数选择

归纳了不同场景下的激活函数选择规则:

任务类型激活函数适用场景说明
二分类 (Binary Classification)sigmoid输出概率(0~1),如肿瘤恶性判断
回归 (Regression)linearrelu输出连续值(如房价预测)
隐藏层 (Hidden Layers)relu默认选择,解决梯度消失,加速训练

2. 关键概念解析
  1. Sigmoid
    • 公式: σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
    • 特点:输出概率,适合二分类最后一层。
    • 示例:Dense(units=1, activation='sigmoid')

  2. Linear
    • 公式: f ( z ) = z f(z) = z f(z)=z
    • 特点:无变换,直接输出线性值,适合回归任务。

  3. ReLU (Rectified Linear Unit)
    • 公式: ReLU ( z ) = max ⁡ ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)
    • 特点:隐藏层首选,计算高效,缓解梯度消失。


3. 代码示例(TensorFlow/Keras)
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

model = Sequential([
    Dense(units=25, activation='relu'),   # 隐藏层1:ReLU激活
    Dense(units=15, activation='relu'),   # 隐藏层2:ReLU激活
    Dense(units=1, activation='sigmoid')  # 输出层:二分类用Sigmoid
])

代码说明
隐藏层:均使用 relu 激活函数,增强非线性表达能力。
输出层:二分类任务使用 sigmoid,输出概率值。


4. 不同任务的完整模型配置建议
场景1:二分类任务(如垃圾邮件检测)
model = Sequential([
    Dense(64, activation='relu', input_shape=(input_dim,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid')  # 输出概率
])
model.compile(optimizer='adam', loss='binary_crossentropy')
场景2:回归任务(如房价预测)
model = Sequential([
    Dense(64, activation='relu', input_shape=(input_dim,)),
    Dense(32, activation='relu'),
    Dense(1, activation='linear')  # 输出连续值
])
model.compile(optimizer='adam', loss='mse')

5. 常见问题解答(Q&A)

Q1:为什么隐藏层推荐使用ReLU?
:ReLU计算高效,且能缓解梯度消失问题(相比Sigmoid/Tanh)。

Q2:回归任务能否用Sigmoid?
:不建议。Sigmoid会限制输出范围(0~1),而回归需要任意实数。

Q3:多分类任务用什么激活函数?
:输出层用 softmax,隐藏层仍用 relu


6. 总结

二分类sigmoid
回归linearrelu(非负输出时)
隐藏层relu(默认首选)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

神经网络使用激活函数的必要性


如果使用线性函数

神经网络为何不能使用线性激活函数?——基于图片的深度解析


1. 图片核心结论

图中通过线性回归的数学推导证明:在神经网络中使用线性激活函数(如 ( g(z)=z ))时,无论叠加多少层,最终等效于单层线性回归,失去深度学习的核心优势。


2. 关键推导过程(图中公式解析)
输入与单层变换

• 输入:单特征标量 ( x )
• 权重与偏置:标量 ( w ), ( b )
• 线性激活函数:( g(z) = z )
第一层输出:

a [ 1 ] = w [ 1 ] x + b [ 1 ] a^{[1]} = w^{[1]}x + b^{[1]} a[1]=w[1]x+b[1]

多层线性叠加

• 第二层输入: a [ 1 ] a^{[1]} a[1]
第二层输出:

a [ 2 ] = w [ 2 ] a [ 1 ] + b [ 2 ] = w [ 2 ] ( w [ 1 ] x + b [ 1 ] ) + b [ 2 ] a^{[2]} = w^{[2]}a^{[1]} + b^{[2]} = w^{[2]}(w^{[1]}x + b^{[1]}) + b^{[2]} a[2]=w[2]a[1]+b[2]=w[2](w[1]x+b[1])+b[2]

展开后:

a [ 2 ] = ( w [ 2 ] w [ 1 ] ) x + ( w [ 2 ] b [ 1 ] + b [ 2 ] ) a^{[2]} = (w^{[2]}w^{[1]})x + (w^{[2]}b^{[1]} + b^{[2]}) a[2]=(w[2]w[1])x+(w[2]b[1]+b[2])

w ′ = w [ 2 ] w [ 1 ] w' = w^{[2]}w^{[1]} w=w[2]w[1], b ′ = w [ 2 ] b [ 1 ] + b [ 2 ] b' = w^{[2]}b^{[1]} + b^{[2]} b=w[2]b[1]+b[2],则:

a [ 2 ] = w ′ x + b ′ a^{[2]} = w'x + b' a[2]=wx+b

结论:多层线性变换退化为单层线性回归 f ( x ) = w x + b f(x)=wx+b f(x)=wx+b


3. 数学本质

线性函数的封闭性:线性变换的复合仍是线性变换。
表达能力局限:无法拟合非线性关系(如异或问题、图像分类等复杂模式)。


4. 反例验证

假设数据需拟合 y = x 2 y = x^2 y=x2
• 线性网络:只能输出直线 y = w x + b y=wx+b y=wx+b,无法逼近曲线。
• 非线性网络(如使用ReLU):可通过分段线性组合逼近曲线。


5. 解决方案

使用非线性激活函数(如ReLU、Sigmoid、Tanh)打破线性对称性:
ReLU示例
g ( z ) = max ⁡ ( 0 , z ) g(z) = \max(0,z) g(z)=max(0,z),则:

a [ 2 ] = w [ 2 ] max ⁡ ( 0 , w [ 1 ] x + b [ 1 ] ) + b [ 2 ] a^{[2]} = w^{[2]}\max(0, w^{[1]}x + b^{[1]}) + b^{[2]} a[2]=w[2]max(0,w[1]x+b[1])+b[2]

此时网络可表达非线性关系。


6. 代码对比
线性激活(失效)
# 两层线性网络 → 等效单层
layer1 = Linear(in_features=1, out_features=1)  # 输出 w1*x + b1
layer2 = Linear(in_features=1, out_features=1)  # 输出 w2*(w1*x + b1) + b2 = (w2*w1)x + (w2*b1 + b2)
非线性激活(有效)
# 使用ReLU激活
layer1 = Linear(in_features=1, out_features=10)
activation = nn.ReLU()  # 引入非线性
layer2 = Linear(in_features=10, out_features=1)

7. 总结

图中证明:线性激活使多层网络退化为单层,失去深度学习的意义。
核心原则:必须使用非线性激活函数(如ReLU)才能实现:
• 特征的多层次抽象
• 复杂函数的逼近能力
• 解决非线性分类/回归问题

在这里插入图片描述

神经网络如果不适用激活函数 就和线性回归一样了

在这里插入图片描述


在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值