深度学习-全连接神经网络-激活函数- [北邮鲁鹏]


文章目录

  • 基础知识
  • 为什么需要非线性操作(激活函数)?
  • 激活函数 vs 数据预处理
  • 常用的激活函数
    • Sigmoid函数 (Logistic函数)
    • 双曲正切函数(Tanh函数)
    • 线性整流函数(ReLU函数)
    • Leaky ReLU函数
    • Softmax函数


基础知识

激活函数是神经网络中的一种非线性函数,它作为神经元的输出函数,将输入信号进行转换并引入非线性特性。激活函数的引入能够给神经网络增加更强的表达能力和拟合复杂函数的能力。

  • 在神经网络中,每个神经元都有一个激活函数,它接受输入信号(来自前一层神经元或输入层)并计算输出。激活函数的作用是对输入信号进行非线性变换,从而为神经网络引入非线性能力,使其能够学习和表示更加复杂的数据模式和关系。
  • 类似于人类大脑中基于神经元的模型,激活函数最终决定了是否传递信号以及要发射给下一个神经元的内容。在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。

为什么需要非线性操作(激活函数)?

一个三层的全连接网络:
f = W 3 m a x ( 0 , W 2 m a x ( 0 , W 1 x + b 1 ) + b 2 ) + b 3 f = W_3max(0, W_2max(0,W_1x+b_1)+b_2)+b_3 f=W3max(0,W2max(0,W1x+b1)+b2)+b3
其中max函数就是激活函数,
如果网络中缺少了激活函数,全连接神经网络将变成一个线性分类器。
去掉激活函数后:
f = W 3 m a x ( 0 , W 2 m a x ( 0 , W 1 x + b 1 ) + b 2 ) + b 3 = W 3 W 2 W 1 x + ( W 3 W 2 b 1 + W 3 b 2 + b 3 ) = W ′ x + b ′ \begin{gather} f = W_3max(0, W_2max(0,W_1x+b_1)+b_2)+b_3 \\ = W_3W_2W_1x + (W_3W_2b_1 + W_3b_2 + b_3) \\ =W^{'}x+b^{'} \end{gather} f=W3max(0,W2max(0,W1x+b1)+b2)+b3=W3W2W1x+(W3W2b1+W3b2+b3)=Wx+b

激活函数 vs 数据预处理

激活函数:作用在神经元,作用于线性变换的结果上。
数据预处理:数据输入时,对数据进行处理。

常用的激活函数

Sigmoid函数 (Logistic函数)

Sigmoid函数,也称为Logistic函数,是一种常见的激活函数。它将输入的实数映射到一个范围在0到1之间的输出。常用于二分类问题或作为输出层的激活函数。

Sigmoid函数的数学表达式如下:

f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1

其中,x表示输入值,e是自然对数的底。函数的输出f(x)位于0到1之间。

  • 当x趋近于正无穷大时,f(x)趋近于1;
  • 当x趋近于负无穷大时,f(x)趋近于0。

Sigmoid的函数图像:
在这里插入图片描述
Sigmoid函数的特点

  • 它的输出是连续、光滑的,并且具有可导性,这使得在反向传播算法中可以对其进行梯度计算。在神经网络中,Sigmoid函数通常用作二分类问题的输出层激活函数,也可以用作隐藏层的激活函数。
  • 然而,Sigmoid函数在输入值非常大或非常小的情况下,梯度接近于0,这可能导致梯度消失的问题。

Sigmoid函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt# 生成 x 值
x = np.linspace(-10, 10, 100)# 计算 Sigmoid(x) 的值
sigmoid = 1 / (1 + np.exp(-x))# 绘制曲线
plt.plot(x, sigmoid)
plt.title('Graph of Sigmoid Function')
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.grid(True)
plt.show()

双曲正切函数(Tanh函数)

双曲正切函数是双曲函数的一种。双曲正切函数在数学语言上一般写作tanh ⁡。它将输入的实数映射到一个范围在 -1到1之间的输出,解决了Sigmoid函数的不以0为中心输出问题,然而,梯度消失的问题和幂运算的问题仍然存在。

Tanh函数的数学表达式如下:

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+exexex
其中,x表示输入值,e是自然对数的底。函数的输出f(x)位于-1到1之间。

  • 当x趋近于正无穷大时,f(x)趋近于1;
  • 当x趋近于负无穷大时,f(x)趋近于-1。

TanH的函数图像:
tanh函数图像
TanH函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt# 生成 x 值
x = np.linspace(-10, 10, 100)# 计算 tanh(x) 的值
y = np.tanh(x)# 绘制曲线
plt.plot(x, y)
plt.title('Graph of tanh Function')
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.grid(True)
plt.show()

Tanh函数与Sigmoid函数类似,但相对于Sigmoid函数而言,Tanh函数具有更好的对称性。它可以用作隐藏层的激活函数,能够处理正负值的输入,并保留输入的相对关系。

线性整流函数(ReLU函数)

线性整流函数,又称修正线性单元ReLU,是一种人工神经网络中常用的激活函数,通常指代以斜坡函数及其变种为代表的非线性函数。

ReLU函数的数学表达式如下:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

其中,x表示输入值。

  • 如果输入值x大于0,则ReLU函数返回输入值x本身;
  • 如果输入值x小于或等于0,则ReLU函数返回0。

ReLU的函数图像:
在这里插入图片描述
ReLU函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt# 生成 x 值
x = np.linspace(-10, 10, 100)# 计算 ReLU(x) 的值
relu = np.maximum(0, x)# 绘制曲线
plt.plot(x, relu)
plt.title('Graph of ReLU Function')
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.grid(True)
plt.show()

ReLU函数(线性整流函数)主要特点:

  • 非线性:ReLU函数是一个非线性函数,它在输入值大于0时返回输入值本身,而在输入值小于或等于0时返回0。这种非线性特性使得神经网络能够学习和表示更加复杂的函数关系。
  • 稀疏激活性:当输入值小于等于0时,ReLU函数的输出为0,这意味着对应的神经元将不会被激活。这种稀疏激活性可以使网络具有更高的稀疏性,从而减少参数的冗余性,提高计算效率。
  • 零梯度问题:ReLU函数在输入值大于0时具有常数梯度,这意味着在正区间内梯度保持为1。这样的特性可以加速梯度下降的收敛速度,并减轻梯度消失的问题。
  • 线性可分性:ReLU函数能够将输入值划分为两个线性可分的区域,即正区间和负区间。这种线性可分性使得ReLU函数在处理线性可分问题时表现良好。
  • 异常值不敏感:ReLU函数对于大于0的输入值不受异常值的影响。即使输入值非常大,ReLU函数的输出仍然是一个正数,从而减轻了异常值的影响。

Leaky ReLU函数

Leaky ReLU函数是对ReLU函数的一种改进,旨在解决ReLU函数中的神经元死亡问题(Dead ReLU)。

Leaky ReLU函数的数学表达式:

f ( x ) = { a x , if  x < 0 x , if  x ≥ 0 f(x) = \begin{cases} ax, & \text{if } x < 0 \\ x, & \text{if } x \geq 0 \end{cases} f(x)={ax,x,if x<0if x0

其中,x表示输入值,a是一个小于1的常数,通常取0.01。

  • 如果输入值x大于0,Leaky ReLU函数返回输入值x本身;
  • 如果输入值x小于等于0,Leaky ReLU函数返回输入值ax。

与ReLU函数不同的是,Leaky ReLU函数在负区间中引入了一个小的斜率,使得神经元在负区间也能具有非零的梯度。

Leaky ReLU的函数图像:

在这里插入图片描述
Leaky ReLU函数的代码实现:

import numpy as np
import matplotlib.pyplot as plt# 定义Leaky ReLU函数
def leaky_relu(x, a):return np.maximum(a * x, x)# 生成 x 值
x = np.linspace(-10, 10, 100)# 定义斜率
a = 0.01# 计算 Leaky ReLU(x) 的值
leaky_relu_vals = leaky_relu(x, a)# 绘制曲线
plt.plot(x, leaky_relu_vals)
plt.title('Graph of Leaky ReLU Function')
plt.xlabel('x')
plt.ylabel('Leaky ReLU(x)')
plt.grid(True)
plt.show()

Leaky ReLU函数(带泄露的线性整流函数)主要特点:

  • 非线性:Leaky ReLU函数是一个非线性函数,可以处理非线性的函数关系。

  • 解决神经元死亡问题:Leaky ReLU函数引入了一个小的斜率(通常取较小的正数,如0.01),使得神经元在负区间也能具有非零的激活。这有助于避免神经元完全不激活的问题,称为神经元死亡。

  • 具有稀疏激活性:当输入值小于0时,Leaky ReLU函数的输出为一个小的斜率乘以输入值,这意味着对应的神经元在负区间仍然得到一定程度的激活。这种稀疏激活性可以使网络具有更高的稀疏性,减少参数的冗余性。

  • 缓解梯度消失问题:Leaky ReLU函数在负区间具有非零的梯度,这有助于减轻梯度消失问题。相比于ReLU函数的常数梯度,Leaky ReLU函数的斜率可调,可以在一定程度上保持梯度的传播,提高网络的学习能力。

  • 异常值不敏感:与ReLU函数类似,Leaky ReLU函数对于大于0的输入值不受异常值的影响。即使输入值非常大,Leaky ReLU函数的输出仍然是一个正数。

Softmax函数

Softmax函数是一种常用的激活函数,通常用于多分类问题中。它将一组实数转化为表示概率分布的向量。

Softmax函数的数学表达式:

softmax ( x i ) = e x i ∑ j = 1 N e x j \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{N} e^{x_j}} softmax(xi)=j=1Nexjexi

Softmax函数图像:
在这里插入图片描述

Softmax函数的代码实现:

import numpy as np
import matplotlib.pyplot as pltdef softmax(x):e_x = np.exp(x)return e_x / np.sum(e_x)# 定义输入向量
x = np.linspace(-5, 5, 100)# 计算Softmax函数的输出
y = softmax(x)# 绘制Softmax函数图像
plt.plot(x, y)
plt.xlabel('Input')
plt.ylabel('Softmax Output')
plt.title('Softmax Function')
plt.grid(True)
plt.show()

Softmax函数的主要特点如下:

  • 概率分布:Softmax函数将输入向量转化为表示概率分布的向量,每个元素表示对应类别的概率。
  • 归一化性质:Softmax函数确保输出向量的元素之和为1,因此可以看作是对输入向量进行归一化操作。
  • 多分类问题:Softmax函数常用于多分类问题中,可以将模型输出的原始分数转化为概率分布,便于进行类别的预测和分类。
  • 平移不变性:Softmax函数对输入向量的每个元素进行指数运算,因此对于整个向量的平移(加上或减去一个常数)是不敏感的,不会改变概率分布。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C【数组】

1.一维数组 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 int main() { // char arr[] "abcdef";//[a][b][c][d][e][f][\0] // //printf("%c\n", arr[3]);//d // int i 0; // int len strlen(arr); // for(i0; i<len; i) // { // p…

机器学习笔记之最优化理论与方法(十)无约束优化问题——共轭梯度法背景介绍

机器学习笔记之最优化理论与方法——共轭梯度法背景介绍 引言背景&#xff1a;共轭梯度法线性共轭梯度法共轭方向共轭VS正交共轭方向法共轭方向法的几何解释 引言 本节将介绍共轭梯度法&#xff0c;并重点介绍共轭方向法的逻辑与几何意义。 背景&#xff1a;共轭梯度法 关于…

Ubuntu 22.04LTS + 深度学习环境安装全流程

一、 CUDA Toolkit 安装 1. 选择需要安装的版本(下载地址) 2. 选择自己的系统版本获取下载地址和安装指令 3. 运行安装指令进行安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.…

Docker Swarm集群部署

Docker Swarm集群部署 任务平台 3台虚拟机&#xff0c;一台作为manager 节点&#xff0c;另两台作为work节点。 文章目录 Docker Swarm集群部署安装docker配置防火墙开放端口在 manager 节点创建 Swarm 集群创建用于swarm服务的自定义的overlay网络测试跨主机容器通信 安装do…

网上办公系统设计与实现

目录 前言 1问题定义 1.1系统名称 1.2系统背景 1.3系统目标 2 可行性分析 2.1 经济可行性 2.2 技术可行性 2.3 操作可行性 2.4 法律可行性 2.5 可行性研究结论 2.6 用户组织机构图 2.7 目标系统业务流程图 2.8 接口设计 2.8.1外部接口 2.8.2 内部接口 3 需求分…

Centos7.9 一键脚本部署 LibreNMS 网络监控系统

前言&#xff1a; LibreNMS 是个以 PHP/MySQL 为基底的自动探索网络监控系统 LibreNMS 官网 版本23.8.2-52-g7bbe0a2 - Thu Sep 14 2023 22:33:23 GMT0700数据库纲要2023_09_01_084057_application_new_defaults (259)Web 服务器nginx/1.20.1PHP8.1.23Python3.6.8DatabaseMa…

Postman的高级用法一:重新认识postman核心模块

本请求示例来自于免费天气API&#xff1a; 实况天气接口API开发指南 未来一天天气预报api - 天气API 关于Postman的核心模块 全局变量请求接口请求体预处理脚本 类似beforeTest&#xff0c;在发起请求前的预执行逻辑&#xff0c;通常是生成一些动态变量值 测试用例模块 测试者…

PhpStorm 2023年下载、安装教程和好用插件,保姆级教程

PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程 文章目录 PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程前言一、安装PhpStorm二、好用的插件简体中文包Chinese(Simplified)Language Pack 三、卸载插件CTRLN 查找类CTRLSHIFTN 全局搜索文件…

Visual Studio复制、拷贝C++项目与第三方库配置信息到新的项目中

本文介绍在Visual Studio软件中&#xff0c;复制一个已有的、配置过多种第三方库的C项目&#xff0c;将其拷贝为一个新的项目&#xff0c;同时使得新项目可以直接使用原有项目中配置好的各类**C**配置、第三方库等的方法。 在撰写C 代码时&#xff0c;如果需要用到他人撰写的第…

Linux学习第16天:Linux设备树下的LED驱动开发:举一反三 专注专心专业

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在开题之前&#xff0c;先说一下这次的题目&#xff0c;尤其是后面的“举一反三 专注专心专业”到底想给大家传递什么信息。LED驱动开发&#xff0c;目前为止已经…

深入思考redis面经

1 redission分布式锁 1.1 为了保证数据一致性&#xff0c;引入了redission的锁&#xff0c;你是为了抗住高并发而去为了引入这个锁还是说为了保证数据一致性去引入的 答&#xff1a;主要是为了抗住高并发问题&#xff0c;解决redis的缓存击穿问题&#xff0c;但是也能解决一定…

Vue系列之入门篇

前言&#xff1a; 目录 一&#xff0c;关于Vue的简介 1.什么是Vue&#xff1f; 2.使用Vue框架的好处&#xff1f; 3. 库和框架的区别&#xff1a; 4. MVVM的介绍 5.Vue的入门案例 二&#xff0c;Vue的生命周期 一&#xff0c;关于Vue的简介 1.什么是Vue&#xff1f; Vu…

YSA Toon (Anime/Toon Shader)

这是一个Toon着色器/Cel阴影着色器,用于Unity URP 此着色器的目的是使角色或物体阴影实时看起来尽可能接近真实的动画或卡通效果 可以用于游戏,渲染,插图等 着色器特性,如:面的法线平滑、轮廓修复、先进的边缘照明、镜面照明、完全平滑控制 这个文档包括所有的功能https:/…

【数据结构前置知识】初识集合框架和时间,空间复杂度

文章目录 1. 什么是集合框架2. 集合框架的重要性 3. 背后所涉及的数据结构以及算法3.1 什么是数据结构3.2 容器背后对应的数据结构3.3 相关java知识3.4 什么是算法 4.时间复杂度1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 …

在项目中,关于前端实现数据可视化的技术选择

前言 在项目中&#xff0c;数据可视化以图表、报表类型为主。 需求背景 技术框架是Vue2.x版本&#xff0c;组件库是Ant Design of Vue能够支撑足够多的图表类型开发图表大小/位置能够随意变动图表样式需要支持丰富多样的用户配置强大、开放的图表语法支持复杂的数据可视化场景…

内网IP端口提供外网连接访问?快解析动态域名与内网映射P2P穿透方案

我们在本地搭建服务器及发布互联网时&#xff0c;可以通过动态域名的方式联网。DDNS原理是用固定的域名代替变化IP&#xff0c;实现局域网发布公网&#xff0c;是适合本地动态IP环境的使用。但当本地没有公网IP时&#xff0c;如果解析绑定到内网IP&#xff0c;将内网IP端口提供…

坑爹,线上同步近 3w 个用户导致链路阻塞引入发的线上问题,你经历过吗?

分享一个印象深刻的线上问题&#xff0c;希望能够给 xdm 带来一点思考 一个稀松平常的工作日&#xff0c;正准备下班的时候&#xff0c;不巧&#xff0c;突发线上紧急问题&#xff0c;心中一万个不情愿&#xff0c;可还是要硬着头皮去定位问题 简单的表象为微服务之间 gRPC通…

Linux:Centos9 《下载-安装》

下载 Download (centos.org)https://www.centos.org/download/ 安装 选择第一个安装centos 根据自己需要的语言环境选择即可 这里选择要安装的磁盘&#xff0c;然后点击完成 这里选择第一个就行带有图形化 然后我们去对这两个进行设置就行 这两个地方自己进行设置就行 耐心等…

Firefox火狐浏览器显示你的连接不安全,是什么意思?

当 Firefox 连接到一个安全的网站时&#xff08;网址最开始为“https://”&#xff09;&#xff0c;它必须确认该网站出具的证书有效且使用足够高的加密强度&#xff0c;以充分保护您的隐私。如果证书无法通过验证&#xff0c;或加密强度过低&#xff0c;Firefox 会中止连接到这…

Android 系统中适配OAID获取

一、OAID概念 OAID&#xff08;Open Anonymous Identification&#xff09;是一种匿名身份识别标识符&#xff0c; 用于在移动设备上进行广告追踪和个性化广告投放。它是由中国移动通信集 团、中国电信集团和中国联通集团共同推出的一项行业标准 OAID值为一个64位的数字 二、…