Machine Learning Notes
Machline Learning Notes
This is a record notes of relevant knowledge in ML learning.
相关技术栈
T2I Text to Image
文本描述生成相应图像。
依赖于深度学习和生成式对抗网络(GANs)或变分自编码器(VAEs)等先进的生成模型。
设计技术栈:
-
文本处理:使用NLP处理输入文本。
-
特征提取:从处理后的文本提取 key information 和 features.
-
图像生成: 使用difussion model generate image according to the features.
GANS or VAES model 可以学习如何将文本描述转化为 视觉内容。
GANS
Generative Adversarial Networks
通过一个对抗过程训练的,其中两个神经网络相互竞争,从而能够生成非常逼真的合成输出,如图像、音频和视频等。
由两部分组成: generator 和 discriminator
Generator
负责创造生产数据,目标是生成无法和真实数据区分的假数据。
将随机噪音作为输入,基于噪音生成数据样本。
Discriminator
区分生成器生成的 假数据 和 真实数据。
discriminator的输入是真实数据 or1 生成数据的数据。
输出是数据是真假的概率。
工作原理 Operating principle
generator 和 discriminator 动态博弈
generator的目标是提高其生成的假数据的质量,使其足以欺骗discriminator,让discriminator认为这些数据是真实的。
discriminator的目标是正确区分真实数据和假数据。
应用
图片生成 和 数据强化。
VAEs Variational AutoEncoders
使用probabilistic graph model和Deep learning技术来学习输入数据的潜在表示。
VAEs组成: Encoder 和 Decoder
Encoder:
这部分的网络负责将输入数据映射到一个潜在的空间(latent space)。
Decoder:
将latent space的这些随机样本重新构建(decode)回数据的原始形态。
eg:
一个生成新的人脸图像模型
-
数据收集
收集并预处理一个人脸图像数据集,例如将图像裁剪为统一的大小,转换为灰度或归一化像素值。
-
模型建立
编码器:设计一个神经网络,将输入的人脸图像编码为潜在空间中的两组参数—均值(w) 和方差(o)。这些参数描述了潜在空间中的正态分布。
解码器:设计另一个神经网络,它将潜在空间的随机样本映射回原始数据空间,即从潜在表示重构出人脸图像。
-
训练过程
在训练过程中,
Encoder学习输入图像的最佳潜在表示
Decoder学习如何从这些潜在表示中重构图像
-
图像生成
训练完成后,我们可以通过向编码器提供新的随机潜在变量样本来生成新图像。
t2v Text to Video
使用文本描述来生成视频的技术,包括 图像序列 和 可能的音频。
核心组成
-
文本分析
解析输入的文本,理解其语义内容,包括动作、场景描述、情绪等元素。
-
内容生成
基于解析的文本生成对应的视觉内容。这一步可能涉及使用预训练的图像生成模型(如GANs、VAEs等)来生成视频的每一帧。
-
动态合成
将生成的图像序列合成为连续的视频。这通常需要确保视频中的动作连贯、场景转换自然。
-
音频合成
对于完整的视频体验,可能还需要生成相应的音频。
VLLMs
Other techincal Stacks
meachine learning framework: TensorFlow, PyTorch, JAX
Data handling: Apache Kafka, Apache Spark, Hadoop
Cloud Service: AWS, Google Cloud, Azure
Model deployment: Docker, K8S(Kubernetes)
Optimize Operating performance of AI model:
performance analysis: TensorBoard, PyTorch Profiler, NVDIA Nsight Systems
加速技术: CUDA, OpenCL
优化技术: 模型剪枝, 量化, 知识蒸馏
硬件优化:特定硬件加速器 TPU和 FPGA
TVM
Tensor Virtual Machine
深度学习的编辑器
将深度学习模型部署到硬件平台的 开源编辑器。
通俗解释就是将 模型 转化为 机器码 可以在任何设备上运行。
TVM支持不同的前端(深度学习框架): ONNX, Pytorch
TVM支持不同的后端(执行代码的硬件平台): CUDA, LLVM(complier 可以用来加速代码的运行速度)
LLVM 支持多个GPU类型上运行代码。
CUDA 只支持 NVIDIA的GPU上进行运行。
举个例子理解
使用PyTorch框架来训练一个深度神经网络模型。在PyTorch中,定义模型的结构,选择优化器,训练模型,并对其进行验证。一旦模型训练完成并验证通过,需要将这个模型部署到不同的硬件上(比如GPU、CPU或专用的加速器上)。
前端就是 pyTorch, 用于 创建 和 训练 模型。
需要将训练好的模型,转变为ONNX格式,让TVM处理。
TVM将模型转为 Relay IR,更加通用。
后端是 在硬件平台上运行。
TVM中选择LLVM作为后端意味着你可以将模型编译为能在各种CPU上运行的代码,而不仅仅是特定类型的GPU。
TVM中选择CUDA,适用于NVIDIA的GPU,需要学习CUDA编程知识,对于深度学习和计算密集型任务会有更好的性能。
Official Website
TVM使用
1 | git clone --recursive https://github.com/apache/tvm tvm |
1. 安装依赖
CMake、Python etc。
安装python包
1 | cd python; python setup.py install |
2. 导入模型 和 优化
转换格式
将深度学习模型(TensFlow, Pytorch, Keras, MXNet)转为 TVM支持的格式
可以使用TVM模型转换工具
relay.frontend.from_tensorflow 或者 relay.frontend.from_pytorch
1 | import tvm |
tensflow
1 | from tvm.relay.frontend import from_tensorflow |
pytorch
1 | import torch |
3. 使用优化器优化模型
TVM自动优化工具: AutoTVM 和 AutoScheduler
自动找到最优的内核配置和计算图优化策略,以提高在特定硬件上的性能
优化内核配置: 特定的任务 使用选择 相应的 处理器内核,从而提升性能。
CPU GPU FPGA
硬件平台: 是支持软件运行和执行的物理组件和设备的集合。
CPU Central processing unit: 负责解释和执行大部分计算机指令。
GPU Graphics processing unit: 最初用于处理图形和图像数据,现在也用于加速并行计算任务。
FPGA Field programmable gate array: 高度定制,适用于特定的硬件。
并行计算任务: 该任务 可以被分解为 多个子任务,斌且在多个处理器上并行执行。
相关类似Item
TensorRT: NVIDIA,专门针对其GPU优化,提升深度学习在GPU运行效率。
ONNX Runtime: 方便模型 在不同框架上的迁移和使用。 通过 ONNX格式表示通用模型,这样不同框架训练的模型都可以在ONNX Runtime上运行。
后端
CUDA
LLVM
Low Level Virtual Machine
编译器开发的项目,主要是 用于 提供 模块化的编辑器和工具链。
开发者 可以用LLVM提供的编辑器组件 创建自己的前端,优化器 和 后端。
其核心为 IR,是一种平台无关代码,优化代码,然后应用到硬件平台。
苹果公司的Clang编辑器 就是基于LLVM 构建的。
利用LLVM作为后端。
Clang 和 LLVM结合 生成 优化后的代码。
两者都是开源项目。
Convolutional Operator
卷积算子: 用于提取图像的特征,比如边缘、角点、纹理等。
Kernel 或 Filter
CO是通过一个小的矩阵(称为核或过滤器)在输入图像上滑动(或“卷积”)来工作的。这个核有固定的尺寸,比如3x3或5x5。
Sliding Window
核在图像上按照一定的步长(Stride)滑动,覆盖图像的不同区域。在每个位置上,核与其覆盖的图像区域进行元素对应的乘法操作。
Feature Map
将核与图像区域的对应元素相乘后,结果求和,形成一个新的矩阵,这个矩阵称为特征映射或激活图。特征映射捕获了输入图像的一些特征。
Padding
为了处理边界问题或调整输出特征图的尺寸,有时会在输入图像周围添加额外的边界(称为Padding)。
激活函数
在卷积操作之后,通常会应用一个激活函数(如ReLU)来引入非线性,增强网络的表达能力。