【激活函数】

简介: 【激活函数】

1. 激活函数简述

激活函数是向神经网络中引入非线性因素,通过激活函数神经网络就可以拟合各种曲线。激活函数主要分为饱和激活函数(Saturated Neurons)和非饱和函数(One-sided Saturations)。Sigmoid和Tanh是饱和激活函数,而ReLU以及其变种为非饱和激活函数。非饱和激活函数主要有如下优势:


1.png


  1. 非饱和激活函数可以解决梯度消失问题。

  2. 非饱和激活函数可以加速收敛。


2.激活函数特点

一般来说,在神经元中,激活函数是很重要的一部分,为了增强网络的表示能力和学习能力,神经网络的激活函数都是非线性的,通常具有以下几点性质:


  • 连续并可导(允许少数点上不可导),可导的激活函数可以直接利用数值优化的方法来学习网络参数;
  • 激活函数及其导数要尽可能简单一些,太复杂不利于提高网络计算率;
  • 激活函数的导函数值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

3. 相关疑问

  • 什么是激活函数,为什么需要激活函数?

激活函数是在神经网络层间输入与输出之间的一种函数变换,目的是为了加入非线性因素,增强模型的表达能力。


  • 了解那些激活函数以及应用?回答主要分两类(饱和/非饱和),以及应用场景等。有时候可能特定到具体经典模型,比如LSTM用到Tanh,Transfromer中用到的ReLU,Bert中的GeLU,YOLO的Leaky ReLU等。


3.png


  • 梯度消失与梯度爆炸现象与原因以及解决办法?参看梯度消失与梯度爆炸部分。

  • ReLU激活函数为什么会出现死神经元,解决办法?


除上文提到输入为负值时,ReLU的梯度为0造成神经元死亡。还有Learning rate太高导致在训练过程中参数更新太大 。


解决办法主要有:1.优化参数。 2.避免将learning rate设置太大,或者使用Adam等自动调节learning rate的方法。3.更换激活函数。


4. python绘制激活函数图像

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10)
##### 绘制sigmoid图像
fig = plt.figure()
y_sigmoid = 1/(1+np.exp(-x))
ax = fig.add_subplot(321)
ax.plot(x,y_sigmoid,color='blue')
ax.grid()
ax.set_title('(a) Sigmoid')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
##### 绘制Tanh图像
ax = fig.add_subplot(322)
y_tanh = (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
ax.plot(x,y_tanh,color='blue')
ax.grid()
ax.set_title('(b) Tanh')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
##### 绘制Relu图像
ax = fig.add_subplot(323)
y_relu = np.array([0*item  if item<0 else item for item in x ])
ax.plot(x,y_relu,color='darkviolet')
ax.grid()
ax.set_title('(c) ReLu')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
##### 绘制Leaky Relu图像
ax = fig.add_subplot(324)
y_relu = np.array([0.2*item  if item<0 else item for item in x ])
ax.plot(x,y_relu,color='darkviolet')
ax.grid()
ax.set_title('(d) Leaky Relu')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
##### 绘制ELU图像
ax = fig.add_subplot(325)
y_elu = np.array([2.0*(np.exp(item)-1)  if item<0 else item for item in x ])
ax.plot(x,y_elu,color='darkviolet')
ax.grid()
ax.set_title('(d) ELU alpha=2.0')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
ax = fig.add_subplot(326)
y_sigmoid_dev = y_sigmoid*(1-y_sigmoid)
ax.plot(x,y_sigmoid_dev,color='green')
ax.grid()
ax.set_title('(e) Sigmoid Dev')
ax.spines['right'].set_color('none') # 去除右边界线
ax.spines['top'].set_color('none') # 去除上边界线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.tight_layout()
plt.savefig('Activation.png')
plt.show()

4.png

目录
相关文章
|
7月前
|
机器学习/深度学习 测试技术 Python
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
779 0
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
|
2月前
|
机器学习/深度学习 编解码
深度学习笔记(三):神经网络之九种激活函数Sigmoid、tanh、ReLU、ReLU6、Leaky Relu、ELU、Swish、Mish、Softmax详解
本文介绍了九种常用的神经网络激活函数:Sigmoid、tanh、ReLU、ReLU6、Leaky ReLU、ELU、Swish、Mish和Softmax,包括它们的定义、图像、优缺点以及在深度学习中的应用和代码实现。
133 0
深度学习笔记(三):神经网络之九种激活函数Sigmoid、tanh、ReLU、ReLU6、Leaky Relu、ELU、Swish、Mish、Softmax详解
|
2月前
|
机器学习/深度学习 资源调度 自然语言处理
Softmax激活函数介绍
【10月更文挑战第2天】
86 0
|
2月前
|
机器学习/深度学习 数据可视化 算法
激活函数与神经网络------带你迅速了解sigmoid,tanh,ReLU等激活函数!!!
激活函数与神经网络------带你迅速了解sigmoid,tanh,ReLU等激活函数!!!
WK
|
3月前
|
机器学习/深度学习
在神经网络的反向传播中,Tanh和Sigmoid哪个更快
在神经网络反向传播中,Tanh与Sigmoid函数的速度差异并无定论,受网络结构、数据特性及参数设置影响。Sigmoid在远离零时易导致梯度消失,而Tanh因输出范围为(-1, 1)且以0为中心,能更好地缓解此问题,理论上训练速度更快。两者计算复杂度相近,现代硬件优化使这一差距不明显。实际应用中,Sigmoid常用于二分类输出层,Tanh则适用于隐藏层以加速收敛并减少权重更新偏向。随着深度学习发展,ReLU等新激活函数因高效性和轻度梯度消失问题成为主流选择。综合来看,Tanh可能比Sigmoid稍快,但需根据具体任务和网络结构选择。
WK
62 0
|
5月前
|
机器学习/深度学习
激活函数
【7月更文挑战第24天】激活函数
44 3
|
6月前
|
机器学习/深度学习 算法 Serverless
神经网络的激活函数(二)
本文介绍了神经网络中的激活函数,特别是tanh和ReLU。tanh函数将输入映射到(-1,1),以0为中心,加快了训练速度,但两侧导数为0可能导致梯度消失。ReLU函数在正区间的导数为1,解决了梯度消失问题,常用于隐藏层。softmax函数用于多分类,将输出转换为概率分布。文章还包含了代码示例,展示了这些函数的图形和导数。
|
7月前
|
机器学习/深度学习 人工智能 算法
神经网络中的神经元和激活函数介绍
神经网络中的神经元和激活函数介绍
106 0
|
机器学习/深度学习 资源调度
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
|
机器学习/深度学习 Serverless