神经网络:激活函数


参考:https://blog.csdn.net/tyhj_sf/article/details/79932893
参考:https://zhuanlan.zhihu.com/p/25631496
参考:https://zhuanlan.zhihu.com/p/73214810

为什么用激活函数?

神经网络的每一层由一个线性函数和非线性函数构成,这样可以提升每一层的拟合能力,激活函数就是充当非线性层。
在这里插入图片描述

选择激活函数需要考虑什么因素?

激活函数输入输出的映射是如何的 将什么区间映射到什么区间,比如sigmoid函数将正负无穷空间映射到0-1空间,而tanh函数将其映射到-1和1之内,relu函数映射到0到正无穷。
激活函数的导数有什么特性 因为激活函数的导数会引出一个梯度消失和梯度爆炸的问题。

梯度消失和梯度爆炸

神经网络参数更新规则中,要通过链式法则计算导数:
在这里插入图片描述
可以看出导数的计算包含了每一层的线性函数的W和非线性函数(激活函数)导数,当激活函数的导数一直处于一个小于1接近与0的值的时候,这个导数计算出来就非常接近与0,就导致参数更新缓慢甚至不更新。反之,如果每一层计算导数过大,就会导致神经网络参数更新幅度多大,网络训练不稳定。

部分激活函数介绍

sigmoid函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tanh函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

relu函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

个人总结实践

对于使用激活函数,首先考虑自己的场景,要考虑自己的输入输出映射区间,同时考虑构建起来的网络参数的梯度情况。
一下是对于同一个问题三种激活函数训练出来的损失函数曲线:
sigmoid函数:
在这里插入图片描述
在这里插入图片描述
tanh函数
在这里插入图片描述
在这里插入图片描述
relu函数:
在这里插入图片描述
在这里插入图片描述
leaky_relu函数:
在这里插入图片描述
在这里插入图片描述

关于批量归一化

从前面的激活函数可以看出,sigmoid函数和tanh函数对输入的响应区间都比较狭窄,批量归一化的操作就是将数据映射到均值为0的附近的区域,利用了正太分布的一点知识。批量归一化的好处就是将数据映射到响应区间了,但是坏处就是可能改变了数据原始样貌。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看出激活函数对神经网络拟合能力的影响还是巨大的,但是稳定的激活函数不一定预测效果就好,比如relu不如tanh稳定,但是预测效果更好

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值