激活函数理解

前言

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

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

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

现假设只有两层没有激活函数的全连接网络如下:
在这里插入图片描述第一层的权重和偏置为 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 np


def 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) ** 2

def 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 x

def 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):
    pass

def 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 dy


if __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 = 1
    plt.plot(x, swish(x, beta), label="swish")
    plt.plot(x, dswish(x, beta), label="dswish")

    plt.grid()
    plt.legend()
    plt.show()

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DL经典回顾】激活函数大汇总(七)(CReLU RReLU附代码和详细公式)

激活函数大汇总&#xff08;七&#xff09;&#xff08;CReLU & RReLU附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不可或…

Solidity 智能合约开发 - 基础:基础语法 基础数据类型、以及用法和示例

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本篇主要是做一个知识的整理和规划 作为一个类似文档的作用 更为简要和明了 具体的实现案例和用法 后续会陆续给出…

【应急响应靶场web1】

文章目录 前言 一、web1 1、应急响应 1&#xff09;背景 2&#xff09;报错处理 3&#xff09;webshell查杀 4&#xff09;网站日志排查 5&#xff09;隐藏账户 6&#xff09;挖矿程序 2、渗透复现 1&#xff09;弱口令登录 2&#xff09;插件上传 3&#xff09;getshell 总结 …

还有没有免费裁剪音频的软件?15款音乐裁剪软件测评!(不断更新)

市面上有哪些免费裁剪音频的软件呢&#xff1f;今天&#xff0c;我们就来为大家详细介绍15款热门的音乐裁剪软件&#xff0c;并对其进行深度测评。 裁剪音频软件测评1&#xff1a;金舟音频大师 好评指数&#xff1a;4.5/5 优点罗列&#xff1a;支持音频格式转换、裁剪、降噪、…

Linux-vim显示乱码

Linux运维工具-ywtool 目录 一.问题二.解决2.1 编辑VIM的配置文件2.2 添加以下内容 一.问题 用vim编辑的时候,中文显示乱码 二.解决 2.1 编辑VIM的配置文件 vim ~/.vimrc #如果这个文件不存在,创建一个即可2.2 添加以下内容 添加完成以后就不会在出现中文乱码了 set fil…

爬虫的去重

去重基本原理 爬虫中什么业务需要使用去重 防止发出重复的请求防止存储重复的数据 在爬取网页数据时&#xff0c;避免对同一URL发起重复的请求&#xff0c;这样可以减少不必要的网络流量和服务器压力&#xff0c;提高爬虫的效率&#xff0c;在将爬取到的数据存储到数据库或其…

一个简单而绝妙的思维技巧

在文章的最开头&#xff0c;我想先问你一个问题&#xff1a; 你希望未来的你是什么样的&#xff1f;你希望未来的你比现在的你过得更好&#xff0c;还是过得更糟&#xff1f; 我想&#xff0c;应该没有人会选择后者吧&#xff1f; 尽管从客观上说&#xff0c;未来的我们很可能…

配置安装 Kuboard - kubernetes

目录 安装 Kuboard v3 - kubernetes | Kuboard 将官方yaml文件拿到本地 等待 Kuboard v3 就绪 访问 Kuboard 安装 Kuboard v3 - kubernetes | Kuboard Kuboard的官方非常丰富&#xff0c;大家也可以参考官网教程 将官方yaml文件拿到本地 ​kubectl apply -f https://add…

自定义指令控制权限

1.新建directives auth.ts 2.完整的auth.ts import { wmsStore } from "/store/pinia";//判断是否有某个角色的函数 function hasRoles(role: any) {const pinaRoles wmsStore().roles;if (typeof role string) {return pinaRoles.includes(role)} else if (Array…

docker部署Atheos云IDE平台

Codiad 是一个基于 Web 的 IDE 框架 部署 下载镜像 docker pull hlsiira/atheosvim docker-compose.yaml version: 3 services:atheos:image: hlsiira/atheosports:- 8565:80container_name: atheosrestart: always启动 docker-compose up -d访问 http://x.x.x.x:8565

ios开发错误积累

1.xcode 下载模拟器报错 Could not download iOS 报错&#xff1a; 解决&#xff1a; 1、去官网下载自己需要 地址&#xff08;https://developer.apple.com/download/all&#xff09; 2、下载完成后&#xff0c;执行以下命令添加&#xff1a;xcrun simctl runtime add /路径…

NLP:HanLP的下载与使用

昨天说到要做一个自定义的训练模型&#xff0c;但是很快这个想法就被扑灭了&#xff0c;因为这个手工标记的成本太大&#xff0c;而且我的上级并不是想要我做这个场景&#xff0c;而是希望我通过这个场景展示出可以接下最终需求的能力。换句话来说&#xff1a;可以&#xff0c;…

类和对象练习题

第1题 import java.util.Scanner; public class Homework01{public static void main(String[] args){//创建一个double类型的数组double array[]new double[6];//创建一个输入对象Scanner inputnew Scanner(System.in);//提示信息&#xff1a;对数组元素进行赋值System.out.pr…

22-Java状态模式 ( State Pattern )

Java状态模式 摘要实现范例 状态模式&#xff08;State Pattern&#xff09;中类的行为是基于它的状态改变的 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象 状态模式属于行为型模式 摘要 1. 意图 允许对象在内部…

Qt之格栅布局(QGridLayout)控件填满整个单元格

Qt专栏&#xff1a;http://t.csdnimg.cn/GQN1M 目录 1.现象1 2.解决方案 3.现象2 4.解决方案 5.总结 1.现象1 今天在用QGridLayout布局的时候&#xff0c;添加到布局的QWidget有文本框、标签、组合框和按钮等等&#xff0c;布局两列&#xff0c;通过下面的方式添加进去的&…

Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具

项目地址&#xff1a;rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key (github.com) Edge-TTS是由微软推出的文本转语音Python库&#xff0c;通过微软Azure Cognitive Services转化文…

计算机网络——OSI网络层次模型

计算机网络——OSI网络层次模型 应用层表示层会话层传输层TCP和UDP协议复用分用 网络层数据链路层物理层OSI网络层次模型中的硬件设备MAC地址和IP地址MAC地址IP地址MAC地址和IP地址区别 OSI网络层次模型通信过程解释端到端点到点端到端和点到点的区别 我们之前简单介绍了一下网…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…

(码农福利) 介绍几个不用魔法 就能免费使用的AI工具

因为 AI的飞速发展 IT行业已经可以说非常的卷了 作为程序员 如果不具备 AI 使用的能力 很快就会被淘汰 但 在社区内 无法直接谈论魔法 大部分程序员 可能也不具备魔法 今天说一个不需要魔法 好用的 AI工具 我们打开官网 https://chandler.bet/#/overView 点击 Get Chrome Ex…
最新文章