Machine Learning Notes

Machline Learning Notes

This is a record notes of relevant knowledge in ML learning.

相关技术栈

T2I Text to Image

文本描述生成相应图像。

依赖于深度学习和生成式对抗网络(GANs)或变分自编码器(VAEs)等先进的生成模型。

设计技术栈:

  1. 文本处理:使用NLP处理输入文本。

  2. 特征提取:从处理后的文本提取 key information 和 features.

  3. 图像生成: 使用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:

一个生成新的人脸图像模型

  1. 数据收集

    收集并预处理一个人脸图像数据集,例如将图像裁剪为统一的大小,转换为灰度或归一化像素值。

  2. 模型建立

    编码器:设计一个神经网络,将输入的人脸图像编码为潜在空间中的两组参数—均值(w) 和方差(o)。这些参数描述了潜在空间中的正态分布。

    解码器:设计另一个神经网络,它将潜在空间的随机样本映射回原始数据空间,即从潜在表示重构出人脸图像。

  3. 训练过程

    在训练过程中,

    Encoder学习输入图像的最佳潜在表示

    Decoder学习如何从这些潜在表示中重构图像

  4. 图像生成

    训练完成后,我们可以通过向编码器提供新的随机潜在变量样本来生成新图像。

t2v Text to Video

使用文本描述来生成视频的技术,包括 图像序列 和 可能的音频。

核心组成

  1. 文本分析

    解析输入的文本,理解其语义内容,包括动作、场景描述、情绪等元素。

  2. 内容生成

    基于解析的文本生成对应的视觉内容。这一步可能涉及使用预训练的图像生成模型(如GANs、VAEs等)来生成视频的每一帧。

  3. 动态合成

    将生成的图像序列合成为连续的视频。这通常需要确保视频中的动作连贯、场景转换自然。

  4. 音频合成

    对于完整的视频体验,可能还需要生成相应的音频。

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

https://tvm.apache.org/

TVM使用

1
2
git clone --recursive https://github.com/apache/tvm tvm
cd 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
2
import tvm
from tvm import relay

tensflow

1
2
3
4
5
6
from tvm.relay.frontend import from_tensorflow
# 假设你的模型文件是 'model.pb'
with tf.io.gfile.GFile('model.pb', 'rb') as f:
graph_def = tf.compat.v1.GraphDef()
graph_def.ParseFromString(f.read())
mod, params = from_tensorflow(graph_def, layout="NCHW")

pytorch

1
2
3
4
5
6
7
8
9
import torch
from tvm.relay.frontend import from_pytorch
# 假设你的模型是一个 PyTorch 模型
model = torch.load('model.pth')
model.eval()
input_shape = [1, 3, 224, 224] # 例如,对于一个图像分类模型
input_data = torch.randn(input_shape)
scripted_model = torch.jit.trace(model, input_data).eval()
mod, params = from_pytorch(scripted_model, input_shapes={'input': input_shape})

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)来引入非线性,增强网络的表达能力。