机器学习——sigmoid、tanh、relu等激活函数总结

2023-11-09 03:20

本文主要是介绍机器学习——sigmoid、tanh、relu等激活函数总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是激活函数?

一个神经元会同时接收多个信号,然后将这些信号乘以一定权重求和,再用函数处理后再输出新的信号。对神经元的输入进行处理,以获得输出的函数称为激活函数。

二、为什么要用激活函数?

  1. 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
  2. 激活函数可以引入非线性因素。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
  3. 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。

三、为什么激活函数需要非线性函数?

  1. 假若网络中全部是线性部件,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到用非线性来逼近任意函数。
  2. 使用非线性激活函数 ,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。使用非线性激活函数,能够从输入输出之间生成非线性映射。

四、常见的激活函数

1. sigmoid函数

sigmoid函数是最常用的连续、平滑的激励函数,也被称作逻辑函数(Logistic函数)。用于隐层神经元输出,可以将一个实数映射到(0,1)的区间,用来做二分类。

a. 函数定义: f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1,值域: ( 0 , 1 ) (0,1) (0,1)

b. 函数图像:

c. 导数:: f ′ ( x ) = 1 1 + e − x ( 1 − 1 1 + e − x ) = f ( x ) ( 1 − f ( x ) ) f^{'}(x)=\frac{1}{1+e^{-x}}\left( 1- \frac{1}{1+e^{-x}} \right)=f(x)(1-f(x)) f(x)=1+ex1(11+ex1)=f(x)(1f(x))

d. 特点:当 x = 10 x=10 x=10,或 x = − 10 x=-10 x=10 f ′ ( x ) ≈ 0 f^{'}(x) \approx0 f(x)0,当 x = 0 x=0 x=0 f ′ ( x ) = 0.25 f^{'}(x) =0.25 f(x)=0.25

2. Tanh函数

a. 函数定义: f ( x ) = t a n h ( x ) = e x − e − x e x + e − x f(x) = tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+exexex,值域: ( − 1 , 1 ) (-1,1) (1,1)

b. 函数图像:

c. 导数: f ′ ( x ) = − ( t a n h ( x ) ) 2 f^{'}(x)=-(tanh(x))^2 f(x)=(tanh(x))2

d. 特点:当 x = 10 x=10 x=10,或 x = − 10 x=-10 x=10 f ′ ( x ) ≈ 0 f^{'}(x) \approx0 f(x)0,当 x = 0 x=0 x=0 f ‘ ( x ) = 1 f^{`}(x) =1 f(x)=1

3. ReLU函数

ReLU是神经网络最常用的非线性函数。其函数为max(0,x),连续但不平滑。

a. 函数定义: f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)值域: [ 0 , + ∞ ) [0,+∞) [0,+)

b. 函数图像:

c. 导数: f ′ ( x ) = { 0 , x < 0 1 , x > 0 u n d e f i n e d , x = 0 f^{'}(x)=\begin{cases} 0,x<0 \\ 1,x>0 \\ undefined,x=0\end{cases} f(x)=0,x<01,x>0undefined,x=0

d. 特点:具有单侧抑制;相对宽阔的兴奋边界;稀疏激活性等性质。

4. Leak Relu 激活函数

a. 函数定义: f ( x ) = { a x , x < 0 x , x > 0 f(x) = \left\{ \begin{aligned} ax, \quad x<0 \\ x, \quad x>0 \end{aligned} \right. f(x)={ax,x<0x,x>0,值域: ( − ∞ , + ∞ ) (-∞,+∞) (,+)

b. 函数图像(a=0.5):

c. 导数: f ′ ( x ) = { a , x < 0 1 , x > 0 u n d e f i n e d , x = 0 f^{'}(x)=\begin{cases} a,x<0 \\ 1,x>0 \\ undefined,x=0\end{cases} f(x)=a,x<01,x>0undefined,x=0

5. ELU函数

a. 函数定义: f ( x ) = { a ( e x − 1 ) , x < 0 x , x > 0 f(x) = \left\{ \begin{aligned} a(e^x-1), \quad x<0 \\ x, \quad x>0 \end{aligned} \right. f(x)={a(ex1),x<0x,x>0,值域: ( − a , + ∞ ) (-a,+∞) (a,+)

b. 函数图像(a=0.5):

6. SoftPlus 函数

a. 函数定义: f ( x ) = l n ( 1 + e x ) f(x) = ln( 1 + e^x) f(x)=ln(1+ex)值域: $ (0,+∞) $

b. 函数图像:

c. 导数: f ′ ( x ) = e x 1 + e x f^{'}(x)=\frac{e^x}{1 + e^x} f(x)=1+exex

7. softmax函数

softmax 函数可以把它的输入,通常被称为 logits 或者 logit scores,处理成 0 到 1 之间,并且能够把输出归一化到和为 1。这意味着 softmax 函数与分类的概率分布等价。它是一个网络预测多酚类问题的最佳输出激活函数。

a. 函数定义: P ( i ) = e x p ( θ i T x ) ∑ k = 1 K e x p ( θ i T x ) P(i) = \frac{exp(\theta_i^T x)}{\sum_{k=1}^{K} exp(\theta_i^T x)} P(i)=k=1Kexp(θiTx)exp(θiTx),其中, θ i \theta_i θi x x x 是列向量, θ i T x \theta_i^T x θiTx 可能被换成函数关于 x x x 的函数 f i ( x ) f_i(x) fi(x)

五、如何选择激活函数

选择一个适合的激活函数并不容易,需要考虑很多因素,通常的做法是,如果不确定哪一个激活函数效果更好,可以把它们都试试,然后在验证集或者测试集上进行评价。然后看哪一种表现的更好,就去使用它。以下是常见的选择情况:

  1. 如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。
  2. 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当是负值的时候,导数等于 0。
  3. sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
  4. tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合。
  5. ReLu 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu 或者 Leaky ReLu,再去尝试其他的激活函数。
  6. 如果遇到了一些死的神经元,我们可以使用 Leaky ReLU 函数。

这篇关于机器学习——sigmoid、tanh、relu等激活函数总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373777

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C