xinmeng_wit 发表于 2024-8-17 17:48

《人工智能实践教程》4、激活函数

<p><strong>一、简介</strong></p>

<p>激活函数是连接感知机和神经网络的桥梁,在上次学习的感知机章节中,使用的是阈值来触发是否激活,实际上这是将阶跃函数作为了激活函数。</p>

<p>也就是说,在激活函数的众多候选函数中,感知机选择了阶跃函数。如果感知机使用其他函数作为激活函数会怎么样呢?</p>

<p>实际上,如果将激活函数由阶跃函数换为其他函数,就进入了神经网络的世界。</p>

<p>下面来学习几种常用的激活函数。</p>

<p>&nbsp;</p>

<p><strong>二、Sigmoid函数</strong></p>

<p>Sigmoid函数是神经网络中经常用到的激活函数,其表达式如下:</p>

<p><img alt="h(x) = \frac{1}{1+e^{-x}}" src="https://bbs.eeworld.com.cn/gif.latex?h%28x%29%20%3D%20%5Cfrac%7B1%7D%7B1&amp;plus;e%5E%7B-x%7D%7D" /></p>

<p>Sigmoid函数的图形如下:</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">&nbsp;</div>

<p><strong>三、Sigmoid函数和阶跃函数的比较</strong></p>

<p>为了方便比较Sigmoid函数和阶跃函数,将两个函数画在同意个图中,如下:</p>

<div style="text-align: left;"></div>

<pre ng-bind-html="message.MMActualContent">
比较Sigmoid函数和阶跃函数(虚线为阶跃函数),Sigmoid函数和阶跃函数的一个不同点是&ldquo;平滑性&rdquo;。
Sigmoid函数是一条平滑的曲线,输出随输入连续变化;阶跃函数以0为界,输出发生急剧性的变化。Sigmoid 函数的平滑性对神经网络的学习具有重要意义。
另一个不同点是,阶跃函数只能返回0或1,Sigmoid函数可以返回0.731、0.880等实数,这也是平滑性的一种体现。</pre>

<p>也就是说,在感知机中,在神经元之间流动的是0或者1的二元信号,而在神经网络中流动的是连续的实数信号。</p>

<pre ng-bind-html="message.MMActualContent">
Sigmoid 函数和阶跃函数的一个共同点是形状相似。
实际上,两者均符合&ldquo;当输入小时,输出接近0(或为0);随着输入增大,输出接近1(或为1)&rdquo;。
也就是说,当输入信号为重要信息时,Sigmoid函数和阶跃函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。
另一个共同点是,不论输入信号大小,输出信号的值都在0~1之间。
阶跃函数和Sigmoid函数都是非线性函数,Sigmoid函数的图形是一条曲线,阶跃函数的图形是一条似阶梯的折线。</pre>

<p><span style="background-color:#27ae60;">注意:神经网络的激活函数必须使用非线性函数。</span></p>

<p>&nbsp;</p>

<p><strong>四、ReLU函数</strong></p>

<p>ReLU(Rectified Linear Unit)函数是近年来在神经网络中广为使用的激活函数。</p>

<p>其表达式为:</p>

<div style="text-align: left;"></div>

<p>其图形为:</p>

<div style="text-align: left;"></div>

<p>由此可见,ReLU也是一个非常简单的函数,不用再过多的介绍了。</p>

<p>&nbsp;</p>

秦天qintian0303 发表于 2024-8-17 19:26

<p>很多函数应该都有表达式,这种算法还是比较不错的</p>

hellokitty_bean 发表于 2024-8-18 15:15

<p>Wit,是不是任何函数都可以作为激活函数呀,为什么非得非线性函数才可以做激活函数?<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>

hellokitty_bean 发表于 2024-8-18 15:21

<p>加入激活函数的目的,是使得该层神经元的输出映射到0~1,作用是增加了非线性的特性,使得神经网络可以任意逼近任何<a data-from-module="" href="https://baike.baidu.com/item/%E9%9D%9E%E7%BA%BF%E6%80%A7%E5%87%BD%E6%95%B0/16029251?fromModule=lemma_inlink" target="_blank">非线性函数</a>,这样神经网络就可以应用到众多的<a data-from-module="" href="https://baike.baidu.com/item/%E9%9D%9E%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B/10463547?fromModule=lemma_inlink" target="_blank">非线性模型</a>中。</p>

<p>从sigmoid函数或者ReLU能比较好理解</p>

hellokitty_bean 发表于 2024-8-18 15:25

<p>AI的回答:</p>

<p>激活函数的选择直接影响到神经网络的能力和性能。虽然理论上任何函数都可以作为激活函数,但实际上,常用的激活函数都是经过精心选择的,以满足特定的数学和计算性质。例如,<a href="https://www.baidu.com/s?sa=re_dqa_generate&amp;wd=Sigmoid&amp;rsv_pq=83e85a7c056a4ec2&amp;oq=%E6%98%AF%E4%B8%8D%E6%98%AF%E4%BB%BB%E4%BD%95%E5%87%BD%E6%95%B0%E9%83%BD%E5%8F%AF%E4%BB%A5%E5%81%9A%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0&amp;rsv_t=dfe8CTW9K1lckOkw8LSo+m2G/IP+RtUml97bvrGRmGpf4DHAuhAxEGZpPLA&amp;tn=baidu&amp;ie=utf-8" rl-type="stop" target="undefined">Sigmoid</a>、<a href="https://www.baidu.com/s?sa=re_dqa_generate&amp;wd=ReLU&amp;rsv_pq=83e85a7c056a4ec2&amp;oq=%E6%98%AF%E4%B8%8D%E6%98%AF%E4%BB%BB%E4%BD%95%E5%87%BD%E6%95%B0%E9%83%BD%E5%8F%AF%E4%BB%A5%E5%81%9A%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0&amp;rsv_t=dfe8CTW9K1lckOkw8LSo+m2G/IP+RtUml97bvrGRmGpf4DHAuhAxEGZpPLA&amp;tn=baidu&amp;ie=utf-8" rl-type="stop" target="undefined">ReLU</a>、<a href="https://www.baidu.com/s?sa=re_dqa_generate&amp;wd=Maxout&amp;rsv_pq=83e85a7c056a4ec2&amp;oq=%E6%98%AF%E4%B8%8D%E6%98%AF%E4%BB%BB%E4%BD%95%E5%87%BD%E6%95%B0%E9%83%BD%E5%8F%AF%E4%BB%A5%E5%81%9A%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0&amp;rsv_t=dfe8CTW9K1lckOkw8LSo+m2G/IP+RtUml97bvrGRmGpf4DHAuhAxEGZpPLA&amp;tn=baidu&amp;ie=utf-8" rl-type="stop" target="undefined">Maxout</a>等都是常用的激活函数,它们各自具有不同的优点和适用场景。</p>

<ul>
        <li>Sigmoid函数能够将输入映射到(0,1)的范围内,常用于将输出限制在特定范围内,如概率值。</li>
        <li>ReLU函数(Rectified Linear Unit)则是一种简单的非线性函数,能够有效地加速随机梯度下降的收敛速度。</li>
        <li>Maxout激活函数则是一种更加灵活的非线性函数,能够拟合任意的凸函数,具有强大的拟合能力。</li>
</ul>

<p>选择合适的激活函数对于构建有效的神经网络至关重要。不同的激活函数适用于不同的任务和数据集。因此,虽然理论上任何函数都可以作为激活函数,但在实际应用中,选择合适的激活函数是构建高效神经网络的关键&zwnj;</p>

freebsder 发表于 2024-8-20 11:28

<p>没想通为啥这样简单一下就可以构造后面的复杂网络并且输出还可以的结果。</p>

xinmeng_wit 发表于 2024-8-20 20:17

hellokitty_bean 发表于 2024-8-18 15:21
加入激活函数的目的,是使得该层神经元的输出映射到0~1,作用是增加了非线性的特性,使得神经网络可以任意 ...

<p>解释的很好啊,就是为了能够让神经网络表示更多的非线性特性</p>

xinmeng_wit 发表于 2024-8-20 20:17

hellokitty_bean 发表于 2024-8-18 15:25
AI的回答:

激活函数的选择直接影响到神经网络的能力和性能。虽然理论上任何函数都可以作为激活函数,但 ...

<p>解释的挺好</p>

xinmeng_wit 发表于 2024-8-20 20:21

freebsder 发表于 2024-8-20 11:28
没想通为啥这样简单一下就可以构造后面的复杂网络并且输出还可以的结果。

<p>复杂的网络都是由简单的神经元组成的,我理解类似于我们可以用0和1可以表示任意复杂的数据。</p>
页: [1]
查看完整版本: 《人工智能实践教程》4、激活函数