TensorFlow深度学习实战(3)——深度学习中常用激活函数详解

TensorFlow深度学习实战(3)——深度学习中常用激活函数详解

    • 0. 前言
    • 1. 引入激活函数
      • 1.1 感知器
      • 1.2 多层感知器
      • 1.3 训练感知器存在的问题
    • 2. 激活函数
    • 3. 常见激活函数
      • 3.1 sigmoid
      • 3.2 tanh
      • 3.3 ReLU
      • 3.4 ELU和Leaky ReLU
    • 小结
    • 系列链接

0. 前言

使用激活函数可以实现网络的高度非线性,这对于建模输入和输出之间的复杂关系非常关键。如果没有非线性激活函数,那么该网络将仅仅能够表达简单的线性映射,即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的,只有加入了非线性激活函数之后,深度神经网络才具备了令人惊异的非线性映射学习能力,可以在网络中的多个层中应用激活函数。

1. 引入激活函数

1.1 感知器

感知器 (Perceptron) 是一种简单的算法,接收一个包含 m m m 个值的输入向量 x x x ( x 1 , x 2 , . . . , x m ) (x_1, x2, ..., x_m) (x1,x2,...,xm),通常称为输入特征或简称特征 (feature),然后输出 1 (是)或 0 (否)。在数学上,可以定义为以下函数:
f ( x ) = { 1 w x + b > 0 0 o t h e r w i s e f(x)= \begin{cases} 1& {wx+b>0}\\ 0& {otherwise} \end{cases} f(x)={10wx+b>0otherwise
其中 w w w 是权重向量, w x wx wx 是点积 ∑ j = 1 m w j x j \sum_{j=1}^m w_jx_j j=1mwjxj b b b 是偏置。 w x + b wx + b wx+b 定义了一个边界超平面,其位置根据 w w w b b b 的赋值而变化,超平面是一个子空间,其维度比其环境空间低一维:

感知器

这是一个非常简单但有效的算法,例如,给定三个输入特征,一种颜色中的红色、绿色和蓝色通道的分量值,感知机可以尝试判断该颜色是否为“白色”。
需要注意的是,感知器不能表达“可能”这种答案。它只能回答“是” (1) 或“否” (0),前提是我们知道如何定义权重 ( w w w) 和偏置 ( b b b),这就是模型“训练” (training) 过程。

1.2 多层感知器

接下来,我们介绍一个包含多个全连接层的网络。历史上,感知器是指具有单个线性层的模型,因此,如果它有多个层,则称为多层感知器 (Multi-Layer Perceptron, MLP)。需要注意的是,输入层和输出层是外部可见的,而中间的所有其他层都是隐藏的——因此称为隐藏层。在这种情况下,单个层只是一个简单的线性函数,MLP 通过依次堆叠多个层而得到:

神经网络架构

在上图中,第一隐藏层中的每个节点接收输入,并根据相关线性函数的值“激活”。然后,将第一隐藏层的输出传递到第二层,应用另一个线性函数,其结果再传递到由一个单一神经元组成的最终输出层。这种分层组织大致类似于人类视觉系统的组织。

1.3 训练感知器存在的问题

对于单个神经元,为了获得权重 w w w 和偏置 b b b 的最佳值,通常通过提供一组训练样本,让计算机调整权重和偏置,以最小化输出产生的误差。
为了更具体的说明,假设我们有一组猫的图像和一组不包含猫的图像。假设每个神经元接收来自图像中单个像素的输入。当计算机处理这些图像时,我们希望神经元调整其权重和偏置,以减少错误识别的图像数量。
这种方法非常直观,但需要权重(或偏置)的微小变化只引起输出的微小变化。如果输出变化很大,就无法逐步学习。但感知器并不具备这种“逐步”的行为,感知器要么是 0,要么是 1,这种巨大的输出变化不利于感知器学习:

感知器行为

我们需要更加平滑的函数,一个从 0 逐渐变化到 1 的函数,且没有任何不连续性。在数学上,这意味着我们需要一个连续函数,以便能够计算导数。在数学中,导数是函数在某一点变化的量。对于输入为实数的函数,导数是图形上某点的切线斜率。

2. 激活函数

在神经网络中,常见激活函数 (activation function) 包括:SigmoidTanhELULeaky ReLUReLUTensorFlow 支持多种激活函数。SigmoidReLU 函数的梯度变化是构建学习算法的基础,算法逐步减少网络误差。例如,使用激活函数 σ σ σ,输入向量 ( x 1 , x 1 , . . . , x m ) (x_1, x_1, ..., x_m) (x1,x1,...,xm),权重向量 ( w 1 , w 2 , . . . , w 3 ) (w_1, w_2, ..., w_3) (w1,w2,...,w3),偏置 b b b,求和 Σ Σ Σ 如下图所示:

激活函数

3. 常见激活函数

3.1 sigmoid

Sigmoid 函数定义为 σ ( x ) = 1 1 + e − x \sigma(x)=\frac 1{1+e^{-x}} σ(x)=1+ex1,当输入在 ( − ∞ , ∞ ) (−∞, ∞) (,) 范围内变化时,输出在 ( 0 , 1 ) (0, 1) (0,1) 范围内变化,并且在数学上是连续的。使用 Python 实现此函数:

def sigmoid(x):return 1/(1+np.exp(-x))

函数图像如下所示:

sigmoid

神经元可以使用 Sigmoid 函数计算非线性函数 σ ( z = w x + b ) \sigma(z=wx+b) σ(z=wx+b)。如果 z = w x + b z = wx + b z=wx+b 非常大且为正数,则 e − z → 0 e^{-z}→0 ez0,因此 σ ( z ) → 1 \sigma(z)→1 σ(z)1;而如果 z = w x + b z = wx + b z=wx+b 非常大且为负数,则 e − z → ∞ e^{-z}→∞ ez,因此 σ ( z ) → 0 \sigma(z)→0 σ(z)0。换句话说,具有 Sigmoid 激活的神经元与感知器的行为类似,但变化是逐渐的,输出值如 0.55390.123191 是完全合理的。在这个意义上,Sigmoid 神经元可以表达“可能性”的概念。

3.2 tanh

激活函数 tanh 定义为 t a n h ( z ) = ( e z − e − z ) ( e z + e − z ) tanh(z) = \frac{(e^z - e^-z)}{(e^z + e^-z)} tanh(z)=(ez+ez)(ezez),使用 Python 实现此函数:

def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

函数图像如下所示,它在开区间 (-1, 1) 内是单调递增的奇函数,函数图形关于原点对称:

tanh

3.3 ReLU

ReLU (REctified Linear Unit) 激活函数有助于解决使用 Sigmoid 时的一些优化问题,特别是梯度消失的问题。ReLU 定义为 f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x),使用 Python 实现此函数:

def relu(x):return np.where(x>0, x, 0)

函数图像如下所示,当输入值 大于等于 0 时,则 ReLU 函数按原样输出。如果输入小于 0,则 ReLU 函数值为 0。因为 ReLU 函数的大于等于 0 的线性分量具有固定导数,而对另一个线性分量导数为 0。因此,使用 ReLU 函数训练模型要快得多。

ReLU

3.4 ELU和Leaky ReLU

ELU (Exponential Linear Unit) 定义为:
f ( a , x ) = { a ( e x − 1 ) x ≤ 0 x x > 0 f(a,x)= \begin{cases} a(e^x-1)& {x≤0}\\ x& {x>0} \end{cases} f(a,x)={a(ex1)xx0x>0
其中 a > 0 a>0 a>0,使用 Python 实现此函数:

def elu(x, alpha=1.0):return x if x >= 0 else alpha * (math.exp(x) - 1)

函数图像如下所示:

elu

LeakyReLU 定义为:
f ( a , x ) = { a x x ≤ 0 x x > 0 f(a,x)= \begin{cases} ax& {x≤0}\\ x& {x>0} \end{cases} f(a,x)={axxx0x>0

其中 a > 0 a>0 a>0,使用 Python 实现此函数:

def leaky_relu(x, alpha=0.1):return np.maximum(alpha * x, x)

函数图像如下所示:

leakyRelu

两个函数在 x x x 为负时能够进行小幅的更新。

小结

激活函数是神经网络中至关重要的一部分,它决定了神经元的输出以及神经网络模型的非线性特性。没有激活函数,神经网络就会变成一个简单的线性模型,无法处理复杂的任务。因此,激活函数的选择直接影响神经网络的表达能力和学习效果。

系列链接

TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
TensorFlow深度学习实战(2)——使用TensorFlow构建神经网络
TensorFlow深度学习实战(4)——正则化技术详解

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

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

相关文章

数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

Leetcode打卡:设计一个ATM机器

执行结果:通过 题目 2241 设计一个ATM机器 一个 ATM 机器,存有 5 种面值的钞票:20 ,50 ,100 ,200 和 500 美元。初始时,ATM 机是空的。用户可以用它存或者取任意数目的钱。 取款时&#xff0c…

vscode如何离线安装插件

在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…

用Tkinter制作一个用于合并PDF文件的小程序

需要安装PyPDF2库,具体原代码如下: # -*- coding: utf-8 -*- """ Created on Sun Dec 29 14:44:20 2024author: YBK """import PyPDF2 import os import tkinter as tk import windndpdf_files [] def dragged_files(f…

CDP集成Hudi实战-Hive

[〇]关于本文 本文测试一下使用Hive和Hudi的集成 软件版本Hudi1.0.0Hadoop Version3.1.1.7.3.1.0-197Hive Version3.1.3000.7.3.1.0-197Spark Version3.4.1.7.3.1.0-197CDP7.3.1 [一]部署Jar包 1-部署hudi-hive-sync-bundle-1.0.0.jar文件 [rootcdp73-1 ~]# for i in $(se…

公司资产网站

本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端:Java、JavaWeb / Springboot。前端:Vue、HTML / CSS / Javascript 等。数据库:MySQL 二、相关软件(列出的软件其一均可运行) I…

CSS——2.书写格式一

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中&#xff1a;--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…

基于FPGA的辩论赛系统设计-8名选手-正反两方-支持单选手评分-正反两方评分总和

基于FPGA的辩论赛系统设计 功能描述一、系统概述二、仿真波形视频 功能描述 1.答辩倒计时功能&#xff0c;当正反任意一方开始答辩后&#xff0c;倒计时30S。在倒计时最后10S后&#xff0c;LED灯开始闪烁。 2.答辩评分和计分功能&#xff0c;当答辩方结束答辩后&#xff0c;评…

【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析

文章目录 前言一、前提条件二、操作步骤2.1 准备云主机实例2.2 安装docker-compose2.3 使用docker-compose安装Superset2.3.1 克隆 Superset 的 GitHub 存储库2.3.2 通过 Docker Compose 启动 Superset 2.4 开通 OB Cloud 云数据库2.5 获取连接串2.6 使用 Superset 连接 OceanB…

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…

计算机缺失x3daudio1 7.dll怎么修复?

电脑运行时常见问题解析与修复策略&#xff1a;以“x3daudio1_7.dll缺失”为例 在软件开发与日常电脑维护的广阔领域中&#xff0c;我们时常会遇到各种系统报错和文件问题。这些问题不仅影响我们的工作效率&#xff0c;还可能对数据安全构成潜在威胁。作为一位经验丰富的软件开…

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…

通过纯文字引导DeepSeek编写一个简单的聊天机器人~

为进一步验证DeepSeek的代码能力 和 自然语言理解力&#xff0c;我花费了大约1个半小时的时间&#xff0c;和DeepSeek仅通过文字对话&#xff0c;编写出一个简单的聊天机器人。 以下是最终运行效果、生成代码、引导沟通过程示例&#xff1a; 一、最终运行效果&#xff1a; 二…

C/C++中new/delete与malloc/free的区别及对象管理

C/C++中new/delete与malloc/free的区别及对象管理 在C/C++编程中,动态内存管理是一个核心且复杂的话题,其中new、delete、malloc和free是四个经常用于此目的的工具。尽管它们都涉及到内存的分配和释放,但它们在处理对象时的方式和效果却大相径庭。本文将通过示例来说明这些工…

安卓入门十一 常用网络协议四

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下&#xff0c;实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式&#xff1a;MQTT 使用发布/订…

ansible-Ad-hoc命令行模式

一. 简述&#xff1a; ansible的ad-hoc是一个概念性的名字&#xff0c;是相对于ansible playbook而言。类似于&#xff1a;通过命令行来执行一些简单的&#xff0c;一次性的playbook任务(通俗点就是通过命令行执行一些简单的,而又不需要将命令特殊保存起来的任务)。Ansible提供…

UE5AI感知组件

官方解释&#xff1a; AI感知系统为Pawn提供了一种从环境中接收数据的方式&#xff0c;例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件&#xff08;AIPerception Component&#xff09;是用于实现游戏中的非玩家角色&#xff08;NPC&#xff09;对环境和其…

[SAP ABAP] SMARTFORMS表单开发

使用事务码SMARTFORMS进入到SMARTFORMS开发界面进行表单开发 SMARTFORMS表单开发相关资料 [SMARTFORMS] 创建样式模板https://blog.csdn.net/Hudas/article/details/144946341?spm1001.2014.3001.5501[SMARTFORMS] 创建FORMhttps://blog.csdn.net/Hudas/article/details/144…

倍思氮化镓充电器分享:Super GaN伸缩线快充35W

快节奏的时代,在旅游、办公等场景下,一款高效、便捷的充电器可以让我们的生活更便捷、高效。今天就给大家推荐一款倍思氮化镓充电器——Super GaN伸缩线快充35W。它具备多重亮点,可以满足我们在许多场景下的充电需求,成为我们的得力助手。 倍思氮化镓Super GaN伸缩线快充35W的亮…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…