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

几种常见的激活函数

文章目录

  • 常见的激活函数介绍
    • Sigmoid函数
    • ReLU函数
    • LeakyReLU函数
    • Tanh函数
    • Softmax函数
    • 总结

常见的激活函数介绍

激活函数是神经网络中的重要组成部分,它决定了神经元的输出。在神经网络的前向传播中,输入数据被传递给神经元,经过加权和和激活函数的计算后,得到神经元的输出。

本文将介绍几种常见的激活函数,它们的定义、特点和应用场景。

Sigmoid函数

Sigmoid函数是一种常用的激活函数,它将输入映射到一个介于0和1之间的值。它的公式如下:
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1
请添加图片描述

Sigmoid函数具有平滑且连续的输出,这使得它在某些情况下非常有用。例如,它常被用于二分类问题中,因为它的输出可以被解释为“概率”。

但是,Sigmoid函数在输入较大或较小的情况下,输出会非常接近于0或1,这会导致梯度消失的问题。因此,在深度神经网络中,Sigmoid函数不太常用。

ReLU函数

ReLU函数是一种非常简单和有效的激活函数。它的公式如下:
f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0,x) f(x)=max(0,x)

请添加图片描述

ReLU函数的输出为正数,负数则为0。这使得它在解决梯度消失的问题上非常有效,同时也能够加速模型的训练速度。

ReLU函数在许多深度神经网络中广泛应用,但它也有一些问题。例如,当输入为负数时,梯度为0,这被称为“死亡ReLU”问题。此外,在某些情况下,ReLU函数可能导致“梯度爆炸”问题。

LeakyReLU函数

LeakyReLU函数是对ReLU函数的一种改进。它的公式如下:
f ( x ) = { x if  x > 0 a x otherwise f(x) = \begin{cases} x & \text{if } x > 0 \\ ax & \text{otherwise} \end{cases} f(x)={xaxif x>0otherwise

请添加图片描述

其中, a a a是一个小的常数,通常为0.01。LeakyReLU函数在输入为负数时,不会完全变为0,而是将输入乘以一个小的常数。这使得LeakyReLU函数能够在解决“死亡ReLU”问题的同时,保持ReLU函数的优点。

Tanh函数

Tanh函数是另一种常见的激活函数,它将输入映射到一个介于-1和1之间的值。它的公式如下:
f ( x ) = e x − e − x e x + e − x f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=ex+exexex

请添加图片描述

Tanh函数与Sigmoid函数类似,但它的输出范围是[-1,1]。Tanh函数在某些情况下比Sigmoid函数更好,因为它的输出可以被解释为正负的概率。但是,Tanh函数也有梯度消失的问题,类似于Sigmoid函数。

Softmax函数

Softmax函数是一种用于多分类问题的激活函数。它将输入映射到一个概率分布上,使得所有输出值之和为1。Softmax函数的公式如下:

f ( x i ) = e x i ∑ j = 1 k e x j f(x_i) = \frac{e^{x_i}}{\sum_{j=1}^k e^{x_j}} f(xi)=j=1kexjexi
其中, k k k是输出的类别数。 Softmax函数常被用于多分类问题中,因为它可以将神经网络的输出解释为每个类别的概率。

# 示例代码
import numpy as np
import matplotlib.pyplot as pltdef softmax(x):exp_x = np.exp(x)return exp_x / np.sum(exp_x)x = np.array([1, 2, 3, 4, 5])
y = softmax(x)print(y)# 输出如下
[0.01165623 0.03168492 0.08612854 0.23412166 0.63640864]

总结

本文介绍了几种常见的激活函数,它们分别是Sigmoid函数、ReLU函数、LeakyReLU函数、Tanh函数和Softmax函数。每种激活函数都有其独特的特点和应用场景,选择合适的激活函数可以提高神经网络的性能。

http://www.lryc.cn/news/60979.html

相关文章:

  • MySQL-数据库,数据表的基本操作
  • IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告
  • 面试常见问题
  • matlab数据归一化与反归一化处理
  • 【杂凑算法篇】密码杂凑算法的安全强度
  • 【RobotFramework自动化测试】
  • 操作系统原理 —— 什么是中断?(四)
  • SA168 3BSE003389R1
  • 基于Java+Springboot+Vue+elememt美食论坛平台设计实现
  • Go Etcd
  • 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS)
  • Redis数据结构与对象-链表和字典
  • 学系统集成项目管理工程师(中项)系列08a_合同管理(上)
  • 【Linux 裸机篇(四)】I.MX6ULL C语言 LED 驱动
  • 我也曾经因安装库而抓狂,直到我遇到了
  • DDPG算法详解
  • 继续学c++
  • Day949.遗留系统之殇:为什么要对遗留系统进行现代化? -遗留系统现代化实战
  • DAY 45 Nginx服务配置
  • 如何收集K8S容器化部署的服务的日志?
  • python删除csv文件中的某几列或行
  • Redis持久化机制导致服务自启动后恢复数据过长无法使用以及如何关闭
  • DAY 37 shell免交互
  • 用python脚本从Cadence导出xdc约束文件
  • 【C++ 六】内存分区、引用
  • markdown基本语法
  • 第十篇 Spring 集成Redis
  • PADS-LOGIC项目原理图设计
  • 36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?
  • Android Retrofit 源码分析