【菜狗的记录】模糊聚类最大树、图神经网络、大模型量化——20250627
每日学习过程中记录的笔记,从各个网站整理下来,用于当日复盘。
如果其中的知识点能帮到你,也很荣幸呀。
-------------------------------------------------------20250622-------------------------------------------------------------
🐱1、模糊聚类最大树算法
【机器学习笔记37】模糊聚类分析(基于最大生成树)-CSDN博客
🐕模糊关系:假设论域UV(论域指的事件中所有感兴趣的研究对象的非空集合),设U×V的一个模糊子集R是U到V的模糊关系,其隶属函数映射为UR:U×V→[0,1],隶属度R(x,y)称为(x,y)关于模糊关系R的相关程度。例如身高和体重就是模糊关系。
🐕在模糊集合论中,元素的隶属关系不再是简单的“是”或“否”,而是用一个介于0和1之间的实数来表示,称为隶属度。模糊子集可以进行交并补运算。
🐕将模糊关系用模糊矩阵表述,类似马尔可夫随机过程的转移概率。
模糊矩阵的合成运算和矩阵乘法类似,只是在具体的运算中原先的元素乘元素编程取最小值,原先的乘积相加变为求最大值。
🐕模糊矩阵的λ截距矩阵,这个定义比较简单,矩阵中的每个元素大于λ则为1,否则为0。举例如下:
模糊关系的聚类分析
🐕基于模糊矩阵的等价关系
则R是模糊等价矩阵。
🐕模糊矩阵的分类
由于等价关系代表着集合上的一个分类,因此在模糊聚类中,我们对模糊矩阵取不同的λ截距,就可以取不同的分类。
🐕模糊聚类算法步骤
🐕最大树:想象一群人(元素),两两之间的“关系强度”用0~1的数值表示(如友情深浅)。
-
目标:用尽可能少的“强关系”连接所有人,形成一棵树。
-
方法:
-
按关系强度从高到低排序所有可能的连接。
-
依次选择边,如果连接后不会形成环,就保留。
-
直到所有人连通为止。
-
以上进行聚类操作,进而得到模糊集的聚类。
-------------------------------------------------------20250623-------------------------------------------------------------
🐱2、图神经网络
图神经网络GNN综述汇报(先浅浅入个门)_哔哩哔哩_bilibili
基础概念
🐕图神经网络是指使用神经网络学习图结构数据,提取挖掘图结构数据的特征和模式,满足聚类、分类、预测、分割、生成等图学习任务需求的算法总和。
🐕图数学定义:节点、边、关联网络
🐕图数据特点:节点之间距离无法欧氏距离测量。
🐕图任务分类
🐕图数据存储
🐕图属性更新
🐕图池化信息
🐕基本GNN模型
🐕GNN模型分类
🐕GCN图卷积神经网络
GNN与网络嵌入
🐕GNN的研究与图嵌入或网络嵌入(network embedding)密切相关。网络编码旨在将网络节点表示为低维向量表示,以维护网络拓扑结构和节点内容信息,并且便与后续图像和数据分析任务,如分类、聚类等。
与此同时,GNN是一种深度学习模型,旨在以端到端方式解决与图结构相关的任务。
🐕GNN与网络嵌入的主要区别在于,GNN是针对各种任务而设计的一组神经网络模型,而网络嵌入涵盖了针对同一任务的各种方法。因此,GNNs可以通过一个图形自动编码器框架来解决网络嵌入问题。另一方面,网络嵌入还包含其他非深度学习方法,如矩阵分解、随机游走等。
GNN与Graph Kernel
🐕Graph Kernel历来是解决图分类问题的主要技术。这些方法使用一个核函数来度量图对之间的相似性,那么这样基于核的算法(如支持向量机)就可以用于图的监督学习。与GNN类似,Graph Kernel可以通过映射函数将图或节点嵌入到向量空间中。不同的是,这个映射函数是确定性的,而不是可学习的。由于Graph Kernel方法采用两两相似度计算,因此存在较大的计算瓶颈。一方面,GNN直接根据所提取的图表示进行图分类,因此比Graph Kernel方法效率高得多。
为什么推荐系统不用GNN?
为什么最近几年,没人在推荐系统里去玩 GNN 模型,GNN 是凉透了吗? - 知乎
🐕推荐系统的优化要明确优化是怎么得到效果的,收益来源于样本、特征、模型三者中一个或者多个。如下图两个方面的提升。
🐕GNN能够提供——信息利用能力的增强。例如从中心节点扩展到周围节点,学习了二跳、三跳关联关系的学习能力。利用知识图谱点之间的拓扑结构,把拓扑结构蕴含的关系信息编码到embedding,进而提供收益。
①对用户行为信息丰富的推荐系统,例如抖音、小红书,用户之间具有协同关系,能够充分表征内容相似性,不需要知识和属性的连接补充相似性。不需要GNN的信息增量。
②对于纯知识型的推荐系统,例如豆瓣、IMDB、知网。网站中知识的链接是非常重要的,知识间二度、三度的关联也是有价值的。而且它缺乏足够多的用户互动信息来覆盖表达物品之间的相似性,那么GNN就是有价值的。
-------------------------------------------------------20250625-------------------------------------------------------------
🐱3、深度互学技术
模型蒸馏算法
🐕模型越来越大,参数很多,涉及更高效的模型能够解决。
🐕设计预训练的大网络是老师,向小网络传递知识(平滑后的概率估计),提高小网络性能。单向知识传递。小网络模仿大网络类别概率,表现比大网络更好的性能。但是小网络的反馈不能优化。
🐕本质原因:不需要一个大专家学习所有东西,而是学生学习+从老师那里学到一些东西,能够降低参数量,增强泛化能力,能够适应新的数据。
深度互学习
🐕小网络之间相互学习,三人行必有我师。
互学习算法也很容易扩展到多网络学习和半监督学习场景中。当有K个网络时,深度互学习学习每个网络时将其余K-1个网络分别作为教师来提供学习经验。另外一种策略是将其余K-1个网络融合后得到一个教师来提供学习经验 。
其中,多网络互学习中多个独立教师(DML)的性能会优于融合教师(DML_e),就像多个老师教要比一个会的多的老师教更好。
-------------------------------------------------------20250626-------------------------------------------------------------
大模型量化技术
由于RTX 3090显卡的显存为24GB,而Qwen3-30B-A3B模型非常大,直接运行可能会遇到显存不足的问题。因此,需要采用一些优化和量化技术来减少显存占用。
安装必要的库:
pip install torch transformers
量化技术可以显著减少模型的显存占用。常见的量化方法包括INT8量化和混合精度量化(FP16/FP32)。
INT8量化
INT8量化是将32位浮点数(FP32)模型的参数和激活值转换为8位整数(INT8)的过程,旨在减少模型的计算复杂度和内存占用,从而提升推理速度。
使用bitsandbytes
进行INT8量化。bitsandbytes
是一个流行的库,用于对模型进行INT8量化。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torchmodel_name = "Qwen/Qwen3-30B-A3B"# Load the model and tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name,torch_dtype=torch.float16, # Use float16 for mixed precisiondevice_map="auto", # Automatically map the model to available devicesload_in_8bit=True, # Load the model in 8-bit precision
)# Prepare the input
prompt = "Give me a short introduction to large language model."
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")# Generate text
with torch.no_grad():generated_ids = model.generate(**inputs, max_new_tokens=512)
output_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)print(output_text)
混合精度训练
混合精度训练(Mixed Precision Training)可以减少显存占用,同时保持模型的性能。可以通过torch.cuda.amp
自动混合精度工具来实现:
from torch.cuda.amp import autocastwith autocast():generated_ids = model.generate(**inputs, max_new_tokens=512)
output_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)print(output_text)
优化输入和生成参数
减少输入序列长度和生成的新标记数量可以显著减少显存占用。例如,将max_new_tokens
设置为一个较小的值,如512或1024
generated_ids = model.generate(**inputs, max_new_tokens=512)
使用多GPU并行
使用多GPU并行来分摊显存压力。可以通过torch.nn.DataParallel;
torch.nn.parallel.DistributedDataParallel
来实现:
import torch
from torch.nn.parallel import DistributedDataParallel as DDP# Assume you have multiple GPUs
model = model.to("cuda")
model = DDP(model, device_ids=[0, 1, 2, 3]) # Example for 4 GPUs# Generate text
generated_ids = model.generate(**inputs, max_new_tokens=512)
output_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)print(output_text)
——小狗照亮每一天
20250627