每日學習過程中記錄的筆記,從各個網站整理下來,用于當日復盤。
如果其中的知識點能幫到你,也很榮幸呀。
-------------------------------------------------------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