激活函数理解

前言

为什么神经网中非要有各种各样的激活函数?他们有什么用?没有他们会怎样?常见的激活函数有哪些,他们都有什么特点?

如果我们不运用激活函数,神经网络的输出信号将仅仅是一个简单的线性函数。线性方程很容易解决,但是它们的复杂性有限,从数据中学习复杂函数映射的能力较小。

一个没有激活函数的神经网络最终只不过是一个线性回归模型罢了,不能解决现实世界中的大多数非线性问题。

现假设只有两层没有激活函数的全连接网络如下:
在这里插入图片描述第一层的权重和偏置为 w 1 w_1 w1 b 1 b_1 b1,其 输出直接连到第二层的输入,权重和偏置为 w 2 w_2 w2 b 2 b_2 b2,最后输出预测值。公式化简化后仍然是一个线性函数。
y ^ = w 2 ( w 1 ⋅ x + b 1 ) + b 2 = w 2 ⋅ w 1 ⋅ x + w 2 ⋅ b 1 + b 2 = w ⋅ x + b \begin{aligned} \hat{y} & = w_2(w_1 \cdot x + b_1) + b_2 \\ & = w_2\cdot w_1 \cdot x + w_2 \cdot b_1 + b_2 \\ & = w\cdot x + b \end{aligned} y^=w2(w1x+b1)+b2=w2w1x+w2b1+b2=wx+b
如果我们在第一层的输出加上一个激活函数,则不能有上式的化简。只有加入了激活函数,神经网络才具备分层的非线性的学习能力。

y ^ = w 2 ( σ ( y 1 ) ) + b 2 y 1 = w 1 ⋅ x + b 1 σ ( ⋅ ) 为激活函数 \begin{aligned} \hat{y} & = w_2(\sigma(y_1)) + b_2 \\ & y_1 =w_1 \cdot x + b_1 \\ & \sigma(\cdot) 为激活函数 \\ \end{aligned} y^=w2(σ(y1))+b2y1=w1x+b1σ()为激活函数

sigmoid

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

在这里插入图片描述

  • 输出范围在(0,1)之间,常用于二元分类问题的最后一层,将输出映射到概率值。
  • sigmoid函数的输出值均大于0,使得输出不是0的均值,从而发生激活函数的偏移现象
  • 从图像中可以看出sigmoid两端的导数接近0,会导致反向传播的梯度也变得非常小,此时网络参数可能得不到更新,难以有效训练。也称梯度消失。
  • 一般来说sigmoid网络在5层之内就会产生梯度消失现象。

tanh

f ( x ) = e x − e − x e x + e − x \begin{aligned} f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \end{aligned} f(x)=ex+exexex
在这里插入图片描述

  • 输出范围在(-1, 1)之间,输出均值为0,使得它的收敛速度要比sigmoid快。
  • 同样会存在梯度消失问题,不过相较于sigmoid稍微缓解了梯度消失的程度。
  • 导数dtanh的值域在(0, 1)。

ReLU(Rectified Linear Units)

f ( x ) = { 0 , i f x < 0 x , i f x ≥ 0 \begin{aligned} & f(x) =\left\{ \begin{aligned} 0 &, &if \ x < 0 \\ x &, &if \ x \geq 0 \end{aligned} \right.\\ \end{aligned} f(x)={0x,,if x<0if x0
在这里插入图片描述

  • 当输入大于0时,输出等于输入;当输入小于等于0时,输出为0,权重无法更新。
  • 简单且计算效率高,有效缓解了梯度消失的问题。
  • 与sigmoid类似,ReLU的输出均值也大于0,偏移现象神经元死亡会共同影响网络的收敛性。

Leaky-ReLU & L-ReLU

f ( x ) = { α x , i f x < 0 x , i f x ≥ 0 \begin{aligned} & f(x) =\left\{ \begin{aligned} \alpha x &, &if \ x < 0 \\ x &, &if \ x \geq 0 \end{aligned} \right.\\ \end{aligned} f(x)={αxx,,if x<0if x0
在这里插入图片描述

  • 在标准ReLU的基础上,对于负半轴的输入赋予了一个小的斜率,从而弥补了ReLU负半轴输出为0导致权重不更新的问题。

softmax

f ( x ) = e i ∑ i = 1 n e i \begin{aligned} f(x) = \frac{e^{i}}{\sum_{i=1}^{n}e^{i}} \end{aligned} f(x)=i=1neiei

在这里插入图片描述

  • 用于多类分类问题的激活函数,值在[0 , 1]范围内,并且向量中元素总和为1。
  • softmax的负半轴的输出接近0,反向传播时该部分的权重几乎不更新。

swish

f ( x ) = x ⋅ s i g m o i d ( β x ) \begin{aligned} f(x) = x\cdot sigmoid(\beta x) \end{aligned} f(x)=xsigmoid(βx)
β \beta β 是常数或者经过学习得到的参数。当 β = 1 \beta = 1 β=1

在这里插入图片描述

  • 与ReLU不同,swish函数全范围内都连续可微。实验表明,Swish作为激活函数经常会获得比ReLU更高的分类精度。但是,与ELU同样,由于需要计算幂函数,其计算代价较高。

numpy实现

import matplotlib.pyplot as plt
import numpy as npdef sigmoid(x):return 1.0 / (1.0 + np.exp(-x))def dsigmoid(x):return sigmoid(x) * (1 - sigmoid(x))def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))def dtanh(x):return 1 - tanh(x) ** 2def relu(x):return np.where(x < 0, 0, x)def drelu(x):x = np.where(x < 0, 0, x)x = np.where(x > 0, 1, x)return xdef lrelu(x, alpha=0.2):y = np.piecewise(x, [x >= 0, x < 0], [lambda x: x, lambda x: alpha * x])x = np.where(x >= 0, 1, x)dy = np.where(x < 0, alpha, x)return (y, dy)def softmax(x):return np.exp(x) / np.sum(np.exp(x))def dsoftmax(x):passdef swish(x, beta=1.0):return x * sigmoid(beta * x)def dswish(x, beta=1.0):sig = sigmoid(beta * x)dy = sig * (1 + x * beta * (1 - sig))return dyif __name__ == "__main__":x = np.linspace(-10.0, 10.0, num=10, endpoint=True)# plt.plot(x, sigmoid(x), label="sigmoid")# plt.plot(x, dsigmoid(x), label="dsigmoid")# plt.plot(x, tanh(x), label="tanh")# plt.plot(x, dtanh(x), label="dtanh")# plt.plot(x, relu(x), label="relu")# plt.plot(x, drelu(x), label="drelu")# plt.plot(x, lrelu(x)[0], label="lrelu")# plt.plot(x, lrelu(x)[1], label="dlrelu")# x = np.linspace(-5.0, 5.0, num=100, endpoint=True)# plt.plot(x, softmax(x), label="softmax")beta = 1plt.plot(x, swish(x, beta), label="swish")plt.plot(x, dswish(x, beta), label="dswish")plt.grid()plt.legend()plt.show()

小结

一句话 激活函数就是为了增加模型的非线性表达能力和学习到更复杂的映射关系

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

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

相关文章

#15封装vue3+el-table表格数据请求函数

目录 1、useTableData 2、util 3、使用 开箱即用&#xff0c;理解容易。 1、useTableData import { reactive } from vue import { getType } from /utils/utilsexport const useTableData (api) > {if (typeof api ! function && getType(api) ! Promise) {th…

Modbus -tcp协议使用第二版

1.1 协议描述 1.1.1 总体通信结构 MODBUS TCP/IP 的通信系统可以包括不同类型的设备&#xff1a; &#xff08;1&#xff09;连接至 TCP/IP 网络的 MODBUS TCP/IP 客户机和服务器设备&#xff1b; &#xff08;2&#xff09;互连设备&#xff0c;例如&#xff1a;在 TCP/IP…

xss——pdfxss,mxss,uxss,flashxss

uxss&#xff08;但是需要很低的版本才可以使用&#xff09;&#xff08;但是csdn也会有过滤&#xff09; 浏览器插件漏洞 搜索这个跨站语句&#xff0c;然后用翻译功能&#xff0c;它会触发跨站、 测试的时候可以去不断的测试它的所有功能&#xff0c;看也没有触发跨站 flas…

Python之Web开发中级教程----创建Django子应用

Python之Web开发中级教程----创建Django子应用 基于上一个教程的Django项目&#xff08;可以先看上一集&#xff0c;链接如下&#xff1a;&#xff09; https://mp.csdn.net/mp_blog/creation/editor/136724897 2.创建子应用 python manager.py startapp book admin.py&…

25考研数据结构复习·3.2队列

队列&#xff08;Queue&#xff09;基本概念 定义 队列&#xff08;Queue&#xff09;时只允许在一端进行插入&#xff0c;在另一端删除的线性表。 特点&#xff1a;先进入队列的元素先出队 先进先出 First In First Out(FIFO) 重要术语 队头、队尾、空队列 基本操作 创、销 I…

AIX上安装gcc和g++

AIX的iso镜像中没有gcc的软件包&#xff0c;需要我们自己下载&#xff0c;我们可以在 Index of /download/rpmdb/deplists/aix72 下载对应gcc和g版本的依赖文件deps 我们使用的是4.9.4版本的软件包 我们首先安装gcc&#xff0c;在http://www.oss4aix.org/download/everythi…

天锐绿盾|公司办公透明加密系统,文件数据 \ 资料防泄密软件

#防止核心文件、文档、图纸、源代码、音视频等数据资料泄漏&#xff0c;外泄# 天锐绿盾作为一款专业的公司办公透明加密系统&#xff0c;专注于解决企业文件数据与资料的安全保密问题&#xff0c;通过先进的加密技术和全面的安全管理体系&#xff0c;确保企业核心信息资产在日…

【C++设计模式】策略模式

文章目录 前言一、策略模式是什么&#xff1f;二、策略模式的实现原理三、UML图四、代码实现总结 前言 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。通过将每个算法封装到具有共同接口的独立类中&#xff0c;客户端可以在不改变自身代码的情况下选择…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

Leet code 1658 将x减到0的最小操作数

解题思路&#xff1a;滑动窗口 主要思想&#xff1a;正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去X 找不到就返回 -1 滑动窗口双指针从左端出发&#xff0c;进行 进窗口 判断 出窗口 更新结果四个步骤 代码…

使用API有效率地管理Dynadot域名,使用API设置域名隐私保护

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

ChatGPT 实操指南(断人财路版)

前言 ChatGPT 的横空出世&#xff0c;让很多人焦虑不已&#xff0c;不过&#xff0c;你完全不需要为此焦虑&#xff0c;因为比 AI 更强大永远是驾驭 AI 为自己所用的人类。 而且 GPT 远没有各大商家炒作的那么玄乎 &#xff0c;它应用逻辑也非常简单&#xff0c;你完全没必要…