深度学习之学习笔记(六)

您所在的位置:网站首页 激活函数具有哪些性质和特征 深度学习之学习笔记(六)

深度学习之学习笔记(六)

2024-07-13 17:19| 来源: 网络整理| 查看: 265

激活函数

在第三章《神经元的工作原理》中,我们曾经提到过激活函数。当时使用的是最简单的阶跃函数作为激活函数。

\sigma (x) = \frac{1}{1-e^{-x}}

阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数。Sigmoid函数的定义和图形如下:

Sigmoid函数把可能在较大范围内变换的输入值挤压到(0,1)输出范围内,因此也称为“挤压函数”(Squashing function)。

\sigma(x) =\frac{1}{1-e^{-x}}

其中 e=\lim_{x\rightarrow \infty }(1+\frac{1}{x})^x , e\approx 2.7182818284e称为纳皮尔常数。

Sigmoid函数被选为激活函数还有一个很重要的原因是它的导数很容易计算:

\sigma' (x) =\sigma (x)\cdot (1- \sigma(x))

求导过程如下:

先将 \sigma (x) 稍微变形,有

\sigma(x) =\frac{1}{1-e^{-x}}=\frac{e^x}{e^x+1}=1-(e^x+1)^{-1}

记 u(x)=e^x+1

则 \sigma(x) =1-(u)^{-1}

其中 u'(x) = {(e^x+1)}'=e^x

根据复合函数求导法则:

若 y=f(g(x)),则y'(x) = [f(g(x))]' = f'(g(x))\cdot g'(x)

\sigma' (x) = (-1)(-1)(e^x+1)^{-2}\cdot u'(x)

= (-1)(-1)(e^x+1)^{-2}\cdot e^x

=\frac{e^x}{(e^x+1)^2}=\frac{e^x\cdot e^{-2x} }{(e^x+1)^2\cdot e^{-2x}}

=\frac{ e^{-x} }{((e^x+1)\cdot (e^{-x}))^2}=\frac{ e^{-x} }{(1+e^{-x})^2}

= \frac{1}{1+e^{-x}}\cdot \frac{e^{-x}}{1+e^{-x}}

= \frac{1}{1+e^{-x}}\cdot (1- \frac{1}{1+e^{-x}})

=\sigma (x)\cdot (1- \sigma(x))

为什么要计算激活函数的导数?这个我们在后面《误差反向传播法》一章里解释。

 

非线性激活函数({\color{Red}\bigstar \bigstar \bigstar }

可以很明显地看出,Sigmoid函数是一个非线性函数。关于线性函数和非线性函数的定义如下:

输出值是输入值的常倍数的函数称为线性函数,用数学式表示为 h(x)=c\cdot x,  c为常数。因此线性函数是一条直线

非线性函数,就是指不像线性函数那样呈现出一条直线的函数,比如Sigmoid函数

所有的激活函数都是非线性函数

让我们回顾一下神经网络训练时的具体操作:我们将输入\vec{x}和它对应的权重\vec{w}相乘,并将激活函数f(x)应用于该乘积来获取该层的输出,并将激活函数的运算结果作为输入馈送到下一个层。

问题是,为什么我们一定要加上一个非线性的激活函数来处理输入信号呢?

如果我们不运用非线性激活函数的话,则输出信号将仅仅是一个简单的线性函数。而且无论如何加深层数,一直在做的只是计算线性激活函数,线性函数的复合函数仍然是线性函数。

例如:把 h(x)=c\cdot x 作为激活函数,把 y(x)=h(h(h(x))) 的运算对应3层神经网络,那么y(x)=c\cdot c\cdot c\cdot x。 可以由y=a\cdot x  ( 其中 a=c^3 ),这一次乘法运算来表示。

因此在这种情况下,无论神经网络有多少层,都只是把输入线性组合再输出,结果仍然是线性的。

那么为什么我们需要非线性函数?

我们在第二章《AI / ML / DL的基本概念》中介绍过,神经网络被认为是通用函数近似器(Universal Function Approximators)。这意味着它们可以计算和学习任何函数。几乎我们可以想到的任何过程都可以表示为神经网络中的函数计算。所以我们需要一个可以学习和表示几乎任何东西的神经网络模型,以及可以将输入映射到输出的任意复杂函数。而非线性激活函数正是具有这样优点的函数。非线性激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。这样我们的神经网络就可以学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。也可以理解一些复杂的事情,即一些相互之间具有很多隐藏层的非线性问题。

 

其他激活函数

除了Sigmoid函数,还有其他的非线性激活函数。它们优缺点的比较在网上有很多,这里不一一赘述。

 

Softmax函数

Softmax函数通常用于输出层,特别是在多元分类问题中。Softmax函数又称归一化指数函数。它是二分类函数Sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。

Softmax函数以一种特殊的方式将一个向量 \vec{a} = [a_1, a_2, \cdot \cdot \cdot , a_k] 归一化成和为1。在基于神经网络的分类任务中,经常用Softmax函数将神经网络的多维输出 \vec{z} = [z_1, z_2, \cdot \cdot \cdot , z_I] 归一化成一个概率向量 \vec{y} = [y_1, y_2, \cdot \cdot \cdot , y_K],如下式:

y_i=\frac{e^{z_i}}{\sum_{k=1}^{K}e^{z_k}} , i=1,2,\cdot \cdot \cdot ,K 

 

我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。Softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。

1) 将预测结果转化为非负数

我们知道指数函数的值域取值范围是零到正无穷。下图为 y=e^x=exp(x) 的图像:

softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。

2) 各种预测结果概率之和等于1

为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有的值转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。

下图展示了softmax的计算方法:

如上图所示,假如模型对一个三分类问题的预测结果为3、1、-3。我们用Softmax将模型结果转为概率。步骤如下:

1)将预测结果转化为非负数

exp(z_1)=exp(3)=e^3\approx 20.06

exp(z_2)=exp(1)=e^1\approx 2.72

exp(z_3)=exp(-3)=e^{-3}\approx 0.05

2)各种预测结果概率之和等于1

y_1=\frac{exp({z_1})}{exp({z_1})+exp({z_2})+exp({z_3})} = \frac{20.06}{20.06+2.72+0.05} \approx 0.88

y_2=\frac{exp({z_2})}{exp({z_1})+exp({z_2})+exp({z_3})} = \frac{2.72}{20.06+2.72+0.05} \approx 0.12

y_3=\frac{exp({z_3})}{exp({z_1})+exp({z_2})+exp({z_3})} = \frac{0.05}{20.06+2.72+0.05} \approx 0

其中,y_1+y_2+y_3=1

含义是,模型对该样本的预测结果显示,该样本属于第一种类型的概率是88%,属于第二种类型的概率是12%,属于第三种类型的概率是0。

 

下一章,我们将介绍计算权重\vec{w}的调整值所用的损失函数。

 

 

References:

知乎:什么是激活函数?它有什么作用?

简书:常用激活函数的比较

CSDN:一分钟理解softmax函数(超简单)

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3