前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytorch基础知识-常见激活函数(上)

pytorch基础知识-常见激活函数(上)

作者头像
用户6719124
发布2019-11-17 22:44:43
1.1K0
发布2019-11-17 22:44:43
举报

在青蛙神经反射中,科学家们发现给予神经两个神经信号,输出的并不是两者的加和,而是仿佛有一个阈值,在总信号强度达到某一定值时,才会有输出信号。

由此科学家根据这一现象做出了一个模拟的神经网络

输入的x1、x2、x3信号经过节点的汇总加和后,传入下一个激活函数的节点。在该节点上,若总信号强度高于阈值,则会有输出信号,若不够则无输出。

在该激活函数(梯度函数)下,输出只有0和1,即有输出和无输出。

这种激活函数也可叫为单层感知器。

但这样的梯度函数也有问题,即无法求导,没有梯度。为解决此问题,科学家们又研发了多种激活函数:

(1)sigmoid / logistic函数

函数表达式为

其函数图像如下图所示:

曲线与y轴交点为0.5,曲线两端慢慢的接近于0和1。

这种激活函数十分适用于生物学中,当接收到的信号很小时,趋近于不响应的状态。而即使接受的信号很大,响应也不会很大。因此该激活函数会将-∞到+∞压缩到一个很小(0~1)的范围。

另外更重要的是对比于阶梯激活函数,这种sigmoid函数可导,其导数推导过程为:

由最终结果可见,在sigmoid函数的求导结果只与σ有关。另外其输出的结果在0至1之间,这正好对应于probility的结果特性(输出结果也是0至1),因此sigmoid激活函数应用很广。

但要注意的是sigmoid函数存在一个致命的问题,即当横坐标取值趋近于正无穷或负无穷时,导数接近于0,而求导时学习率与导数值得乘积时一直等于0,使得要更新的参数一直得不到更新,造成了梯度离散现象。

下面以代码进行讲解

代码语言:javascript
复制
import torch

a = torch.linspace(-100, 100, 10)
# 从-100至100的区间内,等间距的取10个数
print(a)
# 输出a

输出

代码语言:javascript
复制
tensor([-100.0000,  -77.7778,  -55.5556,  -33.3333,  -11.1111,   11.1111,
          33.3333,   55.5555,   77.7778,  100.0000])

转化为sigmoid输出

代码语言:javascript
复制
print(torch.sigmoid(a))

输出为

代码语言:javascript
复制
tensor([0.0000e+00, 1.6655e-34, 7.4564e-25, 3.3382e-15, 1.4945e-05, 9.9999e-01,
        1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00])

由输出结果可见,当值为-100和100时输出趋近于0和1。因此sigmoid函数非常容易取到边缘值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档