神经网络激活函数 Sigmoid 和 Tanh 图像绘制
项目介绍
本项目主要服务于深度学习与神经网络的基础教学与研究领域。通过 MATLAB 强大的数值计算与绘图能力,项目实现了对两种最经典的非线性激活函数——Sigmoid 函数与 Tanh(双曲正切)函数的几何特性可视化。
程序将在同一坐标系内直观地展示这两条曲线,帮助用户具体分析两者的取值范围差异、零点附近的线性特性、两端的饱和特性(梯度消失)以及 Tanh 函数的零中心化优势。这对于理解神经网络前向传播的数据变换及反向传播中的梯度计算机制具有重要的辅助作用。
功能特性
- 双曲线对比绘制:在同一幅图中绘制 Sigmoid(蓝色)和 Tanh(红色)曲线,直观对比两者形态。
- 数学原理实现:代码内部通过基础指数函数构建激活函数公式,而非仅仅调用黑盒函数,展示了算法底层逻辑。
- 辅助视觉参考:
* 绘制 X 轴和 Y 轴基准线。
* 绘制关键渐近线(Sigmoid 的 y=1 和 Tanh 的 y=-1),明确函数边界。
* 标记原点处的关键数值点。
- 详细的图表标注:包含图例、坐标轴标签、网格线以及专门的文本说明框,总结了函数的取值范围和梯度特性。
系统要求
- MATLAB (任意包含基础绘图功能的版本)
- 无需额外的工具箱 (Toolbox)
使用方法
- 将项目代码在 MATLAB 编辑器中打开。
- 直接运行主程序脚本。
- 程序运行结束后,将自动弹出一个白色背景的图形窗口,显示绘制完成的对比图像。
- 可以通过图形窗口查看曲线走势、渐近线位置以及右下角的特性说明框。
代码实现逻辑与算法分析
本项目的主程序包含完整的执行流程,从数据准备、数值计算到最终的图形渲染,其核心逻辑严格遵循以下步骤:
1. 环境初始化
程序首先执行清理操作,清空当前工作区变量、命令行窗口内容,并关闭所有已打开的图形窗口,确保绘图环境的整洁,避免旧数据干扰。
2. 参数设置与数据准备
为了完整展示激活函数的全貌(包括线性区和饱和区),程序定义了自变量输入的范围。
- 输入向量构建:生成一个从 -10 到 10 的线性向量,步长设为 0.1。这一范围足以覆盖激活函数从负饱和区过渡到正饱和区的完整过程。
3. 数值计算(核心算法)
程序没有直接依赖 MATLAB 的工具箱函数,而是通过辅助函数显式定义了数学公式,以增强教学意义:
利用公式 $y = 1 / (1 + e^{-x})$ 进行计算。该函数将输入映射到 (0, 1) 区间。
利用指数公式 $(e^x - e^{-x}) / (e^x + e^{-x})$ 进行计算。虽然 MATLAB 内置了
tanh 函数,但本代码通过手动展开公式,演示了 Tanh 函数实际上是 Sigmoid 函数的线性变换形式。该函数将输入映射到 (-1, 1) 区间。
4. 图像绘制与可视化细节
程序创建了一个白色背景的图形窗口,并利用
hold on 命令实现在同一坐标轴上的多层叠加绘制:
* 使用黑色实线绘制标准的 X 轴和 Y 轴。
* 使用灰色虚线绘制两条重要的渐近线:y=1(Sigmoid 的上界)和 y=-1(Tanh 的下界),并附带文本注释说明其物理意义(饱和值)。
*
Sigmoid 曲线:使用蓝色实线绘制,线宽设为 2.5,清晰展示其非零中心特性。
*
Tanh 曲线:使用红色实线绘制,线宽设为 2.5,展示其穿过原点的零中心特性。
* 在 x=0 处,分别标记 Sigmoid 的值 (0, 0.5) 和 Tanh 的值 (0, 0),使用圆点进行视觉强调。
5. 图形修饰与标注
为了生成出版级或教学用的图表,代码进行了精细的修饰:
- 标题与标签:设置了双行标题以及清晰的 X/Y 轴标签。
- 坐标轴限制:将 Y 轴范围锁定在 -1.5 到 1.5 之间,留出空间展示渐近线和注释。
- 网格系统:开启网格并设置透明度为 0.3,便于观察具体的数值对应关系。
- 图例:在左上角 (NorthWest) 生成图例,区分两种函数。
- 特性说明框:并在图表右下区域利用
annotation 创建了一个文本框,列出了四条核心特性对比:
1. Sigmoid 范围 (0, 1),非零中心。
2. Tanh 范围 (-1, 1),零中心。
3. Tanh 在零点附近梯度更大(更陡峭)。
4. 两者在两端均存在梯度消失现象。