机器学习复习(5)——激活函数

news2024/10/5 16:22:06

目录

激活函数分类

区别与优缺点

饱和激活函数

非饱和激活函数

综合考虑

Sigmoid激活函数

Tanh激活函数

ReLU激活函数

Leaky Relu激活函数

Swish激活函数

激活函数分类

激活函数可以分为两大类 :

  • 饱和激活函数:sigmoid、tanh
  • 非饱和激活函数: ReLU、Leaky Relu、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】

区别与优缺点

饱和激活函数

  1. Sigmoid:

    • 优点:
      • 平滑,输出值在0到1之间,适合用于输出概率。
      • 易于理解和实现。
    • 缺点:
      • 梯度消失问题:当输入值过大或过小时,梯度接近0,使得网络难以学习。
      • 输出不是零中心的:使得优化过程更加复杂。
    • 应用场景: 主要用于二分类问题,如逻辑回归中。
  2. Tanh:

    • 优点:
      • 输出值在-1到1之间,是零中心的,有利于数据的表示。
      • 比Sigmoid更加有效,因为其梯度更强。
    • 缺点:
      • 同样存在梯度消失问题。
    • 应用场景: 适合处理需要考虑正负数的场景,如音频处理。

非饱和激活函数

  1. ReLU(Rectified Linear Unit):

    • 优点:
      • 计算简单,加速了网络的训练。
      • 缓解了梯度消失问题,特别是在网络较深时。
    • 缺点:
      • “死亡ReLU”问题:部分神经元可能永远不会被激活,导致信息丢失。
    • 应用场景: 目前在大多数深度学习网络中被广泛使用,特别是在卷积神经网络中。
  2. Leaky ReLU, PReLU, ELU 等变体:

    • 优点:
      • 尝试解决死亡ReLU问题。
      • 在某些情况下,可以提供比标准ReLU更好的性能。
    • 缺点:
      • 可能会导致训练过程更复杂。
    • 应用场景: 在需要缓解死亡ReLU问题的场景下,如GANs或更深的网络结构。

综合考虑

  • 在选择激活函数时,应根据具体问题和网络结构来决定。
  • 对于一般的深度学习问题,ReLU及其变体通常是首选,因为它们提供了良好的性能和快速的训练。
  • 对于需要输出概率或者处理更复杂的非线性问题的场景,可能会考虑使用Sigmoid或Tanh。

Sigmoid激活函数

sigmoid函数也叫Logistic函数,用于隐藏层的输出,输出在(0,1)之间,它可以将一个实数映射到(0,1)的范围内,可以用来做二分类。常用于:在特征相差比较复杂或是相差不是特别大的时候效果比较好。该函数将大的负数转换成0,将大的正数转换为1。公式描述如下:

实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 定义sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 生成一系列点
x = np.linspace(-10, 10, 100)
y = sigmoid(x)

# 绘制图像
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("Sigmoid(x)")
plt.title("Sigmoid Function")
plt.grid(True)
plt.show()

 如图所示:

Tanh激活函数

Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。

公式如下:

实现代码:

import matplotlib.pyplot as plt
import math
def tanh(x):
    return (math.exp(x) - math.exp(-x)) / (math.exp(x) + math.exp(-x))
# 生成一系列点
x_values = [x * 0.1 for x in range(-100, 101)]
y_values = [tanh(x) for x in x_values]

# 绘制图像
plt.plot(x_values, y_values)
plt.xlabel("x")
plt.ylabel("tanh(x)")
plt.title("Tanh Activation Function")
plt.grid(True)
plt.show()

如图所示:

与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。你可以将 Tanh 函数想象成两个 Sigmoid 函数放在一起。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。

优点:它解决了Sigmoid函数的不是zero-centered输出问题。

缺点:梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。 

ReLU激活函数

Relu激活函数的解析式:

实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 定义ReLU函数
def relu(x):
    return np.maximum(0, x)

# 生成一系列点
x = np.linspace(-10, 10, 100)
y = relu(x)

# 绘制图像
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("ReLU(x)")
plt.title("ReLU Activation Function")
plt.grid(True)
plt.show()

如图所示: 

 当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高。

Relu激活函数缺点:

  • 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。
  • 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。

尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

Leaky Relu激活函数

Leaky Relu激活函数的解析式:

 实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 定义Leaky ReLU函数
def leaky_relu(x, alpha=0.01):
    return np.where(x >= 0, x, alpha * x)

# 生成一系列点
x = np.linspace(-10, 10, 100)
y = leaky_relu(x)

# 绘制图像
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("Leaky ReLU(x)")
plt.title("Leaky ReLU Activation Function")
plt.grid(True)
plt.show()

如图所示:

Leaky ReLU 的概念是:当 x < 0 时,它得到 0.01 的正梯度。

优点:

该函数一定程度上缓解了 dead ReLU 问题。

缺点:

使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。

Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。

Swish激活函数

Swish激活函数是一个较新的激活函数,公式如下:

实现代码:

import numpy as np
import matplotlib.pyplot as plt

# 定义Swish函数
def swish(x, beta=1):
    return x * (1 / (1 + np.exp(-beta * x)))

# 生成一系列点
x = np.linspace(-10, 10, 100)
y = swish(x)

# 绘制图像
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("Swish(x)")
plt.title("Swish Activation Function")
plt.grid(True)
plt.show()

如图所示:

 根据上图,从图像上来看,Swish函数跟ReLu差不多,唯一区别较大的是接近于0的负半轴区域,因此,Swish 激活函数的输出可能下降,即使在输入值增大的情况下。大多数激活函数是单调的,即输入值增大的情况下,输出值不可能下降。而 Swish 函数为 0 时具备单侧有界(one-sided boundedness)的特性,它是平滑、非单调的。

缺点: - 只有实验证明,没有理论支持。 - 在浅层网络上,性能与relu差别不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blender教程(基础)-顶点的移动、滑移-16

一、顶点的移动与缩放 ShiftA新建柱体、切换到编辑模式 点模式下&#xff0c;选择一个顶点、选择移动&#xff08;GZ&#xff09;&#xff0c;发现顶点严Z轴移动&#xff0c;如下图所示 GY 按数字键盘7切换视图&#xff0c;选择这个面的所有顶点 按S把面缩放大 Ctrl…

Python程序员面试题精选及解析(2)

本文精心挑选了10道Python程序员面试题&#xff0c;覆盖了Python的多个核心领域&#xff0c;包括装饰器、lambda函数、列表推导式、生成器、全局解释器锁(GIL)、单例模式以及上下文管理器等。每道题都附有简洁的代码示例&#xff0c;帮助读者更好地理解和应用相关知识点无论是对…

《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)

文章目录 8.1 使用 .gitignore 优化你的仓库8.1.1 基础知识讲解8.1.2 重点案例&#xff1a;为 Python 项目配置 .gitignore8.1.3 拓展案例 1&#xff1a;使用全局 .gitignore8.1.4 拓展案例 2&#xff1a;忽略已经被跟踪的文件 8.2 管理敏感数据8.2.1 基础知识讲解8.2.2 重点案…

C++内存模型的内存布局

C内存模型的内存布局 什么是内存模型内存布局及作用C程序的内存布局 本文章介绍了C程序的内存布局&#xff0c;并附有一段演示 数据区和 栈区存储不同类型变量的代码示例。 什么是内存模型 在计算机科学中&#xff0c;程序的内存模型是指程序在内存中的组织结构和存储方式的抽…

基于java+springboot+vue实现的房屋租赁管理系统(文末源码+Lw)23-142

第1章 绪论 房屋租赁管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、字典管理、租房房源管理、租房评价管理、房源租赁管理、租房预约管理、论坛管理、公告管理、投诉建议管理、用户管理、租房合同管理、管理员管理。用户的功能等。该系统采用了My…

pwn学习笔记(2)ret_2_text_or_shellcode

pwn学习笔记&#xff08;2&#xff09; 1.三种常见的寄存器&#xff1a; ​ ax寄存器&#xff1a;通用寄存器&#xff0c;可用于存放多种数据 ​ bp寄存器&#xff1a;存放的是栈帧的栈底地址 ​ sp寄存器&#xff1a;存放的是栈顶的地址 2.栈帧与栈工作的简介&#xff1a…

【C生万物】C语言数据类型、变量和运算符

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

Sui与Thrive合作推出ThinkSui平台,72万美元奖励给Sui贡献者

我们很高兴宣布推出ThinkSui平台&#xff0c;这是一个新的计划&#xff0c;旨在认可Sui社区成员、建设者和创作者。该计划由Sui和Thrive合作推出&#xff0c;旨在为Sui社区提供了一个让他们分享想法的平台&#xff0c;并将其转化为有影响力的贡献&#xff0c;使用户因推动Sui生…

向量搜索查询faiss、annoy

首先介绍annoy : 转发空间&#xff1a;https://download.csdn.net/blog/column/10872374/114665212 Annoy是高维空间求近似最近邻的一个开源库。 Annoy构建一棵二叉树&#xff0c;查询时间为O(logn)。 Annoy通过随机挑选两个点&#xff0c;并使用垂直于这个点的等距离超平面…

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

------------★Tkinter系列教程★------------ Tkinter教程21&#xff1a;Listbox列表框OptionMenu选项菜单Combobox下拉列表框控件的使用绑定事件 Tkinter教程20&#xff1a;treeview树视图组件&#xff0c;表格数据的插入与表头排序 Python教程57&#xff1a;tkinter中如何…

【SpringBoot篇】解决Redis分布式锁的 误删问题 和 原子性问题

文章目录 &#x1f354;Redis的分布式锁&#x1f6f8;误删问题&#x1f388;解决方法&#x1f50e;代码实现 &#x1f6f8;原子性问题&#x1f339;Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁&#x1f50e;代码实现 &#x1f354;Redis的分布式锁 Redis的分布式锁是通过利…

【RT-DETR有效改进】轻量级下采样方法ContextGuided(参数量下降700W,轻量又涨点)

&#x1f451;欢迎大家订阅本专栏&#xff0c;一起学习RT-DETR&#x1f451; 一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) &#xff0c;其是在CGNet论文中提出的一种模块&#xff0c;其基本原理是模拟人类视觉系统依赖上…

dbeaver免费、跨平台数据管理软件

下载 dbeaver是一款的数据库连接工具&#xff0c;免费&#xff0c;跨平台。 官网&#xff1a;DBeaver Community | Free Universal Database Tool下载地址&#xff1a;Download | DBeaver Community 点击下载 安装 修改安装路径 点击安装 点击完成 使用 连接mysql 已连接 点…

一个 SpringBoot 项目能同时处理多少请求?

目录 1 问题分析 2 Demo 3 答案 4 怎么来的&#xff1f; 5 标准答案及影响参数一Tomcat配置 6 影响参数二 Web容器 7 影响参数三 Async 1 问题分析 一个 SpringBoot 项目能同时处理多少请求&#xff1f; 不知道你听到这个问题之后的第一反应是什么&#xff1f; 我大概…

Maven - 编译报错:程序包 XXX 不存在(多模块项目)

问题描述 编译报错&#xff1a;程序包 XXX 不存在&#xff08;多模块项目&#xff09; 原因分析 检查依赖模块 pom 文件&#xff0c;看是不是引入了如下插件 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-pl…

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

5.electron之主进程起一个本地服务

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

信钰证券:稀土板块集体爆发,十余股涨停!脑机接口新进展

脑机接口迎多重利好。 大盘指数早间延续反弹&#xff0c;深证成指一度涨逾3%&#xff0c;半导体芯片、医药医疗、军工等方向涨幅居前。白酒股震荡拉升&#xff0c;金徽酒涨超7%&#xff0c;老白干酒涨超5%&#xff0c;金种子酒、迎驾贡酒等跟涨。 高股息股逆势走弱&#xff0c…

使用ChatGpt和文心一言辅助文章创作

近期在写数字水浒系列文章&#xff0c;使用了ChatGpt和文心一言进行辅助创作&#xff0c;整体感受不错&#xff0c;提高了工作效率。 在使用过程中&#xff0c;感觉文心的中文能力更强一些&#xff0c;主要体现在&#xff1a; 1 语料库更大&#xff0c;比如对水浒传了解的更多…