CNN和Transfomer介绍

文章目录

  • CNN和Transfomer介绍
    • CNN和Transfomer的区别
      • 1. **基本概念**
      • 2. **数据处理方式**
      • 3. **模型结构差异**
      • 4. **应用场景区别**
    • 自注意力机制
      • 1. **自注意力机制的概念**
      • 2. **自注意力机制的实现步骤**
      • 3. **自注意力机制的优势**
    • Transformer结构组成
      • 1. **多头注意力层(Multi - Head Attention)**
      • 2. **前馈神经网络层(Feed - Forward Neural Network)**
      • 3. **归一化层(Normalization Layers)**
    • ViT
      • 原理
      • 优势
      • 局限性

CNN和Transfomer介绍

CNN和Transfomer的区别

1. 基本概念

  • CNN(卷积神经网络)

    • CNN主要是通过卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully - Connected Layer)构建的神经网络。卷积层通过卷积核在图像(或其他数据)上滑动,提取局部特征。例如,在图像分类任务中,一个卷积核可能会提取图像中的边缘特征。池化层用于减少数据维度,降低计算量,同时保留重要的特征信息,常用的池化方法有最大池化和平均池化。
    • 全连接层通常在网络的末尾,用于将前面提取的特征进行整合,以输出最终的分类结果或预测值。例如,在一个简单的手写数字识别的CNN模型中,最后一层全连接层会将前面卷积和池化后得到的特征组合起来,输出0 - 9这10个数字对应的概率。
      在这里插入图片描述
  • Transformer

    • Transformer是一种基于自注意力机制(Self - Attention Mechanism)的深度学习架构。它主要由多头注意力层(Multi - Head Attention)、前馈神经网络层(Feed - Forward Neural Network)和一些归一化层(Normalization Layers)等组成。
    • 自注意力机制使得模型能够在处理序列数据(如文本)时,自动关注输入序列中的不同部分,根据每个部分的重要性来计算权重。例如,在机器翻译任务中,Transformer可以根据源语言句子中每个单词与其他单词的关系,更好地生成目标语言句子。
      在这里插入图片描述

2. 数据处理方式

  • CNN
    • 对于空间数据(如图像)有天然的优势,它利用卷积核的局部感受野来提取特征。这种局部性使得CNN能够很好地捕捉到图像中的空间结构信息,例如物体的形状、纹理等。
    • 对于处理网格状数据(如二维图像或三维体数据)效率较高。但是,当处理长序列数据时,由于其固定的卷积核大小和步长等参数,可能会丢失序列中的长距离依赖关系。
  • Transformer
    • 更擅长处理序列数据,通过自注意力机制可以直接计算序列中任意两个位置之间的关系,不受距离限制,能够很好地捕捉长距离依赖关系。
    • 对于非网格状的数据(如自然语言文本)有更好的适应性。不过,由于自注意力机制的计算复杂度相对较高,在处理非常长的序列时可能会面临计算资源和效率的问题。

3. 模型结构差异

  • CNN
    • 通常具有层次结构,从浅层的卷积层提取低级特征(如边缘、角点),到深层的卷积层和全连接层组合提取更高级、更抽象的特征。
    • 卷积层和池化层的参数相对较少,因为它们共享卷积核,减少了模型的参数量,有助于防止过拟合。例如,一个3x3的卷积核在整个图像上滑动,参数数量是固定的,不随图像大小的增加而增加太多。
  • Transformer
    • 以多头注意力层和前馈神经网络层交替堆叠为主要结构。多头注意力层允许模型从多个不同的表示子空间中学习特征,提高了模型的表达能力。
    • 模型参数较多,尤其是在处理大规模数据时,因为自注意力机制需要计算每个位置与其他所有位置的关系,会产生大量的参数。

4. 应用场景区别

  • CNN
    • 广泛应用于计算机视觉领域,如图像分类(识别图像中的物体类别)、目标检测(确定图像中物体的位置和类别)、语义分割(将图像中的每个像素分类)等。例如,在人脸识别系统中,CNN可以准确地提取人脸的特征用于身份识别。
  • Transformer
    • 在自然语言处理领域大放异彩,如机器翻译、文本生成、情感分析等任务。例如,在大型语言模型(如ChatGPT等)中,Transformer架构是其核心,能够生成高质量的文本回复。同时,Transformer也逐渐被应用到计算机视觉等其他领域,形成了一些跨模态的模型。

自注意力机制

1. 自注意力机制的概念

  • 自注意力机制(Self - Attention Mechanism)是一种在深度学习中用于处理序列数据的机制,它能够让模型自动地关注输入序列中的不同部分,并根据这些部分的重要性分配不同的权重。
  • 以自然语言处理为例,在一个句子中,每个单词与其他单词的关系对理解句子的语义都很重要。自注意力机制可以帮助模型学习每个单词应该关注句子中的哪些其他单词,从而更好地理解句子的整体含义。比如在句子“我喜欢在海边看日出”中,“看日出”这个动作和“海边”这个地点紧密相关,自注意力机制就能捕捉到这种关联。

2. 自注意力机制的实现步骤

  • 输入表示
    • 首先,将输入序列(以文本序列为例,假设序列长度为 n n n,词向量维度为 d d d)中的每个元素(如单词)表示为一个向量,这些向量组成一个输入矩阵 X ∈ R n × d X\in R^{n\times d} XRn×d
  • 计算Query、Key和Value向量
    • 通过三个不同的可训练的线性变换(权重矩阵) W Q W_Q WQ W K W_K WK W V W_V WV,将输入矩阵 X X X分别转换为Query(查询)向量矩阵 Q Q Q、Key(键)向量矩阵 K K K和Value(值)向量矩阵 V V V
    • 计算公式如下: Q = X W Q Q = XW_Q Q=XWQ K = X W K K = XW_K K=XWK V = X W V V = XW_V V=XWV,其中 Q ∈ R n × d k Q\in R^{n\times d_k} QRn×dk K ∈ R n × d k K\in R^{n\times d_k} KRn×dk V ∈ R n × d v V\in R^{n\times d_v} VRn×dv d k d_k dk d v d_v dv通常是通过设计确定的维度,且 d k d_k dk一般等于 d v d_v dv
  • 计算注意力分数(Attention Scores)
    • 计算注意力分数,用于衡量每个Query向量与每个Key向量之间的相关性。对于 Q Q Q中的每个Query向量 q i q_i qi i = 1 , 2 , ⋯ , n i = 1,2,\cdots,n i=1,2,,n)和 K K K中的每个Key向量 k j k_j kj j = 1 , 2 , ⋯ , n j = 1,2,\cdots,n j=1,2,,n),计算它们的点积(Dot - Product),并进行缩放(通常除以 d k \sqrt{d_k} dk ),得到注意力分数矩阵 A A A
    • 公式为: a i j = q i ⋅ k j d k a_{ij}=\frac{q_i\cdot k_j}{\sqrt{d_k}} aij=dk qikj,其中 a i j a_{ij} aij A ∈ R n × n A\in R^{n\times n} ARn×n中的元素,表示第 i i i个Query向量对第 j j j个Key向量的注意力分数。
  • 计算Softmax概率分布
    • 对注意力分数矩阵 A A A的每一行应用Softmax函数,得到一个概率分布矩阵 P P P。Softmax函数的作用是将注意力分数转换为概率,使得每一行的元素之和为1。
    • 公式为: p i j = exp ⁡ ( a i j ) ∑ j = 1 n exp ⁡ ( a i j ) p_{ij}=\frac{\exp(a_{ij})}{\sum_{j = 1}^{n}\exp(a_{ij})} pij=j=1nexp(aij)exp(aij),其中 p i j p_{ij} pij P ∈ R n × n P\in R^{n\times n} PRn×n中的元素,表示第 i i i个Query向量关注第 j j j个Value向量的概率。
  • 计算加权和得到输出
    • 最后,将概率分布矩阵 P P P与Value向量矩阵 V V V相乘,得到自注意力机制的输出矩阵 O O O。这个输出矩阵包含了对输入序列的重新加权表示,突出了每个位置应该关注的信息。
    • 公式为: O = P V O = PV O=PV O ∈ R n × d v O\in R^{n\times d_v} ORn×dv

3. 自注意力机制的优势

  • 捕捉长距离依赖关系:可以直接计算序列中任意两个位置之间的关系,不受距离限制,这对于理解长序列(如长句子)的语义非常重要。
  • 并行计算能力:在计算注意力分数时,不同位置的计算是相对独立的,可以利用现代GPU的并行计算能力,提高计算效率。
  • 自适应学习:模型可以根据数据自动学习每个位置应该关注的内容,而不是像一些传统方法需要人工设计特征来捕捉依赖关系。

Transformer结构组成

Transformer是一种基于自注意力机制(Self - Attention Mechanism)的深度学习架构。它主要由多头注意力层(Multi - Head Attention)、前馈神经网络层(Feed - Forward Neural Network)和一些归一化层(Normalization Layers)等组成。

1. 多头注意力层(Multi - Head Attention)

  • 概念
    • 多头注意力层是Transformer架构的核心组件之一。它包含多个并行的自注意力机制(Self - Attention Mechanism)。每个自注意力机制称为一个“头”,这些头可以从不同的表示子空间中学习特征。
    • 例如,假设有8个头,就相当于同时有8个不同的“视角”去关注输入序列,每个头学习到输入序列的一种特征表示。
  • 作用
    • 丰富特征表示:通过多个头的计算,可以捕捉到输入序列在多个不同维度上的关系。不同的头可能会关注输入序列中的不同部分或不同类型的关系。例如,在自然语言处理中,一个头可能会关注句子中的语法结构,另一个头可能会关注单词之间的语义关联。
    • 提高模型表达能力:多个头的组合输出能够提供更丰富、更全面的特征表示,使得模型能够更好地处理复杂的任务。这有助于模型在机器翻译、文本生成等任务中生成更准确、更自然的输出。
    • 增加模型的鲁棒性:由于多头注意力从多个角度学习特征,即使其中某些头受到噪声或异常数据的影响,其他头仍然可能正常工作,从而使得整个模型对噪声等干扰因素更具鲁棒性。
      在这里插入图片描述

2. 前馈神经网络层(Feed - Forward Neural Network)

  • 概念
    • 前馈神经网络层在Transformer中位于多头注意力层之后。它是一个简单的全连接神经网络,通常包含两个线性变换和一个激活函数(如ReLU)。
    • 例如,对于输入维度为 d m o d e l d_{model} dmodel的向量,先通过一个线性变换将其映射到一个中间维度(如 d f f d_{ff} dff),经过激活函数后,再通过另一个线性变换将其映射回 d m o d e l d_{model} dmodel维度。
  • 作用
    • 特征变换:对多头注意力层输出的特征进行进一步的非线性变换,从而增加模型的非线性表达能力。这种非线性变换有助于模型学习更复杂的函数关系,使得模型能够更好地拟合数据。
    • 补充信息处理能力:由于多头注意力层主要关注输入序列内部的关系,前馈神经网络层可以对这些关系进行整合和进一步处理,提取更高层次的特征,从而增强整个模型对输入信息的处理和理解能力。

3. 归一化层(Normalization Layers)

  • 概念
    • 在Transformer中常用的归一化层是层归一化(Layer Normalization)。它的操作是对每一层的输入数据进行归一化处理,使得数据的均值为0,方差为1。
    • 具体来说,对于一个输入向量 x = ( x 1 , x 2 , ⋯ , x n ) x = (x_1,x_2,\cdots,x_n) x=(x1,x2,,xn),计算其均值 μ = 1 n ∑ i = 1 n x i \mu=\frac{1}{n}\sum_{i = 1}^{n}x_i μ=n1i=1nxi和方差 σ 2 = 1 n ∑ i = 1 n ( x i − μ ) 2 \sigma^2=\frac{1}{n}\sum_{i = 1}^{n}(x_i - \mu)^2 σ2=n1i=1n(xiμ)2,然后将 x x x转换为 x ^ i = x i − μ σ 2 + ϵ \hat{x}_i=\frac{x_i - \mu}{\sqrt{\sigma^2+\epsilon}} x^i=σ2+ϵ xiμ,其中 ϵ \epsilon ϵ是一个很小的数,用于防止分母为0。
  • 作用
    • 加速训练:归一化可以使数据分布更加稳定,避免在训练过程中由于梯度消失或梯度爆炸问题导致训练困难。通过使每一层的输入数据保持在一个相对稳定的分布范围内,梯度能够更有效地传播,从而加快模型的训练速度。
    • 提高模型稳定性和泛化能力:有助于模型对不同的输入数据保持一致的性能,减少模型对输入数据分布变化的敏感性。这使得模型在面对各种不同的测试数据时,能够更好地发挥其性能,提高泛化能力。

ViT

ViT是指Vision Transformer,是一种基于Transformer架构的图像分类模型.以下是对ViT的具体介绍:

原理

ViT将图像划分为一系列的图像块(patches),并将这些块转换为向量序列,然后通过Transformer的自注意力机制对这些序列进行处理,最后通过全连接层进行分类.
在这里插入图片描述

优势

  • 全局视野和长距离依赖:引入了Transformer模型的注意力机制,能够对整个图像的全局信息进行建模,可以建立图像中不同区域之间的长距离依赖关系,从而更好地理解图像的结构和语义,这是传统CNN较难做到的,因为CNN主要依赖局部感受野来捕捉特征.
  • 可学习的位置编码:通过对输入图像块进行位置编码,将位置信息引入模型中,使得模型可以处理不同位置的图像块,并学习它们之间的位置关系。而CNN在卷积和池化过程中会导致空间信息的丢失,对位置不敏感.
  • 数据效率和泛化能力:基于Transformer架构,ViT可以从大量的数据中学习到更丰富、更复杂的图像特征表示,在大规模数据集上展现出出色的泛化能力。相比之下,CNN在小样本数据集上可能需要更多的数据和调优才能取得好的结果.
  • 可解释性和可调节性:自注意力机制使ViT在解释模型预测和注意力权重时具有优势,研究人员可以通过分析注意力权重来理解模型关注图像的哪些部分,从而更好地解释模型的决策过程,这对于一些需要可解释性的应用场景非常重要.

局限性

  • 计算复杂度高:ViT的计算复杂度相对较高,尤其是在处理高分辨率图像时,其自注意力机制的计算量会随着图像尺寸的增加而急剧增加,导致训练和推理速度较慢,对硬件资源的要求也较高。
  • 对数据量需求大:为了充分发挥其性能优势,ViT通常需要大量的训练数据。在数据量不足的情况下,可能无法学习到足够有效的特征表示,导致性能下降。
  • 局部特征捕捉能力相对较弱:虽然ViT能够捕捉全局信息,但对于图像中的局部细节特征的捕捉能力可能不如CNN。在一些对局部特征要求较高的任务中,如细粒度图像分类、目标检测中的小目标检测等,可能需要结合CNN或其他方法来增强局部特征的提取能力.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题

在cmd中输入 adb ,显示 ‘adc‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题 解决办法:在环境变量中添加adb所在的路径 1、找到 adb.exe 的所在的文件路径,一般在 Android 安装目录下 \sdk\platform-tools\adb.exe…

数据结构---------二叉树前序遍历中序遍历后序遍历

以下是用C语言实现二叉树的前序遍历、中序遍历和后序遍历的代码示例&#xff0c;包括递归和非递归&#xff08;借助栈实现&#xff09;两种方式&#xff1a; 1. 二叉树节点结构体定义 #include <stdio.h> #include <stdlib.h>// 二叉树节点结构体 typedef struct…

网络架构与IP技术:4K/IP演播室制作的关键支撑

随着科技的不断发展&#xff0c;广播电视行业也在不断迭代更新&#xff0c;其中4K/IP演播室技术的应用成了一个引人注目的焦点。4K超高清技术和IP网络技术的结合&#xff0c;不仅提升了节目制作的画质和效果&#xff0c;还为节目制作带来了更高的效率和灵活性。那么4K超高清技术…

MySQL 8.0:explain analyze 分析 SQL 执行过程

介绍 MySQL 8.0.16 引入一个实验特性&#xff1a;explain formattree &#xff0c;树状的输出执行过程&#xff0c;以及预估成本和预估返 回行数。在 MySQL 8.0.18 又引入了 EXPLAIN ANALYZE&#xff0c;在 formattree 基础上&#xff0c;使用时&#xff0c;会执行 SQL &#…

观察者模式(sigslot in C++)

大家&#xff0c;我是东风&#xff0c;今天抽点时间整理一下我很久前关注的一个不错的库&#xff0c;可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计&#xff0c;sigslot 官网&#xff1a; http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

【已解决】黑马点评项目Redis版本替换过程中误删数据库后前端显示出现的问题

为了实现基于Redis的Stream结构作为消息队列&#xff0c;实现异步秒杀下单的功能&#xff0c;换Redis版本 Redis版本太旧了&#xff0c;所以从3.2.1换成了5.0.14 此时犯了一个大忌&#xff0c;因为新的Redis打开后&#xff0c;没有缓存&#xff0c;不知道出了什么问题&#xf…

基于Spring Boot的九州美食城商户一体化系统

一、系统背景与目标 随着美食城行业的快速发展&#xff0c;传统的管理方式已经难以满足日益增长的管理需求和用户体验要求。因此&#xff0c;九州美食城商户一体化系统应运而生&#xff0c;旨在通过信息化、智能化的管理方式&#xff0c;实现美食城的商户管理、菜品管理、订单…

springboot vue 会员营销系统

springboot vue 会员营销系统介绍 演示地址&#xff1a; 开源版本&#xff1a;http://8.146.211.120:8083/ 完整版本&#xff1a;http://8.146.211.120:8086/ 移动端 http://8.146.211.120:8087/ 简介 欢迎使用springboot vue会员营销系统。本项目包含会员储值卡、套餐卡、计…

HarmonyOS NEXT 技术实践-基于意图框架服务实现智能分发

在智能设备的交互中&#xff0c;如何准确理解并及时响应用户需求&#xff0c;成为提升用户体验的关键。HarmonyOS Next 的意图框架服务&#xff08;Intents Kit&#xff09;为这一目标提供了强大的技术支持。本文将通过一个项目实现的示例&#xff0c;展示如何使用意图框架服务…

sfnt-pingpong -测试网络性能和延迟的工具

sfnt-pingpong 是一个用于测试网络性能和延迟的工具&#xff0c;通常用于测量不同网络环境下的数据包传输性能、吞吐量、延迟等指标。 它通常是基于某种网络协议&#xff08;如 TCP&#xff09;执行“ping-pong”式的测试&#xff0c;即客户端和服务器之间相互发送数据包&…

前端下载文件的几种方式使用Blob下载文件

前端下载文件的几种方式 使用Blob下载文件 在前端下载文件是个很通用的需求&#xff0c;一般后端会提供下载的方式有两种&#xff1a; 1.直接返回文件的网络地址&#xff08;一般用在静态文件上&#xff0c;比如图片以及各种音视频资源等&#xff09; 2.返回文件流&#xff08;…

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding&#xff1a;以声明方式将可观察数据绑定到界面元素&#xff0c;通常和ViewModel配合使用。 2. Lifecycle&#xff1a;用于管理Activity和Fragment的生命周期&#xff0c;可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…

知乎 PB 级别 TiDB 数据库集群管控实践

以下文章来源于知乎技术专栏 &#xff0c;作者代晓磊 导读 在现代企业中&#xff0c;数据库的运维管理至关重要&#xff0c;特别是面对分布式数据库的复杂性和大规模集群的挑战。作为一款兼容 MySQL 协议的分布式关系型数据库&#xff0c;TiDB 在高可用、高扩展性和强一致性方…

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 &#xff08;1&#xff09;SpringBootConfiguration&#xff1a; &#xff08;2&#xff09;EnableAutoConfiguration&#xff1a; &#xff08;3&#xf…

C++中的字符串实现

短字符串优化(SSO) 实现1 实现2 写时复制 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<cstring> using std::cout; using std::endl;// 引用计数存放的位置 // 1. 存放在栈上 --- 不行 // 2. 存…

Linux 基本使用和程序部署

1. Linux 环境搭建 1.1 环境搭建方式 主要有 4 种&#xff1a; 直接安装在物理机上。但是Linux桌面使用起来非常不友好&#xff0c;所以不建议。[不推荐]。使用虚拟机软件&#xff0c;将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug&#xff…

环网冗余CAN转光纤 CAN光端机在风电项目应用

在风力发电项目中&#xff0c;所有的风机内部的状态都需要能够在中控室备被监控到&#xff0c;不论是风机的工作状态还是风机内部的消防状态&#xff0c;以便中控室的工作人员都够根据观测到的信息及时的做出反应&#xff0c;避免造成重大损失。 通常风机的工作信息通过将网口…

ubuntu 如何重装你的apt【apt-get报错: symbol lookup error/undefined symbol】

副标题:解决error:apt-get: symbol lookup error: /lib/x86_64-linux-gnu/libapt-private.so.0.0: undefined symbol: _ZNK13pkgTagSection7FindULLENS_3KeyERKy, version APTPKG_6.0 文章目录 问题描述报错分析解决方案:重装你的apt1、查看你的ubuntu版本2、下载适配你的ap…

网络管理 详细讲解

讲一下之前获取CPU的&#xff0c;其余的原理和这个一样 python代码 app.route(/cpu/) def cpu_used():cpuoidObjectType(ObjectIdentity(myOIDs[cpu_loads]))ret getTableRows((cpuoid,))cpuload0for i in ret:cpuload i[0]print(cpuload)return {cpu:cpuload} var dom do…

用Python PySide6 复刻了两软件UI 做下练习

图样 1 代码 1&#xff1a; # -*- coding: utf-8 -*-import sys from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, QDate) from PySide6.QtGui import QIcon, QPixmap, QColor from PySide6.QtWidgets import (QApplication, QDialog, QLineEdit, QPushBut…