IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习中的激活函数(一) -> 正文阅读

[人工智能]深度学习中的激活函数(一)

一、激活函数的意义:

先简单介绍一下什么是激活函数~
单一神经元模型如下图所示:
在这里插入图片描述
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

下面进入正题,激活函数存在的意义是什么呢,为什么不直接将神经元的输入输出直接进行连接呢?
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,使用激活函数是为了让中间输出多样化,能够处理更复杂的问题,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。有论文中把激活函数定义为一个几乎处处可微的函数f: R->R
那么,激活函数是为了让网络能够能够有更强的表现能力,为什么有这么多激活函数呢?
随着神经网络不断地发展,人们逐渐发现早期的激活函数会导致模型的收敛变慢,甚至造成不收敛现象。下面简单介绍一下常用的激活函数以及其中的优缺点,在介绍之前先介绍一下基本的概念:
饱和:
当函数f(x)满足:

lim ? x → + ∞ f ′ ( x ) = 0 \lim_{x\rightarrow+\infty}f^{'}(x)=0 limx+?f(x)=0

时,称为右饱和;

当函数f(x)满足:

lim ? x → ? ∞ f ′ ( x ) = 0 \lim_{x\rightarrow-\infty}f^{'}(x)=0 limx??f(x)=0

时,称为左饱和。

当f(x)同时满足左饱和及右饱和时,称为饱和。
软包和与硬包和:

在饱和定义的基础上,如果存在常数c1,当x>c1时候恒满足 f ′ ( x ) = 0 f^{'}(x)=0 f(x)=0称之为右硬饱和;同样的,如果存在c2,当x<c2时恒满足 f ′ ( x ) = 0 f^{'}(x)=0 f(x)=0,称之为左硬饱和。如果同时满足了左饱和,又满足了右饱和,称之为硬饱和。相对的,只有在x趋于极值时才能满足f(x)的导数为0,则成为软饱和。
1. Sigmoid 函数
函数公式如下:

f ( x ) = 1 1 + e ? x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e?x1?
其导数为:
f ′ ( x ) = f ( x ) ( 1 ? f ( x ) ) f^{'}(x)=f(x)(1-f(x)) f(x)=f(x)(1?f(x))
在这里插入图片描述

def sigmoid(x):
    y = 1/(1+np.exp(-x))
    return y

优点:

<1> Sigmoid的取值范围在(0, 1),而且是单调递增,比较容易优化

<2> Sigmoid求导比较容易,可以直接推导得出。

缺点:

<1> Sigmoid函数收敛比较缓慢

<2> 由于Sigmoid是软饱和,容易产生梯度消失,对于深度网络训练不太适合(从图上sigmoid的导数可以看出当x趋于无穷大的时候,也会使导数趋于0)

<3> Sigmoid函数并不是以(0,0)为中心点
2. Tanh函数
函数公式:

f ( x ) = s i n h ( x ) c o s h ( x ) = 1 ? e ? 2 x 1 + e ? 2 x = e x ? e ? x e x + e ? x = e 2 x ? 1 e 2 x + 1 = 2 s i g m o i d ( 2 x ) ? 1 f(x)=\frac{sinh(x)}{cosh(x)}=\frac{1-e^{-2x}}{1+e^{-2x}}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2x}-1}{e^{2x}+1}=2sigmoid(2x)-1 f(x)=cosh(x)sinh(x)?=1+e?2x1?e?2x?=ex+e?xex?e?x?=e2x+1e2x?1?=2sigmoid(2x)?1

其导数为:
f ′ ( x ) = t a n h ′ ( x ) = s e c h 2 ( x ) = 1 ? t a n h 2 ( x ) f^{'}(x)=tanh{'}(x)=sech^{2}(x)=1-tanh^{2}(x) f(x)=tanh(x)=sech2(x)=1?tanh2(x)
在这里插入图片描述

def tanh(x):
    y = (np.exp(x) - np.exp(-x))/(np.exp(x) + np.exp(-x))
    return y

优点:

<1> 函数输出以(0,0)为中心

<2> 收敛速度相对于Sigmoid更快

缺点:

<1> tanh并没有解决sigmoid梯度消失的问题
3. ReLU函数

公式如下:

f ( x ) = m a x ( 0 , x ) = { 0 ( x ? 0 ) x ( x > 0 ) f(x)=max(0, x)=\left\{\begin{matrix} 0 & (x \leqslant 0)& \\ x & (x > 0) & \end{matrix}\right. f(x)=max(0,x)={0x?(x?0)(x>0)??

在这里插入图片描述

def ReLU(x):
    y = []
    for i in x:
        if i >= 0:
            y.append(i)
        else:
            y.append(0)
    return y

优点:

<1> 在SGD中收敛速度要比Sigmoid和tanh快很多

<2> 有效的缓解了梯度消失问题

<3> 对神经网络可以使用稀疏表达

<4> 对于无监督学习,也能获得很好的效果

缺点:

<1> 在训练过程中容易杀死神经元,造成梯度消失0的情况。比如一个特别大的梯度经过神经元之后,我们调整权重参数,就会造成这个ReLU神经元对后来来的输入永远都不会被激活,这个神经元的梯度永远都会是0。
4.LReLU函数
公式:
LReLU

LRelu的优点:缓解了Relu神经元死亡的问题。

在这里插入图片描述

def LReLU(x):
    y = []
    for i in x:
        if i >= 0:
            y.append(i)
        else:
            y.append(0.01*i)
    return y

LRelu/PReLU的优点:
优点:
<1> .解决了正区间梯度消失问题;
<2> .易于计算;
<3> .收敛速度快;
<4> .解决了某些神经元不能被激活
缺点:
<1> 输出不是以零为中心
4.PReLU函数
在这里插入图片描述

公式:
PReLU
f ( x ) = m a x ( a x , x ) f(x) = max(ax, x) f(x)=max(ax,x)

其中 a a a是可以学习的。如果 a = 0 a=0 a=0,那么 PReLU 退化为ReLU;如果 a a a是一个很小的固定值(如 a = 0.01 a=0.01 a=0.01),则 PReLU 退化为 Leaky ReLU(LReLU)。
PReLU 只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同 channels 使用相同的a时,参数就更少了。BP 更新a时,采用的是带动量的更新方式(momentum)

函数太多了,后期继续补充!

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:35:19  更:2022-03-22 20:35:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:47:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码