多层感知机 (Multilayer Perceptron, MLP)
多层感知机 (Multilayer Perceptron, MLP)
通俗易懂算法
多层感知机(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 激活函数。
前向传播(Forward Propagation)
前向传播是 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)
其中:
- w j i ( l ) w_{ji}^{(l)} wji(l) 是第 l l l 层中连接第 i i i 个神经元到本层第 j j j 个神经元的权重。
- b j ( l ) b_j^{(l)} bj(l) 是本层第 j j j 个节点的偏置。
- h i ( l − 1 ) h_i^{(l-1)} hi(l−1) 是前一层第 i i i 个节点的输出。
隐藏神经元的输出通过激活函数计算,如 sigmoid,ReLU 等:
h j ( l ) = ϕ ( z j ( l ) ) h_j^{(l)} = \phi(z_j^{(l)}) hj(l)=ϕ(zj(l))
其中 ϕ \phi ϕ 是激活函数,例如:
- Sigmoid: ϕ ( z ) = 1 1 + e − z \phi(z) = \frac{1}{1 + e^{-z}} ϕ(z)=1+e−z1
- ReLU: ϕ ( z ) = max ( 0 , z ) \phi(z) = \max(0, z) ϕ(z)=max(0,z)
反向传播(Backpropagation)
MLP 使用反向传播算法来优化模型参数(权重和偏置)。反向传播通过计算损失函数的梯度来更新参数,使得模型在给定数据上的预测误差最小化。
常用的损失函数有:
- 对于回归问题:均方误差(Mean Squared Error, MSE)。
- 对于分类问题:交叉熵(Cross-Entropy Loss)。
权重的更新使用梯度下降算法:
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): 最后一层输出用于生成最终预测结果。
数学原理
多层感知机的基本计算过程如下:
前向传播(Forward Propagation)
给定输入 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(用于分类)。
损失函数(Loss Function)
常用的损失函数包括均方误差(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 是预测概率。
反向传播(Backpropagation)
通过链式法则计算损失对各层参数的梯度,并更新权重和偏置:
-
输出误差: 计算输出层的误差 δ ( 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的解释。
1. 结构
- 输入层:接收输入数据,每个神经元代表一个特征。
- 隐藏层:对输入数据进行非线性变换,通常使用激活函数。隐藏层可以有多个。
- 输出层:生成最终预测结果,输出层的形状和激活函数取决于具体任务(如回归或分类)。
2. 前向传播(Forward Propagation)
在前向传播阶段,每一层的输出是上一层的输出经过线性变换和非线性激活函数得到的。对于某一隐藏层 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)
3. 损失函数
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是预测概率。
4. 反向传播(Backpropagation)
反向传播用于计算损失函数相对于每个权重的梯度,以应用于梯度下降算法。对于每一层 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 η是学习率。
5. 常用技巧
- 激活函数的选择:通常选择ReLU以及其变种(如Leaky ReLU)作为隐藏层的激活函数。
- 初始化:建议使用Xavier初始化或He初始化。
- 正则化:使用L2正则化或dropout来防止过拟合。
- 批量归一化:可以加速训练和提高模型稳定性。
相关文章:

多层感知机 (Multilayer Perceptron, MLP)
多层感知机 (Multilayer Perceptron, MLP) 通俗易懂算法 多层感知机(Multilayer Perceptron,MLP)是一种前馈人工神经网络。它的主要特点是由多层神经元(或节点)组成,包括至少一个隐藏层。MLP 是监督学习的…...

reg和wire的区别 HDL语言
文章目录 数据类型根本区别什么时候要定义wire小结 数据类型 HDL语言有三种数据类型:寄存器数据类型(reg)、线网数据类型(wire)、参数数据类型(parameter)。 根本区别 reg: 寄存器…...

前置声明和头文件之间的关系 问题
出现这些问题的原因是 ORB_SLAM3::MultiGraph 被前置声明了,但在使用的时候,编译器并没有看到 MultiGraph 类的完整定义。前置声明只能用于指针和引用,但如果要访问其成员函数或变量,必须包含完整的类定义。 解决方案步骤&#x…...

Linux02
1.相对路径和绝对路径 cd用于切换目录,对于路径可以用相对路径和绝对路径 例如:cd /home/user/public和cd public效果一样,都是将目录切换到HOME文件夹下的public文件夹 2.特殊路径符 .表示当前目录 ..表示上级目录 ~表示HOME目录 3.m…...

df 命令:显示磁盘空间使用情况
一、df 命令简介 df命令用于显示文件系统的磁盘空间利用情况,包括文件系统的总空间、已用空间、可用空间以及挂载点信息。通过df命令,用户可以快速了解系统中各个文件系统的空间使用情况。 二、df 命令参数 df [选项] [目录/驱动器]选项&am…...

深入解析Go语言的容器包
在Go语言中,container标准包为开发者提供了三个非常有用的数据结构:堆(heap)、链表(list)和环(ring)。这些数据结构的实现分别位于container/heap、container/list和container/ring中…...

STM32 + W5500 实现HTTPS !
两点: 1. 让我们先站在操作系统之上的网络协议栈再之上来思考…… 2. 我们先简单粗暴地理解为:http + (加密)= https 先弄一个简单的HTTP网络客户端,连接服务器并读取默认页面。该应用程序可能如下所示: #include <sys/types.h> #include <sys/socket.h> …...

使用DuckDuckGo搜索API进行高效信息检索:Python实践指南
使用DuckDuckGo搜索API进行高效信息检索:Python实践指南 引言 在当今信息爆炸的时代,快速准确地获取所需信息变得越来越重要。DuckDuckGo作为一个注重隐私的搜索引擎,提供了强大的搜索API,让开发者能够轻松地将搜索功能集成到自…...

UE4_后期处理_后期处理材质四—场景物体描边
一、效果如下图: 二、分析: 回顾复习:在后期处理材质三中,我们通过计算开启自定义深度通道物体的像素点上下左右4个像素SceneTextureCustomDepth深度之和来判断物体的外部(包含物体的边)和内部,…...

华为OD机试 - 推荐多样性(Python/JS/C/C++ 2024 E卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

梧桐数据库(WuTongDB):CBO(Cost-Based Optimizer)基于代价的优化器技术简介
CBO(基于代价的优化器,Cost-Based Optimizer)是现代数据库系统中最广泛使用的查询优化器之一。它通过计算执行查询时可能消耗的资源(如CPU、内存、I/O)来选择最优的执行计划,以提高查询性能。 1. CBO 的工…...

深入探索Go语言中的函数:匿名函数、指针参数与函数返回
1. Go语言中的函数 函数是任何编程语言中的核心元素,它们帮助我们将大型程序分解为更小的、易于管理的部分。在Go语言中,函数是通过 func 关键字定义的。理想的函数应当是独立的,完成单一任务。如果你发现某个函数正在执行多个任务ÿ…...

Android12_13左上角状态栏数字时间显示右移动
文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1)早期一般屏幕都是方形的,但是曲面屏,比如:好多车机Android产品、魔镜…...

望繁信科技携流程智能解决方案亮相CNDS 2024新能源产业数智峰会
9月13日,CNDS 2024中国新能源产业数智峰会在北京圆满落幕。本次峰会以“走向数字新能源”为主题,汇聚了来自新能源领域的顶尖领袖、专家学者及知名企业代表,共同探讨数字化技术在新能源行业中的创新应用和发展趋势。上海望繁信科技有限公司&a…...

nginx负载均衡(轮询与权重)
文章目录 1. nginx的介绍2. nginx使用场景3. nginx在windows的下载与安装4. nginx的简单使用5. nginx进行轮询测试6. nginx进行权重测试7. 总结 1. nginx的介绍 Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也是一个开源的、…...

【计算机网络】网络通信中的端口号
文章目录 一、引入端口号二、端口号的作用三、端口号的确定 在TCP/IP协议中,传输层有两个重要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP用于提供可靠的数据传输,而UDP则适合用于广播…...

Python 解析 JSON 数据
1、有如下 JSON 数据,存放在 data.json 文件: [{"id":1, "name": "小王", "gender": "male", "score": 96.8}, {"id":2, "name": "小婷", "gender&qu…...

利用LlamaIndex构建ARG本地知识库
文章目录 1. 环境准备2. 启用诊断日志3. 配置本地模型4. 配置本地向量模型5. LlamaIndex全局配置6. 创建 PGVectorStore7. 从数据库加载数据8. 文本分割器: SpacyTextSplitter9. 配置管道10. 创建向量存储索引11 .指定响应模式,以及启用流式响应 在现代的人工智能应…...

PCM的缺点
PCM的主要缺点包括需要较大的数据传输带宽和存储空间,导致无法实现高压缩比,相对较低的数据压缩效率。 PCM(脉冲编码调制)作为一种无损编码技术,虽然能够保留原始信号的完整性,适用于需要高保…...

【C语言】(指针系列四)回调函数+qsort函数
一、回调函数 回调函数就是通过函数指针调用的函数 如果你把函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数并不是一个单一的函数实现的,而是在某种情况下,编…...

全面理解tensor编程中矩阵的行和列
经常会在编程中遇到理解矩阵行和列的事情。 1、要明确无论这个张量有多少维度,它的矩阵乘法都只能作用于最后两个维度。 例如: import torcha torch.rand([64, 32, 3, 4]) b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…...

【Kubernetes】常见面试题汇总(十)
目录 29.简述 Kubernetes 自动扩容机制? 30.简述 Kubernetes Service 类型? 31.简述 Kubernetes Service 分发后端的策略? 32.简述 Kubernetes Headless Service ? 29.简述 Kubernetes 自动扩容机制? (…...

CSS —— 界面布局
flexbox - 弹性盒子布局(弹性布局) 一维方向,横纵向排列。 采用flex布局的元素,称为 Flex 容器(flex container),简称"容器" flex-direction 用于设置主轴方向;子元素默…...

SpringBoot万级并发-jemeter-Address already in use: connect
一、场景 用Jmeter压力单测接口的时候,发现报 Response code:Non HTTP response code: java.net.BindException Response message:Non HTTP response message: Address already in use: connect 然后我这边是wondows的电脑操作压测的,操作系统win10&…...

P1228 地毯填补问题
 #include<bits/stdc.h> using namespace std; #define qw dfs(zxl-1,zyl-1,zx,zy,l); #define we dfs(zxl-1,zyl,zx,zyl,l); #define er dfs(zxl,zyl-1,zxl,zy,l); #define rt dfs(zxl,zyl,zxl,zyl,l);void dfs(int x,int y,int zx,int zy,int…...

【计算机网络】UDP TCP介绍
UDP & TCP介绍 UDP报文格式报文内容介绍端口号报文长度校验和载荷 TCP报文格式初步了解TCP机制确认应答超时重传连接管理滑动窗口流量控制拥塞控制紧急传输数据推送延时应答捎带应答面向字节流异常处理心跳机制 UDP 和 TCP 的区别 UDP 报文格式 对于网络协议, 本质上就是…...

JDBC初相识
文章目录 JDBC的由来JDBC的好处 JDBC核心API的介绍JDBC会用到的包JDBC四个核心对象JDBC访问数据库的步骤 客户端操作MySQL数据库的方式 使用第三方客户端来访问MySQL:SQLyog、Navicat 使用MySQL自带的命令行方式 通过Java来访问MySQL数据库,今天要学习…...

Go语言现代web开发07 map字典
Maps are complex data types used to store key-value pairs. Each key can appear only once on the map and can be used to find the value paired with that key. The default value for the map is nil. A nil map has no keys and keys cannot be added. 映射是用于存储…...

AI工具一键制作爆火的“汉语新解“卡片!
最近出现了一种很火的新玩法“汉语新解”。 AI把一个词汇,以一种特殊的视角,用幽默、讽刺等方式重新定义,然后生成一张精美的卡片。 这个玩法和之前我发的的吐槽工具玩法类似,主打的就是一个新颖、情绪释放。 今天教大家怎么快速…...

windows检查端口占用并关闭应用
要在Windows CMD中找到占用8888端口的应用并关闭该应用,你可以按照以下步骤操作: 打开命令提示符(CMD)。你可以通过在搜索栏输入 cmd 或使用 Win R 快捷键,然后输入 cmd 并回车来打开。 查找占用8888端口的进程。在C…...