![99d584a99ff81802fc1ab215723080fa.png](https://i-blog.csdnimg.cn/blog_migrate/bc8b9c031a94e13c5cca2a72f74c24e8.jpeg)
在神经网络最后的输出层,通常会使用激活函数将最后一层神经元得到的数据再进行计算,最终得到一个输出的结果,这里称该函数为激活函数,比对输出表达式为,当最后一层输出元得到的数据大于0,则输出1,小于0则输出0,这种称为阶跃函数,常见的激活函数有阶跃函数,sigmoid,ReLU,tanh函数
阶跃函数
阶跃函数的意义为,当输入数据大于某个值时输出值A,小于等于某个值时为B,表现为在某个值时输出突然变化,数学表达为
![4dbfb41927baec590459dfaca0e43de6.png](https://i-blog.csdnimg.cn/blog_migrate/8165402990febb59eaaefe30c6554ebf.jpeg)
该图表示,当输入小于等于0时,输出0,大于0时输出1,使用python的函数表达为
![5fa970b625066f8c1bebd72cc96ae45e.png](https://i-blog.csdnimg.cn/blog_migrate/3155848cb1bf612370fa0a9c2fa479d3.jpeg)
函数比较简单,但是通常情况下,我们输入的数一般不会只是简单的一个数,一般是一个向量,将上面的函数使用numpy模块进行一下改造。
![55be8f2a9fd8184af8c4543b21d2c6b5.png](https://i-blog.csdnimg.cn/blog_migrate/6d4a688cf717238c0c644482f036af65.jpeg)
上面脚本的输出为[1 1 0 0]
y=x>0 利用numpy的广播功能,将numpy数组依次和0进行对比,当大于0的时候返回True,否则返回False,再将True和False转换为int的0和1
>>> import numpy as np>>> x = np.array([1.0,2.0,0,-2.3])>>> y = x>0>>> yarray([ True, True, False, False])>>> y.astype(np.int)array([1, 1, 0, 0])
如果使用matplotlib对上面的函数进行图形化展示,如下
![3dd4d066c3263f9740bcc178e658808f.png](https://i-blog.csdnimg.cn/blog_migrate/e1183ca682b1801b411a2fb4054c2c70.jpeg)
得到的图形如下
![d6c4ea224f12852e84c5c1e77e7502ef.png](https://i-blog.csdnimg.cn/blog_migrate/0c3ab2141fa101b85aff82b11c06c931.jpeg)
sigmoid函数
阶跃函数在行为上表现的过于激进,更多的情况下我们希望在神经网络中得到一种更为平滑的输出,由其在分类问题中,比如我们一共可能有5种输出结果,我们希望在最后的激活函数中得到这5种结果的概率,取概率最大的那种可能结果,这时我们就不希望用到上面这种过于激进的函数,我们可以使用sigmoid函数。
sigmoid函数的数学表达式为
![d0b307e3abbdb866ec87f2b6d2033ba9.png](https://i-blog.csdnimg.cn/blog_migrate/d88a366b3d04e2c90623560f0c09bf3b.jpeg)
sigmoid表达式
其中exp(−x)表示 的意思。e是纳皮尔常数2.7182...
python 的函数表达为
![50ab7992ae34fc605ba0d1f2df7c5f3d.png](https://i-blog.csdnimg.cn/blog_migrate/1f337b89572d38fadf1791f0c9a61437.jpeg)
输出为[0.11920292 0.73105858 0.88079708]
sigmoid的函数图形为
![21a3166ddec9045342fb5d0c94049cfe.png](https://i-blog.csdnimg.cn/blog_migrate/14e62f70744327d99c76d395671d2c3f.jpeg)
sigmoid图形
将sigmoid函数与阶跃函数放在一起
![85f2478864ab73c3b92a7de5b76d9f50.png](https://i-blog.csdnimg.cn/blog_migrate/40fc5a2f537796a8502c04f4124c2d1f.jpeg)
![5376e6121fd2d265218064c86e59976f.png](https://i-blog.csdnimg.cn/blog_migrate/97a428089364cbcb1df565db33aa6c5b.jpeg)
sigmoid与阶跃图形对比
可以看出sigmoid函数比阶跃函数要平滑。
tanh函数
tanh的数学表达式为
![5454d17e5ba450ffc4ddd18864d1d25e.png](https://i-blog.csdnimg.cn/blog_migrate/063c95209c43e26682ca780929a23b6f.jpeg)
表现为输入从-10到10之间,输出会从-1到1之间平滑变化,大于10的输出1,小于-10的输出-1,
python函数表达为
![b8c0f9ec3404a7e62491d8ac87743243.png](https://i-blog.csdnimg.cn/blog_migrate/abbe76867c7244f72bbe9fa2d74c6ee1.jpeg)
上面输出为
[-1. -1. -0.99999997 -0.96402758 0. 0.96402758 0.99505475 1. 1. ]
tanh的图形为
![7502d22e68e0f47193480865f8767b2a.png](https://i-blog.csdnimg.cn/blog_migrate/08ae75421413fcf50e18ab160a00bb3b.jpeg)
ReLU函数
ReLU函数在输入大于0 时,直接输出该值;在输入小于等于0 时,输出0,数学表达式为
![f72764a8c58605a974872c3349139dd3.png](https://i-blog.csdnimg.cn/blog_migrate/13ea27c4a60886e860d15a479ead7a87.jpeg)
sigmoid与阶跃图形对比
ReLU的python表达式为
![ce421dfe96f0845b3e2474d1497d9022.png](https://i-blog.csdnimg.cn/blog_migrate/08125f19ee8b91a46b2d642afcd229d2.jpeg)
输出为[0. 1. 2.]
ReLU的图形为
![56c5560af16acce724db79222f5d6c59.png](https://i-blog.csdnimg.cn/blog_migrate/d3626cb896addc24547e5db0540d6a46.jpeg)
上面四个激活函数的图形放到一起为
![eeac4615b1a62985d896bd552d970cfc.png](https://i-blog.csdnimg.cn/blog_migrate/7d3320e17c5555f65ac403b514c155c5.jpeg)
参考资料 《深度学习入门:基于Python的理论与实现》