当前位置: 首页 > article >正文

神经网络(系统性学习三):多层感知机(MLP)

相关文章:

神经网络中常用的激活函数

神经网络(系统性学习一):入门篇

神经网络(系统性学习二):单层神经网络(感知机)


多层感知机(MLP)

多层感知机(MLP)是一种经典的前馈神经网络(Feedforward Neural Network),通常用于解决分类、回归、监督学习任务。它由一个输入层、一个或多个隐藏层和一个输出层组成。

网络结构

  • 输入层:接收数据输入,特征维度等于数据的特征数。

  • 隐藏层:一个或多个隐藏层,每层包含若干个神经元,负责提取数据的特征。

  • 输出层:根据任务(分类或回归)输出最终的结果。

008ba30f281948f5a27376f5e98358bc.png

主要参数

  • 权重(Weights):连接各层神经元的参数,决定信号的强弱。

  • 偏置:为每个神经元添加额外的灵活性。

  • 超参数:学习率、隐藏层数、每个隐藏层的神经元数等

特别强调:每个神经元之间的权重和偏置绝大多数时候不相同!!!

核心步骤

以隐藏层只有一层为例。

(一)初始化权重和偏置

初始化权重和偏置矩阵。即对每个神经元之间的权重和偏置随机设定一个初始值。

1.1 避免对称性问题

如果所有权重都初始化为相同的值(比如都为0),反向传播计算的梯度对所有权重的更新将是完全相同的。这会导致所有神经元学习到相同的特征,从而失去模型的表达能力。

1.2 权重的初始化

权重的初始化影响网络的输入和输出值的分布。如果初始化值过大,可能导致激活函数的输出进入饱和区(如Sigmoid激活函数趋近于0或1),使得梯度变得极小,网络难以训练(梯度消失问题)。如果初始化值过小,网络学习速度会很慢。

权重可以初始化为均值为0的小随机值。

常见方法包括:

  • 均匀分布:随机生成值在 [−a,a] 区间内。

  • 正态分布:随机生成值符合 eq?N%280%2C%20%5Csigma%5E2%29

1.3 偏置的作用

偏置的初始化相对简单,通常设为零或一个小的随机值即可。它的作用是为神经元提供一个额外的自由度,允许模型学习非零输出。

(二)选择损失函数、激活函数

对于分类问题,常用交叉熵损失函数,对于回归问题,常用均方误差损失函数。以MSE损失函数为例,我们假定损失函数为L:

eq?L%20%3D%20%5Cfrac%7B1%7D%7B2%7D%20%5Csum_%7Bl%3D1%7D%5Em%20%28y_l%20-%20t_l%29%5E2

其中, eq?y_l 是预测值,eq?t_l 是真实标签。

激活函数的选择参考文章:常见的激活函数

(三)前向传播

1、从输入层到隐藏层

假设输入层的神经元为 eq?x_1%2C%20x_2%2C%20%5Cdots%2C%20x_n,隐藏层的神经元为 eq?h_1%2C%20h_2%2C%20%5Cdots%2C%20h_k​(隐藏层有 k 个神经元)。输入到第 j 个隐藏层神经元 hj 的计算公式如下:

eq?z_j%20%3D%20w_%7Bj1%7Dx_1%20+%20w_%7Bj2%7Dx_2%20+%20%5Cdots%20+%20w_%7Bjn%7Dx_n%20+%20b_j

其中:

  • eq?w_%7Bji%7D 是第 j 个隐藏层神经元与第 i 个输入神经元之间的权重。

  • xi​ 是输入层第 i 个神经元的输入值。

  • bj​ 是第 j 个隐藏层神经元的偏置。

经过激活函数 eq?%5Csigma%28z_j%29,得到隐藏层神经元的输出:

eq?h_j%20%3D%20%5Csigma%28z_j%29%20%3D%20%5Csigma%28w_%7Bj1%7Dx_1%20+%20w_%7Bj2%7Dx_2%20+%20%5Cdots%20+%20w_%7Bjn%7Dx_n%20+%20b_j%29

2、从隐藏层到输出层

隐藏层的输出 eq?h_1%2C%20h_2%2C%20%5Cdots%2C%20h_k​ 将作为输入传递到输出层的神经元。假设输出层有 m 个神经元,输出层的第 eq?l 个神经元的计算公式为:

eq?z%27_l%20%3D%20w%27_%7Bl1%7Dh_1%20+%20w%27_%7Bl2%7Dh_2%20+%20%5Cdots%20+%20w%27_%7Blk%7Dh_k%20+%20b%27_l

其中:

  • eq?w%27_%7Bli%7D 是第 eq?l 个输出层神经元与第 i 个隐藏层神经元之间的权重。

  • eq?h_i​ 是隐藏层第 i 个神经元的输出值。

  • eq?b%27_l​ 是第 eq?l 个输出层神经元的偏置。

同样,经过激活函数(通常是Softmax或Sigmoid)后,得到输出层的输出:

eq?y_l%20%3D%20%5Csigma%28z%27_l%29%20%3D%20%5Csigma%28w%27_%7Bl1%7Dh_1%20+%20w%27_%7Bl2%7Dh_2%20+%20%5Cdots%20+%20w%27_%7Blk%7Dh_k%20+%20b%27_l%29

反向传播与权重更新

(四)误差计算与反向传播

训练MLP时,使用反向传播算法来更新网络中的权重和偏置。反向传播算法基于链式法则计算损失函数对每个权重和偏置的梯度,然后使用梯度下降法(默认使用全批量梯度下降)来更新参数。

假设损失函数为 L,权重为 w,偏置为 b,则每个权重和偏置的更新规则为:

eq?w_%7Bji%7D%20%5Cleftarrow%20w_%7Bji%7D%20-%20%5Ceta%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20w_%7Bji%7D%7D

eq?b_j%20%5Cleftarrow%20b_j%20-%20%5Ceta%20%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20b_j%7D

其中 η 是学习率,eq?%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20w_%7Bji%7D%7D 和 eq?%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20b_j%7D​ 是损失函数关于权重和偏置的偏导数。

(五)迭代过程

重复步骤三和步骤四,不断迭代更新权重和偏置。

终止条件:达到最大迭代次数、损失收敛、目标性能达标等。

注:整个过程只以一个隐藏层为例,如果有多个隐藏层,从隐藏层到隐藏层之间的传递也是类似的。也是以上一层的输出作为该层的输入,并通过激活函数将该层输入转化为该层的输出;其次就是注意每个神经元之间的权重和偏置不一样。

MLP优缺点总结

ff8917d60afc41519efde2157e448941.png

        MLP 是一种通用的神经网络模型,广泛用于分类、回归、特征提取和强化学习等任务。尽管它的能力和表现已经被更复杂的模型(如卷积神经网络 CNN 和循环神经网络 RNN)在某些领域超越,但由于其简单性和强大的非线性拟合能力,MLP仍然是很多基础任务和小型数据集问题中的首选模型。同时,它常常作为其他复杂模型中的子模块,为解决复杂问题提供基础支持。

 

# 若对大噶有帮助的话,希望点个赞支持一下叭!

 


http://www.kler.cn/a/404504.html

相关文章:

  • 【c++丨STL】priority_queue(优先级队列)的使用与模拟实现
  • 小米C++ 面试题及参考答案上(120道面试题覆盖各种类型八股文)
  • 【PyTorch】Pytorch中torch.nn.Conv1d函数详解
  • Android 文件分段上传和下载方案
  • 接口上传视频和oss直传视频到阿里云组件
  • 基于单片机的条形码识别结算设计
  • 爬虫重定向问题解决
  • C语言用按位与判断一个数是否是2的幂次方
  • 【C语言】指针常量和常量指针
  • 从0开始机器学习--Day29--K-means算法以及PCA降维作业
  • 【Linux网络】自定义应用层协议 (序列化)
  • ATmaga8单片机Pt100温度计源程序+Proteus仿真设计
  • C/C++ 中的类型转换方式
  • 基于Qt/C++/Opencv实现的一个视频中二维码解析软件
  • Flutter在MaterialApp中的builder初始化多个包
  • Linux环境下的基础开发工具 -- 包管理器,vim,gcc/g++,make/makefile,git,gdb/cgdb
  • EcoVadis审核是什么?EcoVadis审核流程包括什么?
  • STM32H7开发笔记(2)——H7外设之多路定时器中断
  • 实验室管理解决方案:Spring Boot技术
  • 网络安全等级保护五个保护等级
  • 经验笔记:git checkout 与 git switch
  • 【智谱开放平台-注册_登录安全分析报告】
  • 单体架构和微服务架构到底哪个好?
  • 怎么编译OpenWrt镜像?-基于Widora开发板
  • Linux驱动编程 - kmalloc、vmalloc区别
  • 多线程中Callable和Runnable的对比