计算机视觉与深度学习-全连接神经网络-激活函数- [北邮鲁鹏]

2023-09-13 20:04:37


基础知识

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

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

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

一个三层的全连接网络:
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 plt

def 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函数对输入向量的每个元素进行指数运算,因此对于整个向量的平移(加上或减去一个常数)是不敏感的,不会改变概率分布。
更多推荐

Gitlab仓库部署

Gitlab仓库部署一、Gitlab的概述1、gitlab介绍2、gitlab主要功能3、gitlab和github的区别二、部署环境1、安装依赖环境2、安装Postfix邮箱3、Gitlab优势4、Gitlab工作流程三、Gitlab部署过程1、Yum安装Gitlab2、配置gitlab站点URL3、启动并访问Git

【Mysql系列】mysql中删除数据的几种方法

写在前面在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据。在执行删除操作时,需要谨慎,以免误删重要数据。方法介绍以下是MySQL中删除数据的几种方法:DELETE语句DROPTABLE语句TRUNCATETABLE使用外键约束1.DELETE语句DELETE语句是最常用的删除数据方法之一。

pyarmor 加密许可证的使用

一pyarmor许可证的用处文档:5.许可模式和许可证—Pyarmor8.3.6文档试用版本有如下的限制:加密功能对脚本大小有限制,不能加密超过限制的大脚本。混淆字符串功能在试用版中无法使用。RFT加密模式,BCC加密模式在试用版无法使用。不可以应用于商用产品。特别的,如果商用产品的累计销售额小于基础版许可证费用乘以3

Rocky Linux 安装图解(替代centos)服务器+桌面

centos自从20年底转变为不稳定版本后,有很多替代方案经过近3年的发展,rockylinux算是一个比较好的选择,一是依照redhat企业版来做,二是rocky的发起者也是centos的创始人如果想安装debian,可以参考:debian图解安装如果想安装ubuntu,可以参考:ubuntu图解安装2023.9.1

MySQL中的事务基础

文章目录事务的ACID特性事务的隔离级别数据并发问题事务的隔离级别事务的ACID特性MySQL中的事务指的是在数据库操作中,将一组SQL语句作为一个不可分割的执行单元进行处理的机制。事务具有原子性、一致性、隔离性和持久性的特性(ACID特性)。原子性(Atomicity):事务中的所有操作要么全部成功执行,要么全部失败

机器学习技术(八)——朴素贝叶斯算法实操

机器学习技术(八)——朴素贝叶斯算法实操文章目录机器学习技术(八)——朴素贝叶斯算法实操一、引言二、导入相关依赖库三、读取并查看数据四、数据预处理五、构建两种模型进行比较1、只考虑Dayofweek以及District2、加入犯罪时间节点六、总结一、引言上文讲述了逻辑回归在分类任务上的应用及算法原理:https://b

Layui快速入门之第五节 导航

目录一:基本概念导航依赖element模块API渲染属性事件二:水平导航常规用法:三:垂直导航四:侧边垂直导航五:导航主题六:加入徽章等元素七:面包屑导航ps:面包屑导航渲染一:基本概念导航是指支持用户导航、进入和退出应用中不同内容片段的交互。导航菜单包含水平导航和垂直导航,在2.x版本中,nav组件属于element

MySQL如何进行增量备份与恢复?

目录一、MySQL介绍二、增量备份三、备份恢复一、MySQL介绍MySQL是一款开源的关系型数据库管理系统(RDBMS),它以其可靠性、灵活性和易于使用而备受赞誉。以下是关于MySQL数据库的介绍:MySQL是由瑞典公司MySQLAB开发,随后被SunMicrosystems收购,最终被甲骨文公司(OracleCorp

计算机竞赛 机器学习股票大数据量化分析与预测系统 - python 计算机竞赛

文章目录0前言1课题背景2实现效果UI界面设计web预测界面RSRS选股界面3软件架构4工具介绍Flask框架MySQL数据库LSTM5最后0前言🔥优质竞赛项目系列,今天要分享的是🚩机器学习股票大数据量化分析与预测系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)

【学习】一致性哈希与哈希环

一致性哈希一致性哈希(ConsistentHashing)是一种用于数据分布和负载均衡的算法,其核心思想是将数据和节点都映射到一个虚拟的哈希环上,并通过哈希值来确定数据应该分布到哪个节点上。以下是一致性哈希的基本实现步骤:1、确定哈希函数:首先,选择一个合适的哈希函数,它将数据映射到一个足够大的哈希空间,通常是一个整数

【C++】标准流与命名空间简介 ( Visual Studio 2019 中创建 C++ 项目 | iostream 标准流 | std 标准命名空间 | cout 控制台输出 )

文章目录一、VisualStudio2019中创建C++项目二、C++代码编写1、iostream标准流2、std标准命名空间3、cout控制台输出4、代码示例一、VisualStudio2019中创建C++项目打开VisualStudio2019,选择"菜单栏/文件/新建/项目"选项,创建新项目;选择Windows平

热文推荐