Python画Sigmoid、Relu、Softmax、Tanh、Leaky relu等函数(1)

本文深入探讨了深度学习中常用的激活函数,包括阶跃、Sigmoid、Tanh、ReLU及其变种Leaky ReLU,并通过Python实现这些函数的可视化。此外,还介绍了矩阵乘法的基本操作以及在三层神经网络中的应用,最后讲解了Softmax函数的原理与实现,旨在帮助读者理解神经网络的基础组件。
部署运行你感兴趣的模型镜像

看鱼书有感,记录一下:

1.阶跃函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def step_fun(x):
    #先把array转为int
    return np.array(x>0,dtype=np.int)

x=np.arange(-5.0,5.0,0.1)
y=step_fun(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()

在这里插入图片描述

2.Sigmoid函数(少用,会发生梯度消失)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
    return 1/(1+np.exp(-x))

x=np.arange(-5.0,5.0,0.1)
y=sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()

Sigmoid

向这个转换器输入某个值后,输出值是输入值的常数倍的函数称为线性函数(用数学
式表示为h(x) = cx。c为常数)。因此,线性函数是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。

3.Tanh函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
    return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
x=np.arange(-5.0,5.0,0.1)
y=tanh(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

4.Relu函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def relu(x):
    return np.maximum(0,x)

x=np.arange(-5.0,5.0,0.1)
y=relu(x)
plt.plot(x,y)
plt.show()

Relu
数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。

5.Leaky relu

在这里插入图片描述
在relu的负轴*0.01而已

import numpy as np
import matplotlib.pyplot as plt
def Leaky_relu(x):
    return np.maximum(0.01*x,x)

x=np.arange(-5.0,5.0,0.1)
y=Leaky_relu(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

6.矩阵乘法

import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
print(np.dot(a,b))

输出: [[19 22]
[43 50]]

3行两列的矩阵eg: np.array([[1,2], [3,4], [5,6]]),并不是三维矩阵

7.三层神经网络的实现(输入+隐藏层*2+输出层)

import numpy as np
def sigmoid(x):
    return 1/(1+np.exp(-x))
x=np.array([1.0,0.5])
w1=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
b1=np.array([0.1,0.2,0.3])
a1=np.dot(x,w1)+b1
z1=sigmoid(a1)

w2=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
b2=np.array([0.1,0.2])
a2=np.dot(z1,w2)+b2
z2=sigmoid(a2)

w3=np.array([[0.1,0.3],[0.2,0.4]])
b3=np.array([0.1,0.2])
a3=np.dot(z2,w3)+b3
print(a3)

输出: [0.31682708 0.69627909]

8.Softmax函数

在这里插入图片描述

import numpy as np
def softmax(a):
    exp_a=np.exp(a)
    sum_exp_a=np.sum(exp_a)
    y=exp_a/sum_exp_a
    return y

a=np.array([0.3,2.9,4.0])
print(softmax(a))

加入常数c防止溢出:

import numpy as np
def softmax(a):
    c=np.max(a)
    exp_a=np.exp(a-c)
    sum_exp_a=np.sum(exp_a)
    y=exp_a/sum_exp_a
    return y
a=np.array([0.3,2.9,4.0])
y=softmax(a)
print(y)
print(np.sum(y))

softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,用户现在想要一个关于ReLUTanhSigmoid三个激活函数的对比表,包括它们的特点差异和使用场景。用户之前已经询问过ReLUTanh的对比,现在扩展到了Sigmoid。需要结合用户提供的三个引用内容,同时参考之前的回答结构。 首先,回顾用户提供的引用内容。引用1提到softmaxsigmoid的区别,指出sigmoid用于单个神经元输出时的二分类,而softmax用于多分类。引用2说明sigmoid是平滑的阶梯函数,可导,将值转换为0-1概率,适用于二分类。引用3提到ReLU在隐藏层中替代sigmoid,因为更易训练,而sigmoid在RNN中控制信息流。这些信息需要整合到对比中。 接下来,分析用户的上一次回答结构,有对比表、数学定义、核心用途、实现方式等。现在需要将Sigmoid加入对比表中,确保涵盖输出范围、梯度特性、计算复杂度、优缺点、典型应用等维度。同时,注意用户可能关注梯度消失、计算效率、应用场景差异。 需要确定每个激活函数的关键点。例如,ReLU的梯度消失缓解、计算高效;Tanh的零中心输出、梯度衰减;Sigmoid的概率输出、梯度消失问题。同时,引用中提到sigmoid在输出层单个神经元时使用,而ReLU在隐藏层更优,这些需要强调。 要确保对比表清晰,突出差异。例如,ReLU在深层网络和CNN中的使用,Tanh在RNN和需要对称输出的场景,Sigmoid在二分类输出层。同时,注意用户引用中提到的sigmoid在隐藏层被ReLU取代,但RNN中仍有应用,这点需在场景中说明。 可能用户深层需求是理解在不同网络结构中如何选择激活函数,以及各自的优缺点。需要回答中明确指导选择的场景,例如优先使用ReLU的情况,何时选择TanhSigmoid。 需要检查是否有遗漏的关键点,如死神经元问题、梯度饱和、计算复杂度等。确保对比表中的每个条目准确,并引用用户提供的资料支持,如引用3提到ReLU替代sigmoid在隐藏层,引用2说明sigmoid用于二分类。 最后,生成相关问题时要覆盖常见疑问,如解决梯度消失的方法,选择不同激活函数的依据,以及现代网络中的趋势。</think>### ReLU vs Tanh vs Sigmoid 激活函数对比表 --- #### **对比维度与核心差异** | **维度** | **ReLU** | **Tanh** | **Sigmoid** | |---------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | **数学定义** | $$ \text{ReLU}(x) = \max(0, x) $$ | $$ \text{Tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$ | $$ \sigma(x) = \frac{1}{1 + e^{-x}} $$ | | **输出范围** | $[0, +\infty)$ | $(-1, 1)$ | $(0, 1)$ | | **梯度特性** | 正值区梯度恒为1,负值区梯度为0 | 最大梯度为1(在$x=0$处),随$|x|$增大快速衰减至0 | 最大梯度为0.25(在$x=0$处),随$|x|$增大快速衰减至0 | | **计算复杂度** | $O(1)$(仅需阈值判断) | $O(1)$(需计算指数) | $O(1)$(需计算指数) | | **零中心化** | 否(输出非对称) | 是(输出均值为0) | 否(输出均值为0.5) | | **主要优点** | 1. 缓解梯度消失<br>2. 计算高效<br>3. 稀疏激活 | 1. 输出对称<br>2. 适合需要零中心化的场景 | 1. 输出为概率值<br>2. 适合二分类输出层 | | **主要缺点** | 1. 死神经元问题<br>2. 输出非零中心化 | 1. 梯度衰减问题<br>2. 计算成本略高 | 1. 梯度消失严重<br>2. 输出非零中心化 | | **典型应用场景** | 1. CNN隐藏层<br>2. 深层网络(如ResNet)<br>3. 高维数据处理 | 1. RNN/LSTM隐藏层<br>2. 需要对称输出的场景<br>3. 初始化阶段 | 1. 二分类输出层<br>2. 概率预测任务(如逻辑回归)<br>3. 早期神经网络隐藏层 | | **现代网络使用频率** | ★★★★★(主流选择) | ★★★☆☆(特定场景) | ★★☆☆☆(逐渐被取代) | --- #### **关键差异解释** 1. **梯度消失问题** - **ReLU**:正值区梯度恒为1,反向传播时梯度不衰减,显著缓解深层网络梯度消失[^1]。 - **Tanh/Sigmoid**:梯度随输入绝对值增大而快速衰减(Tanh最大梯度1Sigmoid最大梯度0.25),导致深层网络训练困难[^2][^3]。 2. **输出特性与适用性** - **ReLU**:输出非负,适合处理图像像素、文本特征等非负数据;稀疏激活特性可减少参数冗余。 - **Tanh**:输出对称(-11),适合需要平衡正负激活的场景(如LSTM的候选记忆单元)[^3]。 - **Sigmoid**:输出为$(0,1)$概率值,天然适配二分类输出层(如逻辑回归)[^2]。 3. **计算效率** - **ReLU**:仅需阈值判断,比Tanh/Sigmoid的指数运算快约6倍,适合大规模数据训练[^1]。 - **Tanh/Sigmoid**:需计算指数函数,增加计算成本,尤其在硬件资源受限时影响显著。 --- #### **场景选择指南** | **场景** | **推荐激活函数** | **理由** | |------------------------------|------------------|--------------------------------------------------------------------------| | **CNN隐藏层** | ReLU | 计算高效,梯度保留能力强,适合高维图像特征提取。 | | **RNN/LSTM隐藏层** | Tanh | 对称输出有助于平衡时序信号,避免梯度爆炸(如LSTM的候选状态计算)[^3]。 | | **二分类输出层** | Sigmoid | 输出直接映射为概率值,损失函数(如交叉熵)可无缝衔接[^2]。 | | **浅层网络或初始化阶段** | Tanh | 零中心化输出加速初始收敛,减少后续层输入偏移。 | | **需要稀疏激活的深层网络** | ReLU | 负值置零的特性可减少神经元激活数量,提升模型泛化能力。 | | **需要控制信息流的门控机制** | Sigmoid | 输出$(0,1)$可表示开关比例(如LSTM的输入门、遗忘门)[^3]。 | --- #### **改进方案与替代选择** 1. **ReLU的改进** - **Leaky ReLU**:负值区引入小斜率(如0.01),缓解死神经元问题。 - **PReLU**:将负值区斜率设为可学习参数,自适应数据分布。 ```python # Leaky ReLU实现(PyTorch) nn.LeakyReLU(negative_slope=0.01) ``` 2. **Sigmoid的替代** - **二分类输出层**:优先使用Sigmoid;若需多分类,改用Softmax。 - **隐藏层**:用TanhReLU替代,避免梯度消失(如现代RNN中常用Tanh而非Sigmoid)[^3]。 --- ### 相关问题 1. **为什么Sigmoid在隐藏层中逐渐被ReLU取代?** Sigmoid的梯度消失问题严重,而ReLU在正值区保留完整梯度,更适合深层网络训练[^1][^3]。 2. **TanhSigmoid的梯度衰减有何区别?** Tanh的最大梯度为1($x=0$时),Sigmoid最大梯度仅0.25,因此Tanh的梯度衰减相对较慢[^2][^3]。 3. **如何解决ReLU的死神经元问题?** 使用Leaky ReLU、PReLU或随机化ReLU(RReLU),为负值区赋予微小梯度以维持参数更新[^1]。 --- ### 引用说明 [^1]: ReLU通过简化计算和梯度特性,成为CNN和深层网络的首选激活函数。 [^2]: Sigmoid将输出映射为概率值,但梯度消失问题限制了其在深层网络中的应用。 [^3]: Tanh的对称输出特性使其在RNN/LSTM等时序模型中仍有重要价值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值