<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>激活函数 on Lumenth</title>
        <link>https://blog.lumenth.me/tags/%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0/</link>
        <description>Recent content in 激活函数 on Lumenth</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Lumenth</copyright>
        <lastBuildDate>Fri, 09 Oct 2026 17:47:21 +0800</lastBuildDate><atom:link href="https://blog.lumenth.me/tags/%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>深度学习基础笔记4-激活函数</title>
        <link>https://blog.lumenth.me/p/activation/</link>
        <pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.lumenth.me/p/activation/</guid>
        <description>&lt;img src="https://blog.lumenth.me/p/activation/wallpaper.png" alt="Featured image of post 深度学习基础笔记4-激活函数" /&gt;&lt;h1 id=&#34;激活函数&#34;&gt;激活函数
&lt;/h1&gt;&lt;p&gt;在&lt;a class=&#34;link&#34; href=&#34;../MLP/&#34; &gt;多层感知机笔记&lt;/a&gt;里，为了让网络摆脱&amp;quot;多层等价于单层&amp;quot;的困境，我们给每一层的加权求和结果套了一个非线性函数，这就是激活函数（Activation Function）。当时只是顺带介绍，这里把它单独展开整理。&lt;/p&gt;
&lt;p&gt;一句话定位：&lt;strong&gt;激活函数决定了神经元&amp;quot;要不要被激活、以多大强度往下传&amp;quot;&lt;/strong&gt;，它是网络里唯一的非线性来源。&lt;/p&gt;
&lt;h2 id=&#34;为什么必须有激活函数&#34;&gt;为什么必须有激活函数
&lt;/h2&gt;&lt;p&gt;如果去掉激活函数，每一层只剩线性变换：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;第一层：h = W₁x + b₁
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;第二层：y = W₂h + b₂ = W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;两个矩阵相乘仍然是一个矩阵，两层网络塌缩成了一层。堆十层、一百层结果都一样，&lt;strong&gt;再多参数也只是在拟合一个线性模型&lt;/strong&gt;，连异或这种简单的非线性问题都解不了。&lt;/p&gt;
&lt;p&gt;反过来，只要每层套一个非线性函数，多层叠加就能拼出任意复杂的决策边界，这正是&lt;a class=&#34;link&#34; href=&#34;../MLP/&#34; &gt;万能逼近定理&lt;/a&gt;所保证的。&lt;/p&gt;
&lt;p&gt;所以激活函数的第一要务是：&lt;strong&gt;提供非线性&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;为什么不采用非线性变换一步到位&#34;&gt;为什么不采用非线性变换一步到位
&lt;/h2&gt;&lt;p&gt;为什么神经网络要先做线性变换、再套非线性激活，而不是直接采用 y = x&lt;sup&gt;2&lt;/sup&gt; + b 这类非线性变换一步到位？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;y = Wx + B（矩阵乘加 MAC）天然极适合硬件加速，在GPU中加速运算极快&lt;/li&gt;
&lt;li&gt;激活函数的值一般在0附近，对于原始数据基本没有放大或缩小，y =  x&lt;sup&gt;2&lt;/sup&gt; + b 这样的非线性随着层数的加深，数据会指数级膨胀，从而使计算复杂度暴涨&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;好激活函数的几条标准&#34;&gt;好激活函数的几条标准
&lt;/h2&gt;&lt;p&gt;好的激活函数除了非线性，实际用起来还会看这几项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;可导（至少几乎处处可导）&lt;/strong&gt;：反向传播要靠它传梯度，导数为 0 或不存在的函数直接用不了；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;导数不能太小&lt;/strong&gt;：梯度要能一路传回浅层，否则会出现梯度消失；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算要快&lt;/strong&gt;：每个神经元、每个样本、每次迭代都要算一遍，越简单越好；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出最好是零中心&lt;/strong&gt;：输出全是正数时，后续权重的梯度会同号，更新方向被&amp;quot;锁死&amp;quot;成同向锯齿；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;梯度良好&lt;/strong&gt;：不要出现梯度消失或梯度爆炸，最好接近1；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单调 / 平滑 / 有界&lt;/strong&gt;（加分项，非必须）：梯度更稳定，训练更容易收敛&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这几条很难全部满足，下面每个函数都是在不同取舍之间做选择。&lt;/p&gt;
&lt;h2 id=&#34;常见激活函数&#34;&gt;常见激活函数
&lt;/h2&gt;&lt;p&gt;更多激活函数可以参见&lt;a class=&#34;link&#34; href=&#34;https://dublog.net/blog/all-the-activations/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这篇文章&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;阶跃函数step-function&#34;&gt;阶跃函数（Step Function）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        1 , z ≥ 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;f(z) = 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        0 , z &amp;lt; 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/STEP.png&#34;
	width=&#34;891&#34;
	height=&#34;672&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/STEP_hu_69f5ec1255406d1.png 480w, https://blog.lumenth.me/p/activation/STEP_hu_b31db4cbf6da225c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;132&#34;
		data-flex-basis=&#34;318px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;最朴素的激活函数，&lt;a class=&#34;link&#34; href=&#34;../Perceptron/&#34; &gt;感知机&lt;/a&gt;用的就是它：加权求和加偏置后判断正负，输出 0 或 1。&lt;/p&gt;
&lt;p&gt;问题在于它是&lt;strong&gt;分段常数&lt;/strong&gt;：在 0 处不可导，其余地方导数处处为 0。梯度根本传不下去，所以只能用于单层模型——这也是感知机无法扩展到多层、必须改换成后面这些函数的原因。&lt;/p&gt;
&lt;h3 id=&#34;sigmoidlogistic&#34;&gt;Sigmoid（Logistic）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;σ(z) = 1 / (1 + e⁻ᶻ)        σ&amp;#39;(z) = σ(z)·(1 − σ(z))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/SIGMOID.png&#34;
	width=&#34;864&#34;
	height=&#34;681&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/SIGMOID_hu_58b4aac80c43ec49.png 480w, https://blog.lumenth.me/p/activation/SIGMOID_hu_19eee3c02e7fbe3d.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;126&#34;
		data-flex-basis=&#34;304px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;把任意实数压到 (0,1)，可以当作概率来读，因此&lt;strong&gt;二分类任务的输出层&lt;/strong&gt;至今仍是它的主场。&lt;/p&gt;
&lt;p&gt;缺点也很典型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;两端饱和&lt;/strong&gt;：|z| 稍大，两端曲线就压平，导数趋近 0，深层网络里梯度连乘后迅速消失；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出不是零均值&lt;/strong&gt;：输出恒为正，后面一层的输入全是同号值，权重更新方向受限，收敛变慢；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算贵&lt;/strong&gt;：指数运算比简单乘法运算慢很多。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;梯度消失&lt;/strong&gt;：导数最大值只有 0.25（在 z = 0 处），也就是说每往回传一层，梯度最多只剩四分之一——这是它梯度消失特别快的直接原因。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;softmax&#34;&gt;Softmax
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Softmax(zᵢ) = eᶻⁱ / Σⱼ eᶻʲ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/SOFTMAX.png&#34;
	width=&#34;414&#34;
	height=&#34;120&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/SOFTMAX_hu_d53ab3d83f358d91.png 480w, https://blog.lumenth.me/p/activation/SOFTMAX_hu_e489a93d72a98b5b.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;345&#34;
		data-flex-basis=&#34;828px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;严格说它不是&amp;quot;单个神经元的激活函数&amp;quot;，而是作用在&lt;strong&gt;输出层一整组神经元&lt;/strong&gt;上的归一化操作：把 K 个实数映成 K 个落在 (0,1)、且&lt;strong&gt;总和为 1&lt;/strong&gt; 的值，正好可以当作&amp;quot;属于各类别的概率&amp;quot;。&lt;/p&gt;
&lt;p&gt;因此它专用于&lt;strong&gt;多分类的输出层&lt;/strong&gt;，并且几乎总是与交叉熵损失搭配使用（见&lt;a class=&#34;link&#34; href=&#34;../BackPropagation/&#34; &gt;反向传播笔记&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;需要注意：Softmax 的输出是相互牵制的，某一个变大，其余的必然变小，所以它只适合&amp;quot;类别互斥&amp;quot;的多分类，多标签分类要对每个类别各用一个 Sigmoid。&lt;/p&gt;
&lt;p&gt;注意：&lt;strong&gt;CrossEntropyLoss 内部自带 Softmax&lt;/strong&gt;，模型最后一层&lt;strong&gt;不要手动写 Softmax&lt;/strong&gt;，否则等于计算两次&lt;/p&gt;
&lt;h3 id=&#34;tanh双曲正切&#34;&gt;Tanh（双曲正切）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tanh(z) = (eᶻ − e⁻ᶻ) / (eᶻ + e⁻ᶻ)        tanh&amp;#39;(z) = 1 − tanh²(z)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/TANH.png&#34;
	width=&#34;869&#34;
	height=&#34;676&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/TANH_hu_24111ce86894563b.png 480w, https://blog.lumenth.me/p/activation/TANH_hu_a93e294200fca60b.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;128&#34;
		data-flex-basis=&#34;308px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以看成 Sigmoid 的&amp;quot;拉伸平移版&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;值域从 (0,1) 变成 (−1,1)，&lt;strong&gt;输出零中心&lt;/strong&gt;，所以在隐藏层上比 Sigmoid 好用一些，收敛更快；&lt;/li&gt;
&lt;li&gt;导数最大值为 1（在 z = 0 处），比 Sigmoid 的 0.25 大，梯度消失来得慢一些；&lt;/li&gt;
&lt;li&gt;但两端同样饱和，&lt;strong&gt;梯度消失的问题仍然存在&lt;/strong&gt;，深层网络依然扛不住；&lt;/li&gt;
&lt;li&gt;依赖指数运算，计算成本比 ReLU 高。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;relurectified-linear-unit&#34;&gt;ReLU（Rectified Linear Unit）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ReLU(z) = max(0, z)        导数：z &amp;gt; 0 时为 1，z &amp;lt; 0 时为 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/RELU.png&#34;
	width=&#34;867&#34;
	height=&#34;653&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/RELU_hu_a602b5cb83a9a8e4.png 480w, https://blog.lumenth.me/p/activation/RELU_hu_3e3d02339851e5c8.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;132&#34;
		data-flex-basis=&#34;318px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;目前&lt;strong&gt;隐藏层的默认选择&lt;/strong&gt;：正区间原样通过（导数恒为 1），负区间直接截断为 0。&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算就是一次比较，极快；&lt;/li&gt;
&lt;li&gt;正区间导数恒为 1，&lt;strong&gt;不饱和&lt;/strong&gt;，梯度可以无损地往回传，极大缓解了梯度消失；&lt;/li&gt;
&lt;li&gt;负区间输出 0，带来一定的稀疏性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;死亡 ReLU&lt;/strong&gt;：一旦某个神经元的输入长期落在负区间，它的梯度恒为 0，参数再也不会被更新，这个神经元就&amp;quot;永久失效&amp;quot;了；学习率设得过大时尤其容易发生；&lt;/li&gt;
&lt;li&gt;非0中心输出；&lt;/li&gt;
&lt;li&gt;输出无上界，深层神经网络会一直放大，离不开BatchNorm归一化。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;leaky-relu&#34;&gt;Leaky ReLU
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LeakyReLU(z) = max(αz, z)        导数：z &amp;gt; 0 时为 1，z &amp;lt; 0 时为 α
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/LeakReLU.png&#34;
	width=&#34;844&#34;
	height=&#34;660&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/LeakReLU_hu_34d463e5568c3a16.png 480w, https://blog.lumenth.me/p/activation/LeakReLU_hu_d3cb91a60233786a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;127&#34;
		data-flex-basis=&#34;306px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决了ReLU输入值为负时神经元出现的死亡的问题&lt;/li&gt;
&lt;li&gt;Leaky ReLU线性、非饱和的性质，在SGD中能够快速收敛&lt;/li&gt;
&lt;li&gt;计算复杂度低，不需要进行指数运算&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数中的超参数α，需要通过先验知识人工赋值（一般设为0.01），不一定能调到最优&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gelu&#34;&gt;GELU
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/GELU_math.png&#34;
	width=&#34;1013&#34;
	height=&#34;127&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/GELU_math_hu_98a0a9277fe5726a.png 480w, https://blog.lumenth.me/p/activation/GELU_math_hu_8d4e8cfb986383ad.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;797&#34;
		data-flex-basis=&#34;1914px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/GELU.png&#34;
	width=&#34;875&#34;
	height=&#34;675&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/GELU_hu_3f80f1b17f1f73f1.png 480w, https://blog.lumenth.me/p/activation/GELU_hu_f967d07661c01d1.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;129&#34;
		data-flex-basis=&#34;311px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;GELU 将 ReLU 在 0 处的硬性切断改成了更柔和的软门，现在GELU是transformer的标配，在 BERT、GPT、ViT 等 Transformer 中显著优于 ReLU/ELU。&lt;/p&gt;
&lt;h3 id=&#34;siluswish&#34;&gt;SiLU/Swish
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SiLU(z) = z * sigmoid(z)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/activation/SiLU.png&#34;
	width=&#34;827&#34;
	height=&#34;660&#34;
	srcset=&#34;https://blog.lumenth.me/p/activation/SiLU_hu_77135a2a7ba94efe.png 480w, https://blog.lumenth.me/p/activation/SiLU_hu_4f524dcdb5356c3a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;125&#34;
		data-flex-basis=&#34;300px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;SiLU相比于GELU计算代价更轻，与GELU类似但形式更简单&lt;/p&gt;
&lt;p&gt;在FFN中一般采用SiLU&lt;/p&gt;
&lt;h2 id=&#34;隐藏层和输出层怎么选&#34;&gt;隐藏层和输出层怎么选
&lt;/h2&gt;&lt;p&gt;这两处的诉求并不一样，选择标准要分开看：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;位置&lt;/th&gt;
          &lt;th&gt;选择&lt;/th&gt;
          &lt;th&gt;原因&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;隐藏层&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;ReLU&lt;/strong&gt;（及其变体）&lt;/td&gt;
          &lt;td&gt;计算快、不饱和，梯度好传&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;二分类输出层&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Sigmoid&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;输出可当概率读&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;多分类输出层&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Softmax&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;归一化成总和为 1 的概率分布&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;回归输出层&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;不用激活&lt;/strong&gt;（线性输出）&lt;/td&gt;
          &lt;td&gt;需要输出任意实数，不能限制值域&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一句话记忆：&lt;strong&gt;隐藏层默认 ReLU，输出层按任务类型挑，回归则直接线性输出&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;激活函数是网络里唯一的非线性来源，没有它多层就等价于单层线性模型；&lt;/li&gt;
&lt;li&gt;好的激活函数要非线性、可导、梯度好传、计算快，这几条往往互相冲突；&lt;/li&gt;
&lt;li&gt;阶跃函数不可导，只能用于单层感知机；Sigmoid / Tanh 会饱和，深层容易梯度消失；&lt;/li&gt;
&lt;li&gt;ReLU 简单、正区间不饱和，是隐藏层的默认选择，但要留意死亡 ReLU；&lt;/li&gt;
&lt;li&gt;Softmax 作用在一整层上，专用于多分类输出层；回归任务的输出层不加激活函数。&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
