深度学习03-神经网络02-激活函数

news2024/9/22 5:38:23

可以使用这个进行跳转链接​​​​​​​icon-default.png?t=O83Ahttp://playground.tensorflow.org/#activation=relu&batchSize=11&dataset=spiral®Dataset=reg-gauss&learningRate=0.01®ularizationRate=0.1&noise=0&networkShape=7,5,4,3,2&seed=0.54477&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false到谷歌的神经网络可视化网站

A Neural Network Playground

激活函数的选择方法

对于隐藏层:

  1. 1.不管几层都是使用一个激活函数,一般优先选择ReLU激活函数

  2. 2.如果ReLu效果不好,那么尝试其他激活,如Leaky ReLu等。

  3. 3.如果你使用了ReLU, 需要注意一下Dead ReLU问题, 避免出现大的梯度从而导致过多的神经元死亡。

  4. 4. 少用使用sigmoid激活函数,可以尝试使用tanh激活函数

对于输出层:


1. 二分类问题选择sigmoid激活函数 ,输出层:一个神经元节点

2. 多分类问题选择softmax激活函数 ,输出层:有多少分类,就用多少神经元节点

3. 回归问题选择identity激活函数,输出层:一个神经元节点

从一个神经网络看,这里就是两部分是我们人关注的,第一部分是我们如何进行权重参数的初始化, 第二部分我们怎么选择激活函数。

架构决定了,同一层一般是使用同一个非线性激活函数

因为生活中很少有真实的线性关系,基本都是非线性关系。

目前大部分的使用这个relu 效果都还不错。负半轴为0可能会发生神经元死亡的问题,但是这样减少了网络的稀疏。缓解了过拟合。

​​​​​​​

回归的时候不加激活函数, identity (恒等激活 即 y = x  )  

激活函数是神经网络中的关键组成部分,其作用是引入非线性,使神经网络能够学习复杂的模式和解决非线性问题。在没有激活函数的情况下,神经网络的每一层都是线性组合,最终整个网络将会退化为一个简单的线性模型,失去解决复杂问题的能力。因此,激活函数是深度学习模型成功的关键。

激活函数的主要作用

  1. 引入非线性:如果神经网络仅仅是线性变换的堆叠,不管层数多少,最终的网络仍然是一个线性函数。激活函数提供了非线性,使得神经网络可以逼近任意复杂的函数。

  2. 控制神经元的输出范围:通过将输出值限定在某个范围内,激活函数可以稳定神经网络的训练过程,减少数值不稳定问题。

常见的激活函数及其详细分析

1. Sigmoid 函数

公式\sigma(x) = \frac{1}{1 + e^{-x}}   输出范围(0, 1)​​​​​​​  特点

  • 将输入压缩到 (0, 1)​​​​​​​ 的范围。

  • 适合输出为概率值的任务,例如二分类问题。

  • 缺点:容易出现梯度消失问题,尤其是在深层网络中。输入的绝对值较大时,Sigmoid 函数的导数接近 0,导致反向传播时梯度更新非常缓慢,训练效率低。

优点

  • 它能够使输出值保持在有限范围内,便于理解输出。

应用场景:二分类问题的输出层。

2. Tanh 函数

公式\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}   输出范围(-1, 1)​​​​​​​ 特点

  • 类似于 Sigmoid,但输出范围为 (-1, 1) 。

  • 相较于 Sigmoid,Tanh 的输出更居中,值域更广,梯度消失的问题较弱。

  • 在输入接近 0 时,Tanh 函数的导数最大,网络的梯度流动效果更好。

优点

  • 输出的零中心特性(输出在 (-1) 到 (1) 之间)使得训练过程更加平稳,避免了 Sigmoid 函数的非零均值问题。

应用场景:适用于需要平滑输出值的任务。

3. ReLU (Rectified Linear Unit)

公式f(x) = \max(0, x) 输出范围[0, \infty)  特点

  • 如果输入为负,则输出为 0;如果输入为正,则输出为输入本身。

  • ReLU 是目前最常用的激活函数之一,尤其适合深度神经网络,因为它计算简单且有效。

  • 优势:避免了 Sigmoid 和 Tanh 的梯度消失问题,并且计算速度快。

  • 缺点:会出现“死亡 ReLU”现象,即一旦某个神经元在反向传播中输出 0,那么该神经元在随后的训练中将永远不会激活,因为它的梯度为 0。

应用场景:适用于大部分隐藏层,尤其是卷积神经网络。

4. Leaky ReLU

公式f(x) = \max(\alpha x, x)  输出范围(-\infty, \infty)特点

  • 与 ReLU 类似,但允许负数通过一个较小的斜率 \alpha(通常 \alpha = 0.01)。

  • 优势:减少了 ReLU 的死亡现象,增加了对负值的敏感性。

应用场景:适用于避免死亡 ReLU 的场景,通常在深度网络中比 ReLU 更稳定。

5. Softmax 函数

公式: \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}  输出范围(0, 1) ,且所有输出的总和为 1 特点

  • Softmax 将输出值转换为概率分布,所有输出值加起来为 1。

  • 常用于多分类问题的输出层,因为它提供了一种将神经网络输出解释为概率的方式。

应用场景:多分类问题的输出层,例如图像分类。

激活函数的比较与选择

  • Sigmoid 和 Tanh 常用于较浅的网络或输出层,但由于梯度消失问题,逐渐被 ReLU 和其变种取代。

  • ReLU 和 Leaky ReLU 在深度网络中表现更好,因为它们能够有效避免梯度消失问题,并且计算更简单。

  • Softmax 通常用于多分类问题的输出层,用于将输出转化为概率分布。

如何选择激活函数

  1. ReLU 及其变种(如 Leaky ReLU):大多数情况下,推荐在隐藏层使用 ReLU 或其改进版本。它计算简单且有效,尤其在深度神经网络中表现优异。

  2. Sigmoid 或 Tanh:适用于较浅的网络或用于输出层,尤其是需要输出概率的二分类任务中。

  3. Softmax:用于多分类任务的输出层。

梯度消失与梯度爆炸

梯度消失是指在反向传播中,随着网络层数的增加,梯度逐渐减小,最后趋于 0,导致权重无法更新。Sigmoid 和 Tanh 函数容易出现这种问题。而 ReLU 及其变种通过保持正梯度来缓解梯度消失问题。梯度爆炸则是当梯度在反向传播过程中变得过大,导致参数更新过快,使得模型无法收敛。

总结

激活函数是深度学习网络中的核心组件,负责将线性变换引入非线性,进而增强神经网络的学习能力。不同激活函数各有优缺点,选择合适的激活函数对于神经网络的训练效果至关重要。

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

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

相关文章

C语言常见字符串函数模拟实现一

strlen模拟实现 重点:1.字符串已经\0作为结束标志,strlen返回的是字符串\0前面出现的字符个数(不包含\0) 2.参数指向的字符串必须要以\0结束。 3.注意函数的返回值是size_t,是无符号的,加减是无法对比的。…

nginx模块篇(四)

文章目录 四、Nginx的扩展模块4.1. Lua4.1.1 概念4.1.2 特性4.1.3 应用场景4.1.4 Lua的安装4.1.5 Lua的语法4.1.5.1 第一个Lua程序4.1.5.2 Lua的注释4.1.5.3 标识符4.1.5.4 关键字4.1.5.5 运算符4.1.5.6 全局变量&局部变量4.1.5.7 Lua数据类型nilbooleannumberstringtablef…

LeetCode[中等]

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 思路: 计算链表长度num,num - n就是需要删去结点的索引 其中若删去第一个结点,返回head.next; /*** Definition for singly-linked list.* public …

python:编写一个函数查找字符串中的最长公共前缀

最近在csdn网站上刷到一个题目,题目要求编写一个函数查找字符串中的最长公共前缀,题目如下: 给出的答案如下: from typing import List def longestCommonPrefix(strs:List[str]) -> str:if len(strs) 0:return i 0 #代…

828华为云征文——使用Flexus云服务器X实例CentOS镜像下创建MySQL服务器教程

一、概述 1.1 前言 当前正值华为云盛大的828 B2B企业庆典,其中Flexus X实例的特惠活动尤为吸引人眼球。对于追求极致算力表现,并期望在自建MySQL数据库、Redis缓存系统及Nginx服务器部署上获得卓越性能的企业用户而言,这无疑是一个不可多得的…

SVTR文字识别

论文地址:https://arxiv.org/abs/2205.00159 notes: 论文2.5中说的N nodes,就是输出的类别数量,英文37,中文6625,英文37说的是最简单的英文文字识别任务,不区分大小写,就是26个字母…

数据湖 Data Lake-概述

Data Lake 1. 数据湖的定义 数据湖是一种存储系统,用于集中存储大量的原始数据,可以按数据本来的原始格式进行存储,用户可以在需要时提取和分析这些数据。 A data lake is a centralized repository designed to hold vast volumes of data …

python+selenium实现自动联网认证,并实现断网重连

pythonselenium实现自动联网认证,并实现断网重连 echo off python “E:\autoD\auto_login.py” 要使自动登录脚本在系统重启后自动运行,你可以使用Windows的任务计划程序来设置。以下是详细的步骤: 1. 保存脚本 首先,将你的Py…

Elasticsearch 检索优化:停用词的应用

Elasticsearch 检索优化:停用词的应用 场景描述 目前在 Elasticsearch 集群中存储约 1.5 亿篇文章数据,随着数据量的增加,检索性能问题逐渐显现。在列表检索和聚合操作中,CPU 消耗飙升至 100%,并且检索耗时较长&…

Java | Leetcode Java题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; public class Solution {public int characterReplacement(String s, int k) {int len s.length();if (len < 2) {return len;}char[] charArray s.toCharArray();int left 0;int right 0;int res 0;int maxCount 0;int[] freq n…

时序预测|基于灰狼优化LightGBM的时间序列预测Matlab程序GWO-LightGBM 单变量和多变量 含基础模型

时序预测|基于灰狼优化LightGBM的时间序列预测Matlab程序GWO-LightGBM 单变量和多变量 含基础模型 文章目录 一、基本原理原理概述流程注意事项 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 时序预测中使用灰狼优化&#xff08;GWO&#xff09;结合LightGBM的…

【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`

问题随记 在使用 AuthenticationManager 的时候&#xff0c;出现循环依赖问题 —— java.lang.StackOverflowError&#xff0c;查资料查了两天半&#xff0c;终于找到原因。 2024-06-16T17:54:19.48708:00 ERROR 20672 --- [nio-8789-exec-1] o.a.c.c.C.[.[.[/].[dispatcherS…

猫咪检测系统源码分享

猫咪检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

AI健身之俯卧撑计数和姿态矫正-角度估计

在本项目中&#xff0c;实现了Yolov7-Pose用于人体姿态估计。以下是如何在Windows 11操作系统上设置和运行该项目的详细步骤。 环境准备 首先&#xff0c;确保您的计算机已经安装了Anaconda。Anaconda是一个开源的Python发行版本&#xff0c;它包含了conda、Python以及众多科…

静态链表:实现、操作与性能优势【算法 16】

静态链表&#xff1a;实现、操作与性能优势 在算法和数据结构的探索中&#xff0c;链表作为一种基础且灵活的数据结构&#xff0c;广泛应用于各种场景。然而&#xff0c;在算法竞赛或需要高效内存管理的环境中&#xff0c;传统的动态链表可能会因为内存分配和释放的开销而影响性…

完整版:NacosDocker 安装

第一步&#xff1a;先直接通过命令安装 Nacos docker run --name nacos2.2.3 -d -p 8848:8848 -e MODEstandalone f151dab7a111 第二步&#xff1a;创建 Docker 挂载目录 # 创建 log 目录 mkdir -p /root/nacos 第三步&#xff1a;将 Docker 容器的文件复制到挂载目录中 …

C++之Person类

首先设置头文件&#xff0c;将题目中的要求完成。 #include <iostream>using namespace std;class Person { public:Person();Person(string name, int id, string address);~Person();void setPerson(string name, int id, string address);void setName(string name);…

python新手的五个练习题

代码 # 1. 定义一个变量my_Number,将其设置为你的学号&#xff0c;然后输出到终端。 my_Number "20240001" # 假设你的学号是20240001 print("学号:", my_Number) # 2. 计算并输出到终端:两个数(例如3和5)的和、差、乘积和商。 num1 3 num2 5 print(&…

计算机的错误计算(一百)

摘要 探讨 与 的计算精度问题。 从计算机的错误计算&#xff08;九十九&#xff09;知&#xff0c;运算 与 均被列在IEEE754-2019中。然而&#xff0c;似乎并没有哪种语言实现内置了第二个运算。 例1. 计算 与 不妨在Python 3.12.5 下计算&#xff0c;则有 然而&#…

华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互

场景介绍 本章节将向您介绍如何使用地图的手势。 Map Kit提供了多种手势供用户与地图之间进行交互,如缩放、滚动、旋转和倾斜。这些手势默认开启,如果想要关闭某些手势,可以通过MapComponentController类提供的接口来控制手势的开关。 接口说明 以下是地图的控件和手势相…