激活函数汇总,包含公式、求导过程以及numpy实现,妥妥的万字干货

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

f ( x ) = max ⁡ ( 0 , x ) f(x)=\max (0, x) f(x)=max(0,x)

1.4.2 导数

f ′ ( x ) = { 1  if  ( x > 0 ) 0  if  ( x < = 0 ) f^{\prime}(x)=\left\{\begin{array}{cc} 1 & \text { if } (x>0) \\ 0 & \text { if } (x<=0) \end{array}\right. f′(x)={10​ if (x>0) if (x<=0)​

1.4.3 代码实现

import numpy as np

class ReLU():

def call(self, x):

return np.where(x >= 0, x, 0)

def gradient(self, x):

return np.where(x >= 0, 1, 0)

1.5 leakyrelu


1.5.1 函数

f ( x ) = max ⁡ ( a x , x ) f(x)=\max (a x, x) f(x)=max(ax,x)

1.5.2 导数

f ′ ( x ) = { 1  if  ( x > 0 ) a  if  ( x < = 0 ) f^{\prime}(x)=\left\{\begin{array}{cl} 1 & \text { if } (x>0) \\ a & \text { if }(x<=0) \end{array}\right. f′(x)={1a​ if (x>0) if (x<=0)​

1.5.3 代码实现

import numpy as np

class LeakyReLU():

def init(self, alpha=0.2):

self.alpha = alpha

def call(self, x):

return np.where(x >= 0, x, self.alpha * x)

def gradient(self, x):

return np.where(x >= 0, 1, self.alpha)

1.6 ELU


1.61 函数

f ( x ) = { x ,  if  x ≥ 0 a ( e x − 1 ) ,  if  ( x < 0 ) f(x)=\left\{\begin{array}{cll} x, & \text { if } x \geq 0 \\ a\left(e^{x}-1\right), & \text { if } (x<0) \end{array}\right. f(x)={x,a(ex−1),​ if x≥0 if (x<0)​

1.6.2 导数

当x>=0时,导数为1。

当x<0时,导数的推导过程:

f ( x ) ′ = ( a ( e x − 1 ) ) ′ = a e x = a ( e x − 1 ) + a = f ( x ) + a = a e x \begin{aligned} \\ f(x)^{\prime} &=\left(a\left(e{x}-1\right)\right){\prime} \\ &=a e^{x} \\ &\left.=a (e^{x}-1\right)+a \\ &=f(x)+a=ae^{x} \end{aligned} f(x)′​=(a(ex−1))′=aex=a(ex−1)+a=f(x)+a=aex​

所以,完整的导数为:

f ′ = { 1  if  x ≥ 0 f ( x ) + a = a e x  if  x < 0 f^{\prime}=\left\{\begin{array}{cll} 1 & \text { if } & x \geq 0 \\ f(x)+a=ae^{x} & \text { if } & x<0 \end{array}\right. f′={1f(x)+a=aex​ if  if ​x≥0x<0​

1.6.3 代码实现

import numpy as np

class ELU():

def init(self, alpha=0.1):

self.alpha = alpha

def call(self, x):

return np.where(x >= 0.0, x, self.alpha * (np.exp(x) - 1))

def gradient(self, x):

return np.where(x >= 0.0, 1, self.call(x) + self.alpha)

1.7 selu


1.7.1 函数

selu ⁡ ( x ) = λ { x  if  ( x > 0 ) α e x − α  if  ( x ⩽ 0 ) \operatorname{selu}(x)=\lambda \begin{cases}x & \text { if } (x>0) \\ \alpha e^{x}-\alpha & \text { if } (x \leqslant 0)\end{cases} selu(x)=λ{xαex−α​ if (x>0) if (x⩽0)​

1.7.2 导数

selu ⁡ ′ ( x ) = λ { 1 x > 0 α e x ⩽ 0 \operatorname{selu}^{\prime}(x)=\lambda \begin{cases}1 & x>0 \\ \alpha e^{x} & \leqslant 0\end{cases} selu′(x)=λ{1αex​x>0⩽0​

1.7.3 代码实现

import numpy as np

class SELU():

Reference : https://arxiv.org/abs/1706.02515,

https://github.com/bioinf-jku/SNNs/blob/master/SelfNormalizingNetworks_MLP_MNIST.ipynb

def init(self):

self.alpha = 1.6732632423543772848170429916717

self.scale = 1.0507009873554804934193349852946

def call(self, x):

return self.scale * np.where(x >= 0.0, x, self.alpha*(np.exp(x)-1))

def gradient(self, x):

return self.scale * np.where(x >= 0.0, 1, self.alpha * np.exp(x))

1.8 softplus


1.81 函数

Softplus ⁡ ( x ) = log ⁡ ( 1 + e x ) \operatorname{Softplus}(x)=\log \left(1+e^{x}\right) Softplus(x)=log(1+ex)

1.8.2 导数

log默认的底数是 e e e

f ′ ( x ) = e x ( 1 + e x ) ln ⁡ e = 1 1 + e − x = σ ( x ) f{\prime}(x)=\frac{e{x}}{(1+e^{x})\ln e}=\frac{1}{1+e^{-x}}=\sigma(x) f′(x)=(1+ex)lneex​=1+e−x1​=σ(x)

1.8.3 代码实现

import numpy as np

class SoftPlus():

def call(self, x):

return np.log(1 + np.exp(x))

def gradient(self, x):

return 1 / (1 + np.exp(-x))

1.9 Swish

====================================================================

1.9.1 函数

f ( x ) = x ⋅ sigmoid ⁡ ( β x ) f(x)=x \cdot \operatorname{sigmoid}(\beta x) f(x)=x⋅sigmoid(βx)

1.9.2 导数

f ′ ( x ) = σ ( β x ) + β x ⋅ σ ( β x ) ( 1 − σ ( β x ) ) = σ ( β x ) + β x ⋅ σ ( β x ) − β x ⋅ σ ( β x ) 2 = β x ⋅ σ ( x ) + σ ( β x ) ( 1 − β x ⋅ σ ( β x ) ) = β f ( x ) + σ ( β x ) ( 1 − β f ( x ) ) \begin{aligned} f^{\prime}(x) &=\sigma(\beta x)+\beta x \cdot \sigma(\beta x)(1-\sigma(\beta x)) \\ &=\sigma(\beta x)+\beta x \cdot \sigma(\beta x)-\beta x \cdot \sigma(\beta x)^{2} \\ &=\beta x \cdot \sigma(x)+\sigma(\beta x)(1-\beta x \cdot \sigma(\beta x)) \\ &=\beta f(x)+\sigma(\beta x)(1-\beta f(x)) \end{aligned} f′(x)​=σ(βx)+βx⋅σ(βx)(1−σ(βx))=σ(βx)+βx⋅σ(βx)−βx⋅σ(βx)2=βx⋅σ(x)+σ(βx)(1−βx⋅σ(βx))=βf(x)+σ(βx)(1−βf(x))​

1.9.3 代码实现

import numpy as np

class Swish(object):

def init(self, b):

self.b = b

def call(self, x):

return x * (np.exp(self.b * x) / (np.exp(self.b * x) + 1))

def gradient(self, x):

return self.b * x / (1 + np.exp(-self.b * x)) + (1 / (1 + np.exp(-self.b * x)))(

1 - self.b * (x / (1 + np.exp(-self.b * x))))

1.10 Mish


1.10.1 函数

f ( x ) = x ∗ tanh ⁡ ( ln ⁡ ( 1 + e x ) ) f(x)=x * \tanh \left(\ln \left(1+e^{x}\right)\right) f(x)=x∗tanh(ln(1+ex))

1.10.2 导数

f ′ ( x ) = sech ⁡ 2 ( soft ⁡ plus ⁡ ( x ) ) x sigmoid ⁡ ( x ) + f ( x ) x = Δ ( x ) s w i sh ⁡ ( x ) + f ( x ) x \begin{gathered} f{\prime}(x)=\operatorname{sech}{2}(\operatorname{soft} \operatorname{plus}(x)) x \operatorname{sigmoid}(x)+\frac{f(x)}{x} \\ =\Delta(x) s w i \operatorname{sh}(x)+\frac{f(x)}{x} \end{gathered} f′(x)=sech2(softplus(x))xsigmoid(x)+xf(x)​=Δ(x)swish(x)+xf(x)​​

where softplus ( x ) = ln ⁡ ( 1 + e x ) (x)=\ln \left(1+e^{x}\right) (x)=ln(1+ex) and sigmoid ( x ) = 1 / ( 1 + e − x ) (x)=1 /\left(1+e^{-x}\right) (x)=1/(1+e−x).

1.10.3 代码实现

import numpy as np

def sech(x):

“”“sech函数”“”

return 2 / (np.exp(x) + np.exp(-x))

def sigmoid(x):

“”“sigmoid函数”“”

return 1 / (1 + np.exp(-x))

def soft_plus(x):

“”“softplus函数”“”

return np.log(1 + np.exp(x))

def tan_h(x):

“”“tanh函数”“”

return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

class Mish:

def call(self, x):

return x * tan_h(soft_plus(x))

def gradient(self, x):

return sech(soft_plus(x)) * sech(soft_plus(x)) * x * sigmoid(x) + tan_h(soft_plus(x))

1.11 SiLU


1.11.1 函数

f ( x ) = x × s i g m o i d ( x ) f(x)=x \times sigmoid (x) f(x)=x×sigmoid(x)

img

1.11.2 导数

推导过程

f ( x ) ′ = ( x ⋅ s i g m o i d ( x ) ) ′ = s i g m o i d ( x ) + x ⋅ ( s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) = s i g m o i d ( x ) + x ⋅ s i g m o i d ( x ) − x ⋅ s i g m o i d 2 ( x ) = f ( x ) + sigmoid ⁡ ( x ) ( 1 − f ( x ) ) \begin{aligned} &f(x)^{\prime}=(x \cdot sigmoid(x))^{\prime}\\ &=sigmoid(x)+x \cdot(sigmoid(x)(1-sigmoid(x))\\ &=sigmoid(x)+x \cdot sigmoid(x)-x \cdot sigmoid^{2}(x)\\ &=f(x)+\operatorname{sigmoid}(x)(1-f(x)) \end{aligned} ​f(x)′=(x⋅sigmoid(x))′=sigmoid(x)+x⋅(sigmoid(x)(1−sigmoid(x))=sigmoid(x)+x⋅sigmoid(x)−x⋅sigmoid2(x)=f(x)+sigmoid(x)(1−f(x))​

img

1.11.3 代码实现

import numpy as np

def sigmoid(x):

“”“sigmoid函数”“”

return 1 / (1 + np.exp(-x))

class SILU(object):

def call(self, x):

return x * sigmoid(x)

def gradient(self, x):

return self.call(x) + sigmoid(x) * (1 - self.call(x))

1.12 完整代码


定义一个activation_function.py,将下面的代码复制进去,到这里激活函数就完成了。

import numpy as np

Collection of activation functions

Reference: https://en.wikipedia.org/wiki/Activation_function

class Sigmoid():

def call(self, x):

return 1 / (1 + np.exp(-x))

def gradient(self, x):

return self.call(x) * (1 - self.call(x))

class Softmax():

def call(self, x):

e_x = np.exp(x - np.max(x, axis=-1, keepdims=True))

return e_x / np.sum(e_x, axis=-1, keepdims=True)

def gradient(self, x):

p = self.call(x)

return p * (1 - p)

class TanH():

def call(self, x):

return 2 / (1 + np.exp(-2 * x)) - 1

def gradient(self, x):

return 1 - np.power(self.call(x), 2)

class ReLU():

def call(self, x):

return np.where(x >= 0, x, 0)

def gradient(self, x):

return np.where(x >= 0, 1, 0)

class LeakyReLU():

def init(self, alpha=0.2):

self.alpha = alpha

def call(self, x):

return np.where(x >= 0, x, self.alpha * x)

def gradient(self, x):

return np.where(x >= 0, 1, self.alpha)

class ELU(object):

def init(self, alpha=0.1):

self.alpha = alpha

def call(self, x):

return np.where(x >= 0.0, x, self.alpha * (np.exp(x) - 1))

def gradient(self, x):

return np.where(x >= 0.0, 1, self.call(x) + self.alpha)

class SELU():

Reference : https://arxiv.org/abs/1706.02515,

https://github.com/bioinf-jku/SNNs/blob/master/SelfNormalizingNetworks_MLP_MNIST.ipynb

def init(self):

self.alpha = 1.6732632423543772848170429916717

self.scale = 1.0507009873554804934193349852946

def call(self, x):

return self.scale * np.where(x >= 0.0, x, self.alpha * (np.exp(x) - 1))

def gradient(self, x):

return self.scale * np.where(x >= 0.0, 1, self.alpha * np.exp(x))

class SoftPlus(object):

def call(self, x):

return np.log(1 + np.exp(x))

def gradient(self, x):

return 1 / (1 + np.exp(-x))

class Swish(object):

def init(self, b):

self.b = b

def call(self, x):

return x * (np.exp(self.b * x) / (np.exp(self.b * x) + 1))

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
点汇总**

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-nLXmHohN-1713256775222)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值