保姆级小白就业人工智能(视频+源码+笔记)

🍅我是小宋, Java学习AI,记录学习之旅。关注我,带你轻松过面试。提升简历亮点(14个demo) 🍅我的java面试合集已有12W+
浏览量。🌏号:tutou123com。拉你进专属群。

-418034410.jpg

⭐⭐你的点赞就是我的进步⭐⭐
⭐⭐你的留言就是我的动力⭐⭐
⭐⭐加群进入VIP通道⭐⭐
⭐⭐加入VIP:https://t.zsxq.com/AJLn4

VIP专属:
Snipaste_2024-06-14_23-14-43.png

加入VIP:https://t.zsxq.com/AJLn4

⭐点个Star,就是对作者莫大的帮助,留个言就是对作者最大的鼓励⭐

  • 🛠️ 本合集一切为了就业,3星之内熟悉4星了解,五星必会。
  • 🏆 **想要快速完成学习,先看2星,再看4星,5星

目录

  • 一.前言(⭐⭐⭐⭐⭐)
    • 1.适合人群
    • 2.合集目的
    • 3.就业必会
  • 二.基础(了解)(⭐⭐⭐)
    • 1.深度学习的基本概念⭐⭐
        • 1.1核心概念
        • 1.2核心算法原理
        • 1.3数学模型和具体操作步骤
        • 1.4应用领域
    • 2.深度学习经典模型概览⭐⭐
    • 3.深度学习模型优化策略概览⭐⭐⭐
        • 3.1数据预处理
        • 3.2模型选择与结构调整
        • 3.3优化算法选择
        • 3.4正则化方法
        • 3.5超参数调整
        • 3.6模型评估与调试
        • 3.7深入研究
          • 3.7.1如何根据数据集选择合适的深度学习模型结构?
          • 3.7.2为什么要对数据进行归一化和标准化处理?
        • 3.8什么是正则化方法及其在防止过拟合中的作用?
          • 3.8.1正则化方法概述
          • 3.8.2正则化方法在防止过拟合中的作用
    • **4.深度学习GPU原理与应用方法⭐⭐**
      • 4.1GPU在深度学习中的作用
      • 4.2GPU的架构原理
      • 4.3GPU在深度学习中的应用方法
      • 4.4实际应用案例
      • 4.5GPU原理
      • 4.6结论
    • 5.Transformer模型的核心原理(NLP入门 )⭐⭐⭐⭐
      • 5.0Transformer模型的核心原理
      • 5.1Transformer整体结构:
      • 5.2Self-Attention
        • 2.1 为什么选择Self-Attention
        • 2.2 Self-Attention结构
        • 2.3 Scaled Dot-Production Attetntion
        • 2.4 Multi-Head Attention
      • 5.3The Residual Connection 残差连接
      • 5.4Positional Encoding
      • 5.5Layer Norm
      • 5.6 Mask
        • 6.1 padding mask
        • 6.2 sequence mask
      • 5.7.Encoder and Decoder stacks
    • **5.0深入研究**
      • 5.1**Transformer模型中自注意力机制是如何工作的?**
      • 5.2Transformer模型中自注意力机制的工作原理
      • 5.3**为什么要引入多头注意力机制?**
      • 5.4**Transformer模型中的位置编码有哪些常见的实现方式?**
        • 1. 三角函数式位置编码(Sinusoidal Position Encoding)
        • 2. 可学习式位置编码
        • 3. 相对位置编码
        • 4. 旋转位置编码(RoPE)
        • 5. ALiBi位置编码
  • 三.大模型基础(⭐⭐⭐⭐)
    • 1.GPT系列模型核心原理LLaMA系列模型核心原理(⭐⭐⭐)
      • 1.1GPT系列模型核心原理 (GPT1/GPT2/GPT3/GPT4/InstructGPT)
      • 1.2LLaMA系列模型核心原理(LLaMA/LLaMA2/Alpaca/Vicuna/BaiChuan2)
      • 1.3优秀开源大模型核心原理(BLOOMZ/ChatGLM3/Qwen1.5)
    • 2.大模型应用框架LangChain核心原理(⭐⭐⭐ )
      • 2.1LangChain核心原理
    • 2.0深入研究(⭐⭐⭐)了解
      • 2.1为什么需要 Langchain?
      • 2.2Langchain的核心模块
      • 2.3Langchain的学习路径
      • 2.4参考资料:
      • 2.5其他语言的LangChain:
      • 2.6开源项目:
    • 3.多模态技术(⭐⭐⭐)
      • 3.1经典多模态模型核心原理(Vit/CLIP/ALBEF/BLIP)
      • 3.2多模态大模型核心原理(BLIP-2/LLaVA/Qwen-VL)
  • 四.就业(必会)(⭐⭐⭐⭐⭐)
    • 1.大模型微调基础(⭐⭐⭐⭐⭐)
      • 1.0先看个vedio
      • 1.1微调技术
      • 1.2大模型微调的数据收集和处理过程(⭐⭐⭐)
        • 1.2.1数据收集
        • 1.2.2数据预处理
        • 1.2.3数据标注
        • 1.2.4数据增强
        • 1.2.5数据集构建
      • 1.3大模型Tuning技术原理 (Prompt-Tuning/Instruction-Tuning/P-Tuning)⭐⭐⭐⭐⭐
      • 1.4大模型全参数微调技术原理(DeepSpeed)(⭐⭐⭐)
      • 1.5大模型CoT/ToT/GoT/AoT 技术(⭐⭐⭐)
      • 1.6大模型DPO技术核心原理(⭐⭐⭐)
    • 2.实战项目(⭐⭐⭐⭐⭐)
      • 2.1咕泡AI第六期(8h)(⭐⭐⭐⭐⭐)
      • 2.2微调项目(⭐⭐⭐⭐⭐)
      • 2.3就业必会:(⭐⭐⭐⭐⭐)

一.前言(⭐⭐⭐⭐⭐)

1.适合人群

💼 **IT转⾏(JAVA/C/PHP等语⾔) **

  • 具有1-3年左右编程⼯作经验,对NLP感兴趣或有业务需求

🤖IT兴趣爱好者(拒绝平庸谋求突破)

  • 在⾃⼰多年积累的领域有⾜够的经验,想将⼈⼯智能

完美应⽤在NLP领域。

2.合集目的

** 🛠️ 本合集一切为了就业,3星之内熟悉,4星了解,五星必会。**
** **🏆 想要快速完成学习,先看2星,再看4星,5星。

3.就业必会

  • 会基础的python
  • 会用pytora
  • 会用HUface
  • 会微调

说白了就是微调和调用API

二.基础(了解)(⭐⭐⭐)

1.深度学习的基本概念⭐⭐

深度学习是一种模拟人脑神经网络结构的机器学习算法,它能够自动提取数据的高层次抽象特征,并在大数据环境下展现出强大的学习能力和泛化性能。

1.1核心概念
  • 多隐藏层结构:深度学习模型由多个隐藏层组成,每个隐藏层可以学习到数据的不同抽象级别的特征,形成端到端的特征提取能力。

2238e4c6abd7aeb14a402c984e40cae8.jpg

隐藏层结构

  • 端到端学习:深度学习模型可以直接从原始数据出发,通过反向传播算法自动学习数据的高层次特征表示,不需要依赖于人工设计的特征。


端到端学习

  • 强大的泛化能力:通过多层次特征的组合学习,深度学习模型可以捕获数据中复杂的潜在模式,在大规模数据集上展现出优异的泛化性能。
  • 在这里插入图片描述

泛化能力

1.2核心算法原理
  • 人工神经网络:是深度学习的基础,通过模拟生物神经网络的结构和功能,构建由输入层、隐藏层和输出层组成的多层感知机模型。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


人工神经网络

  • 卷积神经网络:是一种特殊的神经网络,主要应用于图像处理和分类任务,通过卷积核对输入图像进行卷积操作,以提取图像的特征。


卷积神经网络

  • 循环神经网络:主要应用于处理序列数据,如时间序列分析、自然语言处理等,通过循环连接实现对序列数据的建模。
1.3数学模型和具体操作步骤

深度学习的数学模型通常涉及向量、矩阵运算、微积分、概率论与统计等数学知识。具体操作步骤包括数据预处理、网络结构设计、参数初始化、前向传播、反向传播、权重更新等。

1.4应用领域

深度学习已经广泛应用于计算机视觉、自然语言处理、语音识别、医疗诊断、金融预测等多个领域,成为现代人工智能技术的核心。

image.png

2.深度学习经典模型概览⭐⭐

深度学习领域中有许多经典模型,它们各自在不同的应用场景中发挥着重要作用。以下是一些广为人知的深度学习模型及其特点:

  1. 卷积神经网络(CNN):CNN是专为处理图像数据设计的神经网络,广泛应用于图像识别和处理任务。经典的CNN架构包括LeNet、AlexNet、VGG、GoogLeNet等。


卷积神经网络

  1. 循环神经网络(RNN):RNN适用于处理序列数据,如文本和语音。它通过循环连接来捕捉时间序列中的依赖关系。LSTM和GRU是RNN的变种,它们通过门控机制改善了RNN处理长距离依赖的能力。


循环神经网络

  1. 生成对抗网络(GAN):GAN由两个网络组成,一个生成器和一个判别器,通过博弈学习生成高质量的数据。DCGAN、WGAN、SAGAN等是GAN的变体,广泛应用于图像生成和编辑。


生成对抗网络

  1. Transformer:Transformer模型基于自注意力机制,不使用循环结构,能够处理长距离依赖问题。它在自然语言处理任务中表现出色,如BERT、GPT等。


Transformer模型

  1. 序列到序列模型(Seq2Seq):Seq2Seq模型用于处理序列数据的转换任务,如机器翻译和图像字幕。它通常结合注意力机制来提高模型的性能。


序列到序列模型

  1. 强化学习:强化学习模型如Deep Q Network和Policy Gradient等,通过与环境互动来学习最优策略,广泛应用于游戏和机器人控制等领域。
  2. 自然语言处理(NLP):NLP模型如Word Embeddings、Word Phrase Embedding、Text Classification等,用于处理文本数据,提取语义信息。


NLP

  1. 计算机视觉(Computer Vision):除了CNN外,还有ResNets、Inception等网络模型,它们通过残差连接和金字塔结构等创新设计,进一步提升了计算机视觉任务的性能。

计算机视觉

  1. 其他模型:如Variational Autoencoders (VAEs) 和 Siamese Networks 等,它们在不同的应用场景中有着独特的优势和用途。

这些模型的共同特点是通过深层次的网络结构来学习数据的高层次表示,从而实现复杂的任务。随着深度学习技术的不断进步,新的模型和架构持续涌现,推动着人工智能领域的发展。

3.深度学习模型优化策略概览⭐⭐⭐

深度学习模型优化是一个复杂的过程,涉及到多个方面的调整和改进。以下是一些关键的优化策略:

3.1数据预处理

数据预处理是优化深度学习模型的第一步,包括数据清洗、归一化、标准化和增强等方法。这些步骤可以提高模型的输入质量,减少噪声和误差,从而提高模型的性能。

数据预处理

3.2模型选择与结构调整

选择合适的模型结构对于深度学习模型的优化至关重要。根据问题的特点,可以选择卷积神经网络(CNN)、循环神经网络(RNN)等不同的网络结构。此外,调整网络结构,如增加或减少层数、调整隐藏单元数量等,也可以优化模型的性能。dc971b07eb0a86c857e2e283417e1769.jpg
CNN结构

3.3优化算法选择

选择合适的优化算法可以加速模型的训练过程。常用的优化算法包括梯度下降、Adam、RMSprop等。不同的优化算法适用于不同的问题和数据集,因此需要根据具体情况进行选择。

梯度下降

3.4正则化方法

正则化方法可以防止模型过拟合,提高模型的泛化能力。常见的正则化方法包括L1、L2正则化和Dropout等。

L2正则化

3.5超参数调整

超参数调整是优化深度学习模型的另一个重要方面。学习率、批量大小、迭代次数等超参数对模型的训练过程和最终性能有着重要影响。通过实验和调整这些超参数,可以找到最佳的组合,以提高模型的性能。

3.6模型评估与调试

模型评估和调试是优化过程中的重要步骤。通过评估模型在验证集上的性能,可以发现模型的不足之处,并进行相应的调整。使用交叉验证、多种评估指标和可视化工具等方法可以帮助进行模型评估和调试。
以上是深度学习模型优化的一些关键策略。在实际应用中,可能需要根据具体情况灵活运用和调整这些策略,以达到最佳的优化效果。
image.png

3.7深入研究
3.7.1如何根据数据集选择合适的深度学习模型结构?

选择合适的深度学习模型结构是一个关键的问题,它直接影响着模型的性能和训练效果。以下是一些帮助选择合适神经网络结构的指导原则:

  1. 任务目标:首先要明确你的任务目标是什么,例如图像分类、语音识别、机器翻译等。不同的任务需要不同类型的神经网络结构。
  2. 数据集:了解你的数据集的特点,包括数据的类型、维度、数量等。这将有助于确定是否需要使用卷积神经网络、循环神经网络等特定结构。
  3. 模型复杂度:根据任务的复杂度和计算资源的限制,选择合适的模型复杂度。过于复杂的模型可能会导致过拟合,而过于简单的模型可能无法充分学习数据的特征。
  4. 网络架构:根据任务的特点选择适当的网络架构。例如,在图像分类任务中,常用的网络架构包括卷积神经网络(CNN)和深度残差网络(ResNet)。在自然语言处理任务中,常用的网络架构包括循环神经网络(RNN)和Transformer。
  5. 激活函数:选用适当的激活函数来引入非线性,以便神经网络可以学习复杂的特征表达。常用的激活函数有ReLU、Sigmoid和Tanh等。
  6. 正则化和优化算法:考虑是否需要在神经网络中引入正则化技术,例如L1和L2正则化,以防止过拟合。选择合适的优化算法,如随机梯度下降(SGD)和Adam,以提高训练效果和收敛速度。
  7. 超参数调优:根据经验或使用网格搜索、随机搜索等方法,对神经网络的超参数进行调优,以找到最佳的结构。

最后,建议尝试不同的网络结构,并通过交叉验证等方法进行模型比较和评估,以选择最合适的神经网络结构。

3.7.2为什么要对数据进行归一化和标准化处理?

归一化和标准化处理的必要性

在机器学习和数据科学中,归一化和标准化处理是常见的数据预处理步骤,它们对于提高模型的性能和稳定性至关重要。以下是进行这些处理的几个主要原因:

  1. 加速收敛:在使用梯度下降等优化算法时,归一化或标准化可以加快模型参数的收敛速度。这是因为归一化后的数据使得优化算法的步长更加均匀,避免了因特征尺度不一致而导致的缓慢收敛。
  2. 防止梯度消失和爆炸:在深层神经网络中,梯度可能会因为特征尺度的巨大差异而消失或爆炸,影响模型的训练稳定性。归一化有助于缓解这些问题,确保梯度能够有效地传播。
  3. 提高模型稳定性:归一化可以减少不同特征之间的比例差异,避免模型对某些特征过度敏感,从而提高模型的稳定性。
  4. 提升模型泛化能力:通过减少模型对训练数据的依赖程度,归一化有助于提升模型的泛化能力,使模型在未知数据上的表现更加稳健。
  5. 解决量纲问题:归一化和标准化可以消除不同特征之间的量纲影响,使得所有特征在同一数量级上,便于进行综合对比评价。
  6. 避免数值问题:在某些算法中,过大的数值可能会导致计算错误或数值不稳定。归一化可以将数据缩放到一个适当的范围内,避免这些问题。
  7. 改善距离计算:在使用基于距离的算法(如KNN)时,归一化可以确保所有特征对距离的贡献是公平的,避免某些特征因为尺度过大而主导整个距离计算。

综上所述,归一化和标准化处理是数据预处理中不可或缺的步骤,它们对于提高模型的性能和稳定性有着重要的作用。在实际应用中,根据具体问题和模型的需求选择合适的归一化或标准化方法是非常重要的。

3.8什么是正则化方法及其在防止过拟合中的作用?
3.8.1正则化方法概述

正则化方法是一种用于防止过拟合的技术,它通过添加额外信息来约束或惩罚模型复杂度。在深度学习中,正则化通常通过修改损失函数来实现,将一个与模型复杂度相关的项加到原始的损失函数上。常见的正则化方法包括L1正则化(Lasso)、L2正则化(Ridge)、Dropout和Early Stopping等。

3.8.2正则化方法在防止过拟合中的作用

正则化方法通过对模型参数施加约束,减少模型的复杂度,从而防止过拟合。L1正则化通过添加权重绝对值之和的项来约束权重,促使一些权重趋向于零,有助于实现特征选择。L2正则化通过添加权重平方和的项来约束权重,使模型在拟合训练数据时,不仅要考虑误差的大小,还要考虑权重参数的大小,促使模型在所有特征之间分散权重,避免对某些特征的过度拟合。
Dropout是一种在网络的训练过程中随机丢弃(设置为零)一些神经元输出的技术,相当于对模型进行了一种随机化的简化,减少了模型对特定训练数据的依赖,从而提高模型的泛化能力。 ![
Early Stopping是一种在模型训练过程中监控验证集的表现,一旦模型在验证集上的表现不再提升时停止训练的方法,它可以防止模型继续学习训练数据中的噪声,从而避免过拟合。
综上所述,正则化方法通过不同的机制减少模型的复杂度,提高模型的泛化能力,有效防止过拟合。
image.png

4.深度学习GPU原理与应用方法⭐⭐

image.png

4.1GPU在深度学习中的作用

GPU(Graphics Processing Unit,图形处理单元)最初设计用于处理图形渲染任务,但随着计算能力的提升,现在的GPU也被广泛应用于通用计算任务,特别是深度学习。深度学习模型通常涉及大量的矩阵运算,这些运算在CPU上执行效率较低,而GPU的并行计算能力可以大幅加速这类计算。GPU拥有成千上万个计算核心,可以同时处理多个数据集,从而显著缩短模型训练时间。 image.png

4.2GPU的架构原理

GPU的架构设计主要是为了图形渲染,但其并行处理能力使其适用于深度学习。GPU通常由多个流处理器(Streaming Multiprocessor, SM)组成,每个SM包含多个CUDA核心或流处理器(Streaming Processor, SP)。这些核心可以同时执行多个计算任务,实现高效的并行计算。GPU还配备了专用的高速内存(VRAM),用于存储模型参数和数据,以及高速的显存带宽,确保数据能够迅速传输。
image.png
GPU架构

4.3GPU在深度学习中的应用方法

在深度学习中,GPU的应用方法主要包括以下几点:

  1. 数据并行:将数据集分割成多个子集,每个GPU处理一个子集,然后将结果合并以更新模型参数。
  2. 模型并行:将模型的不同部分分布在不同的GPU上,每个GPU处理模型的一部分,然后通过高速通信网络交换信息。
  3. 混合精度训练:使用半精度浮点数(FP16)进行计算,以减少内存使用量和提高计算速度,同时保持较高的精度。
  4. 分布式深度学习:使用多台机器上的多个GPU进行训练,进一步提高训练速度和模型的规模。

4.4实际应用案例

在实际应用中,例如使用TensorFlow或PyTorch等深度学习框架时,可以通过简单的配置将模型和数据迁移到GPU上,利用GPU的并行计算能力加速训练过程。例如,可以通过.cuda()方法将模型、数据和损失函数迁移到GPU上,然后使用GPU进行训练。

4.5GPU原理

  1. GPU架构:GPU拥有成百上千个小核心,这些核心被组织成流处理器,能够并行执行相同的指令,从而加速计算18。
  2. 并行处理能力:与CPU相比,GPU的并行性使其在处理大规模数据和执行复杂算法时表现出色,可以同时处理多个数据元素,加速矩阵运算、图像处理、机器学习和深度学习等任务

4.6结论

GPU在深度学习中扮演着重要角色,其并行计算能力和专用的硬件设计使其成为加速深度学习模型训练的关键工具。通过合理的应用方法,可以充分利用GPU的优势,提高深度学习的效率和效果。

5.Transformer模型的核心原理(NLP入门 )⭐⭐⭐⭐

image.png

5.0Transformer模型的核心原理

Transformer模型是一种基于注意力机制的深度学习模型,它在自然语言处理(NLP)领域取得了显著的成果。Transformer模型的核心原理包括自注意力机制、多头注意力、位置编码、编码器和解码器结构等。

5.1Transformer整体结构:

从图中可以看出,整体上Transformer由四部分组成:

  1. Inputs : Inputs= WordEmbedding(Inputs) + PositionalEmbedding
  2. Outputs:_ Ouputs=WordEmbedding(Outputs)+PositionalEmbedding_
    3.** Encoders stack** : 由六个相同的Encoder层组成,除了第一个Encoder层的输入为Inputs,其他Encoder层的输入为上一个Encoder层的输出
    4.** Decoders stack** : 由六个相同的Decoder层组成,除了第一个Decoder层的输入为Outputs和最后一个Encoder层的输出,其他Decoder层的输入为上一个Decoder层的输出和最后一个Encoder层的输出

如下图所示,在更高的层级上来理解Encoder和Decoder层之间的输入和输出的关系,可以更直观。

而Encoder层和Decoder层的内部组成之间的差异如下图所示。每一个Encoder层都包含了一个Self-Attention子层和一个Feed Forward子层。每个Decoder层都包含了一个Self-Attention子层、一个Encoder-Decoder Attention子层和一个Feed Forward子层。Encoder层和Decoder层之间的差别在于Decoder中多了一个Encoder-Decoder Attention子层,而其他两个子层的结构在两者中是相同的。

举例说明
20190110105322420.gif

首先输入源语:“I arrived at the ”
第一层 self-attention
然后第二层 self-attention,输入是上一层attention的结果
然后第三层 self-attention,输入是上一层的attention结果。
这样 见过三次多头attention后,得到输入句子的句法树。
完了Decoder是< start> 开始,拿它与encoder最后的输出进行attention,经过多次的attention得到输出。
第二个输出时,会把decoder上一步的输出也拿来一起attention.

5.2Self-Attention

2.1 为什么选择Self-Attention

首先通过一个简单的例子,来简单说明一下self-Attention这种机制较之传统的序列模型的优势所在。
比如我们当前要翻译的句子为_** The animal didn’t cross the street because ****it was too tired,在翻译it时,它究竟指代的是什么呢?要确定it指代的内容,毫无疑问我们需要同时关注到这个词的上下文语境中的所有词,在这句话中重点为animal, street, tired,然后根据常识,我们知道只有animal才会tired,所以确定了it指代的是animal
如果将
tired改为narrow_,那很显然
it**应该指的是_street,因为只有street才能用narrow_修饰。

Self-Attention机制在对一个词进行编码时,会考虑这个词上下文中的所有词和这些词对最终编码的贡献,再根据得到的信息对当前词进行编码,这就保证了在翻译_it时,在它上下文中的**animal, street, tired**都会被考虑进来,从而将it正确的翻译成animal。_

下图是模型的最上一层(下标0是第一层,5是第六层)Encoder的Attention可视化图。这是tensor2tensor这个工具输出的内容。我们可以看到, 在编码 **it **的时候有一个Attention Head(后面会讲到)注意到了Animal,因此编码后的 **_it _**有 **_Animal _**的语义。

Self-Attention的优势不仅仅在于对词语进行编码时能充分考虑到词语上下文中的所有信息,还在于这种机制能够实现模型训练过程中的并行,这使得模型的训练时间能够较传统的序列模型大大缩短。
传统的序列模型由于t时刻的状态会受到t−1时刻状态的影响,所以在训练的过程中是无法实现并行的,只能串行。而Self-Attention模型中,整个操作可以通过矩阵运算很容易的实现并行。

2.2 Self-Attention结构

为了能更好的理解Self-Attention的结构,首先介绍向量形式的Self-Attention的实现,再从向量形式推广到矩阵形式。

对于模型中的每一个输入向量(第一层的输入为词语对应的Embedding向量,如果有多层则其它层的输入为上一层的输出向量), 首先我们需要根据输入向量生成三个新的向量:Q(Query)、K(Key)、V(Value), 其中Query向量表示为了编码当前词需要去注意(attend to)的其他词(包括当前词语本身),Key向量表示当前词用于被检索的关键信息,而Value向量是真正的内容。 三个向量都是以当前词的Embedding向量为输入,经过不同的线性层变换得到的。

下面以具体实例来理解Self-Attention机制。比如当我们的输入为_thinkingmachines_时,首先我们需要对它们做Word Embedding,得到对应的词向量表示 x1, x2,再将对应的词向量分别通过三个不同的矩阵进行线性变换,得到对应的向量q1,k1,v1和q2,k2,v2。 为了使得Query和Key向量能够做内积,模型要求WK、WQ的大小是一样的,而对WV的大小并没有要求。

q1=x1∗WQ1,k1=x1∗WK1,v1=x1∗WV1
q1=x1∗W1Q,k1=x1∗W1K,v1=x1∗W1V
q2=x2∗WQ2,k2=x2∗WK2,v2=x2∗WV2
q2=x2∗W2Q,k2=x2∗W2K,v2=x2∗W2V


图中给出了上述过程的可视化,在得到所有的输入对应的qi、ki、vi qi、ki、vi向量后,就可以进行Self-Attention向量的计算了。如下图所示,当我们需要计算_thinking_对应的attention向量时,首先将q1和所有输入对应的ki做点积,分别得到不同的Score

Score:
Score1=q1∗k1      Score2=q1∗k2


如下图所示,再对Score值做scale操作,通过除以√dk将score值缩小,这样能使得score值更平滑,在做梯度下降时更稳定,有利于模型的训练。再对得到的新的Score值做Softmax,利用Softmax操作得到的概率分布对所有的操作得到的概率分布对所有的v_{i}进行加权平均,得到当前词语的最终表示
进行加权平均,得到当前词语的最终表示z_{1}。对_machines_的编码和上述过程一样。

z1=Softmax(Score1,Socre2)[v1v2]T
z1=Softmax(Score1,Socre2)[v1v2]T


如果我们以向量形式循环输入所有词语的Embedding向量得到它们的最终编码,这种方式依然是串行的,而如果我们把上面的向量计算变为矩阵的运算,则可以实现一次计算出所有词语对应的最终编码,这样的矩阵运算可以充分的利用电脑的硬件和软件资源,从而使程序更高效的执行。

下图所示为矩阵运算的形式。其中X为输入对应的词向量矩阵,WQ、WK、WV为相应的线性变换矩阵,Q、K、V为X经过线性变换得到的Query向量矩阵、Key向量矩阵和Value向量矩阵

接下来再利用Q、K、V
Q、K、V计算ScoreScore矩阵,通过将ScoreScore矩阵除以dk−−√dk进行ScaleScale操作,再对结果按行进行Softmax
Softmax,利用得到的概率分布得到最后的编码矩阵,具体过程的可视化如下图所示。

2.3 Scaled Dot-Production Attetntion

__Scaled Dot-Product Attention__其实是在上一节的attention的基础上加入了__scale__和__mask__操作进行优化,具体结构如下图所示。首先对于__scale__操作,缩放因子的加入是考虑到Q∗K
Q∗K的结果矩阵中的值可能会很大,除以一个缩放因子可以使值变小,这样模型在做梯度下降时可以更加稳定。__mask__操作主要是为了屏蔽掉输入中没有意义的部分(padding mask)和针对特定任务需要屏蔽的部分(sequence mask),从而降低其对最后结果的影响。这两种不同的mask方法在后面会详细说明。

2.4 Multi-Head Attention

Scaled dot-product attention只通过一组线性变换矩阵WQ、WK、WV
WQ、WK、WV得到一组Q、K、V,来实现对词语上下文信息的关注。而Multi-Head Attention提出,我们可以通过定义多组线性变换矩阵(WQi,WKi,WVi),得到多组(Qi,Ki,Vi),它们分别关注输入的不同部分的上下文信息,这样使得最后的编码中关注的信息能够更多。换句话说,multi-head attention就是针对输入的不同部分分别做scaled dot-product attention,再将得到的多个输出拼接成最终的输出矩阵。值得注意的一点是,在Multi-head Attention中,每个head的输入都只是模型的输入词向量矩阵的一部分。在Transformer中,每个head的输入都是从词向量矩阵的最后一维进行切分出来的一部分,例如模型输入的词向量矩阵大小为N∗dmodelN∗dmodel,Transformer中Multi-head Attention中head的数量设置为8,则每个head的输入矩阵大小为N∗(dmodel/8)

上图给出了在不同head中的attention操作,由图中可知,每个head中都存在一组WQi,WKi,WVi
WiQ,WiK,WiV,通过与输入进行矩阵相乘运算,可以得到一组对应的(Qi,Ki,Vi),并由此得到head的输出zi。在单个head中进行的attention操作,与上一节所讲的完全相同。最后多个head得到的结果如下图所示。

而最后我们所需要的输出不是多个矩阵,而是单个矩阵,所以最后多个head的输出都在矩阵的最后一个维度上进行拼接,再将得到的矩阵与一个矩阵WO
WO相乘,这一次线性变换的目的是对拼接得到的矩阵进行压缩,以得到最理想的输出矩阵。

下图所示,为完整的Multi-head Attention过程,

那么我们如何来理解多个head分别注意到的内容呢?下面给出两个图来举例说明。第一个图给出了在翻译it时两个head分别注意到的内容,从中可以很明显的看到,第一个head注意到了animal,而第二个head注意到了tired,这就保证了翻译的正确性。

5.3The Residual Connection 残差连接

在Transformer中,每个Multi-Head Attention层和Feed Forward层都会有一个残差连接,然后再接一个Layer Norm层。残差连接在Encoder和Decoder中都存在,且结构完全相同。如下图所示,一个Encoder中Self-Attention层的输出z1,z2和输入(x1,x2)相加,作为LayerNorm层的输入。残差连接本身有很多好处,但并不是Transformer结构的重点,这里不做详述。

5.4Positional Encoding

我们在Transformer中使用Self-Attention的目的是用它来代替RNN。RNN只能关注到过去的信息,而Self-Attention通过矩阵运算可以同时关注到当前时刻的上下文中所有的信息,这使得其可以实现和RNN等价甚至更好的效果。同时,RNN作为一种串行的序列模型还有一个很重要的特征,就是它能够考虑到单词的顺序(位置)关系。在同一个句子中,即使所有的词都相同但词序的变化也可能导致句子的语义完全不同,比如”北京到上海的机票”与”上海到北京的机票”,它们的语义就有很大的差别。而Self-Attention结构是不考虑词的顺序的,如果不引入位置信息,前一个例子两句话中中的"北京"会被编码成相同的向量,但实际上我们希望两者的编码向量是不同的,前一句中的"北京"需要编码出发城市的语义,而后一句中的"北京"则为目的城市。换言之,如果没有位置信息,Self-Attention只是一个结构更复杂的词袋模型。所以,在词向量编码中引入位置信息是必要的。
为了解决这个问题,我们需要引入位置编码,也就是t时刻的输入,除了Embedding之外(这是与位置无关的),我们还引入一个向量,这个向量是与t有关的,我们把Embedding和位置编码向量加起来作为模型的输入。这样的话如果两个词在不同的位置出现了,虽然它们的Embedding是相同的,但是由于位置编码不同,最终得到的向量也是不同的。
位置编码有很多方法,其中需要考虑的一个重要因素就是需要它编码的是相对位置的关系。比如两个句子:”北京到上海的机票”和”你好,我们要一张北京到上海的机票”。显然加入位置编码之后,两个北京的向量是不同的了,两个上海的向量也是不同的了,但是我们期望Query(北京1)∗Key(上海1)却是等于Query(北京2)∗Key(上海2)的。

由上图可知,位置编码其实是以加法的形式将词语的Embedding向量加上其位置向量作为最后的输出,这保证了当同一个词出现在句子的不同位置时,其对应的词向量表示是不同的。在Transformer中的positional 具体实现上,首先要明确的是,在Transformer中的的positional encoding矩阵是固定的,当每个输入样本的大小为maxlen∗dmodel时,则我们需要的positional enccoding矩阵的大小同样为maxlen∗dmodel,且这个位置编码矩阵被应用于和所有输入样本做加法,以此将位置信息编码进样本的词向量表示。接下来说一下如何得到这个positional encoding矩阵。
当我们需要的positional encoding矩阵PE的大小为maxlen∗dmodel时,首先根据矩阵中每个位置的下标(i,j)
(i,j)按下面的公式确定该位置的值:
PE(i,j)=i10000(j−j%2)/dmodel
PE(i,j)=10000(j−j%2)/dmodeli
接着,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码
PE(i,2j)=sin(PE(i,2j))
PE(i,2j+1)=cos(PE(i,2j+1))

为什么这样编码就能引入词语的位置信息呢?如果只按照第一个公式那样根据输入矩阵的下标值进行编码的话,显然编码的是词汇的绝对位置信息,即__绝对位置编码__。但词语的相对位置也是非常重要的,这也是Transformer中引入正弦函数的原因进行__相对位置编码__的原因。正弦函数能够表示词语的相对位置信息,主要是基于以下两个公式,这表明位置k+p
k+p的位置向量可以表示为位置k
k的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。
sin(α+β)=sinαcosβ+cosαsinβ
cos(α+β)=cosαcosβ−sinαsinβ

5.5Layer Norm

假设我们的输入是一个向量,这个向量中的每个元素都代表了输入的一个不同特征,而LayerNorm要做的就是对一个样本向量的所有特征进行Normalization,这也表明LayNorm的输入可以只有一个样本。
假设一个样本向量为X=x1,x2,…,xn
X=x1,x2,…,xn,则对其做Layer Normalization的过程如下所示。先求不同特征的均值和方差,再利用均值和方差对样本的各个特征值进行Normalization操作。


Layer Normalization的方法可以和Batch Normalization对比着进行理解,因为Batch Normalization不是Transformer中的结构,这里不做详解。

5.6 Mask

Mask,顾名思义就是掩码,可以理解为对输入的向量或者矩阵中的一些特征值进行掩盖,使其不发挥作用,这些被掩盖的特征值可能是本身并没有意义(比如为了对齐而填充的’0’)或者是针对当前任务为了做特殊处理而特意进行掩盖。
在Transformer中有两种mask方法,分别为__padding mask__和__sequence mask__,这两种mask方法在Transformer中的作用并不一样。__padding mask__在Encoder和Decoder中都会用到,而__sequence mask__只在Decoder中使用。

6.1 padding mask

在自然语言处理的相关任务中,输入样本一般为句子,而不同的句子中包含的词汇数目变化很大,但机器学习模型一般要求输入的大小是一致的,一般解决这个问题的方法是对输入的单词序列根据最大长度进行__对齐__,即在长度小于最大长度的输入后面填’0’。举个例子,当maxlen=20
maxlen=20,而我们输入的矩阵大小为12∗dmodel12∗dmodel时,这是我们对输入进行对齐,就需要在输入的后面拼接一个大小为8∗dmodel8∗dmodel的零矩阵,使输入的大小变为maxlen∗dmodel
maxlen∗dmodel。但显然,这些填充的’0’并没有意义,它的作用只是实现输入的对齐。在做attention时,为了使attention向量不将注意力放在这些没有意义的值上,我们需要对这些值做__padding mask__。
具体来说,做__padding mask__的方法是,将这些没有意义的位置上的值置为一个很小的数,这样在做softmax
softmax时,这些位置上对应的概率值会非常小接近于0,其对最终结果的影响也会降低到最小。

6.2 sequence mask

前面已经说过,在Transformer中,__sequence mask__只用在Decoder中,它的作用是使得Decoder在进行解码时不能看到当前时刻之后的的信息。也就是说,对于一个输入序列,当我们要对t
t时刻进行解码时,我们只能考虑(1,2,…,t−1)时刻的信息,而不能考虑之后的(t+1,…,n)时刻的信息。
具体做法,是产生一个下三角矩阵,这个矩阵的上三角的值全为0,下三角的值全为输入矩阵对应位置的值,这样就实现了在每个时刻对未来信息的掩盖。

5.7.Encoder and Decoder stacks

上面几节中已经介绍了Transformer的主要结构,这一节将在此基础上,从整体上再次理解一下Tranformer的结构

如上图所示,Transformer由6个Encoder层和6个Decoder层组成,其中各个Encoder层的结构完全相同,各个Decoder层的结构也是完全一样的。而Decoder层和Encoder层之间的差别在于Decoder层中多了一个Encoder-Decoder Attention子层和Add & Normalize子层,这一层的输入为Decoder层的上一个子层的输出和Encoder层的最终输出,其中Encoder层的最终输出作为K和V,Decoder层中上一个子层的输出作为Q。

参考内容:https://blog.csdn.net/weixin_48185819/article/details/107208513

5.0深入研究

5.1Transformer模型中自注意力机制是如何工作的?

5.2Transformer模型中自注意力机制的工作原理

Transformer模型中的自注意力机制是一种特殊类型的注意力机制,它允许模型在处理序列数据时考虑序列中所有其他位置的信息。自注意力机制的核心思想是为每个位置分配一个权重,突出重要的上下文信息。它包括三个主要部分:查询(Query)、键(Key)和值(Value)。
计算过程

  1. 查询、键和值的获取:首先,输入序列(例如词向量矩阵)通过线性变换得到查询(Q)、键(K)和值(V)。这些向量是通过将输入向量与三个不同的权重矩阵相乘得到的,权重矩阵是学习得到的参数。
  2. 注意力分数的计算:接着,模型计算每个Query与所有Key之间的点积,以衡量它们之间的相似度。然后,将这些点积的结果除以一个缩放因子(通常是Key向量维度的平方根),并应用softmax函数来获得最终的注意力权重。这一步的结果是一个注意力分数矩阵,表示输入序列中每个元素对其他所有元素的关注程度。
  3. 加权和并输出:最后,模型将上一步得到的注意力权重应用于Value向量,计算加权和。这样,对于输入序列中的每个位置,模型都生成了一个加权的Value向量,这些向量合在一起形成了自注意力层的输出,它们编码了输入序列中每个位置关于整个序列的上下文信息。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优势
自注意力机制的优势在于它能够直接计算序列中任意两个位置之间的关系,使得模型能够有效地捕获长距离依赖信息。此外,由于自注意力机制在处理序列数据时不需要按顺序迭代计算,因此可以高效地并行处理整个序列,大大加快了训练和推理速度。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.3为什么要引入多头注意力机制?

多头注意力机制的引入原因
多头注意力机制是深度学习中的一种高级注意力机制,它在Transformer模型中起到了至关重要的作用。引入多头注意力机制的主要原因包括以下几点:

  1. 捕捉多维度特征:多头注意力机制通过并行计算多个注意力分布,可以捕捉输入序列中的多维度特征和信息。每个注意力头可以学习捕捉不同的上下文信息,这样模型在进行计算时可以利用更丰富的信息。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  2. 增强模型表达能力:通过分割子语义空间,多头注意力机制让模型可以关注不同维度的信息,从而提高了模型的表达能力和注意力分配。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  3. 并行计算效率:多头注意力机制的计算过程可以并行化,这不仅增强了模型的表达能力,而且提高了计算效率,符合现代硬件架构。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  4. 适应复杂任务:多头注意力机制能够提供更加丰富和多样的信息表示,从而增强了模型的表示能力和对复杂任务的适应性。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  5. 学习不同位置关系:通过同时处理多个不同位置的关系,多头注意力机制能够提供更加丰富和多样的信息表示,从而增强了模型的表示能力和对复杂任务的适应性。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

综上所述,多头注意力机制的引入显著提升了模型的性能,使其能够更好地处理复杂的自然语言处理任务。

5.4Transformer模型中的位置编码有哪些常见的实现方式?

位置编码的常见实现方式

位置编码是Transformer模型中的关键组成部分,它负责为序列中的每个位置赋予一个独特的编码,以便模型能够理解序列中各个元素的相对或绝对位置。以下是一些常见的位置编码实现方式:

1. 三角函数式位置编码(Sinusoidal Position Encoding)

这种方法是最早在原始Transformer论文中提出的,它使用正弦和余弦函数来生成位置编码。具体来说,对于一个给定的位置pos和特征向量的维度位置i,位置编码的计算公式为:

[
PE(pos, 2i) = \sin\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right)
]
[
PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right)
]

其中d_model是模型的维度。这种方法的特点是具有显式的生成规律,因此具有一定的外推算性。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2. 可学习式位置编码

在某些情况下,位置编码可以作为模型的可学习参数。例如,在BERT和GPT等模型中,位置编码是与词嵌入向量一起学习的,它们都是模型的参数,可以通过反向传播进行优化。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. 相对位置编码

相对位置编码不是直接编码每个位置,而是编码两个位置之间的相对距离。例如,对于一个给定的位置,其与其他位置的相对位置编码将表示它们之间的距离或关系。这种方法可以帮助模型捕获长距离的依赖关系。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 旋转位置编码(RoPE)

RoPE是一种相对位置编码的变种,它通过乘法操作而不是加法操作将位置编码应用到注意力机制中。RoPE在进行Attention计算时,不同位置的编码进行点击运算,从而在结果中体现出相对位置关系。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5. ALiBi位置编码

ALiBi是另一种相对位置编码的实现方式,它通过在注意力权重中直接添加基于两个位置相对距离的权重,而不是在输入端添加位置编码。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
这些方法各有优缺点,选择哪种方法取决于具体的应用场景和模型设计需求。在实际应用中,研究者和工程师可能会根据任务的特点和模型的复杂度来选择最合适的位置编码实现方式。

三.大模型基础(⭐⭐⭐⭐)

1.GPT系列模型核心原理LLaMA系列模型核心原理(⭐⭐⭐)

1.1GPT系列模型核心原理 (GPT1/GPT2/GPT3/GPT4/InstructGPT)

GPT(Generative Pre-trained Transformer)是一系列由OpenAI开发的预训练语言模型,它们在自然语言处理(NLP)领域取得了显著的进展。以下是各个版本GPT模型的简要概述:

  1. GPT-1
    • 2018年发布,是第一个使用Transformer架构的大规模语言模型。
    • 它使用了12层Transformer,拥有1.17亿参数。
    • GPT-1主要通过预测下一个词的方式来生成文本。
  2. GPT-2
    • 2019年发布,是一个更大的模型,拥有15亿参数。
    • 它使用了48层Transformer。
    • GPT-2在多个NLP任务上展示了卓越的性能,包括文本摘要、翻译和问答等。
  3. GPT-3
    • 2020年发布,是一个巨大的模型,拥有1750亿参数。
    • 它使用了96层Transformer。
    • GPT-3的规模和能力使其在各种NLP任务上都取得了突破性的表现,包括文本生成、代码生成、对话系统等。
    • GPT-3引入了“少样本学习”和“零样本学习”的概念,能够根据给定的指令或示例生成文本。
  4. GPT-4
    • GPT-4依旧是一个基于Transformer风格的预训练模型,用于预测文档中的下一个token,使用公开可用数据(如互联网数据)和第三方提供商授权的数据,利用人类反馈的强化学习(RLHF)对模型进行微调
  5. InstructGPT
    • InstructGPT是GPT系列的一个变体,它专注于提高模型遵循指令的能力。
    • 它通过在人类标注的指令数据上进行微调,使得模型能够更好地理解和执行用户的指令。
    • InstructGPT旨在提高模型的安全性和有用性,减少生成不当或不准确内容的风险。

image.png

1.2LLaMA系列模型核心原理(LLaMA/LLaMA2/Alpaca/Vicuna/BaiChuan2)

LLaMA(Large Language Model Meta AI)是由Meta(前身为Facebook)开发的一种大规模语言模型,旨在提高自然语言处理(NLP)任务的性能。LLaMA基于Transformer架构,并经过大规模数据训练,以便在多种语言任务中表现出色。LLaMA的核心目标是在给定的计算预算下,通过在更多数据上训练较小模型来实现最佳性能,而不是单纯追求模型规模的增大

  1. LLaMA:
    • LLaMA(Large Language Model Attention)
    • 它使用Transformer架构,拥有大规模的预训练模型参数。
    • 它通过学习文本的语义和语法信息,在自然语言处理任务上取得了优异的性能。
  2. LLaMA2:
    • LLaMA2是LLaMA模型的进化版本。
    • 它在模型架构和训练策略上进行了优化,拥有更高效的模型规模和性能。
    • 它在多个方面相较于前一代模型有所提升。
  3. Alpaca:
    • Alpaca是LLaMA系列的进一步发展。
    • 它采用了改进的Transformer架构和多任务学习策略,扩展了模型规模。
    • 它在自然语言处理的多个任务上表现出色。
  4. Vicuna:
    • Vicuna是LLaMA系列的新成员。
    • 它在模型架构和训练策略上进行了创新,提升了自然语言理解和生成的能力。
    • 它展现出了卓越的性能和高泛化能力。
  5. BaiChuan2
    • BaiChuan2是谷歌Brain团队与阿里巴巴合作开发的模型。
    • 它继承了LLaMA系列的优秀特性,并针对中文自然语言处理任务进行了深入研究和优化。
    • 它在中文自然语言处理任务上取得了令人瞩目的成果。

1.3优秀开源大模型核心原理(BLOOMZ/ChatGLM3/Qwen1.5)

  1. BloomZ
    • BloomZ继承了Bloom的多语言处理能力。
    • 它使用Transformer架构,优化了多语言和编程语言的处理。
    • 它以开源和可访问性为特点,便于研究和使用。
  2. ChatGLM3
    • ChatGLM3是ChatGLM系列中的开源模型。
    • 它使用6B参数的强大基础模型,具有全面的开源序列支持。
    • 它在多个领域的数据集上展现出色性能,是10B以下基础模型中的佼佼者。
  3. Qwen1.5
    • Qwen1.5是通义千问公司发布的千亿级参数模型。
    • 它使用分组查询注意力机制,支持高达32K的上下文。
    • 它兼容多种语言,成为全球用户需求的满足者。

2.大模型应用框架LangChain核心原理(⭐⭐⭐ )

image.png

2.1LangChain核心原理

LangChain是一个专门针对大型语言模型(LLM)应用开发的框架,它通过模块化设计、可扩展性和灵活性的设计思路,简化了LLM应用的开发过程,提高了开发效率。LangChain的核心原理包括以下几个方面:

  1. 模块化设计:LangChain将LLM应用的功能划分为多个模块,每个模块负责处理特定的任务,降低了开发的复杂性。这些模块包括数据处理组件、模型调用组件、业务逻辑组件和用户交互组件等。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


LangChain

  1. 可扩展性:LangChain支持自定义模块和组件,开发者可以根据需求添加新的功能或扩展现有功能,以满足不同应用场景的需求。


LangChain

  1. 灵活性:LangChain允许开发者根据具体应用场景选择合适的模块和组件进行组合,实现个性化的LLM应用。这种灵活性使得LangChain能够适应多样化的业务需求。

  1. 工作流程:LangChain的工作流程包括需求分析、模块选择、配置与集成、测试与优化以及部署与运维。这个流程确保了LLM应用的顺利开发和稳定运行。

  1. 核心组件:LangChain的核心组件包括数据处理组件、模型调用组件、业务逻辑组件和用户交互组件。这些组件共同协作,实现了LLM应用的各项功能。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 应用开发:LangChain在LLM应用开发中的应用包括简化开发过程、提高开发效率和个性化定制。它通过提供丰富的组件和接口,使得开发者可以更加快速地构建LLM应用。

综上所述,LangChain通过其模块化、可扩展性和灵活性的设计,以及一系列核心组件的支持,为开发者提供了一个强大的工具,以构建高效、个性化的LLM应用。

2.0深入研究(⭐⭐⭐)了解

LangChain之所以大火,是因为它提供了一系列方便的工具、组件和接口,大大降低了 AI 应用开发的门槛,也极大简化了大模型应用程序的开发过程。

2.1为什么需要 Langchain?

大模型的智能效果令人振奋,可是当开发人员试图将大模型这颗“聪明脑”放入应用程序时,却发现了前所未有的挑战。

  • prompt的结构如何标准化?
  • 如果我想中途随时切换大模型,怎样简单方便地操作?
  • LLM的输出是非结构化的,它如何与结构化的程序接口相互交互?
  • 预训练模型的知识落后,如何让它知道最新的信息?
  • 如何让这颗大脑拥有记忆?
  • 如何给这颗“聪明脑”装上“五官”,让它能够感知环境输入?
  • 怎样给这颗“聪明脑”装上“手”和“脚”,让它帮我执行具体的任务?

LangChain 尝试解决的,就是这些问题。

LangChain框架背后的核心思想是自然语言处理序列分解为各个部分,允许开发人员根据自己的需求高效地定制工作流程。

2.2Langchain的核心模块

Langchain有6大核心模块:
Models:模型,是各种类型的模型和模型集成。

  • Prompts:提示,包括提示管理、提示优化和提示序列化。
  • Memory:记忆,用来保存和模型交互时的上下文状态。
  • Indexes:索引,用来结构化文档,以便和模型交互。包括文档加载程序、向量存储器、文本分割器和检索器等。
  • Agents:代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止。
  • Chains:链,一系列对各种组件的调用。

LangChain 通常被用作「粘合剂」,将构建 LLM 应用所需的各个模块连接在一起。使用Langchain中不同组件的特性和能力,可以构建不同场景下的应用,如聊天机器人、基于文档的问答、知识管理、个人助理、Agent智能体等等。

例如,使用 Models模块 可以很方便地使用 OpenAI 的模型接口,

from LangChain.llms import OpenAI 
llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=OPENAI_APIKEY) 
res = llm("Tell me a joke") 
print(res)

如果需在本地或离线环境下使用大模型,需要首先将所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。

再比如,使用Index部分涉及的RAG技术,可以将特定领域的资料存在向量数据库里,在调用大模型时找出相关的部分作为“参考资料”传给大模型,以得到更为符合业务要求的回答。

2.3Langchain的学习路径

1、从官方文档入手,掌握LangChain的基本概念和使用方法。
2、了解LangChain的6大主要模块。
3、通读官方给出的示例,对于各个模块有更加直观的认识。
4、找一个具体的开源项目深入学习,提高对LangChain的理解和应用能力。

LangChain是一座桥,将混沌的非结构化AI世界与精确的结构化的传统计算机世界连接起来。

就在1月份,LangChain团队刚刚宣布,他们的首个稳定版本LangChain v0.1.0正式发布。这个版本集成了模块化设计、服务治理等功能,提供了更完善的文档和示例,使LangChain变得更加易于上手和扩展。这个稳定版本的发布,标志着LangChain已然从概念验证阶段进入产品化和成熟化的新阶段。

2.4参考资料:

官方文档:Introduction | ️ Langchain
How to Make Large Language Models Play Nice with Your Software Using LangChain - KDnuggets
Zhihu Paper:https://www.zhihu.com/question/609483833/answer/3420895685**

2.5其他语言的LangChain:

Golang: https://github.com/tmc/langchaingo
Ruby:GitHub - tmc/langchaingo: LangChain for Go, the easiest way to write LLM-based programs in Go
Java:https://github.com/langchain4j/langchain4j

2.6开源项目:

【Chat Langchain】本地托管的聊天机器人,专门针对LangChain文档中的问题回答:
GitHub - langchain-ai/chat-langchain

【Langchain Chat】一个用于LangChain Chat的Next.js前端:
GitHub - zahidkhawaja/langchain-chat-nextjs: Next.js frontend for LangChain Chat.

【Notion QA】 Notion问答机器人:
https://github.com/hwchase17/notion-qa

【知识GPT】为您的文档提供准确的答案和即时引用:
https://github.com/mmz-001/knowledge_gpt

【ChatFiles】基于文档的问答:
https://github.com/guangzhengli/ChatFiles

【SolidGPT】使用您的代码库进行聊天,提出代码库级别的问题,并讨论您的需求。
https://github.com/AI-Citizen/SolidGPT

【MindGeniusAI】 使用ChatGPT自动生成思维导图:
GitHub - xianjianlf2/MindGeniusAI: Auto generate MindMap with ChatGPT

【Langchain-Chatchat 】可离线部署的检索增强生成 (RAG) 大模型的本地知识库问答应用项目:
GitHub:https://github.com/chatchat-space/Langchain-Chatchat

3.多模态技术(⭐⭐⭐)

多模态技术是一种结合多种数据模态进行训练和推理的深度学习模型,具有广泛的应用前景。通过模态融合、跨模态表示学习等技术,多模态大模型能够更好地处理和理解跨模态数据,为人工智能领域的发展带来新的机遇和挑战
image.png

3.1经典多模态模型核心原理(Vit/CLIP/ALBEF/BLIP)

在人工智能领域,多模态模型能够同时处理并理解多种类型的数据,如文本、图像、声音等。以下是几个经典多模态模型的核心原理:

  1. Vision Transformer (ViT)
    • ViT是首个将Transformer架构成功应用于图像识别任务的模型。
    • 它将图像分割成多个小块(patches),将这些小块视为序列元素,然后应用Transformer进行处理。
    • ViT的核心原理是利用自注意力机制来捕捉图像内不同区域之间的关系。
  2. Contrastive Language–Image Pre-training (CLIP)
    • CLIP通过大规模的图像和文本对训练,学习视觉内容和文本描述之间的关联。
    • 它使用对比学习的原理,通过比较正负样本对来训练模型识别图像和文本的一致性。
    • CLIP的核心原理是跨模态的语义嵌入空间,使得相似的图像和文本在该空间中更接近。
  3. Aligning Vision and Language Backwards and Forwards (ALBEF)
    • ALBEF是一个端到端的多模态模型,用于图像和文本的联合表示学习。
    • 它通过融合视觉特征和语言特征来提高跨模态的检索和理解能力。
    • ALBEF的核心原理是双向融合机制,即从视觉到语言和从语言到视觉的信息流。
  4. Bootstrapped Language Image Pre-training (BLIP)
    • BLIP通过自举的方式进行训练,首先使用一个基础模型进行预训练,然后不断迭代优化。
    • 它结合了图像特征提取和文本特征提取,通过交互式学习提高多模态理解能力。
    • BLIP的核心原理是自举学习框架,通过迭代过程逐步提升模型对图像和文本关联的把握。

3.2多模态大模型核心原理(BLIP-2/LLaVA/Qwen-VL)

多模态大模型通过结合不同类型数据的感知能力,推动了人工智能在理解和生成多模态内容方面的进步。以下是几个前沿多模态大模型的核心原理:

  1. BLIP-2
    • BLIP-2是BLIP模型的进阶版本,专注于提升图像和文本的联合理解与生成能力。
    • 它可能采用了更深层次的融合策略和更先进的预训练技术来加强模型的跨模态关联学习。
    • BLIP-2的核心原理可能包括更复杂的注意力机制和更优的跨模态特征表示学习。
  2. LLaVA
    • LLaVA(Large Language Visual Artist)是一个结合了语言和视觉能力的多模态模型。
    • 它旨在通过大规模预训练,掌握文本到图像的生成以及图像到文本的描述任务。
    • LLaVA的核心原理可能涉及创新的编码器-解码器架构,以及对视觉艺术和语言创造力的深入理解。
  3. Qwen-VL
    • Qwen-VL是Qwen系列在多模态领域的扩展,专注于视觉语言任务。
    • 它可能结合了强大的视觉识别能力与先进的语言模型,以处理如图像描述、视觉问答等任务。
    • Qwen-VL的核心原理可能包括跨模态的注意力机制和联合嵌入空间,以实现文本和视觉数据的无缝交互。
  • 多模态模型:适用于图像-文本匹配、视觉问答、图像描述生成等任务。

总结来说,多模态模型专注于处理和理解图像与文本的结合,而GPT ChatLLM专注于文本交互和对话。TensorFlow作为一个多功能平台,支持包括这两种模型在内的多种AI应用的开发和部署。每种技术都有其独特的优势和应用场景,选择合适的技术取决于具体的任务需求。

四.就业(必会)(⭐⭐⭐⭐⭐)

1.大模型微调基础(⭐⭐⭐⭐⭐)

1.0先看个vedio

微调视频介绍(13min):
External Player - 哔哩哔哩嵌入式外链播放器

image.png

大模型微调是一种在预训练模型基础上进行调整的方法,旨在使模型适应特定的任务或领域。通过微调,可以在保留预训练模型的通用知识的同时,通过微调顶层来适应特定任务。微调的量取决于预训练语料库和任务特定语料库之间的相似性。

1.1微调技术

微调技术包括Fine tuning、Learnable Regression Adapter (LoRA)、Adapter、Prefix-tuning、P-tuning、Prompt-tuning等。这些方法都有各自的特点,例如LoRA通过在预训练模型的顶部添加一个可学习的线性层来实现微调,而Adapter通过替换预训练模型中的特定层来改变模型的特

1.2大模型微调的数据收集和处理过程(⭐⭐⭐)

大模型微调的数据收集和处理过程是一个关键步骤,它直接影响到微调后模型的性能和应用效果。以下是一些关于大模型微调数据收集和处理过程的要点:

1.2.1数据收集

数据收集是微调过程中的首要步骤,它涉及到从各种来源收集与任务相关的数据。这些数据可以来自公开数据集、网络抓取、传感器收集等渠道。确保数据的质量和多样性对于构建有效的微调数据集至关重要。在收集数据时,应特别注意数据的时效性和相关性,以确保数据能够反映预期任务或领域的实际情况.

1.2.2数据预处理
在构建数据集之前,需要进行数据清洗、去重、标注等预处理工作。确保数据的准确性和完整性,同时进行特征提取和转换,以便适应大模型的微调需求。数据预处理的步骤可能包括文本标准化、分词、去除停用词、词干提取等.


数据预处理

1.2.3数据标注

对于监督学习任务,数据标注是必不可少的。可以借助人工标注、自动标注等方式对数据进行标注,以便模型在微调过程中能够学习到更准确的信息。人工标注需要专业知识和细致的工作,而半自动化标注可以利用已有的模型进行初步分类,再由人工进行校正. 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2.4数据增强

为了增加数据集的多样性和丰富性,可以采用数据增强技术,如旋转、翻转、缩放、加噪声等方式对数据进行扩充,以提高模型的泛化能力。数据增强提供了相关且具有代表性的训练数据,并为有效的微调奠定了基础. 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2.5数据集构建

构建微调数据集时,应考虑数据的领域相关性、质量高、多样性等因素。数据集的规模比预训练数据集小得多,但仍然需要确保数据的质量和多样性。在收集和整理数据后,可以将自定义数据集与其他开源数据集混合训练,以提高模型效果和泛化性. 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
综上所述,大模型微调的数据收集和处理过程是一个复杂而精细的工作,需要综合考虑数据的来源、质量、多样性和标注准确性等多个方面,以确保微调后的模型能够在特定任务上表现出色。

1.3大模型Tuning技术原理 (Prompt-Tuning/Instruction-Tuning/P-Tuning)⭐⭐⭐⭐⭐

视频讲解(26min):https://www.bilibili.com/video/BV1Fu4y1C7tJ/?spm_id_from=333.788

  1. Prompt-Tuning
    • 核心原理:Prompt-Tuning 是一种微调方法,它通过在输入文本前添加特定的提示(prompt)来引导模型理解任务需求。这种方法不需要改变模型的参数,而是通过设计合适的提示来激活模型的知识。
    • 应用:适用于分类、问答、文本生成等任务。例如,在情感分析任务中,可以在文本前后添加“该文本表达的情感是:”作为提示。
  2. Instruction-Tuning
    • 核心原理:Instruction-Tuning 侧重于使用指令性的语言来指导模型完成特定任务。这通常涉及到对模型进行少量参数的更新,以更好地响应指令。
    • 应用:适用于需要模型遵循明确指令的场景,如遵循多步骤指令解决问题。
  3. P-Tuning
    • 核心原理:P-Tuning(Prompt Tuning)是一种结合了Prompt-Tuning和Instruction-Tuning的方法。它通过在模型的输入中加入可学习的提示参数,并在微调过程中更新这些参数,以提高模型对特定任务的适应性。
    • 应用:P-Tuning 通过引入可学习的提示,使得模型能够更灵活地适应各种任务,同时保持参数更新量较小。

这些技术的优势在于它们不需要对整个模型进行大规模的参数更新,从而减少了计算资源的需求,并能够快速适应新任务。然而,设计有效的提示(prompt)或指令(instruction)是这些方法成功的关键,需要对任务和模型都有深入的理解。

1.4大模型全参数微调技术原理(DeepSpeed)(⭐⭐⭐)

大模型全参数微调技术的核心原理涉及到多个方面,其中DeepSpeed是一个关键的框架,由微软开发,专门用于支持大规模模型的训练。以下是DeepSpeed的一些关键特性和原理111216:

  1. ZeRO Optimization
    • DeepSpeed的ZeRO(Zero Redundancy Optimizer)是一种优化技术,它通过减少每个GPU上需要存储的重复数据来减少内存占用。ZeRO分为几个阶段,每个阶段都提供了不同程度的内存优化。
  2. ZeRO-Offload
    • ZeRO-Offload是ZeRO技术的扩展,它允许将优化器状态和中间激活数据卸载到CPU内存或NVMe存储上,从而进一步减少GPU显存使用。
  3. 3D Parallelism
    • DeepSpeed支持数据并行、模型并行和流水线并行的组合,称为3D并行。这种混合并行策略可以有效地扩展到非常大的模型和数据集。
  4. Mixed Precision Training
    • DeepSpeed支持混合精度训练,结合使用FP16(半精度浮点数)和FP32(单精度浮点数)来减少内存占用并加速训练,同时保持模型的精度。
  5. Sparsity
    • DeepSpeed还提供了稀疏注意力机制,允许模型处理长序列输入,同时显著提高效率和减少内存占用。
  6. Configurability
    • DeepSpeed提供了丰富的配置选项,允许用户根据具体的硬件环境和模型需求来定制训练策略。
  7. Scalability
    • DeepSpeed设计用于在多GPU和多节点上扩展,支持从单个GPU到数千个GPU的无缝扩展。
  8. Ease of Use
    • DeepSpeed易于使用,与PyTorch紧密集成,用户可以轻松地将其集成到现有的PyTorch训练代码中。
    • image.png

DeepSpeed通过这些技术,使得在有限的硬件资源上训练和微调大型模型成为可能。它降低了大规模模型训练的内存和计算门槛,使得研究人员和开发者能够更高效地利用其可用资源

1.5大模型CoT/ToT/GoT/AoT 技术(⭐⭐⭐)

大模型中的CoT(Chain of Thought)、ToT(Tree of Thought)、GoT(Graph of Thought)和AoT(Abstract Thought)是一系列用于提升模型推理能力的技术。以下是对这些技术的详解:

  1. CoT(Chain of Thought)
    • CoT是一种提示技术,它要求模型在给出最终答案之前,显式地输出中间逐步的推理步骤。这种方法可以帮助模型更好地处理复杂的推理任务,如算术、常识和符号推理问题。
  2. ToT(Tree of Thought)
    • ToT是CoT的扩展,它采用树状的搜索过程来解决问题。在ToT中,模型不是简单地按照链式结构生成推理步骤,而是在每个节点生成多个候选子节点,然后对这些子节点进行评估和选择,形成树状的推理路径1920。ToT允许模型探索不同的可能选择分支,并在节点进行前后向的探索,从而更有效地解决问题。
  3. GoT(Graph of Thought)
    • GoT技术进一步将ToT的树状结构扩展为图状结构。在GoT中,模型的推理过程被视为一个图,其中节点表示状态,边表示状态之间的转换。GoT通过图状结构来表示问题解决过程中的复杂关系和决策点26。
  4. AoT(Abstract Thought)
    • AoT技术侧重于抽象层次的推理。它要求模型在进行推理时,不仅要考虑具体的步骤和解决方案,还要能够进行高层次的抽象思考,从而更好地理解和解决问题26。

这些技术的核心思想是让大模型在解决问题时能够进行更加深入和灵活的推理。通过生成中间步骤、探索不同的解决方案、以及进行高层次的抽象思考,这些技术有助于提高模型在复杂任务上的性能和可解释性。实际应用中,这些技术可以根据具体的任务需求和模型特点进行选择和调整

1.6大模型DPO技术核心原理(⭐⭐⭐)

DPO(Direct Preference Optimization,直接偏好优化)是一种用于训练和微调大型语言模型的技术。它的核心原理是直接根据人类的偏好来优化模型,而不是通过传统的方式先训练一个奖励模型,再使用这个奖励模型通过强化学习(RL)来优化语言模型。

在实践中,DPO可以通过对预训练的语言模型进行微调来实现,微调过程中调整模型参数以最小化上述损失函数,使模型输出与人类偏好更加一致

DPO技术通过直接利用人类的偏好数据来优化语言模型,避免了传统RLHF(Reinforcement Learning from Human Feedback)流程中奖励模型拟合和RL优化的复杂性和不稳定性,从而简化了偏好学习的过程

2.实战项目(⭐⭐⭐⭐⭐)

2.1咕泡AI第六期(8h)(⭐⭐⭐⭐⭐)

https://pan.quark.cn/s/8937f56f7057#/list/share
1.学习pytora(基础运用就行)
2.学会第24个HUggingface

2.2微调项目(⭐⭐⭐⭐⭐)

https://www.bilibili.com/video/BV1ce411J7nZ/?spm_id_from=333.337.search-card.all.click
chatglm微调/开源大模型微调

2.3就业必会:(⭐⭐⭐⭐⭐)

  • 会基础的python
  • 会用pytora
  • 会用HUface
  • 会微调

说白了就是微调和调用API

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

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

相关文章

pip导出格式错乱问题

pip导出带有各种路径 pip只导出版本 pip list | tail -n 3 | awk {print $1""$2} > requirements.txt

进程间通信以及线程的同步互斥机制

1.进程间通信机制 常用的六种通信机制&#xff1a; 管道、消息队列、共享内存、信号灯集、信号、Socket 管道&#xff08;Pipe&#xff09;和无名管道&#xff08;匿名管道&#xff09;&#xff1a; 管道是一种半双工的通信方式&#xff0c;数据只能单向流动&#xff0c;通常…

图神经网络入门(1)-networkx

简介 NetworkX是一个Python语言的图论建模工具&#xff0c;用于创建、操作复杂网络结构&#xff08;如图、有向图等&#xff09;。它提供了许多用于分析网络、生成随机网络、以及可视化网络的函数和工具。用户可以利用NetworkX来研究复杂网络的拓扑结构、节点间的关系以及路径查…

【ARMv8/ARMv9 硬件加速系列 2.4 -- ARM NEON Q寄存器与V寄存器的关系】

文章目录 Q 与 V 的关系向量寄存器 v 的使用赋值操作寄存器赋值总结Q 与 V 的关系 在ARMv8/v9架构中,v寄存器和q寄存器实际上是对相同的物理硬件资源的不同称呼,它们都是指向ARM的SIMD(单指令多数据)向量寄存器。这些寄存器用于高效执行向量和浮点运算,特别是在多媒体处理…

如何秒杀系统架构设计

原文路径:https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%…

四个步骤,帮你成为价值导向型项目经理

在企业数字化转型的浪潮下&#xff0c;项目管理的方向逐渐从任务导向转变为以价值交付为导向。在快速变化的市场环境中&#xff0c;仅仅关注项目任务的完成已不足以确保项目的成功&#xff0c;需要更加注重项目的最终成果和价值&#xff0c;确保项目能够为组织带来实际的价值和…

这个开源软件,送给爱读书的你!!【送源码】

对于喜欢阅读的人来说&#xff0c;一定经历过从一本厚厚的修仙书籍到MP3、MP4的阅读时代&#xff0c;再到现今的手机软件。 但是现在的阅读软件经常会遇见以下问题&#xff1a;比如广告弹窗太多&#xff0c;排版乱&#xff0c;甚至很多的APP都进入会员时代&#xff0c;再加上一…

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》

《中国数据安全50强&#xff08;2024&#xff09;》 数世咨询首份《中国数据安全50强&#xff08;2024&#xff09;》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力&#xff0c;在众多竞争者中脱颖而出&#xff0c;荣登50强榜单&#xff0…

LogicFlow 学习笔记——8. LogicFlow 基础 事件 Event

事件 Event 当我们使用鼠标或其他方式与画布交互时&#xff0c;会触发对应的事件。通过监听这些事件&#xff0c;可以获取其在触发时所产生的数据&#xff0c;根据这些数据来实现需要的功能。详细可监听事件见事件API。 监听事件 lf实例上提供on方法支持监听事件。 lf.on(&…

在VS Code中快速生成Vue模板的技巧

配置vue.json: { "Print to console": {"prefix": "vue","body": ["<template>"," <div class\"\">\n"," </div>","</template>\n","<scri…

基于Java + Swing + MySQL的学生选课及成绩管理系统(Java课程设计)

目录 开发工具系统结构功能展示登录与注册界面&#xff08;通用&#xff09;主界面&#xff08;通用&#xff09;学生信息查询界面&#xff08;学生用户&#xff09;学生信息管理界面&#xff08;教师用户 管理员用户&#xff09;学生选课界面&#xff08;学生用户&#xff09;…

Element-ui中Table表格无法显示

Element-ui中Table表格无法显示 在使用过程中发现样式正常显示但是table就是不显示&#xff0c;研究了一段时间后&#xff0c;发现问题是项目结构的问题 当你创建vue和安装el的时候&#xff0c;一定要注意进入到正确的项目文件夹&#xff0c;如果在外面也出现一个package.jso…

Java | Leetcode Java题解之第148题排序链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode sortList(ListNode head) {if (head null) {return head;}int length 0;ListNode node head;while (node ! null) {length;node node.next;}ListNode dummyHead new ListNode(0, head);for (int subL…

云原生化有什么特点?

云原生化&#xff0c;作为一种先进的构建和管理应用程序的方式&#xff0c;不仅代表着技术的革新&#xff0c;更是云计算时代下的必然产物。其核心目标在于充分发掘并发挥云计算平台的各项优势&#xff0c;使应用程序在性能、弹性、可靠性和安全性等方面达到前所未有的高度。 它…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

springboot + Vue前后端项目(第十六记)

项目实战第十六记 写在前面1 第一个bug1.1 完整的Role.vue 2 第二个bug2.1 修改路由router下面的index.js 总结写在最后 写在前面 发现bug&#xff0c;修复bug 1 第一个bug 分配菜单时未加入父id&#xff0c;导致分配菜单失效 <!-- :check-strictly"true" 默…

【Linux】进程控制3——进程程序替换

一&#xff0c;前言 创建子进程的目的之一就是为了代劳父进程执行父进程的部分代码&#xff0c;也就是说本质上来说父子进程都是执行的同一个代码段的数据&#xff0c;在子进程修改数据的时候进行写时拷贝修改数据段的部分数据。 但是还有一个目的——将子进程在运行时指向一个…

SpringBoot的事务注解

SpringBoot的事务注解 在Spring Boot应用中&#xff0c;事务管理是一个关键的部分&#xff0c;尤其是当涉及到数据库操作时。Spring Boot提供了强大的事务管理支持&#xff0c;使得开发人员可以通过简单的注解来控制事务的边界和行为。本文将介绍如何在Spring Boot中使用事务注…

vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)

以下配置为我自己的需求&#xff0c;因人而异&#xff0c;如果只是单纯的前端非交互页面&#xff0c;可以不用修改配置。 代码及注释&#xff0c;如下&#xff1a; #解决vue-router设置mode为history&#xff0c;去掉路由地址上的/#/后nginx显示404的问题location / {proxy_htt…

VS2019+QT5.15调用动态库dll带有命名空间

VS2019QT5.15调用动态库dll带有命名空间 vs创建动态库 参考&#xff1a; QT调用vs2019生成的c动态库-CSDN博客 demo的dll头文件&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号…