深度学习——多层感知机MLP(一、多层感知机介绍)

目录标题

  • 一、多层感知机
    • 1.1 隐藏层
      • 1.1.1 为什么需要隐藏层
      • 1.1.2 在网络中加入隐藏层
      • 1.1.3 从线性到非线性
    • 1.2 激活函数
      • 1.2.1 ReLU函数
      • 1.2.2 sigmoid函数
      • 1.2.3 tanh函数

  最简单的深度神经网络成为多层感知机。多层感知机由多层神经元组成,每一层与它的上一层相连,从中接收输入;同时每一层也与它的下一层相连,影响当前层的神经元。

一、多层感知机

1.1 隐藏层

1.1.1 为什么需要隐藏层

  简单的线性预处理不能解决比较复杂的问题。数据的特征之间有相关交互作用。对于深度神经网络,我们使用观测数据来联合学习隐藏层表示和应用于该表示的线性预测器。

1.1.2 在网络中加入隐藏层

  我们可以通过在网络中加入一个或多个隐藏层来突破线性模型的限制,使其能处理更普遍的函数关系类型。最简单的方法是将许多全连接层堆叠在一起。每一层都输出到其上面的层,直到生成最后的输出。我们可以把前 L − 1 L-1 L1层看作表示,把最后一层看作线性预测器。这种架构通常称为多层感知机(multilayer perception , MLP)
在这里插入图片描述   上述图中的多层感知机有4个输入、3个输出,其隐藏层包含5个隐藏单元(即神经元)。输入层不涉及任何运算,因此,使用此网络生成输出只需要实现隐藏层和输出层的计算。
  这个多层感知机中的层数为2,而且这两个层都是全连接的。每个输入都会影响隐藏层中的每个神经元,而隐藏层中的每个神经元又会影响输出层中的每个神经元。

1.1.3 从线性到非线性

  通过矩阵 X ∈ R n × d \bm X \in \mathbb R^{n \times d} XRn×d来表示有 n n n个样本的小批量,其中每个样本具有 d d d个输入特征。对于具有 h h h个隐藏单元的单隐藏层多层感知机,用 H ∈ R n × h H \in \mathbb R^{n \times h} HRn×h表示隐藏层的输出,称为隐藏表示。 H H H也称为隐藏层变量。因为隐藏层和输出层都是全连接的,所以有隐藏层权重 W ( 1 ) ∈ R d × h \bm W^{(1)} \in \mathbb R^{d \times h} W(1)Rd×h和隐藏层偏置 b ( 1 ) ∈ R 1 × h \bm b^{(1)} \in \mathbb R^{1 \times h} b(1)R1×h以及输出层权重 W ( 2 ) ∈ R h × q \bm W^{(2)} \in \mathbb R^{h \times q} W(2)Rh×q和输出层偏置 b ( 2 ) ∈ R 1 × q \bm b^{(2)} \in \mathbb R^{1 \times q} b(2)R1×q
  因此,在形式上,按照如下方式计算单隐藏层多层感知机的输出 O ∈ R n × q \bm O \in \mathbb R^{n \times q} ORn×q
H = X W ( 1 ) + b ( 1 ) O = H W ( 2 ) + b ( 2 ) \bm {H=XW^{(1)}+b^{(1)}}\\ \bm {O=HW^{(2)}+b^{(2)}} H=XW(1)+b(1)O=HW(2)+b(2)
  上面的隐藏单元由输入的仿射函数给出,而输出(softmax操作前)只是隐藏单元的仿射函数。
  仿射函数的仿射函数本身还是仿射函数(有点像绕口令,哈哈哈!!),之前的线性模型以及能够表示任何仿射函数。
  我们可以用公式推导证明其等价性,即对于任意权重值,我们只需要合并隐藏层,便可产生具有参数 W = W ( 1 ) W ( 2 ) \bm {W=W^{(1)}W^{(2)}} W=W(1)W(2) b = b ( 1 ) W ( 2 ) + b ( 2 ) \bm {b=b^{(1)}W^{(2)}+b^{(2)}} b=b(1)W(2)+b(2)的等价单层模型:
O = ( X W ( 1 ) + b ( 1 ) ) W ( 2 ) + b ( 2 ) = X W ( 1 ) W ( 2 ) + b ( 1 ) W ( 2 ) = X W + b \bm { O= (XW^{(1)}+b^{(1)} ) W^{(2)} + b^{(2)} =XW^{(1)}W^{(2)}+ b^{(1)}W^{(2)} =XW+b } O=(XW(1)+b(1))W(2)+b(2)=XW(1)W(2)+b(1)W(2)=XW+b
  在此,需要引入额外的要素: 激活函数
  在仿射变换之后对每个隐藏单元应用非线性的激活函数 σ \sigma σ,激活函数的输出称为激活值,一般来说,有了激活函数,多层感知机就不会退化成线性模型。
H = σ ( X W ( 1 ) + b ( 1 ) ) O = H W ( 2 ) + b ( 2 ) \bm {H=\sigma (XW^{(1)}+b^{(1)}})\\ \bm {O=HW^{(2)}+b^{(2)}} H=σ(XW(1)+b(1))O=HW(2)+b(2)
  应用于隐藏层的激活函数通常按元素操作,在计算每一层的线性部分之后,可以计算每个激活值,而不需要查看其他隐藏单元所取的值。对于大多数激活函数都是如此。

  激活函数最直观理解的作用在于:将线性转化为非线性

1.2 激活函数

  激活函数通过计算加权合并加上偏置来确定神经元是否应该被激活,它们将输入信号转换为输出的可微运算。并且大多数激活函数都是非线性的。

1.2.1 ReLU函数

  使用最广的激活函数是修正线性单元(rectified linear unit, ReLU),因为它实现简单,同时在各种预测任务中表现良好。
  ReLU函数提供了一种非常简单的非线性变换。给定元素 x x x,ReLU函数被定义为该元素与0的最大值:
R e L U ( x ) = max ⁡ ( x , 0 ) ReLU(x) = \max {(x,0)} ReLU(x)=max(x,0)
  ReLU函数通过将相应的激活值设为0,仅保留正元素舍去所有负元素。可以绘制出函数的曲线图,ReLU函数是分段呈线性的,但是整体是非线性的。

%matplotlib inline
import torch
from d2l import torch as d2l
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
y = torch.relu(x)
d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)', figsize=(5, 2.5))

在这里插入图片描述

x.detach()是为了阻止梯度回传到x。
在Pytorch中,detach()方法会返回一个新的张量,这个张量和原始张量只共享数据,但是没有任何的历史信息。
如果需要计算一个中间结果,但不希望这个结果对模型的梯度产生影响时,可以使用detach()

  当输入为负时,ReLU函数的导数为0,而输入为正时,ReLU函数的导数为1,当输入值精确等于0时,ReLU函数不可导。此时,默认使用左侧的导数,即当输入为0时,导数为0,但是输入永远都不可能为0.
  绘制ReLU函数的导数图像

y.backward(torch.ones_like(x), retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of relu', figsize=(5, 2.5))

在这里插入图片描述
  使用ReLU函数最广泛的原因是,它的求导表现特别好:要么让参数消失,要么让参数通过。这使得优化表现更好,并且ReLU函数缓解了以往神经网络的梯度消失问题。

1.2.2 sigmoid函数

  对于一个定义域在R上的输入,sigmoid函数将输入变换为区间[0,1]上的输出。因此sigmoid函数通常称为挤压函数:它将范围(-inf,inf),即负无穷到正无穷上的任意输入压缩到区间[0,1]上的某个值:
s i g m o i d ( x ) = 1 1 + exp ⁡ ( − x ) sigmoid(x) = \frac 1 {1 + \exp{(-x)}} sigmoid(x)=1+exp(x)1
  sigmoid是一个平滑、可微的阈值单元近似函数。当我们想要将输出视作二元分类问题的概率时,sigmoid仍然被广泛用作输出单元上的激活函数(sigmoid可以视为softmax的特例)。

  但是,sigmoid在隐藏层已经较少使用,大多时候它被更简单、更容易训练的ReLUctant所取代。

  当输入接近0时,sigmoid函数接近线性变换。

y = torch.sigmoid(x)
d2l.plot(x.detach(), y.detach(), 'x', 'sigmoid(x)', figsize=(5, 2.5))

在这里插入图片描述
  sigmoid函数的导数是:
d d x s i g m o i d ( x ) = ( e x p ( − x ) ( 1 + exp ⁡ ( − x ) ) 2 = s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) \frac d {dx} sigmoid (x) = \frac {(exp(-x)} {(1 + \exp(-x))^2} = sigmoid(x) (1-sigmoid(x)) dxdsigmoid(x)=(1+exp(x))2(exp(x)=sigmoid(x)(1sigmoid(x))
  sigmoid函数的导数图像如下所示。 当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0。

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of sigmoid', figsize=(5, 2.5))

在这里插入图片描述

1.2.3 tanh函数

  与sigmoid函数类似,tanh(双曲正切)函数也能将其输入压缩转换到区间(-1,1)上。
tanh ⁡ ( x ) = 1 − exp ⁡ ( − 2 x ) 1 + exp ⁡ ( − 2 x ) \tanh(x) = \frac {1-\exp(-2x)} {1+\exp(-2x)} tanh(x)=1+exp(2x)1exp(2x)
  绘制tanh函数的图像。当输入在0附近时,tanh函数接近线性变换。函数的形状类似于sigmoid函数,不同的是tanh函数关于坐标系原点中心对称。

y = torch.tanh(x)
d2l.plot(x.detach(), y.detach(), 'x', 'tanh(x)', figsize=(5, 2.5))

在这里插入图片描述
  tanh函数的导数是:
d d x tanh ⁡ ( x ) = 1 − tanh ⁡ 2 ( x ) \frac d {dx} \tanh(x) = 1-\tanh^2(x) dxdtanh(x)=1tanh2(x)
  tanh函数的导数图像如下所示。 当输入接近0时,tanh函数的导数接近最大值1。 与在sigmoid函数图像中看到的类似, 输入在任一方向上越远离0点,导数越接近0。

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of tanh', figsize=(5, 2.5))

在这里插入图片描述

总结:
1、多层感知机在输出层和输入层之间增加若干个全连接隐藏层,并通过激活函数转换隐藏层的输出。
2、 常用的激活函数 { 1 、 R e L U 函数(用得最多) 2 、 s i g m o i d 函数 3 、 t a n h 函数 常用的激活函数 \begin{cases} 1、ReLU函数(用得最多) \\ 2、sigmoid函数 \\ 3、tanh函数 \end{cases} 常用的激活函数 1ReLU函数(用得最多)2sigmoid函数3tanh函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912559.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案

随着视频监控技术的不断发展,NVR(网络视频录像机)已经成为现代安防系统的重要组成部分。而为了更高效地管理多个品牌的NVR设备,EasyNVR这一多品牌NVR管理工具应运而生。然而,在实际使用过程中,尤其是在多个…

CocoaPods安装步骤详解 - 2024

引言 CocoaPods的安装,如果有VPN就一直开启,会让整个流程非常顺畅。 在现代 iOS 开发中,依赖管理变得越来越重要,CocoaPods 成为开发者们首选的依赖管理工具。它不仅可以简化库的安装与更新,还能帮助开发者更高效地管…

基于RMD算法模型的信号传输统计特性的matlab模拟仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于RMD算法模型的信号传输统计特性的matlab模拟仿真。参考的文献如下: 即通过RMD随机中点位置模型算法,实现上述文献的几个仿真图。 2.…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器(如省市区选择器)时,可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程: 一、效果展示: 1、在三级联动选择器中,首先选择省份&#xff…

清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!

🌐 在人工智能领域,多模态模型的发展正如火如荼。今天,我们要介绍的是由清华大学提出的Mini-Omni2,这是一个开源的多模态语言模型,它在功能上与GPT-4o相媲美,能够理解和生成视觉、听觉和文本内容&#xff0…

Diffusion Policy——斯坦福刷盘机器人UMI所用的扩散策略(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分,考虑后Diffusion Policy的重要性很高,加之后续还有一系列基于其的改进工作 故独立成本文,且把原属于另一…

AI 写作(五)核心技术之文本摘要:分类与应用(5/10)

一、文本摘要:AI 写作的关键技术 文本摘要在 AI 写作中扮演着至关重要的角色。在当今信息爆炸的时代,人们每天都被大量的文本信息所包围,如何快速有效地获取关键信息成为了一个迫切的需求。文本摘要技术正是为了解决这个问题而诞生的&#x…

一个怀旧,俺的第一个共享软件

今天网友说起了 福彩双色球的程序。俺就想起这个来了,这是俺的第一个共享软件,收入大约15000。在当时来说,速度算是最快的。有些地方用了汇编优化(题外话,最近俺看到新闻,FFmpeg的作者也用汇编优化 性能提升…

【Agent综述】Agent在多模态交互的应用

note 这个工作收集了多模态游戏、机器人和医疗等领域的数据集,包括Minecraft视频数据、虚拟家庭环境数据和医疗图像数据。利用LLMs和VLMs作为智能体,特别是在游戏、机器人技术和医疗保健等领域这篇论文提出了一种新的Agent AI框架,通过结合大…

Kafka - 启用安全通信和认证机制_SSL + SASL

文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…

STM32H503开发(1)----开发板测试

STM32H503开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载产品特性参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32H503 & SENSOR是一款基于STM32H5系列微控制器的评估套件。该微控制器采用了40nm工艺制造,具有更…

3.1 > Shell

本节概览 在 上一节 中我们了解了 Linux 的桌面环境,包括 GUI 、 TTY 和 VNC 等的介绍和使用。在本节中将介绍 Shell 是个什么东西,我们到底是如何通过 Shell 来操作计算机的,以及一些常见的 Shell 版本有哪些和它们有什么特点。 目录 本节…

C++ -- 多态与虚函数

多态 概念 多态(polymorphishm):通常来说,就是指事物的多种形态。在C中,多态可分为编译时多态(静态多态)和运行时多态(动态多态),这里我们重点讲的是运行时多…

利用游戏引擎的优势

大家好,我是小蜗牛。 在当今快速发展的游戏产业中,选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎,为开发者提供了丰富的工具和资源,使他们能够高效地开发出优秀的游戏。本文将探讨如何…

uniapp配置h5路由模式为history时404

为了不让URL中出现#,让uniapp项目配置h5路由模式为hisory 然而本地好好的,放到服务器上却404了。 解决方法是给nginx配置一个伪静态: location /xxx-html/ {alias /home/nginx_web/xxx_new_html/;try_files $uri $uri/ /xxx-html/index.ht…

架构师备考-概念背诵(软件工程)

软件工程 软件开发生命周期: 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。软件运行和维护:就是…

小白docker入门简介

Dockerfile入门使用分享 一、docker是啥二、镜像仓库三、自定义镜像四、动手做机甲玩偶五、帮我做数学题六、计算功能的写法七、咒语翻译器八、放屁九、解决问题 一、docker是啥 最开始我和你一样,围着镜像、容器、docker的名词团团转,其实没那么复杂。…

一文学习Android中的Property

在 Android 系统中,Property 是一种全局的键值对存储系统,允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景,使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

node.js安装配置(Windows)

1、下载 CNPM Binaries Mirror 2、安装 3、验证 win R 进入cmd 4、配置环境变量 4.1、创建两个文件夹 4.2、安装目录进入cmd(配置全局属性) 配置两个命令: npm config set prefix "D:\liyunqing\nodejs\node_global"npm config set cache "D:\l…

mp3格式音频怎么做成二维码?扫码获取音频文件的制作方法

随着二维码的广泛使用,现在很多内容都会通过生成二维码的方式来传输内容,通过这种方式可以更快捷的实现内容分享,简化其他人获取内容的流程,有效提高效率。音频是目前常见的一种内容分享方式,比如录音、听力、音乐等类…