PyTorch深度学习框架60天进阶学习计划 - 第23天:Transformer架构解析
让我继续完成机器翻译示例的代码:
PyTorch深度学习框架60天进阶学习计划:第23天 Transformer架构解析
学习目标
- 推导自注意力机制数学公式
- 详解位置编码的傅里叶基函数设计
- 对比编码器-解码器结构的信息流动差异
1. Transformer架构概述
Transformer架构自2017年在论文《Attention Is All You Need》中提出以来,彻底改变了深度学习在自然语言处理领域的应用方式。不同于之前的循环神经网络(RNN)或卷积神经网络(CNN),Transformer完全基于注意力机制,抛弃了循环结构,实现了更高效的并行计算和更好的长距离依赖建模能力。
Transformer主要由以下几个关键组件构成:
- 多头自注意力机制(Multi-Head Self-Attention)
- 位置编码(Positional Encoding)
- 前馈神经网络(Feed-Forward Network)
- 残差连接(Residual Connection)和层归一化(Layer Normalization)
- 编码器-解码器结构(Encoder-Decoder Architecture)
今天我们将深入探讨这些组件的内部工作原理,特别是自注意力机制的数学推导、位置编码的设计原理以及编码器-解码器的信息流动差异。
2. 自注意力机制数学公式推导
2.1 自注意力机制的基本原理
自注意力机制的核心思想是计算序列中每个位置与所有位置之间的关联性,从而决定每个位置应该关注序列中的哪些其他位置。
在数学上,自注意力机制首先将输入序列X转换为三个不同的表示:查询(Query)矩阵Q、键(Key)矩阵K和值(Value)矩阵V。这三个矩阵通过对输入X进行线性变换得到:
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
其中, W Q W^Q WQ、 W K W^K WK和 W V W^V WV是可学习的参数矩阵。
2.2 注意力分数计算
自注意力机制的计算公式如下:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
我们来一步步分解这个公式:
- 首先计算Q和K的点积,得到注意力分数矩阵: Q K T QK^T QKT
- 为了防止梯度消失问题,将点积结果除以 d k \sqrt{d_k} dk( d k d_k dk是键向量的维度)
- 对结果应用softmax函数,将分数转换为概率分布
- 用这些注意力权重对V进行加权求和
让我们详细推导这个过程:
假设输入序列长度为n,特征维度为d,则:
- X的形状为[n, d]
- W Q W^Q WQ, W K W^K WK, W V W^V WV的形状均为[d, d k d_k dk]
- Q, K, V的形状均为[n, d k d_k dk]
注意力分数矩阵 Q K T QK^T QKT的形状为[n, n],表示序列中每个位置对其他所有位置的注意力权重。
应用softmax后,得到的注意力权重矩阵 A = softmax ( Q K T d k ) A = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) A=softmax(dkQKT)的形状也是[n, n],且每一行的和为1。
最后,将注意力权重矩阵与值矩阵V相乘,得到自注意力的输出: Z = A V Z = AV Z=AV,形状为[n, d k d_k dk]。
2.3 多头注意力机制
为了增强模型的表达能力,Transformer使用了多头注意力机制,即并行地计算h个不同的自注意力,然后将结果拼接起来:
MultiHead ( Q , K , V ) = Concat ( head 1 , head 2 , . . . , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, ..., \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,head2,...,headh)WO
其中, head i = Attention ( Q W i Q , K W i K , V W i V ) \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV), W O W^O WO是输出投影矩阵。
多头注意力使模型能够同时关注不同子空间的信息,捕捉更丰富的特征。
3. 位置编码的傅里叶基函数设计
3.1 位置编码的必要性
由于自注意力机制本身不含有位置信息(即使交换输入序列中的元素顺序,注意力的计算结果不会改变),因此Transformer需要额外的位置编码来注入序列中的位置信息。
3.2 傅里叶基函数位置编码
Transformer使用的是基于正弦和余弦函数的位置编码,这实际上是傅里叶基函数的离散表示。对于位置pos和维度i,位置编码PE的计算公式如下:
P E ( p o s , 2 i ) = sin ( p o s 1000 0 2 i / d ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right) PE(pos,2i)=sin(100002i/dpos)
P E ( p o s , 2 i + 1 ) = cos ( p o s 1000 0 2 i / d ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right) PE(pos,2i+1)=cos(100002i/dpos)
其中,d是模型的维度,i的范围是[0, d/2)。
这种位置编码的设计有几个重要特性:
- 唯一性:每个位置都有唯一的编码,因此模型可以区分不同位置的token
- 固定相对距离:对于任意固定的相对距离k, P E p o s + k PE_{pos+k} PEpos+k和 P E p o s PE_{pos} PEpos之间的关系是固定的,这使得模型可以学习相对位置关系
- 可扩展性:位置编码可以扩展到训练时未见过的序列长度
- 平滑性:位置编码在位置空间中是平滑变化的,便于模型泛化
3.3 位置编码的数学理解
从傅里叶分析的角度看,这种位置编码相当于用不同频率的正弦波对位置进行编码。低频波捕捉全局位置信息,高频波捕捉局部位置信息。
每个维度对应一个特定频率的正弦/余弦波,频率从高到低依次降低,构成了一组完备的傅里叶基。这种设计使得模型能够学习到位置之间的各种复杂关系,包括绝对位置和相对位置。
3.4 位置编码的可视化
我们通过代码实现了位置编码并进行可视化,通过热力图可以直观地看到位置编码的模式,以及不同位置之间的相对关系。特别地,在位置编码的热力图中,我们可以观察到明显的周期性模式,这反映了傅里叶基函数的性质。
4. 自注意力机制的PyTorch实现
为了更深入地理解自注意力机制,我们实现了完整的单头自注意力和多头自注意力层。这些实现清晰地展示了自注意力的计算过程,包括线性变换、注意力分数计算、掩码应用和输出计算等步骤。
在多头注意力实现中,我们展示了如何将输入分割为多个头,分别计算注意力,然后再合并结果。这种设计允许模型同时从不同的表示子空间学习信息,增强了模型的表达能力。
5. 编码器-解码器结构的信息流动差异
Transformer的整体架构由编码器和解码器两部分组成,它们在信息处理方式上有明显的差异。下面,我们详细分析这两种结构的信息流动方式。
5.1 编码器结构
编码器由N个相同的层堆叠而成,每层包含两个子层:
- 多头自注意力机制
- 前馈神经网络
每个子层都使用残差连接和层归一化:
LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))
在编码器中,自注意力层允许每个位置关注序列中的所有位置,因此是全局信息流动。
5.2 解码器结构
解码器也由N个相同的层堆叠而成,但每层包含三个子层:
- 掩码多头自注意力机制
- 多头交叉注意力机制
- 前馈神经网络
同样,每个子层都使用残差连接和层归一化。
在解码器中,信息流动有两个关键差异:
-
掩码自注意力:解码器中的第一个自注意力层使用掩码来防止当前位置关注未来位置,这确保了自回归特性,即预测时只能利用已经生成的输出。
-
交叉注意力:解码器的第二个注意力层是交叉注意力,它允许解码器关注编码器的输出。查询(Q)来自解码器的上一层,而键(K)和值(V)来自编码器的输出。
5.3 信息流动对比
下表对比了编码器和解码器的信息流动差异:
特性 | 编码器 | 解码器 |
---|---|---|
注意力类型 | 自注意力 | 掩码自注意力 + 交叉注意力 |
信息流向 | 全局双向 | 局部单向(自注意力) + 跨模块(交叉注意力) |
输入可见性 | 可见完整输入 | 仅可见已生成的输出 + 编码器信息 |
并行性 | 完全并行 | 训练时并行,推理时顺序生成 |
应用场景 | 双向特征提取 | 自回归生成 |
6. Transformer架构的应用实例:机器翻译
为了展示Transformer架构的实际应用,我们实现了一个简化版的机器翻译系统。这个系统包括:
- 数据处理:将文本转换为模型可处理的形式
- Transformer模型:包含编码器和解码器
- 训练过程:使用交叉熵损失和Adam优化器
- 翻译生成:使用贪婪解码生成翻译
- 注意力可视化:展示翻译过程中的注意力流动
通过这个实例,我们可以更直观地理解Transformer在序列到序列任务中的工作原理,特别是编码器-解码器之间的信息交互过程。
7. 总结与思考
通过对Transformer架构的深入解析,我们可以得出以下关键点:
- 自注意力机制是Transformer的核心,它允许模型有效捕捉序列中的长距离依赖。
- 位置编码通过傅里叶基函数巧妙地将位置信息注入模型,解决了自注意力无法感知位置的问题。
- 编码器-解码器结构的不同信息流动方式使Transformer既能进行双向特征提取,又能实现自回归生成。
Transformer的成功之处在于它的设计既简洁又强大,不仅解决了RNN难以并行化和难以捕捉长距离依赖的问题,也避免了CNN局部感受野的限制。这种设计理念已经影响了近年来深度学习领域的众多模型,如BERT、GPT、T5等,并在自然语言处理、计算机视觉和多模态学习等领域取得了显著成功。
学习任务
- 尝试修改位置编码的公式,观察不同参数对模型性能的影响。
- 实现带有相对位置编码的Transformer变体。
- 探索注意力掩码的不同设计,如稀疏注意力。
- 尝试将Transformer应用到时间序列预测、图像分类等任务中。
参考资料
- Vaswani, A., et al. (2017). Attention Is All You Need.
- The Illustrated Transformer by Jay Alammar
- PyTorch官方文档:nn.TransformerEncoder和nn.TransformerDecoder
- The Annotated Transformer by Harvard NLP
通过本次学习,我们深入理解了Transformer架构的核心组件和工作原理,特别是自注意力机制的数学推导、位置编码的设计原理以及编码器-解码器的信息流动差异。这些知识将为我们后续学习和应用先进的自然语言处理和计算机视觉模型奠定基础。
清华大学全五版的《DeepSeek教程》完整的文档需要的朋友,关注我私信:deepseek 即可获得。
怎么样今天的内容还满意吗?再次感谢朋友们的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!
相关文章:
PyTorch深度学习框架60天进阶学习计划 - 第23天:Transformer架构解析
让我继续完成机器翻译示例的代码: PyTorch深度学习框架60天进阶学习计划:第23天 Transformer架构解析 学习目标 推导自注意力机制数学公式详解位置编码的傅里叶基函数设计对比编码器-解码器结构的信息流动差异 1. Transformer架构概述 Transformer架…...
《C#上位机开发从门外到门内》3-4:基于TCP/IP的远程监控系统设计与实现
文章目录 一、项目概述二、系统架构设计三、通信协议设计四、功能模块实现五、系统安全性与稳定性六、性能优化与测试七、实际应用案例八、结论 随着信息技术的飞速发展,远程监控系统在工业自动化、智能家居、环境监测等领域的应用日益广泛。基于TCP/IP协议的远程监…...
【MySQL】MySQL审计工具Audit Plugin安装使用
MySQL审计工具Audit Plugin安装使用 https://www.cnblogs.com/waynechou/p/mysql_audit.html MySQL 5.6 开启审计功能 https://blog.51cto.com/u_15127556/4344503 MySQL之添加日志审计功能 https://blog.csdn.net/weixin_43279032/article/details/105507170 MySQL开启日志记录…...
Flutter 按钮组件 ElevatedButton 详解
目录 1. 引言 2. ElevatedButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改背景颜色和文本颜色 4.2 修改按钮形状和边框 4.3 修改按钮大小 4.4 阴影控制 4.5 水波纹效果 5. 结论 相关推荐 1. 引言 在 Flutter 中,ElevatedButton 是一个常用的…...
AndroidStudio+Android8.0下的Launcher3 导入,编译,烧录,调试
文章目录 编译完成搜索输出文件Android.mk配置gradle编译环境报错一报错二报错三输出文件下载INSTALL_FAILED_TEST_ONLY查找系统签名查找签名工具开始签名查看签名签名问题重新生成秘钥解决方案生成成功挽救错误:重新刷机更换testkey秘钥keystore生成keystoreINSTALL_FAILED_S…...
【差分约束】P5590 赛车游戏|省选-
本文涉及知识点 【数学 线性代数】差分约束 P5590 赛车游戏 题目描述 R 君和小伙伴打算一起玩赛车。但他们被老司机 mocania 骗去了秋名山。 秋名山上有 n n n 个点和 m m m 条边,R 君和他的小伙伴要从点 1 1 1 出发开往点 n n n,每条边都有一个…...
咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包
咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包(内有教程) 刷机教程简单说明: 1、把下载好的刷机包,U盘里建立一个upgrade文件夹,固件放入此文件夹里,放入U盘中,注意升级包为压缩包不要对…...
【软件工程】06_软件设计
6.1 软件设计概述 1. 软件设计的目标 软件设计的最基本目标就是回答 “概括地描述系统如何实现用户所提出来的功能和性能等方面的需求?” 这个问题。 软件设计的目标是根据软件需求分析的结果,设想并设计软件,即根据目标系统的逻辑模型确定目标系统的物理模型。包括软件体系…...
在Flutter中使用Future读取一个大文件会导致线程阻塞吗
目录 一、Future 与文件读取的机制 1. Dart 的异步 I/O 原理 2. 代码示例 二、什么情况下会阻塞主线程? 1. I/O 操作本身不会阻塞 2. 数据处理可能阻塞 3. 示例对比 三、如何避免阻塞主线程? 1. 将耗时操作移到 Isolate 2. 使用 compute 函数(简化 Isolate 操作)…...
2025-03-17 Unity 网络基础1——网络基本概念
文章目录 1 网络1.1 局域网1.2 以太网1.3 城域网1.4 广域网1.5 互联网(因特网)1.6 万维网1.7 小结 2 IP 地址2.1 IP 地址2.2 端口号2.3 Mac 地址2.4 小结 3 客户端与服务端3.1 客户端3.2 服务端3.3 网络游戏中的客户端与服务端 1 网络 在没有网络之前…...
2025-03-17 学习记录--C/C++-PTA 习题4-8 高空坠球
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 习题4-8 高空坠球 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下&…...
Java网络编程socket
一、UDP 特点: ① 用户数据报协议(User Datagram Protocol) ② UDP是面向无连接通信协议 ③ 速度快,一次只能传输64KB数据,数据不安全,容易丢失 (1)单播 一对一 客户端…...
蓝桥杯备赛 Day0_移动零
🎈 个人主页👉:tbRNA-CSDN博客tbRNA-CSDN博客tbRNA-CSDN博客 💯 个人简介:在校大学生一枚💋. 😍 希望我的文章对大家有着不一样的帮助,欢迎大家关注我,感谢大家的多多支持…...
Razor C# 变量
Razor C# 变量 引言 在ASP.NET MVC和Razor视图引擎中,变量是构建动态网页的基础。理解Razor C#变量的使用对于开发者来说至关重要。本文将详细介绍Razor C#变量的概念、类型、作用域以及如何在实际项目中有效使用它们。 一、Razor C# 变量的概念 Razor C# 变量是存储在Raz…...
产品更新丨谷云科技ETLCloud 3月更新速递
本月,我们的数据集成产品ETLCloud继续迎来多项更新,进一步提升系统的兼容性和用户体验。以下是本月更新的亮点内容: 新增10项功能组件,持续丰富产品易用性 聚水潭-奇门通用组件 新增聚水潭-奇门通用组件,帮助企业更…...
如何高效定位网络丢包问题?
引言 本期分享一个比较常见的网络问题--丢包。例如我们去ping一个网站,如果能ping通,且网站返回信息全面,则说明与网站服务器的通信是畅通的,如果ping不通,或者网站返回的信息不全等,则很可能是数据被丢包…...
gitlab将本地项目提交到远程dev分支
获取Git路径 首先从远程获取到git路径,将给的git地址进行克隆到本地文件; git clone http:************.git 按照git地址的文件路径将本地项目,拷贝到目标文件中 在该路径中,初始化命令; # 初始化项目 git init #…...
Linux命令学习使用列表
Linux命令学习使用列表 1 系统启动相关2 系统网络相关3 系统磁盘相关4 系统定时任务5 系统进程监控 1 系统启动相关 1.1 麒麟V10 sp3修改选择默认启动项 2 系统网络相关 2.1 Linux IP 配置 2.2 ping监测网络通信情况 3 系统磁盘相关 4 系统定时任务 5 系统进程监控 5.1 L…...
分布式锁: 并发时,redis如何避免删别人的锁
在使用Redis实现分布式锁的时候,如何避免在并发情况下误删别人的锁。首先,分布式锁的基本概念:是多个客户端在访问共享资源时,通过某种机制来确保同一时间只有一个客户端能持有锁。 Redis通常用SET命令加上NX选项来创建锁…...
解决 Jupyter Notebook 中本地模块修改不生效的问题
解决 Jupyter Notebook 中本地模块修改不生效的问题 问题原因 当你在 Jupyter Notebook 中导入本地目录的库,修改后重新运行 import 语句却发现修改没有生效,这是因为 Python 的模块缓存机制。Python 解释器会将已导入的模块缓存在 sys.modules 字典中…...
蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)
硬件原理解释 这张图展示了一个简单的按键电路原理图,其中包含四个按键(PB0、PB1、PB2、PB3、PA0),每个按键通过一个10kΩ的上拉电阻连接到VDD(电源电压),并接地(GND)。 …...
简单爬虫--框架
简单爬虫 import requests import re import chardet# 模拟浏览器的请求头 headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" }# 发送 HTTP 请求获取百…...
游戏引擎学习第163天
我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分,所以它可以使用库。我说过我不介意让它使用库,而我提到这个的原因是,今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式:求助于 Windows 或…...
多模态模型Orpheus,基于病理图像的乳腺癌复发风险智能评估工具|顶刊解读·25-03-17
小罗碎碎念 在医学领域,尤其是乳腺癌治疗方面,准确评估患者的复发风险至关重要。对于占乳腺癌很大比例的 HR/HER2 - 亚型患者,目前主要依靠 Oncotype DX 的复发评分(RS)来指导治疗决策。 然而,该检测存在…...
基于MapReduce的气候数据分析
标题:基于MapReduce的气候数据分析 内容:1.摘要 本文聚焦于基于MapReduce的气候数据分析。背景在于随着全球气候变化问题日益严峻,海量气候数据的高效处理和分析成为关键。目的是利用MapReduce技术对气候数据进行有效挖掘,以揭示气候变化规律和趋势。方…...
Spring 原生启动过程
Spring(Spring Framework)的原生启动过程,它主要涉及 ApplicationContext 的初始化、BeanFactory 的加载、Bean 的创建与依赖注入。下面详细解析: Spring 原生启动过程 Spring 本身不依赖 SpringApplication,其核心在…...
【React】useEffect、useLayoutEffect底层机制
目录 useEffect不设置依赖设置空数组,无依赖设置多个依赖返回值是一个函数总结useEffect的使用环境useEffect 中发送请求错误示例用.then获取数据在useEffect创建一个函数 总结 useLayoutEffectuseLayoutEffect 和useEffect区别执行时机:浏览器渲染的关系…...
RTSP/Onvif视频安防监控平台EasyNVR调用接口返回匿名用户名和密码的原因排查
视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。平台拓展性强、支持二次开发与集成,可应用在景区、校园、水利、社区、工地等场…...
Linux-数据结构-线性表-单链表
一.链表的概念 【1】线性表的链式存储 解决顺序存储的缺点,插入和删除,动态存储问题。 【2】特点: 线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存…...
基于SpringBoot+Vue3实现的宠物领养管理平台功能一
一、前言介绍: 1.1 项目摘要 随着社会经济的发展和人们生活水平的提高,越来越多的人开始关注并参与到宠物领养中。宠物已经成为许多家庭的重要成员,人们对于宠物的关爱和照顾也日益增加。然而,传统的宠物领养流程存在诸多不便&a…...
DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)
🌟引言: DeepSeek作为国产AI大模型,以强大的逻辑推理和结构化内容生成能力著称,擅长根据用户需求生成PPT大纲或Markdown文本;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT,两者结合实现“内容+设计”全流程自动化 名人说:苔花如米小,也学牡丹开。——…...
准确---快速安装nginx
1. 安装 Nginx 和 Stream 模块 首先,使用 yum 安装 Nginx 及其 Stream 模块: yum install nginx yum install nginx-mod-stream这将安装 Nginx 及其 Stream 模块,Stream 模块用于处理 TCP 和 UDP 流量,通常用于代理、负载均衡等…...
本地知识库RAG总结
目录 RAG流程: 知识库的要求: 知识抽取: 知识存储: 向量化: 知识检索: 应用客户端: RAG智能问答应用几个痛点: 如何提升召回率改进思路: 如何提升回答专业性: RAG评测: 总结: 参考…...
Trae IDE 介绍与使用教程
一、产品概述 Trae IDE 是由字节跳动推出的国内首个原生AI集成开发环境,专为中文开发者深度定制,旨在通过智能化工具降低编程门槛,提升开发效率。作为对标国外Cursor的国产替代方案,Trae不仅继承了AI驱动的代码生成与补全功能&am…...
OceanBase 用户问题精选答疑:OceanBase 版本升级解析
背景 此篇博客的源自于OceanBase社区论坛内一位名为皇甫侯的热心用户所提的建议,希望向OceanBase的用户介绍OceanBase的版本升级路径。本文以一个版本升级为示例,汇总了对用户而言比较重要的版本升级要点,期望通过这份分享,能让读…...
SpringBoot 和vue前后端配合开发网页拼图10关游戏源码技术分享
今天分享一个 前后端结合 的网页游戏 开发项目源码技术。 这也是我第一次写游戏类的程序,虽然不是特别复杂的游戏,但是是第一次写,肯定要记录一下了,哈哈。 游戏的内容 就是 我们显示中玩的那个 拼图碎片的 游戏,类似下…...
LeetCode 1005. K 次取反后最大化的数组和 java题解
https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ 看着简单但是写si人的一题。 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);//排序int last_negative-1,first_positive-1;//最后一个负…...
c++ 类和对象 —— 中 【复习笔记】
1. 类的默认成员函数 如果一个类什么成员都没有,简称空类。但实际上,任何类在不写成员时,编译器会自动生成6个默认成员函数(用户未显式实现,编译器生成的成员函数) 这6个成员函数可分为三类: …...
「速通AI编程开发」共学(三):提示词(Prompts)配置项
「速通AI编程开发」共学(三) 一、共学课程来源学习初衷 二、介绍不同模式下的提示词(Prompts)支持性提示词 三、提示词学习材料分享 一、共学课程来源 Datawhale通过开源学习模式,助力AI学习者与知识连接,…...
Spring Cloud Stream - 构建高可靠消息驱动与事件溯源架构
一、引言 在分布式系统中,传统的 REST 调用模式往往导致耦合,难以满足高并发和异步解耦的需求。消息驱动架构(EDA, Event-Driven Architecture)通过异步通信、事件溯源等模式,提高了系统的扩展性与可观测性。 作为 S…...
电脑如何录屏
以下是电脑录屏的常用方法总结,涵盖系统自带工具、第三方软件及进阶功能,结合不同场景需求推荐最佳方案: 一、系统自带工具 Xbox Game Bar(Windows 10/11) 操作步骤:按 WinG 打开游戏栏 → 点击录制按钮&am…...
【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)
泳道分组并且着色 分组用 box和endbox ,颜色用#xxx,标注用"xxx" box "浏览器" #LightGreen participant "浏览器1" as Browser participant "浏览器2" as Browser2 endboxparticipant "服务端" as …...
c++ 中的可变参数模板与折叠表达式
c 11 引入了可变参数模板,c 17 引入了折叠表达式,比 c 语言的可变参数更加简洁灵活。这篇博客总结了一些例子。 …(省略号)用于可变参数(Variadic Arguments),它可以放在模板参数 或 函数参数的…...
websocket学习手册及python实现简单的聊天室
概述 WebSocket 是一种网络通信协议,允许在单个 TCP 连接上进行全双工通信。它最核心的优势就在于实现了持久连接,实现了实时的数据传输。HTTP 协议有一个很大的缺点,通信只能由客户端发起,服务器返回响应后连接就会关闭…...
论文阅读:2023-arxiv Can AI-Generated Text be Reliably Detected?
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 文章目录 Abstract(摘要)1 Introduction(引言)Conclusion(结论) Can AI-Generated Text be Reliably D…...
Mock接口编写教程-axios-mock-adapter(React)
Mock模拟接口编写教程 直接在前端实现接口模拟 1.第一步 设置模拟接口 // mock.ts import axios from axios import MockAdapter from axios-mock-adapter// 创建一个模拟适配器 const mock new MockAdapter(axios)// 设置模拟接口 export const setupMock () > {mock.…...
react(一):特点-基本使用-JSX语法
初识React React是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发和维护。 官网文档:React 官方中文文档 特点 1.声明式编程 2.组件化开发 3.多平台适配 开发依赖 开发React必须依赖三个库: 1.react:包含react所必…...
golang函数与方法的区别
1.调用方式的区别 函数的调用方式:函数名(参数...) 方法的调用方式: 变量.方法名(参数...) 2.函数的使用 package mainimport "fmt" //函数参数为值类型,调用的时候只能传递值类型数据&#…...
解决 openeuler 系统 docker 下载慢,docker 镜像加速
一、步骤说明 1. 编辑 Docker 配置文件 Docker 的镜像源配置文件路径为 /etc/docker/daemon.json。如果该文件不存在,则需要先创建目录和文件。 # 创建目录(如果不存在) sudo mkdir -p /etc/docker# 编辑配置文件(使用 nano 或…...
Android ARouter的详细使用指南
Android ARouter的详细使用指南。我需要先确定用户的基础,可能他们已经有Android开发经验,但对ARouter不太熟悉。首先,我应该介绍ARouter是什么,解决什么问题,比如模块化中的页面跳转问题。然后,需要分步骤…...