深度学习中的一些常见的激活函数集合(含公式与导数的推导)sigmoid, relu, leaky relu, elu, numpy实现

文章目录

      • Sigmoid(x)
      • 双曲正切
      • 线性整流函数 rectified linear unit (ReLu)
      • PReLU(Parametric Rectified Linear Unit) Leaky ReLu
      • 指数线性单元 Exponential Linear Units (ELU)
      • 感知机激活

%matplotlib inline
%config InlineBackend.figure_format = "png"
import matplotlib.pyplot as plt
import numpy as npplt.rcParams['figure.figsize'] = (8, 5)
plt.rcParams['figure.dpi'] = 150
plt.rcParams['font.sans-serif'] = ['Simhei']  #替代字体
plt.rcParams['axes.unicode_minus'] = False  #解决坐标轴负数的铅显示问题

Sigmoid(x)

sigmoid(x)=σ(x)=11+e−x\text{sigmoid}(x)= \sigma(x) = \frac{1}{1+e^{-x}}sigmoid(x)=σ(x)=1+ex1

σ′(x)=[(1+e−x)−1]′=(−1)(1+e−x)−2(−1)e−x=(1+e−x)−2e−x=e−x(1+e−x)2=1+e−x−1(1+e−x)2=1+e−x(1+e−x)2−1(1+e−x)2=1(1+e−x)(1−1(1+e−x))=σ(x)(1−σ(x))\begin{aligned} \sigma'(x) =&[(1+e^{-x})^{-1}]' \\ =&(-1)(1+e^{-x})^{-2}(-1)e^{-x}\\ =&(1+e^{-x})^{-2}e^{-x}\\ =&\frac{e^{-x}}{(1+e^{-x})^2} \\ =&\frac{1+e^{-x}-1}{(1+e^{-x})^2} \\ =&\frac{1+e^{-x}}{(1+e^{-x})^2} - \frac{1}{(1+e^{-x})^2} \\ =&\frac{1}{(1+e^{-x})}(1-\frac{1}{(1+e^{-x})}) \\ =&\sigma(x)(1-{\sigma(x)}) \end{aligned}σ(x)========[(1+ex)1](1)(1+ex)2(1)ex(1+ex)2ex(1+ex)2ex(1+ex)21+ex1(1+ex)21+ex(1+ex)21(1+ex)1(1(1+ex)1)σ(x)(1σ(x))

def sigmoid(x):return np.divide(1, 1 + np.e**(-x))def d_sigmoid(x):return sigmoid(x) * (1 - sigmoid(x))x = np.linspace(-10, 10, 100)
f_x = sigmoid(x)# df_x  is derivative
df_x = d_sigmoid(x)plt.plot(x, f_x, label=r"$\sigma(x)=\frac{1}{1+e^{-x}} $")
plt.plot(x, df_x, label=r"$\sigma'(x)$", alpha=0.5)plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.grid()
plt.legend()
plt.show()

请添加图片描述

双曲正切

tanh⁡(x)=sinh⁡(x)cosh⁡(x)=ex−e−xex+e−x\tanh(x) = \frac{\sinh(x)}{\cosh(x)} = \frac{e^x - e^{-x}}{e^x + e^{-x}}tanh(x)=cosh(x)sinh(x)=ex+exexex

tanh⁡′(x)=(ex−e−xex+e−x)′=[(ex−e−x)(ex+e−x)−1]′=(ex+e−x)(ex+e−x)−1+(ex−e−x)(−1)(ex+e−x)−2(ex−e−x)=1−(ex−e−x)2(ex+e−x)−2=1−(ex−e−x)2(ex+e−x)2=1−tanh⁡2(x)\begin{aligned} \tanh'(x) =& \big(\frac{e^x - e^{-x}}{e^x + e^{-x}}\big)' \\ =& \big[(e^x - e^{-x})(e^x + e^{-x})^{-1}\big]' \\ =& (e^x + e^{-x})(e^x + e^{-x})^{-1} + (e^x - e^{-x})(-1)(e^x + e^{-x})^{-2} (e^x - e^{-x}) \\ =& 1-(e^x - e^{-x})^2(e^x + e^{-x})^{-2} \\ =& 1 - \frac{(e^x - e^{-x})^2}{(e^x + e^{-x})^2} \\ =& 1- \tanh^2(x) \\ \end{aligned}tanh(x)======(ex+exexex)[(exex)(ex+ex)1](ex+ex)(ex+ex)1+(exex)(1)(ex+ex)2(exex)1(exex)2(ex+ex)21(ex+ex)2(exex)21tanh2(x)

def tanh(x):return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))def d_tanh(x):return 1 - tanh(x)**2x = np.linspace(-10, 10, 100)f_x = tanh(x)# df_x  is derivative
df_x = d_tanh(x)plt.plot(x, f_x, label=r"$\tanh(x)}$")
plt.plot(x, df_x, label=r"$\tanh'(x)$", alpha=0.5)plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.grid()
plt.legend(loc='best')
plt.show()

请添加图片描述

线性整流函数 rectified linear unit (ReLu)

f(x)=relu(x)=max⁡(0,x)={x,x>00,x≤0f(x) = \text{relu}(x) = \max(0, x) = \begin{cases} x, &x>0 \\ 0, &x\leq 0 \end{cases}f(x)=relu(x)=max(0,x)={x,0,x>0x0

f(x)是连续的f(x)是连续的f(x)
f′(x)=lim⁡h→0f(0)=f(0+h)−f(0)h=max⁡(0,h)−0hf'(x)=\lim_{h\to 0}f(0) = \frac{f(0 + h)-f(0)}{h}=\frac{\max(0, h) - 0}{h}f(x)=limh0f(0)=hf(0+h)f(0)=hmax(0,h)0
lim⁡h→0−=0h=0\lim_{h\to0^-}=\frac{0}{h} = 0limh0=h0=0
lim⁡h→0+=hh=1\lim_{h\to0^+}=\frac{h}{h} = 1limh0+=hh=1
所以f′(0)f'(0)f(0)处不可导
所以f′(x)={1,x>00,x<0f'(x) = \begin{cases} 1, & x > 0 \\ 0, & x < 0 \end{cases}f(x)={1,0,x>0x<0

f2=f(f(x))=max(0,f1(x)){f1(x),f1(x)>00,f1(x)≤0f_2=f(f(x))=max(0,f_1(x))\begin{cases} f_1(x), & f_1(x)>0 \\ 0, & f_1(x)\leq 0 \end{cases}f2=f(f(x))=max(0,f1(x)){f1(x),0,f1(x)>0f1(x)0
df2dx={1,f1(x)>00,f1(x)≤0\dfrac{df_2}{dx}=\begin{cases} 1, & f_1(x)>0 \\ 0, &f_1(x)\leq 0 \end{cases}dxdf2={1,0,f1(x)>0f1(x)0

def relu(x):return np.where(x < 0, 0, x)def d_relu(x):return np.where(x < 0, 0, 1)x = np.linspace(-5, 5, 200)f_x = relu(x)# df_x is derivative
df_x = d_relu(x)plt.plot(x, f_x, label=r"$ f(x) = \max(0, x)} $", alpha=0.5)
plt.plot(x, df_x, label=r"$f'(x)$", alpha=0.5)
# There is no derivative at (0)
plt.scatter(0, 0, color='', marker='o', edgecolors='r', s=50)plt.xlabel('x')
plt.ylabel('f(x)')
plt.grid()
plt.legend()
plt.show()

请添加图片描述

PReLU(Parametric Rectified Linear Unit) Leaky ReLu

f(x)=max⁡(αx,x)={x,x>0αx,x≤0,当α<1,α≠0f(x) = \max(\alpha x, x) = \begin{cases} x, & x > 0 \\ \alpha x, & x\leq 0 \end{cases}, \quad 当 \alpha<1, \alpha\neq0f(x)=max(αx,x)={x,αx,x>0x0,α<1,α=0,

f(x)=max⁡(αx,x)={αx,x>0x,x≤0,当α≥1f(x) = \max(\alpha x, x) = \begin{cases} \alpha x, &x>0 \\ x, &x \leq 0 \end{cases} , \quad 当\alpha\geq1f(x)=max(αx,x)={αx,x,x>0x0,α1

f(x)=max⁡(αx,x)={x,x>00,x≤0,当α=0,就是ReLuf(x) = \max(\alpha x, x) = \begin{cases} x, & x>0 \\ 0, & x \leq 0 \end{cases}, \quad 当\alpha=0,就是ReLuf(x)=max(αx,x)={x,0,x>0x0,α=0,ReLu

当α≥1时,f1(x)={αx,x>0x,x≤0当\alpha \geq 1时, \quad f_1(x) = \begin{cases} \alpha x, & x>0 \\ x, & x\leq 0 \end{cases}α1,f1(x)={αx,x,x>0x0

df1dx={α,x>01,x≤0\dfrac{df_1}{dx} = \begin{cases} \alpha, & x > 0 \\ 1, & x \leq 0 \end{cases}dxdf1={α,1,x>0x0

当α<1,f1(x)={x,x>0αx,x≤0当\alpha < 1, \quad f_1(x) = \begin{cases} x, &x > 0 \\ \alpha x, & x \leq 0 \end{cases}α<1,f1(x)={x,αx,x>0x0

df1dx={1,x>0α,x≤0\dfrac{df_1}{dx} = \begin{cases} 1, & x > 0 \\ \alpha, &x \leq 0 \end{cases}dxdf1={1,α,x>0x0

把leaky relu的α\alphaα设置成可以训练的参数,就是PReLU(Parametric Rectified Linear Unit)

def leaky_relu(x, alpha: float = 1):return np.where(x <= 0, alpha * x, x)def d_leaky_relu(x, alpha: float = 1):return np.where(x < 0, alpha, 1)x = np.linspace(-10, 10, 1000)alpha = [0, 0.1, 1]fig, ax = plt.subplots(1, 2, figsize=(10, 3.7))for alpha_i in alpha:f1 = leaky_relu(x, alpha=alpha_i)ax[0].plot(x, f1, label=r"$ f(x)|\alpha={0} $".format(alpha_i), alpha=0.5)ax[0].set_xlabel('x')ax[0].set_ylabel('Leaky Relu')ax[0].grid(True)ax[0].legend()ax[0].set_title('f(x)')df1 = d_leaky_relu(x, alpha_i)ax[1].plot(x, df1, label=r"$f'(x)|\alpha={0}$".format(alpha_i), alpha=0.5)ax[1].set_xlabel('x')ax[1].set_ylabel("f'(x)")ax[1].grid(True)ax[1].legend()ax[1].set_title("f'(x)")plt.tight_layout()
plt.show()

请添加图片描述

指数线性单元 Exponential Linear Units (ELU)

f(x)=elu(x)={x,x>0α(ex−1),x≤0f(x) = \text{elu}(x) = \begin{cases} x, & x>0 \\ \alpha(e^x - 1), & x \leq 0 \end{cases}f(x)=elu(x)={x,α(ex1),x>0x0

f′(x)=lim⁡h→0f(0)=f(0+h)−f(0)hf'(x) = \lim_{h\to 0}f(0) = \frac{f(0+h)-f(0)}{h}f(x)=limh0f(0)=hf(0+h)f(0)
lim⁡h→0−=α(eh−1)−0h=0\lim_{h\to0^-} = \frac{\alpha (e^h - 1) - 0}{h} = 0limh0=hα(eh1)0=0
lim⁡h→0+=hh=1\lim_{h\to0^+} = \frac{h}{h} = 1limh0+=hh=1
所以f′(0)f'(0)f(0)处不可导
所以f′(x)={1,x>0αex,x≤0f'(x) = \begin{cases} 1, & x>0 \\ \alpha e^x, &x\leq0 \end{cases}f(x)={1,αex,x>0x0

def elu(x, alpha: float = 1):return np.where(x <= 0, alpha * (np.exp(x) - 1), x)def d_elu(x, alpha: float = 1):return np.where(x <= 0, alpha * np.exp(x), 1)x = np.linspace(-10, 10, 200)alpha = [0, 0.2, 0.5, 1]fig, ax = plt.subplots(1, 2, figsize=(10, 3.5))
for alpha_i in alpha:f1 = elu(x, alpha=alpha_i)df1 = d_elu(x, alpha_i)ax[0].plot(x,f1,label=r"$f(x)=ELU,|\alpha = {0}$".format(alpha_i),alpha=0.5)ax[0].set_xlabel('x')ax[0].set_ylabel('f(x)')ax[0].grid(True)ax[0].legend()ax[0].set_title('ELU')ax[1].plot(x,df1,label=r"$f'(x),|\alpha = {0}$".format(alpha_i),alpha=0.5)ax[1].set_xlabel('x')ax[1].set_ylabel("f'(x)")ax[1].grid(True)ax[1].legend()ax[1].set_title("f'(x)")plt.tight_layout()
plt.show()

请添加图片描述

感知机激活

sgn(x)={1,x≥0−1,x<0\text{sgn}(x) = \begin{cases} 1, & x \geq 0 \\ -1, & x < 0 \end{cases}sgn(x)={1,1,x0x<0

  • 这里的值也可以是1,0
def sgn(x):return np.where(x <= 0, 0, 1)x = np.linspace(-10, 10, 1000)f_x = sgn(x)plt.plot(x, f_x, label=r"$sgn(x)$", alpha=1)
plt.grid(True)
plt.legend()
plt.show()

请添加图片描述

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

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

相关文章

最牛X的GCC 内联汇编

正如大家知道的&#xff0c;在C语言中插入汇编语言&#xff0c;其是Linux中使用的基本汇编程序语法。本文将讲解 GCC 提供的内联汇编特性的用途和用法。对于阅读这篇文章&#xff0c;这里只有两个前提要求&#xff0c;很明显&#xff0c;就是 x86 汇编语言和 C 语言的基本认识。…

mysql的告警日志_MySQL Aborted connection告警日志的分析

前言&#xff1a;有时候&#xff0c;连接MySQL的会话经常会异常退出&#xff0c;错误日志里会看到"Got an error reading communication packets"类型的告警。本篇文章我们一起来讨论下该错误可能的原因以及如何来规避。1.状态变量Aborted_clients和Aborted_connects…

hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...

WebSSH一个简单的Web应用程序&#xff0c;用作连接到ssh服务器的ssh客户端。它是用Python编写的&#xff0c;基于tornado&#xff0c;paramiko和xterm.js。特征支持SSH密码验证&#xff0c;包括空密码。支持SSH公钥认证&#xff0c;包括DSA RSA ECDSA Ed25519密钥。支持加密密钥…

Shell Notes(1)

> vi复制粘贴 光标移动到要复制的部分的开头&#xff0c;Esc退出插入模式&#xff0c;按v进入Visual模式&#xff0c;用hjkl选中要复制的部分 按Y或者yy&#xff0c;复制 移动光标到目标位置&#xff0c;按p&#xff0c;粘贴 > echo –e 参数 –e 可以使echo解释由反斜杠…

mysql多表查询语句_mysql查询语句 和 多表关联查询 以及 子查询

1.查询一张表&#xff1a;select * from 表名&#xff1b;2.查询指定字段&#xff1a;select 字段1&#xff0c;字段2&#xff0c;字段3….from 表名&#xff1b;3.where条件查询&#xff1a;select字段1&#xff0c;字段2&#xff0c;字段3 frome表名 where 条件表达式&#x…

Pytorch 自定义激活函数前向与反向传播 sigmoid

文章目录Sigmoid公式求导过程优点&#xff1a;缺点&#xff1a;自定义Sigmoid与Torch定义的比较可视化import matplotlib import matplotlib.pyplot as plt import numpy as np import torch import torch.nn as nn import torch.nn.functional as F%matplotlib inlineplt.rcPa…

js高级编程_这位设计师用Processing把创意编程玩到了极致!

Processing作为新媒体从业者的必备工具&#xff0c;近来却越来越成为设计师们的新宠&#xff01;今天小编将介绍以为用Processing把创意编程玩到极致的设计师Tim Rodenbrker。“我们的世界正在以惊人的速度变化。新技术为创作带来了根本性的转变。编程是我们这个时代最宝贵的技…

微软.NET Framework 4.5.2 RTM正式版

今天&#xff0c;微软.NET开发团队发布.NET Framework 4.5.2 RTM正式版。新版框架继续高度兼容现有的.NET Framework 4、4.5、4.5.1等版本&#xff0c;该版本框架与旧版的.NET Framework 3.5 SP1和早期版本采取不同的处理方式&#xff0c;但与.NET Framework 4、4.5相比&#x…

Pytorch 自定义激活函数前向与反向传播 Tanh

看完这篇&#xff0c;你基本上可以自定义前向与反向传播&#xff0c;可以自己定义自己的算子 文章目录Tanh公式求导过程优点&#xff1a;缺点&#xff1a;自定义Tanh与Torch定义的比较可视化import matplotlib import matplotlib.pyplot as plt import numpy as np import torc…

HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector

http://acm.hdu.edu.cn/showproblem.php?pid1181 题意&#xff1a;给我若干个单词,若单词A的结尾与单词B的开头相同,则表示A能变成B,判断能不能从b开头变成m结尾. 如: big-got-them 第一次使用动态数组vector View Code 1 #include <iostream>2 #include <vector>…

Max Sum 杭电 1003

2019独角兽企业重金招聘Python工程师标准>>> #题目概述 题目的意思是给你一个数列&#xff0c;找到一个子数列&#xff0c;这个子数列的和是所有子数列中和最大的。 当然把数列的所有数都列出来肯定不现实。 黑黑&#xff0c;不知道正不正确&#xff0c;我是先从第一…

shiro反序列化工具_Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)源码解析

Apache ShiroApache Shiro是一个功能强大且灵活的开源安全框架,主要功能包括用户认证、授权、会话管理以及加密。在了解该漏洞之前,建议学习下Apache Shiro是怎么使用.debug环境jdk1.8Apache Shiro 1.2.4测试demo本地debug需要以下maven依赖<!-- https://mvnrepository.com/…

window 下的mysql_Windows下MySQL下载安装、配置与使用

用过MySQL之后&#xff0c;不论容量的话&#xff0c;发现比其他两个(sql server 、oracle)好用的多&#xff0c;一下子就喜欢上了。下面给那些还不知道怎么弄的童鞋们写下具体的方法步骤。(我这个写得有点太详细了&#xff0c;甚至有些繁琐&#xff0c;有很多步骤在其他的教程文…

Pytorch 自定义激活函数前向与反向传播 ReLu系列 含优点与缺点

文章目录ReLu公式求导过程优点&#xff1a;缺点&#xff1a;自定义ReLu与Torch定义的比较可视化Leaky ReLu PReLu公式求导过程优点&#xff1a;缺点&#xff1a;自定义LeakyReLu与Torch定义的比较可视化自定义PReLuELU公式求导过程优点缺点自定义LeakyReLu与Torch定义的比较可视…

mybatis select count(*) 一直返回0 mysql_Mybatis教程1:MyBatis快速入门

点击上方“Java技术前线”&#xff0c;选择“置顶或者星标”与你一起成长一、Mybatis介绍MyBatis是一个支持普通*SQL*查询&#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML…

css预处理器sass使用教程(多图预警)

css预处理器赋予了css动态语言的特性&#xff0c;如变量、函数、运算、继承、嵌套等&#xff0c;有助于更好地组织管理样式文件&#xff0c;以及更高效地开发项目。css预处理器可以更方便的维护和管理css代码&#xff0c;让整个网页变得更加灵活可变。对于预处理器&#xff0c;…

Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type

Sharepoint本身就是一个丰富的大容器&#xff0c;里面存储的所有信息我们可以称其为“内容(Content)”&#xff0c;为了便于管理这些Conent&#xff0c;按照人类的正常逻辑就必然想到的是对此进行“分类”。分类所涉及到的层面又必然包括: 1、分类的标准或特征描述{即&#xf…

arduino byte转string_Java数组转List集合的三驾马车

点击上方 蓝字关注我们来源&#xff1a;blog.csdn.net/x541211190/article/details/79597236前言本文中的代码命名有的可能不太规范&#xff0c;是因为没法排版的问题&#xff0c;小仙已经很努力去解决了&#xff0c;希望各位能多多点赞、分享。好了&#xff0c;不多bb了(不要让…

ES6笔记(4)-- Symbol类型

系列文章 -- ES6笔记系列 Symbol是什么&#xff1f;中文意思是标志、记号&#xff0c;顾名思义&#xff0c;它可以用了做记号。 是的&#xff0c;它是一种标记的方法&#xff0c;被ES6引入作为一种新的数据类型&#xff0c;表示独一无二的值。 由此&#xff0c;JS的数据类型多了…

手把手教你如下在Linux下如何写一个C语言代码,编译并运行

文章目录手把手教你如下在Linux下如何写一个C语言代码&#xff0c;编译并运行打开Ubuntu终端创建 helloworld.c编译C文件手把手教你如下在Linux下如何写一个C语言代码&#xff0c;编译并运行 打开Ubuntu终端 我这里的终端是Windows下的WSL&#xff0c;如果有疑问&#xff0c;…