多层感知机 (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函数
一、回调函数 回调函数就是通过函数指针调用的函数 如果你把函数的指针作为参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数并不是一个单一的函数实现的,而是在某种情况下,编…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...