Skip to content

markl-a/My-AI-Learning-Notes

Repository files navigation

我的 AI學習相關筆記

相關的框架以及算法學習

  1. 使用 Python 進行 ETL的流程
  2. python快速入門
  3. numpy,pandas學習紀錄
  4. tensorflow 學習紀錄
  5. keras 學習紀錄
  6. pytorch 學習紀錄
  7. yolo 使用
  8. galore的嘗試以及medical chat
  9. langchain 相關的學習紀錄
  10. MLflow 入門介紹
  11. 視訊品質評估相關論文閱讀與復現
  12. Segment Anything 2 論文解讀與範例使用
  13. langchain 多模態 RAG 的範例修改

目錄

cover

簡介

這個 Notes 主要是我自己對於AI工程師相關的知識以及技能的了解與整理,主要的目錄是根據llm-course進行延伸以及擴展,並加上一些AI, ML, DL以及一些資料分析相關的必備知識與技能整理。

不過目前會是以LLM為主,除了我之前就弄過的相關內容之外,其他的內容會是必須的才會被添加。

算法與資料結構

這邊主要會是我算法提練習的紀錄以及閱讀的心得,因為我不是大學教授或專家等級的,所以目前難免會有點錯誤。

之後補上專業的相關內容以及實作心得。

我算法題練習的倉庫:LeetcodePractice

從AI到LLM基礎

這邊主要是根據 LLM course 上面的目錄為基礎的加深以及補強。

主要內容為數學基礎,資料分析跟處理,機器學習,深度學習中的 NLP 以及 CV 和 MLOps

(為原內容再加深之外再加上CV 跟 MLOps等工作上可能會用到的內容)

之後再新增ChatGPT for Data Analytics : Full Course的學習紀錄跟內容。

點擊以打開詳細內容

從AI到LLM基礎

1. 機器學習數學基礎

在掌握機器學習之前,了解支撐了這些演算法的基本數學概念非常重要。不過其實大概看這三個影片課程大概就可以了,這一系列的影片教學有教學跟實作,其他的就有興趣再看。

1.線性代數:Linear Algebra for Machine Learning

這對於理解許多演算法至關重要,尤其是深度學習中使用的演算法。關鍵概念包括向量、矩陣、行列式、特徵值和特徵向量、向量空間和線性變換。

2.微積分:Calculus for Machine Learning

許多機器學習演算法涉及連續函數的最佳化,這需要了解導數、積分、極限和級數。另外多變量微積分和梯度的概念也很重要。

3.機率與統計:Probability for Machine Learning

這些對於理解模型如何從數據中學習並做出預測至關重要。 關鍵概念包括機率論、隨機變數、機率分佈、期望、變異數、協方差、相關性、假設檢定、信賴區間、最大似然估計和貝葉斯推理。

點擊以打開可延伸的閱讀以及參考連結:
可延伸的閱讀以及參考:

電子書:

其他相關連結:


2. AI簡介

3. 機器學習與Python

Python 是一種強大而靈活的程式語言,由於其可讀性、一致性和強大的資料科學庫生態系統,特別適合機器學習。

📚 資源:


4. 神經網絡,深度學習與自然語言處理(NLP)和電腦視覺(CV)

  • 基礎知識: 這包括理解神經網路的結構,例如層、權重、偏差和激活函數(sigmoid、tanh、ReLU 等)
  • 深度學習框架: 目前是在深度學習框架方面還是 Pytorch 最熱門,但是有些老應用跟某些 Google 相關的應用仍還是使用 Tensorflow 。假如要入門的話建議下面四個連結找一個入門並實作一個應用即可。
  • 訓練與最佳化: 熟悉反向傳播和不同類型的損失函數,例如均方誤差 (MSE) 和交叉熵。了解各種最佳化演算法,例如梯度下降、隨機梯度下降、RMSprop 和 Adam。 神經網路是許多機器學習模型的基本組成部分,特別是在深度學習領域。為了有效地利用它們,全面了解它們的設計和機制至關重要。
  • 過度擬合: 了解過度擬合的概念(模型在訓練資料上表現良好,但在未見過的資料上表現不佳)並學習各種正則化技術(dropout、L1/L2 正則化、提前停止、資料增強)來防止過度擬合。
  • 實作多層感知器 (MLP): 使用 PyTorch 建構 MLP,也稱為全連接網路。

📚 其他資源:


4.1 電腦視覺(CV)

電腦視覺 (Computer Vision):電腦視覺是人工智慧的一個分支,它使電腦能夠從數位圖像和影片中提取、分析和理解有意義的資訊。電腦視覺的應用範圍廣泛,從自動駕駛汽車到醫學影像分析,再到增強現實。

深度學習在計算機視覺中的應用涉及到使用深度神經網絡(如卷積神經網絡)來進行圖像識別、分類、分割等任務。這些技術已廣泛應用於自動駕駛、醫療影像分析、監控系統等領域。

1. 卷積神經網絡 (CNN) 基礎

2. 圖像分類與識別

  • 圖像分類: 使用深度學習模型進行圖像分類任務,包括單標籤和多標籤分類。

  • 物體檢測: 了解區域提議網絡(RPN)及其在Faster R-CNN中的應用,以及其他物體檢測方法如YOLO和SSD。

3. 圖像分割

  • 語義分割: 使用全卷積網絡(FCN)、U-Net等模型對圖像進行像素級的分類。

  • 實例分割: 了解Mask R-CNN等模型,實現對圖像中不同物體實例的區分。

4. 生成對抗網絡 (GAN)

  • GAN基礎: 學習生成對抗網絡的基本原理,包括生成器和判別器的設計。

  • 應用: 探索GAN在圖像生成、圖像風格轉換、超分辨率等方面的應用。

5. 基於Transformer的模型

  • Vision Transformer (ViT): 了解Transformer架構在計算機視覺中的應用,特別是在圖像分類等任務中的表現。

6. 資源與實踐

  • 實踐平台: 使用Kaggle等平台進行實踐,參與計算機視覺比賽和項目。

  • 學習工具: 使用TensorFlow、PyTorch等框架進行模型設計和訓練。

這些內容涵蓋了深度學習在計算機視覺中的核心技術和應用,幫助學習者全面掌握從基礎到進階的知識與技能。


4.2 自然語言處理(NLP)

NLP 是人工智慧的一個令人著迷的分支,它彌合了人類語言和機器理解之間的差距。從簡單的文字處理到理解語言的細微差別,NLP 在翻譯、情緒分析、聊天機器人等許多應用中發揮著至關重要的作用。

  • 文字預處理: 學習各種文字預處理步驟,例如分詞(將文字分割成單字或句子)、詞幹擷取(將單字還原為其詞根形式)、詞形還原(與詞幹擷取類似,但考慮上下文)、停用詞刪除等。
  • 特徵提取技術: 熟悉將文字資料轉換為機器學習演算法可以理解的格式的技術。主要方法包括詞袋 (BoW)、詞頻-逆文檔頻率 (TF-IDF) 和 n-gram。
  • 詞嵌入: 詞嵌入是一種詞表示形式,允許具有相似意義的詞具有相似的表示形式。主要方法包括 Word2Vec、GloVe 和 FastText。
  • 遞歸神經網路 (RNN): 了解 RNN 的工作原理,RNN 是一種設計用於處理序列資料的神經網路。探索 LSTM 和 GRU,這兩種能夠學習長期依賴關係的 RNN 變體。
  • 基於 Transformer 跟預訓練模型的 NLP: 由於基於類 Transformer 的模型能處理之前其他 經典 NLP 模型處理的任務,並且大部分任務能做得更好,所以我覺得這是必學的一部分。

📚 Resources:


深入LLM模型工程與LLM運維

這邊是從模型本身的架構到模型運作整個流程的必備知識跟技能。

大致如下:

1.模型了解與選擇

2.資料集收集,準備

3.模型預訓練,持續預訓練,微調(lora,Qlora ..),對齊(RLHF,DPO..)

4.模型優化和壓縮

5.模型部署以及系統整體流程維護

點擊以打開詳細內容

roadmap_scientist

LLM 簡介與架構

1. 簡介

大型語言模型(LLM)在自然語言處理(NLP)領域取得了顯著的進步。這些模型大多基於Transformer架構,特別是解碼器部分,如GPT模型系列。理解LLM的基本輸入(tokens 令牌)和輸出(logits)以及注意力機制對於掌握LLM的工作原理至關重要。

詳細的LLM簡介可參照我翻譯的:

  1. Stanford CS25-Apr 2024: V4 I Overview of Transformers - Transformers and LLMs: An Introduction(上)

  2. Stanford CS25-Apr 2024: V4 I Overview of Transformers - Transformers and LLMs: An Introduction(下)

看完上面的連結對目前大模型的狀況變可以了解一二。

延伸閱讀與觀看

2. LLM 整體架構 - Transformer整體架構

LLM通常基於Transformer架構,其中特別採用了僅使用解碼器的設計(例如GPT系列)。這些模型使用自注意力機制來處理輸入並生成輸出。其他的架構則之後會陸續介紹。

具體請參照:

  1. Let's build GPT: from scratch, in code, spelled out. 學習紀錄

  2. 最原始的 transformer 版本圖文詳細敘述:Transformer 運作原理圖解 by Jay Alammar

  3. Let's reproduce GPT-2 (124M):跑完這個流程大概對程式碼跟模型的理解絕對會更深的多。

  4. nanoGPT 流程圖像化 by Brendan Bycroft: 3D視覺化展示LLM內部運作。

延伸閱讀與觀看

3. 標記化 Tokenization

將原始文本資料轉換為模型可以理解的格式,即token。這過程包括將文本拆分為標記(通常是單字或子單字)。

具體請參考:

中文方面兩者擇一了解即可,找了很久沒找到繁中的,感覺可惜。

4. 注意力機制

注意力機制是LLM的核心技術,它使得模型能夠在生成輸出時關注輸入的不同部分。這包括自注意力和縮放點積注意力機制,相關的介紹其實在前面架構介紹的內容裡也有提到。

延伸閱讀與觀看

5. 文字生成

模型使用不同的策略生成文本輸出。常見策略包括貪婪解碼、波束搜尋、top-k 採樣和核採樣。

延伸閱讀與觀看

6. 參考的流程跑通專案

下面的都是對岸的,沒辦法,因為流程跟繁中是最類似的,假如有繁中的話拜託讓我知道,萬分感謝。

  1. GPT2-Chinese
  2. ChatLM-mini-Chinese

7. 其他的模型架構或方法

7.1 新的位置嵌入 Positional embeddings相關方法:

在了解原始 transformer 的 Positional embeddings方法後,就可看下不同的方法,像是RoPE 這樣的相對位置編碼方案。或實現 YaRN (通過溫度因子乘以注意力矩陣) 跟 ALiBi (基於token距離的注意力獎懲) 來擴展上下文長度。

7.2 Mamba ,RWKV , TTT等新模型:

說是新模型其實提出也有一段時間了,我感覺我問了Chat-gpt, Gemini, Claude 有哪些2024或2023新提出的大模型架構還比我自己找的文章速度要快,所以有興趣的自己去問問就好。

7.3 模型融合 Model merging:

另外將以訓練的模型合併也是一個提升表先的方法,具體的可參考這個 mergekit 庫,這個課實現了許多融合的方法,如 SLERP, DARE, 和 TIES

模型融合通常指的是將多個已訓練的模型合併成一個單一模型的過程。這不僅僅是用參數平均或投票決定輸出,而是在模型的權重和結構層面上進行合併。這個過程不需要再次訓練,可以通過數學操作(如球面線性內插(SLERP)或其他融合技術)將不同模型的知識整合起來。模型融合可用於創建一個表現更佳、更強大的模型,通常是將多個模型在特定任務上的優勢結合起來。

7.4 專家混合 Mixture of Experts:

Mixtral 因其卓越的性能而重新使MoE架構流行起來。 與此同時,開源社區出現了一種frankenMoE,通過融合像 Phixtral這樣的模型,這是一個更經濟且性能良好的選項。MoE是一種結構,它包含多個子模型或“專家”,每個專家專門處理不同的任務或數據子集。在MoE架構中,一個“gate”或調度器決定對於給定的輸入,哪個專家被使用。這是一種稀疏啟動方法,可以大幅提升模型的容量和效率,因為不是所有的專家都會對每個輸入進行響應。

7.5 多模態模型 Multimodal models:

這類模型像是( CLIP, Stable Diffusion, 或 LLaVA) 能處理多種類型的輸入(文本、圖像、音頻等)以及具備了統一的嵌入空間,從而具備了強大的應用能力,如文本到圖像。


其實大致流程應該是: 1. 確定需求 2. 預訓練模型選擇 3. 構建或選擇資料集 4. 微調,對齊 5. 壓縮 6. 評估

只是我因為想把訓練方式根據資料量的差異由大排到小,

所以我就把 ( 預訓練與預訓練模型選擇 ) 放到第三個講。

另外,內容有誤的地方請立刻通知我!!

2. 構建或選擇資料集

雖然從維基百科和其他網站找到原始資料很容易,

但在許多環境中收集成對的問答、範例和答案卻很困難。

與傳統的機器學習一樣,資料集的品質直接影響模型的成效,因此可說是微調過程中最重要的環節。

要用到的資料集又被稱為指令資料集(Instruction Dataset),可以簡單理解為問答的資料集。

可參考的整體流程:

  1. 使用現有的資料集:資料集可以在Kaggle、Huggingface、GitHub和GitLab上尋找。

    比較有名的包括TMMLU+ Dataset。此外,Huggingface上還有一些繁體中文訓練集可供使用。

    • 如果沒有你需要的資料集,可以將英文或簡中翻譯成繁體中文,參考這個方法
  2. 使用工具收集資料並製作成資料集

  3. 使用類 Alpaca的方法產生資料集:使用OpenAI API(GPT)從頭開始產生合成資料。可以指定種子和系統提示來建立多樣化的資料集。

  4. 進階技巧:了解如何使用Evol-Instruct改進現有資料集,如何產生和Orcaphi-1論文中類似的高品質合成資料。

  5. 資料過濾:傳統技巧包括使用正規表示式、刪除近似重複項、關注具有大量標記的答案等。

  6. 提示詞模板:目前還沒有真正的標準方法來格式化說明範本和答案,因此了解不同的聊天範本很重要,如ChatMLAlpaca等。

    • Chat Template by Matthew Carrigan: 關於提示模板的Hugging Face頁面。

3. 預訓練以及預訓練模型選擇

預訓練模型選擇

目前我查詢並經過粗略的使用後覺得應該可使用的繁體中文大模型如下:

  1. 國研院-Llama3-TAIDE
  2. MediaTek Research -Breeze
  3. 繁體中文專家模型開源專案TAiwan Mixture of Experts」(Project TAME) yentinglin's Collections
  4. 群創光電-白龍(這個我不確定)

國外可用於微調的開放大模型(可在其他家雲端或本地運作)基本是 LLAMA, GEMMA, BLOOM, Mistral。

只能在遠端微調的大概就很多了(Gemini , GPT系列 等等)。

建議要練習的話先從LLAMA 模型開始就可以了,之後再根據情況挑選符合自己需求的就可。

繁體中文的微調可先試試前面三個。

預訓練

快速入門:Pretraining LLMs-Deeplearning.ai 短課程

預訓練是一個非常漫長且成本高昂的過程,這就是為什麼這不是一般人在工作中的重點。

但是對預訓練期間發生的情況有一定程度的了解是很好的。

簡單來說,了解可以,類似玩具級的 GPT2 預訓練在 vast.ai 租個 4 GPU 的機器或在colab用a100(不過這個時間一定會超過24小時,需要寫checkpoint存儲模型跟腳本定時重新 load 一遍) 應該是可以實現的。

但是目前商業等級的實現沒四千萬別做,目前已知花最少錢訓練的是10萬美元,另外,我從新聞得知通常的訓練成本是120萬美元左右

不過我想隨著時間的推進,之後應該會有更加高效以及更快速的方法出現。

📚 參考資料:

  • BLOOM by BigScience: 描述如何建立 BLOOM 模型的 Notion 頁面,其中包含大量有關工程部分和遇到問題的有用資訊。
  • OPT-175 Logbook by Meta: 研究日誌顯示出了什麼錯的以及什麼是正確的。如果您計劃預先訓練非常大的語言模型(在本例中為 175B 參數),則非常有用。

4. 監督微調 (Supervised Fine-Tuning)

預訓練模型僅針對下一個標記(next-token)預測任務進行訓練,這就是為什麼它們不是有用的助手。

SFT 允許您調整它們以回應指令。此外,它允許您根據任何資料(私人資料、GPT-4 無法看到的資料等)微調您的模型並使用它,而無需支付 OpenAI 等 API 的費用。

Decoder Only ,Encoder Only 跟 原始 Transformer 在進行訓練時的差異:

  • Decoder Only ,Encoder Only 在訓練或微調時,問與答通常都是放在同一個地方(Decoder 或 Encoder),並在問與答使用 EOS,其他終止符號或模板區分問與答。
  • 只是 Decoder only 的視為生成任務,而Encoder Only的則視為填空,原始 Transformer則是依照原本設定的方式進行訓練。
  • 簡介跟教學:
  • 全微調: 全微調是指訓練模型中的所有參數 ( 就是模型訓練,只是資料量不多,並且資料通常是特定任務或子領域上的 )。這不是一種有效的技術,但它會產生稍微好一點的結果.
  • LoRA: 一種基於低階適配器(low-rank adapters)的高效參數微調技術(PEFT)。我們不訓練所有參數,而是只訓練這些適配器(adapters)。
  • QLoRA: 另一個基於 LoRA 的 PEFT,它還將模型的權重量化為 4 bits,並引入分頁優化器來管理記憶體峰值。將其與Unsloth結合使用,可以在免費的 Colab 筆記本上運行。
  • Axolotl: 一種用戶友好且功能強大的微調工具,用於許多最先進的開源模型。
  • DeepSpeed: 針對多 GPU 和多節點設定的 LLM 的高效預訓練和微調(在 Axolotl 中實現)。

📚 參考資料:


5. 偏好對齊

經過監督微調後,RLHF 是用來使 LLM 的答案與人類期望保持一致的一個步驟。這個想法是從人類(或人工)回饋中學習偏好,這可用於減少偏見、審查模型或使它們以更有用的方式行事。它比 SFT 更複雜,並且通常被視為可選項之一。

📚 參考資料:


6. 評估 Evaluation

評估大型語言模型(LLMs)是流程中一個被低估的部分,因為評估這一個過程耗時且相對可靠性較低。你的下游任務應該指明你想要評估的內容,但記得古德哈特定律(Goodhart's law)提到的:“當一個衡量指標變成了目標,它就不再是一個好的衡量指標。”

  • 簡介與入門:

  • 傳統指標 Traditional metrics: 像困惑度(perplexity)和BLEU分數這樣的指標不再像以前那樣受歡迎,因為在大多數情況下它們是有缺陷的。但了解它們以及它們適用的情境仍然很重要。

  • 通用基準 General benchmarks: 基於語言模型評估工具箱 Language Model Evaluation Harness,Open LLM排行榜 Open LLM Leaderboard 是用於通用大型語言模型(如ChatGPT)的主要基準。還有其他受歡迎的基準,如BigBench, MT-Bench等。

  • 任務特定基準 Task-specific benchmarks: 如摘要、翻譯和問答等任務有專門的基準、指標甚至子領域(醫療、金融等),例如用於生物醫學問答 PubMedQA

  • 人類評估 Human evaluation: 最可靠的評估是用戶的接受度或由人類所做的比較。如果你想知道一個模型表現得如何,最簡單但最確定的方式就是自己使用它。

📚 參考文獻:


7. 壓縮

量化或壓縮是將模型的權重(和啟動值)轉換成更低精度表示的過程。例如,原本使用16位元儲存的權重可以轉換成4位元表示。這種技術愈來愈重要,用來減少與大型語言模型(LLMs)相關的計算與記憶體成本。

📚 參考文獻:


LLM應用工程

這邊主要就是 LLM 部署, Agent, RAG,這類的知識與內容。

這邊主要新增的內容是 LLM 結合自動化以及把 LLM 當作 API 結合到實際的應用中。

例如:在解析完程式碼之後,把輸出的程式碼插入到編輯器中。或者將LLm融合到類似UIpath的運作中。

點擊以打開詳細內容

roadmap_engineer

1. 運行 LLMs

運行 LLMs 的教學指南

運行大型語言模型(LLMs)可能會因為硬體要求高而變得困難。根據您的使用案例,您可以選擇通過API(如GPT-4)使用模型,或者在本地運行它。以下是一步一步的指南,幫助您開始運行LLMs。

相關的 deeplearning.ai短課程:

  1. 使用LLM APIs 或 Agent 套件:
  2. 運行開源 LLMs
  3. 提示工程(Prompt Engineering)

步驟 1:使用 LLM APIs

APIs 是部署 LLMs 的便捷方式。以下是如何使用一些常見的私有和開源 LLM APIs。

  1. 選擇 LLM API 提供商

  2. 註冊並獲取 API Key

    • 訪問所選提供商的網站,註冊一個帳戶並獲取 API Key。
    • 例如,註冊 OpenAI 的 API Key 可以訪問 OpenAI 平台
  3. 使用 API 進行請求

    • 使用所獲取的 API Key,在您的應用程序中集成 API。
    • 例如,使用 OpenAI 的 API,可以參考以下 Python 代碼:
      import openai
      
      openai.api_key = 'your-api-key-here'
      
      response = openai.Completion.create(
          engine="text-davinci-003",
          prompt="Hello, world!",
          max_tokens=50
      )
      
      print(response.choices[0].text.strip())

步驟 2:運行開源 LLMs

如果您希望在本地運行開源 LLMs,可以按照以下步驟進行。

  1. 選擇開源 LLM

  2. 使用 LM Studio 和同類型應用在本地運行模型

  3. 使用 Hugging Face 的 Transformer

    • 安裝 transformers 庫:
      pip install transformers
    • 使用以下代碼加載並運行模型:
      from transformers import pipeline
      
      generator = pipeline('text-generation', model='gpt2')
      response = generator("Hello, world!", max_length=50)
      
      print(response[0]['generated_text'])

步驟 3:提示工程(Prompt Engineering)

優化提示可以大大改善 LLM 的輸出效果。以下是一些常見的提示工程技術。

  1. 零提示詞(Zero-shot)

    • 直接向模型提出問題或指令,無需示例。
    • 例如:
      prompt = "What is the capital of France?"
  2. 少量提示詞(Few-shot)

    • 提供一些示例,以幫助模型理解您的需求。
    • 例如:
      prompt = "Translate the following English sentences to French:\n\n1. Hello, how are you? -> Bonjour, comment ça va?\n2. What is your name? -> Comment tu t'appelles?\n3. Where is the nearest restaurant? -> Où est le restaurant le plus proche?\n4. How much does this cost? -> Combien ça coûte?"
  3. 思維鏈(Chain of Thought)與 ReAct

    • 使用逐步思考的方式,引導模型逐步解決問題。
    • 例如:
      prompt = "First, let's consider the problem step by step. What is 5 plus 3? Then, what is the result multiplied by 2?"
  4. 相關學習資源

步驟 4:結構化輸出(Structuring Outputs)

許多任務需要結構化的輸出,如嚴格的模板或JSON格式。以下是一些工具和方法。

  1. 使用 LMQL 指導生成

    • 安裝並使用 LMQL 庫來指導生成符合結構的輸出。
    • 參考 LMQL - Overview 的介紹。
  2. 使用 Outlines 庫

    • 安裝並使用 Outlines 庫來生成結構化輸出。
    • 參考 Outlines - Quickstart 的快速入門指南。
  3. 相關學習資源


2. 建立向量儲存

創建向量儲存是建立檢索增強生成(Retrieval Augmented Generation,簡稱RAG)流程的第一步。文件被加載、拆分,並使用相關的片段來產生向量表示(嵌入),這些向量表示將被存儲以便在推理過程中使用。


相關的 deeplearning.ai短課程:


  • 文檔導入 Ingesting documents: 文檔加載器是方便的包裝器,可以處理多種格式: PDF, JSON, HTML, Markdown, 等。 它們還可以直接從一些數據庫和API(GitHub, Reddit, Google Drive, 等)檢索數據。
  • 文檔拆分 Splitting documents: 文本拆分器將文檔拆分成較小的、語義上有意義的片段。通常最好不要在n個字符後拆分文本,而是按照標題或遞迴地拆分,並附帶一些額外的元數據。
  • 嵌入模型 Embedding models: 嵌入模型將文本轉換為向量表示。這允許對語言進行更深入、更細膩的理解,這對於進行語義搜索至關重要。
  • 向量數據庫 Vector databases: 向量數據庫(如 Chroma, Pinecone, Milvus, FAISS, Annoy, 等)專為儲存嵌入向量而設計。它們支援基於向量相似性有效檢索與查詢最相似的數據。

3. Retrieval Augmented Generation 檢索增強生成

借助 RAG,LLMs 可以從資料庫中檢索上下文文檔,以提高答案的準確性。RAG 是一種無需任何微調即可增強模型知識的流行方法。

  • Orchestrators 協作器: Orchestrators 協作器 (如 LangChain, LlamaIndex, FastRAG, 等)是流行的框架,用於將您的 LLM 與工具、資料庫、記憶體等連接起來並增強他們的能力。
  • Retrievers 檢索器: 使用者指令未針對檢索進行最佳化。可以應用不同的技術(例如,多查詢檢索器、 HyDE, 等)來重新表述/擴展它們並提高效能。
  • 記憶: 為了記住先前的說明和答案,LLM 和 ChatGPT 等聊天機器人會將此歷史記錄添加到其上下文視窗中。此緩衝區可以透過匯總(例如,使用較小的 LLM)、向量儲存 + RAG 等來改進。
  • 評估: 我們需要評估文件檢索(上下文精確度和召回率)和生成階段(可信度和答案相關性)。可以使用 RagasDeepEval工具進行簡化。

4. 進階 RAG

現實應用程式可能需要複雜的管道,包括 SQL 或圖形資料庫,以及自動選擇相關工具和 API。這些先進技術可以改進基準解決方案並提供附加功能。

相關的 deeplearning.ai短課程: - Advanced Retrieval for AI with Chroma:這門課程專注於高級信息檢索技術,尤其是在使用大語言模型(LLM)和向量數據庫時的應用。課程涵蓋的主題包括查詢擴展、交叉編碼重排序,以及通過嵌入適配器來改進檢索結果。 - Multi AI Agent Systems with crewAI:這門課程專注於多AI代理系統(Multi-AI Agent Systems),使用CREW AI工具進行開發和協作。課程內容涵蓋如何設計和管理多個AI代理之間的交互,並通過協同工作來完成複雜任務。

  • 查詢建構: 儲存在傳統數據庫中的結構化數據需要特定的查詢語言,如SQL、Cypher、元數據等。我們可以直接將用戶指令翻譯成查詢,通過查詢建構來存取數據。
  • 代理與工具: 代理透過自動選擇最相關的工具來增強LLMs的回答能力。這些工具可以像使用Google或Wikipedia那麼簡單,或者像Python解釋器或Jira這樣複雜。
  • 後處理: 處理輸入到LLM的最後一步。它通過重新排序、RAG融合和分類來增強檢索文檔的相關性和多樣性。

5. Inference optimization 推理優化

文本生成是一個成本高昂的過程,需要昂貴的硬體設備。除了量化之外,還有各種技術被提出以最大化吞吐量並降低推論成本。

  • 主要內容:
    • GPU Inference by Hugging Face: 解釋如何在GPU上優化推論.
    • LLM Inference by Databricks: 實際運作中優化LLM推論的最佳實踐。
  • Flash Attention 閃存注意力: 優化注意力機制,將其複雜性從二次方變成線性以加快訓練和推論速度。
  • Key-value cache 鍵值快取: 請多了解鍵值快取以及多查詢注意力(Multi-Query Attention (MQA))和(分組查詢注意力Grouped-Query Attention (GQA))帶來的改進。
  • Speculative decoding 投機解碼: 使用小型模型產生草稿,然後由更大的模型審核,以加快文本生成速度。
    • Assisted Generation by Hugging Face: HF版本的投機解碼,這是一篇有趣的博客文章,介紹了它的工作原理及其實現代碼。

6. Deploying LLMs 部署大型語言模型

在大規模部署大型語言模型(LLMs)是一項工程壯舉,可能需要多個GPU集群。在其他情景下,演示和本地應用可以更簡單的實現運作。


相關的 deeplearning.ai短課程: - Serverless LLM apps with Amazon Bedrock:主要內容是使用AWS部署一個LLM app - Building Generative AI Applications with Gradio:這門課程教授如何使用Gradio平台來構建生成式AI應用。課程內容包括如何設計和構建交互式的AI界面,讓用戶能夠輕鬆地與生成式AI模型進行互動。


  • Local deployment 本地部署: 隱私是開源LLMs相對於私有LLMs的一個重要優勢。 本地LLM服務器 (LM Studio, Ollama, oobabooga, kobold.cpp, 等)利用這一優勢為本地應用提供動力。
  • Demo deployment 演示部署:像 GradioStreamlit 這樣的框架有助於原型應用的開發和演示的分享。您也可以輕鬆地在線上部署,例如使用 Hugging Face Spaces
  • Server deployment 服務器部署: 大規模部署LLMs需要雲端 (詳見 SkyPilot) 或內部部署的基礎設施,並經常利用優化的文本生成框架,如 TGI, vLLM等。
  • Edge deployment 邊緣(中低算力)部署: 在受限環境中,高性能框架如 MLC LLMmnn-llm 可以在網頁瀏覽器、Android和iOS中部署LLM。

7. Securing LLMs

除了與軟體相關的傳統安全問題外,由於訓練和提示的方式,大型語言模型(LLMs)還有特定的弱點。


相關的 deeplearning.ai短課程: - Red Teaming LLM Applications:這門課程教授如何進行紅隊測試(Red Teaming),以評估和改進大型語言模型(LLM)應用的安全性和可靠性。


  • Prompt hacking 提示詞攻擊: 與提示工程相關的技術略有不同,提示詞注入(使用額外指令以劫持模型的答案)、數據/提示洩漏(檢索其原始數據/提示)和越獄(製作提示詞以繞過安全特性)都算在此範圍內。
  • Backdoors 後門: 攻擊向量可以針對訓練數據本身,通過污染訓練數據(例如,使用錯誤信息)或創建後門(觸發器在推論期間秘密的改變模型行為)。
  • Defensive measures 防禦措施: 保護您的LLM應用程序的最佳方式是對這些漏洞進行測試 (e.g., 例如,使用紅隊測試和像garak這樣的檢查 ) 並在實際的環境中觀察它們(使用像langfuse這樣的框架)。

📚 References:


相關的更新Blog

主要是鐵人賽的備份跟之後每次更新的具體內容

DeepLearningAI短課程學習紀錄

這邊就是每個Deeplearning.ai 的短課程,我今年應該會把短課程以及相關的生成式AI課程補上。

About

我的AI 學習路線,筆記,練習

Resources

Stars

Watchers

Forks

Packages

No packages published