多层感知机(Multilayer Perceptron,MLP)是一种前馈人工神经网络。它的主要特点是由多层神经元(或节点)组成,包括至少一个隐藏层。MLP 是监督学习的模型,常用于分类和回归问题。
输入层(Input Layer):接收输入数据的特征。例如,如果我们有一个特征向量 x = [ x 1 , x 2 , … , x n ] \mathbf{x} = [x_1, x_2, \ldots, x_n] x=[x1,x2,…,xn],那么输入层就有 n n n 个节点。
隐藏层(Hidden Layer):包含一个或多个层的神经元,每个神经元执行某种计算。隐藏层的每个神经元都接收来自前一层的输出,加权求和后应用一个非线性激活函数,这使得网络能够学习复杂的模式。
输出层(Output Layer):生成最终预测结果。如果是分类问题,例如二分类,通常使用 sigmoid 激活函数;对于多分类问题,则使用 softmax 激活函数。
前向传播是 MLP 中的核心步骤,在这一过程中每一层的神经元接收输入并计算输出。对于隐藏层的某个神经元 j j j,其输入为来自前一层的输出向量 h ( l − 1 ) \mathbf{h}^{(l-1)} h(l−1),其输出为:
z j ( l ) = ∑ i w j i ( l ) h i ( l − 1 ) + b j ( l ) z_j^{(l)} = \sum_{i} w_{ji}^{(l)} h_i^{(l-1)} + b_j^{(l)} zj(l)=i∑wji(l)hi(l−1)+bj(l)
其中:
隐藏神经元的输出通过激活函数计算,如 sigmoid,ReLU 等:
h j ( l ) = ϕ ( z j ( l ) ) h_j^{(l)} = \phi(z_j^{(l)}) hj(l)=ϕ(zj(l))
其中 ϕ \phi ϕ 是激活函数,例如:
MLP 使用反向传播算法来优化模型参数(权重和偏置)。反向传播通过计算损失函数的梯度来更新参数,使得模型在给定数据上的预测误差最小化。
常用的损失函数有:
权重的更新使用梯度下降算法:
w j i ( l ) : = w j i ( l ) − η ∂ L ∂ w j i ( l ) w_{ji}^{(l)} := w_{ji}^{(l)} - \eta \frac{\partial \mathcal{L}}{\partial w_{ji}^{(l)}} wji(l):=wji(l)−η∂wji(l)∂L
其中 η \eta η 是学习率, L \mathcal{L} L 是损失函数。
通过以上过程,MLP 学习到如何从输入数据预测输出,适用于各种复杂的学习问题。MLP 常被用作深度学习的基础模型,提供了理解神经网络的一个重要方式。
多层感知机(MLP)是一种前馈神经网络,是最简单的人工神经网络,已经被广泛用于分类和回归问题。多层感知机由多个层组成,主要包括输入层、一个或多个隐藏层和输出层。
输入层(Input Layer): 接受外部输入的特征向量,设输入特征向量为 x = [ x 1 , x 2 , … , x n ] \mathbf{x} = [x_1, x_2, \ldots, x_n] x=[x1,x2,…,xn]。
权重(Weights)和偏置(Biases): 每条连接都有一个权重 w i j w_{ij} wij,每个神经元还有一个偏置 b i b_i bi。
激活函数(Activation Function): 每个隐藏层和输出层的神经元(即感知器)在计算加权和之后,都会通过一个非线性激活函数 g ( ⋅ ) g(\cdot) g(⋅)。
隐藏层(Hidden Layer): 对输入数据进行特征变换,通过加权和计算和激活函数应用获得输出。
输出层(Output Layer): 最后一层输出用于生成最终预测结果。
多层感知机的基本计算过程如下:
给定输入 x \mathbf{x} x:
隐藏层计算:对于每一个隐藏层神经元 j j j,计算其输入作为上一层输出的一个加权和:
z j ( l ) = ∑ i w i j ( l − 1 ) a i ( l − 1 ) + b j ( l ) z^{(l)}_j = \sum_{i} w_{ij}^{(l-1)} a^{(l-1)}_i + b^{(l)}_j zj(l)=i∑wij(l−1)ai(l−1)+bj(l)
其中 l l l 表示层数, a i ( l − 1 ) a^{(l-1)}_i ai(l−1) 为第 l − 1 l-1 l−1 层的第 i i i 个神经元的输出。
激活:应用激活函数获得输出:
a j ( l ) = g ( z j ( l ) ) a^{(l)}_j = g(z^{(l)}_j) aj(l)=g(zj(l))
常用的激活函数包括Sigmoid、ReLU、Tanh等。
输出层计算:对于输出层的每个神经元,重复上述计算过程:
z k ( L ) = ∑ j w j k ( L − 1 ) a j ( L − 1 ) + b k ( L ) z^{(L)}_k = \sum_{j} w_{jk}^{(L-1)} a^{(L-1)}_j + b^{(L)}_k zk(L)=j∑wjk(L−1)aj(L−1)+bk(L)
输出层的激活函数常选择线性变换(用于回归)或者softmax(用于分类)。
常用的损失函数包括均方误差(MSE)和交叉熵损失。例如,对于分类问题,用交叉熵损失:
L = − ∑ k y k log ( y ^ k ) \mathcal{L} = -\sum_{k} y_k \log(\hat{y}_k) L=−k∑yklog(y^k)
其中 y k y_k yk 是真实标签, y ^ k \hat{y}_k y^k 是预测概率。
通过链式法则计算损失对各层参数的梯度,并更新权重和偏置:
输出误差: 计算输出层的误差 δ ( L ) \delta^{(L)} δ(L)。
反向传播误差: 逐层向后传播误差:
δ ( l ) = ( w ( l ) ) ⊤ δ ( l + 1 ) ⋅ g ′ ( z ( l ) ) \delta^{(l)} = \left(w^{(l)}\right)^\top \delta^{(l+1)} \cdot g'(z^{(l)}) δ(l)=(w(l))⊤δ(l+1)⋅g′(z(l))
更新权重和偏置:
w i j ( l ) = w i j ( l ) − η ∂ L ∂ w i j ( l ) w_{ij}^{(l)} = w_{ij}^{(l)} - \eta \frac{\partial \mathcal{L}}{\partial w_{ij}^{(l)}} wij(l)=wij(l)−η∂wij(l)∂L
b j ( l ) = b j ( l ) − η ∂ L ∂ b j ( l ) b_j^{(l)} = b_j^{(l)} - \eta \frac{\partial \mathcal{L}}{\partial b_j^{(l)}} bj(l)=bj(l)−η∂bj(l)∂L
其中 η \eta η 是学习率。
通过将输入逐层转换,加权求和并非线性化,可以让多层感知机学习到数据的复杂模式。反向传播算法是优化参数的核心,通过梯度下降调整权重以降低损失函数值。
多层感知机(Multilayer Perceptron,简称MLP)是神经网络中的一种基本结构。它一般由一层输入层、一个或多个隐藏层、以及一层输出层构成。MLP是用于分类和回归任务的常用算法,也是许多复杂神经网络架构的基础。以下是从常用面试考点层面对MLP的解释。
在前向传播阶段,每一层的输出是上一层的输出经过线性变换和非线性激活函数得到的。对于某一隐藏层 l l l,其输出可以表示为:
z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)} z(l)=W(l)a(l−1)+b(l)
这里, W ( l ) W^{(l)} W(l)是权重矩阵, b ( l ) b^{(l)} b(l)是偏置向量, a ( l − 1 ) a^{(l-1)} a(l−1)是上一层的激活输出。
激活函数通常选用非线性函数,比如ReLU(Rectified Linear Unit):
a ( l ) = ReLU ( z ( l ) ) = max ( 0 , z ( l ) ) a^{(l)} = \text{ReLU}(z^{(l)}) = \max(0, z^{(l)}) a(l)=ReLU(z(l))=max(0,z(l))
对于输出层,激活函数应根据具体任务选择,例如分类任务中的softmax函数:
a i ( L ) = e z i ( L ) ∑ j e z j ( L ) a^{(L)}_i = \frac{e^{z^{(L)}_i}}{\sum_{j} e^{z^{(L)}_j}} ai(L)=∑jezj(L)ezi(L)
MLP的目标是最小化损失函数。对于分类问题,常见的损失函数是交叉熵损失:
L = − ∑ i y i log ( y ^ i ) \mathcal{L} = -\sum_{i} y_i \log(\hat{y}_i) L=−i∑yilog(y^i)
这里, y i y_i yi是真实标签, y ^ i \hat{y}_i y^i是预测概率。
反向传播用于计算损失函数相对于每个权重的梯度,以应用于梯度下降算法。对于每一层 l l l,我们有两步:
计算输出误差:
对于输出层:
δ ( L ) = a ( L ) − y \delta^{(L)} = a^{(L)} - y δ(L)=a(L)−y
对于隐藏层:
δ ( l ) = ( W ( l + 1 ) ) T δ ( l + 1 ) ⋅ f ′ ( z ( l ) ) \delta^{(l)} = (W^{(l+1)})^T \delta^{(l+1)} \cdot f'(z^{(l)}) δ(l)=(W(l+1))Tδ(l+1)⋅f′(z(l))
这里, f ′ ( z ( l ) ) f'(z^{(l)}) f′(z(l))是激活函数的导数。
更新权重和偏置:
使用梯度下降法更新权重和偏置:
W ( l ) = W ( l ) − η ⋅ Δ W ( l ) W^{(l)} = W^{(l)} - \eta \cdot \Delta W^{(l)} W(l)=W(l)−η⋅ΔW(l)
b ( l ) = b ( l ) − η ⋅ Δ b ( l ) b^{(l)} = b^{(l)} - \eta \cdot \Delta b^{(l)} b(l)=b(l)−η⋅Δb(l)
其中, Δ W ( l ) = δ ( l ) ( a ( l − 1 ) ) T \Delta W^{(l)} = \delta^{(l)} (a^{(l-1)})^T ΔW(l)=δ(l)(a(l−1))T, Δ b ( l ) = δ ( l ) \Delta b^{(l)} = \delta^{(l)} Δb(l)=δ(l), η \eta η是学习率。