一文探祕 LLM 應用開發 -1-
本文旨在讓無大模型開發背景的工程師或者技術愛好者無痛理解大語言模型應用開發的理論和主流工具,因此會先從與 LLM 應用開發相關的基礎概念談起,並不刻意追求極致的嚴謹和完備,而是從直覺和本質入手,結合筆者調研整理及消化理解,幫助大家能夠更容易的理解 LLM 技術全貌,大家可以基於本文衍生展開,結合自己感興趣的領域深入研究。若有不準確或者錯誤的地方也希望大家能夠留言指正。
第一部分 基礎概念
-
機器學習場景類別
-
機器學習類型 (LLM 相關)
-
深度學習的興起
-
基礎模型
第二部分 應用挑戰:
-
問題定義與基本思路
-
基本流程與相關技術
1)embbeding 與 tokenization
2)向量數據庫
3)finetune(微調)
4)模型部署與推理
5)prompt
6)編排與集成
a. langchain
1.1. models
1.2. prompts
1.3. memory
1.4. indexes
1.5. chains
1.6. agents
1.7. callbacks
b. llama-index
7)預訓練
場景案例(語義檢索系統)
常用參考(好工具 / 好網站 / 好文章)
第一部分 基礎概念:
1. 機器學習場景類別
AI2.0 時代到來,而 AI1.0 和 AI2.0 的區別是什麼?基於場景類別來看,可以是很好的判別方法。在過去以 alphaGo 爲代表的 1.0 時代,人工智能場景多以判別式 AI 爲主。而到了 2.0 時代,以 LLM(large language model)爲代表的生成式 AI 有了大的發展。兩者各有特點,關注的問題不同,相對於判別式 ai 需要大量的標註,模型泛化能力差,看起來不那麼 AI,而生成式 AI 的不同於判別式 AI 的技術特點和場景應用,特別是 openAI 開發的 chatgpt 驚豔產品效果,讓大衆認爲這一次的技術不再是簡單炒概念,而更接近於 AGI(通用人工智能),因此也讓 AI 迎來了新的一輪關注。
-
判別式 (Discriminative AI)(分類 / 迴歸 / 識別 / 定位),傳統機器學習應用場景,適合決策分析場景。
-
生成式 (Generative AI)(LLM 興起),多模態,泛化性,具有創造力,有智能湧現現象。
來自 ChatGPT:
生成式 AI(Generative AI)和判別式 AI(Discriminative AI)是兩種不同的機器學習方法,它們在許多應用中都發揮着重要作用。下面是這兩種方法的對比:
- 任務定義:
生成式 AI:生成式模型關注數據的概率分佈,它試圖學習輸入數據和輸出標籤之間的聯合概率分佈。這使得生成模型可以生成與訓練數據類似的新數據。
判別式 AI:判別式模型關注條件概率,它試圖學習輸入數據在給定輸出標籤下的概率分佈。這使得判別模型更擅長在給定輸入數據的情況下預測輸出標籤。
- 模型示例:
生成式 AI:生成式對抗網絡(GANs)、變分自編碼器(VAEs)、隱馬爾可夫模型(HMMs)和樸素貝葉斯分類器(Naive Bayes)等。
判別式 AI:支持向量機(SVMs)、邏輯迴歸(Logistic Regression)、神經網絡(Neural Networks)和決策樹(Decision Trees)等。
- 優缺點:
生成式 AI:
優勢:生成式模型可以生成新的數據,適用於無監督學習任務。它們還能夠處理丟失或不完整的數據。
劣勢:生成式模型通常需要更多的計算資源和訓練時間。在某些任務中,生成式模型的性能可能不如判別式模型。
判別式 AI:
優勢:判別式模型在分類和迴歸任務中通常具有更好的性能。它們往往需要較少的計算資源和訓練時間。
劣勢:判別式模型無法生成新的數據,且在處理丟失或不完整的數據時可能表現不佳。
- 應用場景:
生成式 AI:圖像生成、自然語言生成、音頻合成、數據增強等。
判別式 AI:圖像分類、文本分類、情感分析、語音識別等。
總之,生成式 AI 和判別式 AI 在不同的任務和應用場景中各有優勢。在選擇合適的方法時,需要根據具體問題和需求進行權衡。
2. 機器學習類型 (LLM 相關)
大模型應用涉及到以下三類機器學習方法:
-
無監督學習(機器根據一定規則自己構造 label)
-
監督學習(人爲標註 label)
-
強化學習(基於環境反饋)
其中,預訓練階段採用無監督學習的方法,通過在大量無標註語料(多來自於互聯網維基百科,github 等等)中學習規律,在這一過程中,其並不是真的無監督,而是通過一些設計,如 bert 採用的句子填空,gpt 採用文字接龍的方式來達到機器自我訓練的目的。這一過程可以理解爲是一個數據壓縮的過程,使得海量的數據被壓縮到一個模型中,自然可以理解,語料足夠多,模型足夠大的時候,那麼模型可以蘊含語料中暗藏的邏輯和知識。
不進行監督學習的大模型可以認爲是個啞巴,它無法完整特定的任務,需要監督學習的方式,給模型一些例子或者步驟(數據集是需要人工標記的),幫助大模型知道如何輸出,怎麼樣思考,從而應對不同的應用場景,如對話,翻譯等,這就是 “對齊(alignment)” 的概念。
強化學習更多是在這個基礎上的再完善,不直接給出正確的答案,而是由模型生成,然後對答案進行打分,從而讓大模型能夠更好的適應按照用戶的喜好來工作。
3. 深度學習的興起
1. 爲什麼要用深度學習?
-
深度學習對特徵工程要求更低,強調模型架構的設計。
-
經典機器學習如 lr 等,模型容量有限,存在模型 bias,彈性不足。
-
深度學習模塊化更好,能夠以統一的模式更好得搭建複雜的模型結構。
-
深度學習久來有之,早期算力不足,限制了他的發展。
2.tranformer 源起
發展軌跡:cnn(無記憶) => rnn(串行,短期記憶) => lstm(較長期記憶) => transformer(位置編碼,並行,快)
特點:對位置,上下文編碼,能夠融會貫通。transformer 更利於並行計算,算力的提升,使得 tranformer 的流行。
儘管如此,當前模型輸入仍然有 token 數量限制。所謂 token,本質就是輸入被拆分的字符,也可以是一個單詞、一個標點符號、一個數字、一個符號等,它和切詞方法有關,模型再基於 token 進行 embbeding,模型本身的輸入決定了 token 數量的多少(並不完全一致,目前一些模型的 token 限制更多是處理架構軟硬件性能的考慮)。
來自 ChatGPT:
生成式 AI
大模型的 token 數量受多個因素的限制,包括硬件和軟件方面的限制。
硬件方面,大模型需要大量的內存和計算資源來訓練和運行。隨着模型的規模增加,所需的內存和計算資源也會相應增加。目前,大多數機器學習任務都需要使用分佈式計算集羣來訓練大型模型。
軟件方面,大模型的 token 數量也受到一些限制。例如,在自然語言處理任務中,模型的輸入文本需要進行分詞處理,將文本轉換爲 token 序列,這樣模型才能理解和處理文本。如果輸入文本過長,導致 token 序列過長,那麼模型的訓練和推理速度都會變慢。此外,大模型的參數數量也會隨着 token 數量的增加而增加,這會導致模型更難以訓練和優化。
因此,大模型的 token 數量需要在硬件和軟件方面進行平衡,以便在可接受的計算資源和時間內完成訓練和推理任務。同時,還需要考慮模型的精度和效果,以確定最優的 token 數量。
3. 對抗生成的思想
對於生成式 ai 來講,對抗生成的思想尤爲重要,這會很方便理解文字生成和圖像生成的內在原理,是 StableDiffusion 等新圖片生成方法的源起。對抗生成可以理解爲有兩個模型,一個生成模型(generator)和一個生成質量的判別模型(discriminater)。generater 可以基於用戶的提示詞生成圖片,discriminater 來判定這個圖片是否滿足要求,在這個過程中用到了標記數據(文字 - 圖片 - 得分),通過它可以訓練出一個 discriminater 來判別生成的圖片怎麼樣,而訓練的過程就是訓練一個 generater,它生成的圖片能夠騙過 discriminator,discriminater 也再不斷迭代,努力不讓 generater 騙過,這樣的博弈若干輪,變生成了可以滿足需要的 generator。而從這裏看出,增加參數的隨機性,便能提升生成的多樣性,現在模型的 temperature 便是這個概念(參考熵增)。
另外,如何做到無標記數據也能做到,可以參考 cycle gan 的思想,其本質就是自己給自己做標籤,訓練一個 gennerator 將圖片變成向量,然後再訓練一個 generater 將向量生成圖片,然後計算原圖和生成圖的相似性,通過這樣的循環迭代訓練,便能訓練出我們需要的模型。再使用時我們只需要按需拿其中一個即可。
從另一個角度講,模型訓練和推理即壓縮與解壓縮的過程,比如如何將圖片壓縮到一個高密度的向量(文字),然後再基於高密度向量(文字)生成圖片,其他還有文字 -> 語音,文章 -> 總結,總結 -> 文章等。自編碼器的思想與 cycle gan 類似。通過這樣的做法可以做到無監督的效果。
參考李宏毅機器學習課程:https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/gan_v10.pdf
4. 基礎模型
1. 常見兩類大語言模型:
bert 模型:完形填空 創造性不好
gpt 模型:文字接龍 創造性好
2. 通俗理解:
通過大量的語料訓練,將知識進行壓縮,而知識中蘊含着深度的哲學,科學,基本推理邏輯,某種意義上,當有數據足夠多,模型參數足夠多,就能將這些內容壓縮儲藏在模型中,最終到湧現的效果 (>10B)。
預訓練大模型本身不具備特定的任務能力,需要結合實際領域能力進行微調(fine-tune),才能讓大模型具備具體的能力。
3. 常見開源模型:
-
chatGLM6b/chatGLM13b 清華出品
https://github.com/THUDM
-
llama meta 出品
https://github.com/facebookresearch/llama
-
Vicuna-13B 羊駝 基於 llama 微調
-
Falcon LLM 阿布扎比政府研究院 (TII) 出品
https://huggingface.co/tiiuae
更多大模型
張騰飛 譯,公衆號:分佈式實驗室開源大語言模型彙總
可商用大模型:https://github.com/eugeneyan/open-llms
4. 大模型評測:
-
國內 superClue 排行榜: https://www.superclueai.com/
-
UC 伯克利排行榜:https://chat.lmsys.org/
-
斯坦福排行榜:https://tatsu-lab.github.io/alpaca_eval/
歡迎關注,未完待續...
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/WGjFWE4RYH7ldEz1_maj5w