<?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/%E5%A4%9A%E5%B1%82%E6%84%9F%E7%9F%A5%E6%9C%BA/</link>
        <description>Recent content in 多层感知机 on Lumenth</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Lumenth</copyright>
        <lastBuildDate>Fri, 25 Sep 2026 16:21:31 +0800</lastBuildDate><atom:link href="https://blog.lumenth.me/tags/%E5%A4%9A%E5%B1%82%E6%84%9F%E7%9F%A5%E6%9C%BA/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>深度学习笔记2-多层感知机</title>
        <link>https://blog.lumenth.me/p/mlp/</link>
        <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.lumenth.me/p/mlp/</guid>
        <description>&lt;img src="https://blog.lumenth.me/p/mlp/MLP.png" alt="Featured image of post 深度学习笔记2-多层感知机" /&gt;&lt;h1 id=&#34;多层感知机&#34;&gt;多层感知机
&lt;/h1&gt;&lt;p&gt;我在&lt;a class=&#34;link&#34; href=&#34;../Perceptron/&#34; &gt;感知机笔记&lt;/a&gt;中，记录了单层感知机，它是二分类的线性分类模型，在数据线性可分时，由 Novikoff 定理能够保证在有限步中能做到完全收敛。但无法解决 XOR 等线性不可分问题，这些问题需要多层感知机。&lt;/p&gt;
&lt;h2 id=&#34;引入隐藏层&#34;&gt;引入隐藏层
&lt;/h2&gt;&lt;p&gt;异或电路如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/XOR.png&#34;
	width=&#34;944&#34;
	height=&#34;491&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/XOR_hu_66a8ecd74e76e2a7.png 480w, https://blog.lumenth.me/p/mlp/XOR_hu_52e9acaaebc0a309.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;异或电路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;192&#34;
		data-flex-basis=&#34;461px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以看到异或是由两次任务来完成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在第一部分输入后，输入信号输入到第二部分进行与非和或运算。&lt;/li&gt;
&lt;li&gt;完成两个运算后，同时输入到第三部分完成与的运算从而做到异或。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;把它转换成感知机表示如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/MLPXOR.png&#34;
	width=&#34;1268&#34;
	height=&#34;746&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/MLPXOR_hu_b0277f29e28476bd.png 480w, https://blog.lumenth.me/p/mlp/MLPXOR_hu_bfe22332c86173fd.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;感知机异或&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;169&#34;
		data-flex-basis=&#34;407px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以分析出任务的完成方式:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在输入层接收两个输入x&lt;sub&gt;1&lt;/sub&gt;，x&lt;sub&gt;2&lt;/sub&gt;。&lt;/li&gt;
&lt;li&gt;在隐藏层可以做两个并行的感知机，一个做OR运算，一个做NAND运算。&lt;/li&gt;
&lt;li&gt;在输出层将两个隐藏层的运算输出的结果做AND运算，从而实现异或逻辑。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过引入隐藏层，大量感知机的组合可以完成各种各样的复杂任务&lt;/p&gt;
&lt;h2 id=&#34;多层感知机-1&#34;&gt;多层感知机
&lt;/h2&gt;&lt;p&gt;MLP是层级化、全连接的神经网络结构，层与层之间无跳过、无循环，相邻层神经元之间全连接（相邻层的任意两个神经元都有连接），整体分为3类核心层（输入层-&amp;gt;隐藏层-&amp;gt;输出层），结构如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/BASICMLP.png&#34;
	width=&#34;463&#34;
	height=&#34;205&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/BASICMLP_hu_12d7c990d6c4951d.png 480w, https://blog.lumenth.me/p/mlp/BASICMLP_hu_855ae50e5a6cbf7.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;多层感知机的一般结构&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;225&#34;
		data-flex-basis=&#34;542px&#34;
	
&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入层：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;仅负责接收原始数据/特征，不做任何计算，神经元数量 = 数据的特征维度（如输入是 28×28 的图片，展平后神经元数为784）。&lt;/li&gt;
&lt;li&gt;无激活函数，仅传递数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;隐藏层&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;MLP 的核心层，可设置1层或多层（多层时称为深度多层感知机），层数/神经元数是关键超参数。&lt;/li&gt;
&lt;li&gt;同一层神经元并行提取不同的特征或规则。&lt;/li&gt;
&lt;li&gt;后续层的输入为前一层的输出，逐层进行抽象构造出更有效的特征。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;输出层（最终预测结果，神经元数量由任务类型决定）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;二分类任务：1个神经元（输出0/1）&lt;/li&gt;
&lt;li&gt;多分类任务：神经元数 = 类别数（如MNIST手写数字分类，设10个神经元）；&lt;/li&gt;
&lt;li&gt;回归任务：1个神经元（输出连续值）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;多层线性变换&#34;&gt;多层线性变换
&lt;/h2&gt;&lt;p&gt;多层感知机如果在每一层只做线性变换，那么无论多少层隐藏层，MLP 最终等价于单层线性模型。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一层输出h = W&lt;sub&gt;1&lt;/sub&gt;x + b&lt;sub&gt;1&lt;/sub&gt;。&lt;/li&gt;
&lt;li&gt;第二层输出y = W&lt;sub&gt;2&lt;/sub&gt;h + b&lt;sub&gt;2&lt;/sub&gt;。代入第一层输出得到y = W&lt;sub&gt;2&lt;/sub&gt;(W&lt;sub&gt;1&lt;/sub&gt;x + b&lt;sub&gt;1&lt;/sub&gt;) + b&lt;sub&gt;2&lt;/sub&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;在每一层神经元加权求和的输出后，套一个非线性函数再输出，该非线性函数称为激活函数（Activation Function）。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../Perceptron/&#34; &gt;单层感知机&lt;/a&gt;中，激活函数为&lt;strong&gt;阶跃函数&lt;/strong&gt;(Step Function)如下图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/STEP.png&#34;
	width=&#34;474&#34;
	height=&#34;306&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/STEP_hu_e571fbeca0cc2201.png 480w, https://blog.lumenth.me/p/mlp/STEP_hu_9706fefe7fd06e24.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;154&#34;
		data-flex-basis=&#34;371px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;一些常用的激活函数&#34;&gt;一些常用的激活函数
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ReLU（Rectified Linear Unit） ✅ 最常用 ：优点：计算快、缓解梯度消失，适合隐藏层；缺点：存在“死亡ReLU”问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/RELU.png&#34;
	width=&#34;585&#34;
	height=&#34;322&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/RELU_hu_a563401ea52b802c.png 480w, https://blog.lumenth.me/p/mlp/RELU_hu_6cc69ccf0417586a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;181&#34;
		data-flex-basis=&#34;436px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sigmoid：优点：输出映射到(0,1)，适合二分类输出层；缺点：梯度消失、输出非零均值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/SIGMOID.png&#34;
	width=&#34;607&#34;
	height=&#34;312&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/SIGMOID_hu_40b792ba9341ee17.png 480w, https://blog.lumenth.me/p/mlp/SIGMOID_hu_8a0eb3343be0ea7f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;194&#34;
		data-flex-basis=&#34;466px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tanh：优点：输出映射到(-1,1)，零均值；缺点：仍存在梯度消失。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/TANH.png&#34;
	width=&#34;636&#34;
	height=&#34;322&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/TANH_hu_3b4a0b9a5dcbb64a.png 480w, https://blog.lumenth.me/p/mlp/TANH_hu_3383d8862e7dca89.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;197&#34;
		data-flex-basis=&#34;474px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Softmax ✅ 多分类输出层专用，将多个神经元的输出归一化到(0,1)，且总和为1，代表样本属于各类别的概率。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/mlp/SOFTMAX.png&#34;
	width=&#34;161&#34;
	height=&#34;76&#34;
	srcset=&#34;https://blog.lumenth.me/p/mlp/SOFTMAX_hu_8b0057dc6437b877.png 480w, https://blog.lumenth.me/p/mlp/SOFTMAX_hu_da93cc849c0257d7.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;211&#34;
		data-flex-basis=&#34;508px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;万能逼近定理&#34;&gt;万能逼近定理
&lt;/h3&gt;&lt;p&gt;万能逼近定理（Universal Approximation Theorem, UAT）：一个含有足够多神经元的单隐藏层MLP，可以以任意精度逼近任意连续函数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;意味着MLP在理论上具备表达任意连续函数的能力&lt;/li&gt;
&lt;li&gt;但实际中，定理只保证存在这样一组参数，不保证梯度下降能学到；且所需神经元数可能随精度指数级增长。&lt;/li&gt;
&lt;/ul&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;h&lt;sub&gt;i&lt;/sub&gt;(u)= σ&lt;sub&gt;i&lt;/sub&gt;(W&lt;sub&gt;i&lt;/sub&gt;u + b&lt;sub&gt;i&lt;/sub&gt;)&lt;/strong&gt; （u 为上一层的输出，i 为层号）&lt;/li&gt;
&lt;li&gt;输出函数：&lt;strong&gt;output = h&lt;sub&gt;n&lt;/sub&gt;(h&lt;sub&gt;n-1&lt;/sub&gt;(&amp;hellip;h&lt;sub&gt;2&lt;/sub&gt;(h&lt;sub&gt;1&lt;/sub&gt;(X))))&lt;/strong&gt;，其中 h&lt;sub&gt;1&lt;/sub&gt;(X) 即输入层到第一层的结果，逐层向后传递。&lt;/li&gt;
&lt;/ul&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;下一次会写反向传播算法的笔记，反向传播算法的作用是得到各个神经元参数需要修改的梯度&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
