文章目录

  • 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+e−x1​

σ′(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+e−x)−1]′(−1)(1+e−x)−2(−1)e−x(1+e−x)−2e−x(1+e−x)2e−x​(1+e−x)21+e−x−1​(1+e−x)21+e−x​−(1+e−x)21​(1+e−x)1​(1−(1+e−x)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+e−xex−e−x​

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+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)−21−(ex+e−x)2(ex−e−x)2​1−tanh2(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>0x≤0​

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)=limh→0​f(0)=hf(0+h)−f(0)​=hmax(0,h)−0​
lim⁡h→0−=0h=0\lim_{h\to0^-}=\frac{0}{h} = 0limh→0−​=h0​=0
lim⁡h→0+=hh=1\lim_{h\to0^+}=\frac{h}{h} = 1limh→0+​=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>0x≤0​,当α<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>0x≤0​,当α≥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>0x≤0​,当α=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>0x≤0​

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

当α<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>0x≤0​

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

把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,α(ex−1),​x>0x≤0​

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)=limh→0​f(0)=hf(0+h)−f(0)​
lim⁡h→0−=α(eh−1)−0h=0\lim_{h\to0^-} = \frac{\alpha (e^h - 1) - 0}{h} = 0limh→0−​=hα(eh−1)−0​=0
lim⁡h→0+=hh=1\lim_{h\to0^+} = \frac{h}{h} = 1limh→0+​=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>0x≤0​

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,​x≥0x<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()

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

  1. 深度学习中几种常见的激活函数理解与总结

    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函 ...

  2. sigmoid函数_深度学习中激活函数总结

    一.前言 前段时间通过引入新的激活函数Dice,带来了指标的提升,借着这个机会,今天总结下常用的一些激活函数. 激活函数在深度学习中起着非常重要的作用,本文主要介绍下常用的激活函数及其优缺点.主要分为 ...

  3. 深度学习最常用的10个激活函数

    那就让我们来整理一下深度学习中离不开的激活函数! 激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式.类似于人类大脑中基于神经元的模型 ...

  4. 深度学习最常用的10个激活函数!

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 在 ...

  5. 深度学习中epoch,batch的概念--笔记

    深度学习中epoch,batch的概念 batch.epoch和iteration是深度学习中几个常见的超参数. (1) batch_ size: 每批数据量的大小.DL通常用SGD的优化算法进行训练 ...

  6. 手撕深度学习中的损失函数(上)

    面试中经常会问到损失函数的相关问题,本文推导了深度学习中常用损失函数的计算公式和反向传播公式,并使用numpy实现. 定义损失函数基类: class Loss:def loss(self, predi ...

  7. 深度学习中常见的损失函数

    文章来源于AI的那些事儿,作者黄鸿波 2018年我出版了<TensorFlow进阶指南 基础.算法与应用>这本书,今天我把这本书中关于常见的损失函数这一节的内容公开出来,希望能对大家有所帮 ...

  8. 【语义分割】深度学习中常见概念回顾(全大白话解释,一读就能懂!)

    记录一下常见的术语! 一.epoch.batch size和iteration 1.1 Epoch 定义:一个epoch指代所有的数据送入网络中完成一次前向计算及反向传播的过程.简而言之:训练集中的全 ...

  9. 【深度学习】激活函数:原理+常见激活函数(Sigmoid\Tanh\ReLU\Leaky ReLU\Softmax)

    首先需要知道为什么要引入激活函数:激活函数是用来加入非线性因素的,因为线性模型的表达能力不够.引入非线性激活函数,可使深层神经网络的表达能力更加强大. 在深度学习中,线性模型只需要简单的全连接层就能实 ...

最新文章

  1. Docker安装weblogic(五)
  2. SpringJDBC的简单应用
  3. SpringBoot在Tomcat下面启动,访问路径
  4. 浅谈Java解决鸡兔同笼问题的思路
  5. 如何写一手好 SQL 【频繁出现慢SQL告警的优化方案】
  6. MySQL事务控制语句
  7. jfinal mysql 事务_jfinal事物为啥这么用不生效呢,只要执行update数据就进库了,数据库用的是oracle...
  8. 异步编程模型(C#5.0系列)
  9. Winform窗体控件自适应大小
  10. python123第九周测验答案2020_脑筋急转弯:什么牛是最好骗的?这答案能笑死人...
  11. 字体引起的用户密码错误
  12. typora 下载 安装教程
  13. mi5splus android9,小米5SPlus lineage16 安卓9.0 极致省电 纯净 完美root Xposed 经典版
  14. ts(typescript)面向对象之类的继承
  15. 【C语言笔记】【宏定义系列】 判断是否2的n次幂对齐
  16. 从冬令营到字节跳动,我从ICPCer变身Bytedancer
  17. C++洛谷题解(17)——P5713
  18. 怎么查看浪潮服务器型号,供应 浪潮服务器 各种型号
  19. Java基础:回调函数
  20. 如果如果,如果没有如果

热门文章

  1. 酸辣粉生产线 方便粉丝加工设备
  2. 1010. 邮寄包裹
  3. 视频操作之ffmpeg基础使用
  4. Unity 热更新方案之——ILRuntime
  5. 这家蓝牙芯片巨头瞄准了WiFi SOC市场,重磅发布低功耗WiFi MCU产品线
  6. 《基础知识系列》-位(bit)、字节(byte)、字(word)、KB、MB、GB、TB
  7. python输出由*组成的正方形_Python 输出由星号*组成的菱形图案
  8. ffmpeg提取音频并对获取到的音频进行截取
  9. 线稿要怎么画?小白该怎么去学习绘画线稿?
  10. R语言通过在函数中设置na.rm=TRUE参数、在计算和分析中删除缺失值获得有效的计算结果(Excluding Missing Values from Analyses)