【LLM】概念解析 - Tensorflow/Transformer/PyTorch
背景
本文将从算法原理、适用范围、强项、知名大模型的应用、python 调用几个方面,对深度学习框架 TensorFlow、PyTorch 和基于深度学习的模型 Transformer 进行比较。主要作用是基础概念扫盲。
一、 算法原理对比
Transformer
Transformer 是一种基于深度学习的模型架构,最初由 Vaswani 等人在 2017 年提出,用于自然语言处理任务。其论文标题为《Attention is All You Need》,强调了注意力机制在该模型中的核心地位。
-
核心概念
- 注意力机制(Attention Mechanism)
- Transformer 引入了多头自注意力(Multi-Head Self-Attention)机制,能够捕捉序列中不同位置之间的依赖关系。
- 通过计算序列中每个位置的 Query、Key 和 Value,可以动态调整序列中各个单词或元素的重要性。
- 序列到序列建模(Seq2Seq)
- Transformer 被设计为一种通用的序列到序列模型,广泛应用于翻译、文本生成等任务。
- 它由两个主要部分组成:
- 编码器(Encoder):将输入序列编码为上下文表示。
- 解码器(Decoder):将编码器生成的表示解码为目标序列。
-
结构
- 编码器(Encoder)
- 每个编码器层包含两个子层:
- 多头自注意力(Multi-Head Self-Attention)。
- 前馈神经网络(Feed-Forward Neural Network,FFNN)。
- 使用残差连接(Residual Connection)和层归一化(Layer Normalization)稳定训练。
- 解码器(Decoder)
- 每个解码器层与编码器类似,但额外添加了一个跨注意力(Encoder-Decoder Attention)子层,用于结合编码器的输出。
- 生成目标序列时,解码器采用掩码机制(Masked Attention),确保每个位置只关注之前生成的输出。
- 位置编码(Positional Encoding)
- 为弥补 Transformer 缺乏序列信息的特性,添加了位置编码,显式注入位置信息。
- 通常通过正弦和余弦函数生成。
TensorFlow
- 核心:基于静态和动态计算图(TensorFlow 2.x 支持动态图)。
- 计算模式:数据流图(Dataflow Graph),通过张量和节点构建有向无环图(DAG),实现灵活的并行计算和分布式训练。
- 优化:利用图优化技术(如常量折叠、子图优化)和自动微分(Automatic Differentiation)支持大规模深度学习。
PyTorch
- 核心:动态计算图(Dynamic Computation Graph),操作即时执行,适合复杂任务和调试。
- 计算模式:操作类似于 Python 函数式编程,允许逐步构建模型。
- 优化:利用自动微分引擎
torch.autograd
支持高效梯度计算,并结合 GPU 加速。
二、 适用范围对比
Transformer
- 适用场景:
- 自然语言处理(NLP):如翻译、文本生成、问答系统。
- 计算机视觉:如图像分类、目标检测(Vision Transformer, ViT)。
- 跨模态学习:如 CLIP 和 DALL-E。
- 劣势:自注意力机制计算复杂度较高,对硬件资源要求大。
TensorFlow
- 适用场景:
- 企业级部署:高性能、大规模分布式训练和生产环境。
- 移动端和嵌入式:通过 TensorFlow Lite 和 TensorFlow.js。
- 医疗、金融等对性能要求高的领域。
- 劣势:开发调试相对复杂,尤其在 1.x 静态图时期。
PyTorch
- 适用场景:
- 研究实验:灵活的动态图构建和调试能力。
- 自定义任务:易于实现新算法和复杂模型。
- 分布式训练:支持大规模分布式并行计算。
- 劣势:在移动端和生产环境部署方面起步稍晚。
三、 功能强大之处
Transformer
通用性:模块化架构适合序列数据的多领域应用。
大规模训练:具备优秀的并行能力,支持高效训练。
预训练与微调:通过大规模预训练模型(如 GPT、BERT)实现迁移学习。
TensorFlow
分布式能力:原生支持多机多卡训练。
跨平台性:支持 CPU、GPU、TPU,并能轻松部署到嵌入式设备。
生态系统:丰富的预训练模型(TensorFlow Hub)、可视化工具(TensorBoard)。
兼容性:兼容多种编程语言(Python、C++、JavaScript)。
PyTorch
易用性:操作简单直观,与 NumPy 等深度集成。
调试性:动态计算图和逐步调试功能让研究人员能够快速试验。
灵活性:支持高性能 GPU 计算,并能快速部署生产环境(TorchScript)。
社区支持:活跃的开源社区和丰富的教程资源。
四、 知名大模型的应用
模型 | 应用领域 | 核心技术 | 框架支持 |
---|---|---|---|
GPT (Generative Pre-trained Transformer) | NLP (文本生成、问答) | Transformer + 自注意力机制 | PyTorch |
BERT (Bidirectional Encoder Representations from Transformers) | NLP (分类、填空) | Transformer Encoder | TensorFlow |
Vision Transformer (ViT) | 计算机视觉 (图像分类) | Transformer + 图像分块嵌入 | TensorFlow & PyTorch |
DALL-E | 图像生成、跨模态学习 | Transformer + 自回归模型 | PyTorch |
CLIP | 图像-文本多模态任务 | Transformer + 对比学习 | PyTorch |
AlphaFold | 蛋白质结构预测 | 深度学习 + 图神经网络 | TensorFlow |
Stable Diffusion | 图像生成 | Transformer + Diffusion | PyTorch |
transformer应用
- 自然语言处理
- GPT(生成预训练变换器)
- BERT(双向编码器表示)
- T5、RoBERTa、XLNet 等
- 计算机视觉
- Vision Transformer (ViT) 将 Transformer 应用到图像分类任务。
- 跨模态任务
- CLIP、DALL-E 等模型将 Transformer 应用于多模态数据。
五、python调用语句
三者的 Python 调用语言对比如下:
Transformer
Transformer 通常通过深度学习框架(如 PyTorch 或 TensorFlow)的 Python 接口调用,结合 Hugging Face 等高层封装库实现。
核心库
- Hugging Face 的
transformers
库是实现 Transformer 模型的主流工具。 - 常见预训练模型:
BERT
、GPT
、RoBERTa
等。
TensorFlow
TensorFlow 提供了全面的 Python 接口,主要通过其模块化的库结构调用。以下是关键模块和典型用法:
核心模块
tensorflow
是核心库,以下是主要子模块:tensorflow.keras
: 高级 API,用于快速构建和训练神经网络。tensorflow.data
: 数据加载与预处理。tensorflow.lite
: 用于移动设备的模型优化和部署。tensorflow.distribute
: 分布式训练支持。
代码
import tensorflow as tf# 创建一个简单模型
model = tf.keras.Sequential([tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 数据加载和训练
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model.fit(x_train, y_train, epochs=5)
PyTorch
PyTorch 提供了灵活的动态计算图接口,完全基于 Python 语法。主要模块包括:
核心模块
torch
: 核心张量操作库。torch.nn
: 用于神经网络构建的模块。torch.optim
: 优化器工具。torch.utils.data
: 数据加载和处理工具。torchvision
: 计算机视觉任务辅助工具。
代码示例
import torch
import torch.nn as nn
import torch.optim as optim# 定义模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(10, 1)def forward(self, x):return self.fc(x)model = SimpleModel()# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 数据和训练
inputs = torch.randn(5, 10)
targets = torch.randn(5, 1)
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
对比总结
特点 | TensorFlow | Transformer | PyTorch |
---|---|---|---|
模块化支持 | 官方模块丰富(如 tf.keras 、tf.data ) | Hugging Face 封装简洁,支持多种框架 | 灵活模块(torch.nn 、torch.optim ) |
API 易用性 | API 稍显复杂,适合高性能和生产部署 | 简洁高效,专注于 Transformer 相关任务 | 代码简洁直观,动态计算图支持灵活建模 |
预训练模型支持 | 支持 TensorFlow Hub | Hugging Face 集成丰富预训练模型 | Hugging Face 支持良好 |
开发风格 | 偏静态图风格(2.x 动态图有所改善) | 高度依赖框架实现 | 偏动态图风格,代码调试与实验友好 |
适用范围 | 广泛:从深度学习研究到工业生产 | 专注:NLP、视觉和多模态任务 | 灵活:研究、实验和定制化应用 |
六、总结与选择建议
-
TensorFlow
- 适合企业和生产环境。
- 需要高性能、大规模训练时表现优异。
-
Transformer
- 适合处理序列数据(文本、图像等)。
- 自注意力机制为大规模预训练提供了强大的表达能力。
-
PyTorch
- 适合研究实验和灵活开发。
- 大模型训练和开源社区支持极其强大。
故:
研究或实验:优先选择 PyTorch。
序列数据建模:优先选择 Transformer 框架(可通过 PyTorch 或 TensorFlow 实现)。
大规模生产部署:选择 TensorFlow 或其优化工具链。
相关文章:

【LLM】概念解析 - Tensorflow/Transformer/PyTorch
背景 本文将从算法原理、适用范围、强项、知名大模型的应用、python 调用几个方面,对深度学习框架 TensorFlow、PyTorch 和基于深度学习的模型 Transformer 进行比较。主要作用是基础概念扫盲。 一、 算法原理对比 Transformer Transformer 是一种基于深度学习的…...

对一段已知行情用python中画出K线图~
1. 已知行情: 2024/09/05 ~ 2025/1/3 date open high low close 0 2024-09-05 2785.2635 2796.0186 2777.4710 2788.3141 1 2024-09-06 2791.7645 2804.0932 2765.6394 2765.8066 2 2024-09-09 2754.7237 2756.5560 2726.9667 2736.…...

Rocky Linux下安装meld
背景介绍: meld是一款Linux系统下的用于 文件夹和文件的比对软件,非常常用; 故障现象: 输入安装命令后,sudo yum install meld,报错。 12-31 22:12:17 ~]$ sudo yum install meld Last metadata expirat…...

DVWA靶场Insecure CAPTCHA(不安全验证)漏洞所有级别通关教程及源码审计
目录 Insecure CAPTCHA(不安全验证)low源码审计 medium源码审计 high源码审计 impossible源码审计 Insecure CAPTCHA(不安全验证) Insecure CAPTCHA(不安全验证)漏洞指的是在实现 CAPTCHA(完全自动化公共图灵测试区分计算机和人类࿰…...

JavaScript HTML DOM 实例
JavaScript HTML DOM 实例 JavaScript 的 HTML DOM(文档对象模型)允许您通过脚本来控制 HTML 页面。DOM 是 HTML 文档的编程接口,它将 Web 页面与编程语言连接起来,使得开发者可以改变页面中的内容、结构和样式。在这篇文章中,我们将通过一系列实例来探讨如何使用 JavaSc…...

软件架构和软件体系结构的关系
软件架构(Software Architecture)和软件体系结构(Software System Architecture)这两个术语在日常使用中经常被交替使用,但它们在严格意义上有所区别: 1. **软件架构**: - 软件架构主要关注软件…...

C++并发:在线程间共享数据
1 线程间共享数据的问题 1.1 条件竞争 条件竞争:在并发编程中:操作由两个或多个线程负责,它们争先让线程执行各自的操作,而结果取决于它们执行的相对次序,这样的情况就是条件竞争。 诱发恶性条件竞争的典型场景是&am…...

GaussDB逻辑解码技术原理深度解析
GaussDB逻辑解码技术原理深度解析 一、背景介绍 在数字化转型的大潮中,异构数据库之间的数据同步需求日益增长。异构数据库同步指的是将不同类型、不同结构的数据库之间的数据进行同步处理,以确保数据在不同数据库之间的一致性。华为云提供的DRS服务&a…...

JAVA构造方法练习
要求在Student类中,(task1)添加一个有name和ID两个参数的构造方法,对成员变量name和ID进行初始化,(task2)实例化一个Student对象,学生姓名:Yaoming,ID&#x…...

Pytorch 三小时极限入门教程
一、引言 在当今的人工智能领域,深度学习占据了举足轻重的地位。而 Pytorch 作为一款广受欢迎的深度学习框架,以其简洁、灵活的特性,吸引了大量开发者投身其中。无论是科研人员探索前沿的神经网络架构,还是工程师将深度学习技术落…...

Rockect基于Dledger的Broker主从同步原理
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客: RocketMQ原理简述(二)-CSDN博客 2.Broker的高可用 如果…...

面向对象分析与设计Python版 面向对象的核心特征
文章目录 一、封装二、继承三、多态四、聚合/组合五、接口/实现六、抽象 一、封装 封装 Encapsulation 封装是隐藏对象实现细节的过程内部状态通常不能被其他对象访问对象的数据只能通过接口去访问封装使得对象可以被看成一个“黑盒子”它保护对象的内部状态不被其他对象破坏…...

CDP集群安全指南-静态数据加密
[一]静态数据加密的架构 CDP 支持两种加密组件,这些组件可以组合成独特的解决方案。在选择密钥管理系统(KMS)时,您需要决定哪些组件能够满足企业的密钥管理和加密需求。 CDP 加密组件 以下是 Cloudera 用于静态数据加密的组件描…...

RSA密码的安全性分析(简化版本)
RSA的安全性是基于分解大整数的困难性假定,之所以认为是假定是因为至今还未能证明大整数就是NP问题,也许有尚未发现的多项式时间分解算法。随着人类计算能力的不断提高,原来被认为是不可能分解的大数已经被成功分解。对于大整数的威胁除了人类…...

嵌入式linux系统中CMake的基本用法
第一:CMake的基本使用 在上篇文章中,我们聊了聊 Makefile。虽然它是 C/C++ 项目编译的“老司机”,但写起来真的是让人头大。尤其是当项目文件一多,手写依赖就像在搬砖,费时又费力。 那么问题来了,难道我们就没有更优雅的工具了吗?答案是:有! 这时候,CMake 就像一个…...

若依修改超级管理员admin的密码
通过接口方式或者页面 /system/user/resetPwd 需改其他用户的密码 修改其他用户的加密的密码,然后通过数据库将admin更新为这个密码就修改好了...

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解
clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…...

王佩丰24节Excel学习笔记——第二十四讲:宏表函数
【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 宏表函数不能直接使用。get.cell(参数一,参数二),参数一要参考类型表。 获得单元格的公式有很多种方法, 如:宏写法:get.cel…...

Navicat 17 for Mac 数据库管理软件
Mac分享吧 文章目录 效果一、准备工作二、开始安装1. 双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕。2. 应用程序/启动台显示Navicat图标,表示安装成功。 二、运行测试运行后提示:“Navicat Premium.pp”已损坏&#x…...

现代光学基础2
yt2 目录 激光器概述红宝石激光器 工作原理主要特点举例说明 固体激光器 分类与特点钛-蓝宝石激光器锁模技术 光纤激光器 优势与应用掺铒光纤放大器(EDFA)隔离器与法拉第效应 气体激光器 常见类型工作原理举例说明 半导体激光器 现状与优势工作原理应用…...

Git 入门(一)
git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…...

mysql自定义安装
1、下载安装包 我是在windows上安装,所以选择“Mysql Installer for Windows” 2、安装mysql 双击“mysql-installer-community-8.0.40.0.msi”,开始启动安装 这里选择安装项,这里只选择了两项。workbench是图形化管理工具,比较吃…...

微软自带日志输出+Serilog
安装两个 NuGet 包:Microsoft.Extensions.Logging,Serilog.AspNetCore 如何配置Program.cs,builder 具体如何配置自行解决: var builder WebApplication.CreateBuilder(args); builder.Logging.ClearProviders(); builder.Loggi…...

《PHP MySQL 创建数据库》
《PHP MySQL 创建数据库》 介绍 PHP是一种广泛使用的服务器端脚本语言,而MySQL是一种流行的关系型数据库管理系统。将PHP与MySQL结合使用,可以让您创建动态、交互式的网站。在本文中,我们将详细介绍如何使用PHP来创建MySQL数据库。 准备工…...

Python虚拟环境管理
Python管理虚拟环境主要是通过venv模块来完成的,这是Python标准库的一部分,因此不需要安装额外的包即可使用。以下是使用venv创建和管理虚拟环境的基本步骤: 创建虚拟环境 打开命令行界面(在Windows上是CMD或PowerShell…...

一个在ios当中采用ObjectC和opencv来显示图片的实例
前言 在ios中采用ObjectC编程利用opencv来显示一张图片,并简单绘图。听上去似乎不难,但是实际操作下来,却不是非常的容易的。本文较为详细的描述了这个过程,供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…...

c++ vector 使用find查找指定元素方法
在 C 中,std::vector 是一个动态数组,用于存储同类型元素的序列。如果你想在 std::vector 中查找指定元素,可以使用 std::find 算法。std::find 是定义在 <algorithm> 头文件中的标准库函数。 以下是一个示例代码,展示了如…...

leetcode 732. 我的日程安排表 III
题目:732. 我的日程安排表 III - 力扣(LeetCode) 这个数据规模,暴力就够了 struct Book {int begin;int end;Book(int b, int e) {begin b;end e;} }; class MyCalendarThree { public:MyCalendarThree() {}int book(int star…...

k8s系列--docker拉取镜像导入k8s的containerd中
# 确认一下当前集群中正在运行的 Pod 和命名空间 kubectl get pods -A# 示例一:拉取并导入 CoreDNS 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-hangzhou.aliyuncs.com/google_containers/cor…...

38-其他地方使用模式
38-其他地方使用模式 模式除了可以在 match 表达式中使用外,还可以使用在变量定义(等号左侧是个模式)和 for in 表达式(for 关键字和 in 关键字之间是个模式)中。 但是,并不是所有的模式都能使用在变量定…...