【激活函数--下】非线性函数与ReLU函数

2024-05-14 14:20
文章标签 函数 激活 relu 非线性

本文主要是介绍【激活函数--下】非线性函数与ReLU函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、非线性函数在神经网络中的重要性
      • 二、ReLU函数介绍及其实现
        • 2.1 ReLU函数概述
        • 2.2 ReLU函数的Python实现及可视化

一、非线性函数在神经网络中的重要性

在神经网络中,激活函数的选择对于网络的性能和能力至关重要。阶跃函数和Sigmoid函数除了是激活函数的具体实例外,它们还有一个共同的特性——非线性。这两种函数虽然在形式上有所不同,但都不是线性的,这使得它们在处理复杂问题时非常有用。

非线性与线性函数的区别

  • 线性函数:形式上可以表示为 h ( x ) = c x h(x) = cx h(x)=cx(其中 c c c 是常数),图形是一条直线。线性函数简单且易于计算,但它在功能上有限。
  • 非线性函数:不呈直线形态,可以是曲线或折线等。非线性函数能够处理更复杂的数据模式,是神经网络设计中不可或缺的。

神经网络为何需要非线性激活函数

在神经网络中使用非线性激活函数至关重要,原因包括:

  1. 层叠效应
    • 如果使用线性函数作为激活函数,无论网络有多少层,最终输出都是输入的线性组合。实际上,多层线性网络可以被等效为一个没有隐藏层的网络。
    • 例如,如果激活函数是线性的 h ( x ) = c x h(x) = cx h(x)=cx,那么三层网络中的操作 y ( x ) = h ( h ( h ( x ) ) ) y(x) = h(h(h(x))) y(x)=h(h(h(x))) 等同于 y ( x ) = c 3 x y(x) = c^3x y(x)=c3x。这意味着多层的效果可以被单一变换替代,从而无法利用多层结构的优势。
  2. 表达能力
    • 非线性函数使得神经网络可以学习和模拟任何形式的复杂函数,这是理解深层网络能成功解决各种难题的关键。
    • 线性函数由于其形式上的限制,不能模拟数据中的复杂模式和关系。

考虑一个使用线性激活函数的简单三层神经网络,其操作可以简化为一次线性变换。这表明,增加层数(即使是使用线性激活函数)并没有增加网络对数据的解释能力或学习能力。相反,非线性激活函数通过每一层的变换使得网络能逐层构建越来越复杂的数据表示和功能分解。

因此,在设计神经网络时,选择合适的非线性激活函数是至关重要的,它决定了网络能处理的复杂性和灵活性。常用的非线性激活函数包括Sigmoid、ReLU及其变种等,它们各有优势和应用场景,使得神经网络能在多种任务中表现出色。

二、ReLU函数介绍及其实现

2.1 ReLU函数概述

ReLU(修正线性单元)函数是神经网络中广泛使用的激活函数之一,尤其是在深度学习模型中。相较于早期常用的Sigmoid函数,ReLU因其简单性和在训练深层网络时表现出的效率而受到青睐。ReLU函数的定义如下:
h ( x ) = { x if  x > 0 0 if  x ≤ 0 h(x) = \begin{cases} x & \text{if } x > 0 \\ 0 & \text{if } x \leq 0 \end{cases} h(x)={x0if x>0if x0
ReLU函数的特点

  • 非线性:尽管ReLU在正数部分是线性的,但整体上它是一个非线性函数,因为它在零点处引入了一个非线性变化(从0变到正值)。
  • 计算简单:ReLU函数只需判断输入是否大于0,这使得它在计算上比Sigmoid或tanh等传统激活函数要简单得多。
  • 缓解梯度消失问题:在正数区间,ReLU的导数是常数(1),这有助于缓解深度网络中的梯度消失问题。
2.2 ReLU函数的Python实现及可视化

在Python中,使用NumPy库可以非常容易地实现ReLU函数。这里我们使用np.maximum函数来实现,np.maximum用于比较两个数组并返回各元素的最大值:

import numpy as npdef relu(x):return np.maximum(0, x)

这种实现方法允许输入是一个数字、一个列表或一个NumPy数组,输出将是相同形状的数组,其中每个元素都是应用了ReLU函数的结果。

使用Matplotlib库,我们可以绘制ReLU函数的图形,以更好地理解其行为:

import matplotlib.pyplot as plt
import numpy as np# 定义ReLU函数
def relu(x):return np.maximum(0, x)# 生成数据
x = np.arange(-6, 7, 0.1)
y = relu(x)# 绘图
plt.plot(x, y)
plt.title("ReLU Function")
plt.xlabel("x")
plt.ylabel("h(x)")
plt.ylim(-1, 5)  # 设置y轴的范围
plt.show()

绘制出的图形清晰地展示了ReLU函数在 x = 0 x=0 x=0时的突变,这是由0转变到正值的关键特性。

在这里插入图片描述

ReLU由于其在正区间内保持恒定的梯度和在实际应用中的高效性,已成为许多深度学习模型的首选激活函数。然而,它也有缺点,例如在输入小于等于0时梯度为0,这可能导致某些神经元在训练过程中“死亡”,即不再对任何数据产生变化。尽管如此,ReLU仍是现代神经网络架构中不可或缺的组成部分。

这篇关于【激活函数--下】非线性函数与ReLU函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五