【自然语言处理】P4 神经网络基础 - 激活函数

news2024/11/28 12:34:47

目录

  • 激活函数
  • Sigmoid
  • Tanh
  • ReLU
  • Softmax

本节博文介绍四大激活函数,Sigmoid、Tanh、ReLU、Softmax。

激活函数

为什么深度学习需要激活函数?

博主认为,最重要的是 引入非线性

神经网络是将众多神经元相互连接形成的网络。如果神经元没有激活函数,那么网络模型都将退化成为线性模型,从而失去了处理非线性问题的能力。非线性问题,如视觉识别、语音识别、图像识别等等。

当神经网络具有处理非线性的能力后,将会提高模型的 表达能力 以及 泛化能力:神经网络能够更有效地学习数据中的复杂模式和函数关系,更好地学习数据的通用特征,从而提高模型在数据上的表达能力和泛化能力。

此外,激活函数还可 提高训练效率,如 ReLU 因为在计算梯度时更为简单快速,可以加速神经网络的训练过程;确保网络的稳定性,防止梯度消失或爆炸等问题。

下面,博文将依次介绍四个激活函数以及其特征。


Sigmoid

Sigmoid 函数将任意实数 x 映射到 (0, 1) 区间内。数学上,Sigmoid 函数表示为:
f ( x ) = 1 1 + e − x f(x)=\frac {1} {1+e^{-x}} f(x)=1+ex1

Python Sigmoid 激活函数实现与绘图:

import torch
import matplotlib.pyplot as plt

x = torch.range(-5., 5., 0.1)
y = torch.sigmoid(x)
plt.plot(x.numpy(), y.numpy())
plt.show()

在这里插入图片描述

Sigmoid 函数的一些优点包括:

  1. 输出范围限定在 (0, 1) 之间,便于表示概率;
  2. 函数是连续可微的,有利于梯度的计算;
  3. 在二分类问题中,可以将输出值直接解读为概率。

Sigmoid 函数的一些缺点包括:

  1. 当输入值接近极值时,梯度会变得非常小,导致梯度消失问题,影响深层网络的训练;
  2. 计算量相对较大,尤其对于大规模数据集和深层网络。

Tanh

Tanh 激活函数是 Sigmoid 函数的一个变体,tanh 的函数表达式如下:
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

Python Tanh 激活函数实现与绘图:

import torch
import matplotlib.pyplot as plt

x = torch.range(-5., 5., 0.1)
y = torch.tanh(x)
plt.plot(x.numpy(), y.numpy())
plt.show()

在这里插入图片描述

Tanh 激活函数有两个优点:

  1. Tanh 的输出范围为 (-1, 1),相比 sigmoid 函数的 (0, 1) 范围更广,从而使得网络可以更容易地处理梯度消失地问题;
  2. Tanh 在原点处的梯度为1,有助于神经网络训练过程。

Tanh 激活函数的不足:

  1. 当输入值很大或者很小时,Tanh 函数的梯度会变得很小,会导致训练过程中梯度消失。

在实际应用中,Tanh 函数通常用于隐藏层,而不是输出层。如果网络的输出层需要输出概率值,通常会使用 Softmax 函数而不是 Tanh。


ReLU

ReLU 激活函数是深度学习领域应用极其广泛的一种非线性激活函数。ReLU 的地位极其高,许多在深度学习领域的创新都是基于其。ReLU 函数表达式很简单,为:
f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x)

Python ReLU 激活函数的实现与绘图:

import torch
import matplotlib.pyplot as plt

relu = torch.nn.ReLU()
x = torch.range(-5., 5., 0.1)
y = relu(x)

plt.plot(x.numpy(), y.numpy())
plt.show()

在这里插入图片描述

ReLU 激活函数的优点:

  1. 计算效率高,由于 ReLU 函数的简单性,其计算速度非常快,这使得其成为训练深度神经网络的首选激活函数;
  2. 缓解梯度消失问题:在传统的 Sigmoid 以及 Tanh 激活函数中,当输入值很大时,梯度会变得非常小,导致梯度消失问题。而 ReLU 激活函数在输入大于零时,梯度始终为 1,这大大减少了梯度消失的问题,使得反向传播更加有效;
  3. 稀疏性:ReLU 激活函数的性质使得只有少数的神经元会被激活,这对降低模型的复杂性和提高计算的效率有很大帮助;

ReLU 激活函数的缺点:

  1. ReLU 梯度“Death”:当输入值小于零时,对应的神经元将不会更新权重,因为梯度为零。在某些情况下,这可能会导致网络性能下降;
  2. Leaky ReLU 变体:为了解决 ReLU 梯度"Death" 现象,研究者提出 Leaky ReLU。其在负区间引入了一个小的斜率,这样即使输入是负的,也不会导致梯度为零。

Python Leaky ReLU 激活函数的实现与绘图:

import matplotlib.pyplot as plt
import numpy as np

# 定义PReLU函数
def prelu(x, alpha):
    return np.maximum(0, x) + alpha * np.minimum(0, x)

# 设置输入值的范围
x = np.linspace(-10, 10, 100)

# 创建一个α值的列表,例如对于每个输入通道α可以是不同的
alphas = [0.1, 0.5, 1.0, 2.0]

# 绘制PReLU函数的图像
for alpha in alphas:
    y = prelu(x, alpha)
    plt.plot(x, y, label=f'α={alpha}')

# 添加图例
plt.legend()

# 显示图像
plt.show()

在这里插入图片描述


Softmax

Softmax 激活函数可以定义为一个指数函数的归一化形式。假设神经网络的输出是一个 K 维的实数向量, z = [ z 1 , z 2 , . . . , z k ] z = [z_1, z_2, ..., z_k] z=[z1,z2,...,zk],Softmax 激活函数将向量转换为一个概率分布向量,其中公式为:
s o f t m a x ( z i ) = e z i ∑ j = 1 K e z j softmax(z_i)=\frac {e^{z_i}} {\sum ^K _{j=1} e^{z_j}} softmax(zi)=j=1Kezjezi

其中 e z i e^{z_i} ezi z i z_i zi 的指数,分母是所有指数的和。

Softmax 激活函数的特点:

  1. 概率分布:激活函数将输入向量的每个函数转化为一个概率值,表示输入属于对应类型的概率;
  2. 非负性:Softmax 激活函数的输出对于所有的输入都是非负的;
  3. 归一化:所有概率值的总和等于1,满足了概率分布的规范性要求;

Python Softmax 激活函数的实现:

# 方法一:通过 torch.nn 实现:
import torch.nn as nn

softmax = nn.Softmax(dim=1)
x = ...
y = softmax(x)

# 方法二:自己写函数:
def softmax(z):
    # 防止指数运算时溢出,通过减去每行的最大值来进行数值稳定化
    e_z = np.exp(z - np.max(z, axis=-1, keepdims=True))
    return e_z / np.sum(e_z, axis=-1, keepdims=True)

Softmax 激活函数的优点:

  1. 优化梯度:Softmax 基于指数函数,所以其导数就是其本身。这使得 Softmax 在反向传播时更好地保持梯度信息,缓解梯度消失的问题。

Softmax 激活函数的缺点:

  1. 计算复杂性:明显,Softmax 激活函数计算相当复杂,这意味着模型输出层需要存储和计算更多的参数,导致内存占用增加;
  2. 训练效率:虽然 Softmax 的梯度计算相对简单,但是在反向传播过程中,由于需要计算概率分布,可能会导致训练效率的降低,尤其是在处理大量数据时;
  3. 局部最优:在某些情况下,Softmax 可能会导致模型陷入局部最优。

Softmax 激活函数由于其概率解释性和在多分类问题中的有效性,其虽然存在诸多潜在的缺点,但仍然是深度学习和机器学习领域广泛使用的一种激活函数。


以上便是四种激活函数的简要介绍。
如有任何疑问,欢迎读者前来探讨!
谢谢!
2024年2月4日

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

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

相关文章

Text Mesh Pro图文混排如何对任何图片都能实现

1)Text Mesh Pro图文混排如何对任何图片都能实现 2)Unity iOS平台的小图占用特别大的内存 3)只在编辑器内,纹理不开启Read&Write情况下,如何获取纹理所有颜色值 4)准备在海外发行游戏,有哪些…

微服务入门篇:Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

目录 1.Nacos安装1.官网下载2.解压到本地3.启动nacos 2.Nacos快速入门1.在父工程中导入nacos依赖2.给子项目添加客户端依赖3.修改对应服务的配置文件4.启动服务,查看nacos发现情况 3.Nacos服务多级存储模型4.NacosRule负载均衡5. 服务实例的权重设置6.环境隔离&…

【SAR成像】基于RD、CS和ωk算法的合成孔径雷达成像算法原理与实现

基于RD、CS和ωk算法的合成孔径雷达成像算法实现 前言SAR基本概念雷达获取数据的几何关系低斜视角下的回波信号模型 RADARSAT-1主要参数数据预处理数据读取与再封装数据补零 成像算法坐标轴的产生RD算法距离压缩距离徙动矫正方位压缩 CS算法第一次相位相乘 变标后的信号第二次相…

Unity类银河恶魔城学习记录1-11 PlayerPrimaryAttack P38

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic…

get通过发送Body传参-工具类

1、调用方式 String url "http://ip/xxx/zh/xxxxx/xxxx/userCode"; //进行url中的对应的参数 url2 url2.replace("ip",bancirili); url2 url2.replace("zh",zh); url2 url2.replace("userCode",userCode);String dateTime xxxx; //组…

共享网盘系统PHP源码

新V5.0版本,支持上传视频、支持视频播放、支持共享,也可以自己用。 可以自动生成视频外链,下载地址,播放器代码,html代码,ubb代码等等。 使用方法: 源码上传到服务器,打开网站根据…

vscode debug无法直接查看eigen变量的问题(解决方法)

主要是给gdb添加一个Eigen相关的printer即可, 网上其他教程都搞太复杂了, 我整理成了一个仓库, 把仓库克隆下来直接运行 ./setup.sh脚本即可配置好 git clone gitgithub.com:fandesfyf/EigenGdb.git cd EigenGdb ./setup.sh 然后在vscode中重新debug即可。 效果 …

使用yolov5时需要安装的requirements.txt

之前需要配置好pytorch,同时注意的是pytoorch版本需要在1.7以上 1.github下载好requirements.txt 文件内容如下: 2.在cmd命令行转移到yolov5所在文件夹及配置的yolo环境中,直接下载 pip install -r requirements.txt -i http://pypi.doub…

一文讲透ast.literal_eval() eval() json.loads()

文章目录 一文讲透ast.literal_eval() eval() json.loads()1. ast.literal_eval()2. eval()3. json.loads()4. 总结 一文讲透ast.literal_eval() eval() json.loads() 在Python库中,我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下&#…

TCP与UDP:传输层协议的差异与选择

在计算机网络中,传输控制协议(TCP)和用户数据报协议(UDP)是两种常用的传输层协议。然而,随着互联网的快速发展,传统的TCP和UDP在某些场景下存在一些限制。为了解决这些问题,出现了新…

蓝桥杯Web应用开发-display属性

display 属性 专栏持续更新中 display 属性可以用来设置元素在页面上的排列方式,也可用来隐藏元素。 display 属性值的说明如下表所示。 属性值说明block元素以块级方式展示。inline元素以内联方式展示。inline-block元素以内联块的方式展示。none隐藏元素。 b…

Vue3.0(二):Vue组件化基础 - 脚手架

Vue组件化基础 - 脚手架 Vue的组件化 我们在处理一些任务量比较庞大的工作时候,会将工作内容进行拆分,分步骤完成 而组件化的思想正式如此,对于一个庞大的项目,我们可以将其拆分成一个个的小功能,分步骤进行实现 组…

Axure RP9原型设计工具使用记录:基础操作

Axure RP9使用记录一 📚第一章 前言📗背景📗目的 📚第二章 基础介绍及操作📗页面功能总览📗基础操作📕设置样式📕设置交互📕设置组合📕设置动态面板&#x1f…

在线JSON转SQL工具

在线JSON转SQL - BTool在线工具软件,为开发者提供方便。在线JSON转SQL工具可以将JSON文件中的数据或者JSON对象转换为SQL插入语句,方便用户将数据导入到数据库中。用户可以通过简单的界面上传JSON文件,或者文本框输入,点击JSON转S…

云服务器也能挂游戏 安卓模拟器

安卓模拟器云服务器 什么是BlueStacks模拟器主机? 特网科技基于Windows操作系统预装了BlueStacks Android模拟器您能够通过Android模拟器安装Android应用程序、如APP游戏、安卓APP、APP游戏等。 我可以在主机上安装应用程序吗? 你可以在BlueStacks模…

适合大型企业的云计算服务器有哪些?

随着云计算技术的不断发展,越来越多的企业开始采用云计算服务来降低成本、提高效率。对于大型企业而言,选择适合的云计算服务器非常重要,因为它将直接影响企业的业务运营和数据安全。本文将介绍适合大型企业的云计算服务器类型,以…

使用Pycharm安装Python的库

1.点击文件-----设置(setting) 2.找到Python解释器,点击加号 3.搜索你需要的库,安装

介绍一个关于 JSON 可视化的网站

最近在看到一个比较好玩的网站,可以将 JSON以可视化的方式展现出现,比如存在一下JSON数据: {"id": "f3bbc3bc-9f34-4bf7-8a0f-7e6f6e6fbb9a","isActive": false,"age": 25,"name": "…

Docker进阶篇-轻量级可视化工具Portainer

一、简介 Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环 境和集群环境。 Portainer分为开源社区版(CE版)和商用版(BE版/EE版)。 官网:P…

1802907-91-0,Methyltetrazine-PEG4-COOH,可以与多种不同的化学基团反应

您好,欢迎来到新研之家 文章关键词:Methyltetrazine-PEG4-COOH,Methyltetrazine-PEG4-acid,甲基四嗪-四聚乙二醇-羧基,甲基四嗪-四聚乙二醇-羧酸,甲基四嗪PEG4羧酸,甲基四嗪-PEG4-羧酸 一、基…