当前位置: 首页 > news >正文

【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax

激活函数是深度学习模型中不可或缺的一部分,它们赋予神经网络强大的非线性变换能力,使其能够拟合复杂的函数关系。在这篇博文中,我们将探讨三种常见的激活函数:Tanh、Sigmoid 和 Softmax,并提供一些记忆它们的技巧。


1. Tanh 函数

定义
Tanh(双曲正切函数)将输入值压缩到 [-1, 1] 的范围内。其公式如下:
在这里插入图片描述

应用场景

  • 常用于隐藏层的激活函数,特别是在需要零均值化数据的场景。
  • 广泛应用于循环神经网络(RNN)中。

优缺点

  • 优点:输出范围是 [-1, 1],零中心化可以使得数据更好地对称,帮助梯度下降算法更有效地进行优化。
  • 缺点:存在梯度消失问题,当输入值过大或过小时,梯度会变得非常小,影响深层神经网络的训练效果。

示例代码

import numpy as npdef tanh(x):return np.tanh(x)# 示例输入
logit = 0.5
output = tanh(logit)
print(output)  # 输出 0.46211715726000974

记忆技巧

  • Tanh 是“双曲正切”的缩写,输出范围 [-1, 1],零中心化,适合隐藏层。

2. Sigmoid 函数

定义
Sigmoid 函数将输入值压缩到 [0, 1] 的范围内。其公式如下:
在这里插入图片描述

应用场景

  • 常用于二分类问题的输出层激活函数。

优缺点

  • 优点:输出范围 [0, 1],适合处理概率问题。
  • 缺点:存在梯度消失问题,输出不是零中心化。

示例代码

import numpy as npdef sigmoid(x):return 1 / (1 + np.exp(-x))# 示例输入
logit = 0.5
output = sigmoid(logit)
print(output)  # 输出 0.6224593312018546

记忆技巧

  • Sigmoid 函数有一个 “S” 形曲线,输出范围 [0, 1],适合二分类问题的输出层。

3. Softmax 函数

定义
Softmax 函数将向量的输出转化为概率分布,使得所有输出的和为1。其公式如下:

应用场景

  • 常用于多分类问题的输出层激活函数。

优缺点

  • 优点:将向量转化为概率分布,和为1,适合多分类问题。
  • 缺点:需要更多计算资源。

示例代码

import numpy as npdef softmax(x):e_x = np.exp(x - np.max(x))return e_x / e_x.sum(axis=0)# 示例输入
logits = np.array([1.0, 2.0, 3.0])
output = softmax(logits)
print(output)  # 输出 [0.09003057 0.24472847 0.66524096]

记忆技巧

  • Softmax 将向量转化为概率分布,和为1,适合多分类问题的输出层。

激活函数的顺序使用

在神经网络中,这些激活函数通常按以下顺序使用:

  1. 输入层:无激活函数,仅用于接受输入数据。
  2. 隐藏层:常用 Tanh 或 ReLU(另一种激活函数)进行激活。
  3. 输出层
    • 二分类问题:使用 Sigmoid 进行激活。
    • 多分类问题:使用 Softmax 进行激活。
    • 回归问题:通常无激活函数,或根据具体需求选择合适的激活函数。

结论

理解和记住 Tanh、Sigmoid 和 Softmax 函数的特性、应用场景和优缺点,可以帮助我们在构建和调试深度学习模型时做出更明智的选择。希望这些记忆技巧和示例代码能够帮助您更好地掌握这些激活函数。


相关文章:

  • Ps:脚本事件管理器
  • qt c++ 字符串拼接踩坑
  • Linux--Mosquitto服务器
  • Spring框架的原理及应用详解(六)
  • 拥抱开源,构建未来:王嘉树与 TDengine 的开源之旅
  • TCP关闭连接
  • 毕业了校园卡怎么改套餐?
  • css3中有哪些新属性(特性)?
  • 《java 编程基础》试题
  • Python文本处理:初探《三国演义》
  • 100V宽电压H62410A恒压芯片 24V降压5V 24V降压12V电源IC
  • 做好程序前设计
  • Qt进程间通信(QSharedMemory、QLocalSocket、QWebSocket、QProcess、D-BUS、QTcpSocket)
  • 云服务器部署Neo4j
  • 常用参数注解
  • [译]如何构建服务器端web组件,为何要构建?
  • 《Java编程思想》读书笔记-对象导论
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 5、React组件事件详解
  • Angular 响应式表单之下拉框
  • CentOS7 安装JDK
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6之路之模块详解
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Laravel 中的一个后期静态绑定
  • Making An Indicator With Pure CSS
  • PaddlePaddle-GitHub的正确打开姿势
  • python docx文档转html页面
  • Redis的resp协议
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Sass Day-01
  • windows下使用nginx调试简介
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对超线程几个不同角度的解释
  • 爬虫模拟登陆 SegmentFault
  • 前端知识点整理(待续)
  • 06-01 点餐小程序前台界面搭建
  • Prometheus VS InfluxDB
  • ​虚拟化系列介绍(十)
  • #ifdef 的技巧用法
  • #stm32整理(一)flash读写
  • #数学建模# 线性规划问题的Matlab求解
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (论文阅读30/100)Convolutional Pose Machines
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)基于IDEA的JAVA基础12