從零開始學大模型之大語言模型

大語言模型

4.1 什么是 LLM

在前三章,我們從 NLP 的定義與主要任務出發,介紹了引發 NLP 領域重大變革的核心思想——注意力機制與 Transformer 架構。隨著 Transformer 架構的橫空出世,NLP 領域逐步進入預訓練-微調范式,以 Transformer 為基礎的、通過預訓練獲得強大文本表示能力的預訓練語言模型層出不窮,將 NLP 的各種經典任務都推進到了一個新的高度。

隨著2022年底 ChatGPT 再一次刷新 NLP 的能力上限,大語言模型(Large Language Model,LLM)開始接替傳統的預訓練語言模型(Pre-trained Language Model,PLM) 成為 NLP 的主流方向,基于 LLM 的全新研究范式也正在刷新被 BERT 發揚光大的預訓練-微調范式,NLP 由此迎來又一次翻天覆地的變化。從2022年底至今,LLM 能力上限不斷刷新,通用基座大模型數量指數級上升,基于 LLM 的概念、應用也是日新月異,預示著大模型時代的到來。

在第三章,我們從模型架構的角度出發,分別分析了 Encoder-Only、Encoder-Decoder 和 Decoder-Only 三種架構下的經典模型及其訓練過程。這些模型有的是 LLM 時代之前堪稱時代主角的里程碑(如 BERT),有的則是 LLM 時代的舞臺主角,是通用人工智能(Artificial General Intelligence,AGI) 的有力競爭者。那么,究竟什么是 LLM,LLM 和傳統的 PLM 的核心差異在哪里,又是什么令研究者們對 LLM 抱有如此高的熱情與期待呢?

在本章中,我們將結合上文的模型架構講解,深入分析 LLM 的定義、特點及其能力,為讀者揭示 LLM 與傳統深度學習模型的核心差異,并在此基礎上,展示 LLM 的實際三階段訓練過程,幫助讀者從概念上梳理清楚 LLM 是如何獲得這樣的獨特能力的,從而為進一步實踐 LLM 完整訓練提供理論基礎。

4.1.1 LLM 的定義

LLM,即 Large Language Model,中文名為大語言模型或大型語言模型,是一種相較傳統語言模型參數量更多、在更大規模語料上進行預訓練的語言模型。

在第一章中,我們已經介紹了語言模型的概念,即通過預測下一個 token 任務來訓練的 NLP 模型。LLM 使用與傳統預訓練語言模型相似的架構與預訓練任務(如 Decoder-Only 架構與 CLM 預訓練任務),但擁有更龐大的參數、在更海量的語料上進行預訓練,也從而展現出與傳統預訓練語言模型截然不同的能力。

一般來說,LLM 指包含數百億(或更多)參數的語言模型,它們往往在數 T token 語料上通過多卡分布式集群進行預訓練,具備遠超出傳統預訓練模型的文本理解與生成能力。不過,隨著 LLM 研究的不斷深入,多種參數尺寸的 LLM 逐漸豐富,廣義的 LLM 一般覆蓋了從十億參數(如 Qwen-1.5B)到千億參數(如 Grok-314B)的所有大型語言模型。只要模型展現出涌現能力,即在一系列復雜任務上表現出遠超傳統預訓練模型(如 BERT、T5)的能力與潛力,都可以稱之為 LLM。

一般認為,GPT-3(1750億參數)是 LLM 的開端,基于 GPT-3 通過 預訓練(Pretraining)、監督微調(Supervised Fine-Tuning,SFT)、強化學習與人類反饋(Reinforcement Learning with Human Feedback,RLHF)三階段訓練得到的 ChatGPT 更是主導了 LLM 時代的到來。自2022年11月 OpenAI 發布 ChatGPT 至今不到2年時間里,已涌現出了上百個各具特色、能力不一的 LLM。下表列舉了自 2022年11月至2023年11月國內外發布的部分大模型:

時間開源 LLM閉源 LLM
2022.11OpenAI-ChatGPT
2023.02Meta-LLaMA;復旦-MOSS
2023.03斯坦福-Alpaca、Vicuna;智譜-ChatGLMOpenAI-GPT4;百度-文心一言;Anthropic-Claude;Google-Bard
2023.04阿里-通義千問;Stability AI-StableLM商湯-日日新
2023.05微軟-Pi;Tll-Falcon訊飛-星火大模型;Google-PaLM2
2023.06智譜-ChatGLM2;上海 AI Lab-書生浦語;百川-BaiChuan;虎博-TigerBot360-智腦大模型
2023.07Meta-LLaMA2Anthropic-Claude2;華為-盤古大模型3
2023.08字節-豆包
2023.09百川-BaiChuan2Google-Gemini;騰訊-混元大模型
2023.11零一萬物-Yi;幻方-DeepSeekxAI-Grok

目前,國內外企業、研究院正不斷推出性能更強大的 LLM,探索通往 AGI 的道路。

4.1.2 LLM 的能力

(1)涌現能力(Emergent Abilities)

區分 LLM 與傳統 PLM 最顯著的特征即是 LLM 具備 涌現能力 。涌現能力是指同樣的模型架構與預訓練任務下,某些能力在小型模型中不明顯,但在大型模型中特別突出。可以類比到物理學中的相變現象,涌現能力的顯現就像是模型性能隨著規模增大而迅速提升,超過了隨機水平,也就是我們常說的量變引起了質變。

具體來說,涌現能力可以定義為與某些復雜任務相關的能力。但一般而言,NLP 更關注的是它們具備的通用能力,也就是能夠應用于解決各種 NLP 任務的能力。涌現能力是目前業界和學界對 LLM 保持較高的熱情和關注的核心所在,即雖然 LLM 目前的能力、所能解決的任務與人類最終所期待的通用人工智能還存在不小的差距,但在涌現能力的作用下,我們相信隨著研究的不斷深入、高質量數據的不斷涌現和更高效的模型架構及訓練框架的出現,LLM 終能具備通用人工智能所需要具備的能力,從而給人類生活帶來質變。

(2)上下文學習(In-context Learning)

上下文學習能力是由 GPT-3 首次引入的。具體而言,上下文學習是指允許語言模型在提供自然語言指令或多個任務示例的情況下,通過理解上下文并生成相應輸出的方式來執行任務,而無需額外的訓練或參數更新。

對傳統 PLM,在經過高成本的預訓練之后,往往還需要對指定的下游任務進行有監督微調。雖然傳統 PLM 體量較小,對算力要求較低,但例如 BERT 類模型(0.5B 參數),進行有監督微調一般還是需要 10G 以上顯存,有一定的算力成本。而同時,有監督微調的訓練數據的成本更高。針對下游任務難度的不同,需要的訓練樣本數往往在 1k~數十k 不等,均需要進行人工標注,數據獲取上有不小的成本。而具備上下文學習能力的 LLM 往往無需進行高成本的額外訓練或微調,而可以通過少數示例或是調整自然語言指令,來處理絕大部分任務,從而大大節省了算力和數據成本。

上下文學習能力也正在引發 NLP 研究范式的變革。在傳統 PLM 時代,解決 NLP 下游任務的一般范式是預訓練-微調,即選用一個合適的預訓練模型,針對自己的下游任務準備有監督數據來進行微調。而通過使用具備上下文學習能力的 LLM,一般范式開始向 Prompt Engineering 也就是調整 Prompt 來激發 LLM 的能力轉變。例如,目前絕大部分 NLP 任務,通過調整 Prompt 或提供 1~5 個自然語言示例,就可以令 GPT-4 達到超過傳統 PLM 微調的效果。

(3)指令遵循(Instruction Following)

通過使用自然語言描述的多任務數據進行微調,也就是所謂的 指令微調 ,LLM 被證明在同樣使用指令形式化描述的未見過的任務上表現良好。也就是說,經過指令微調的 LLM 能夠理解并遵循未見過的指令,并根據任務指令執行任務,而無需事先見過具體示例,這展示了其強大的泛化能力。

指令遵循能力意味我們不再需要每一件事都先教模型,然后它才能去做。我們只需要在指令微調階段混合多種指令來訓練其泛化能力,LLM 就可以處理人類絕大部分指令,即可以靈活地解決用戶遇到的問題。這一點在 ChatGPT 上體現地尤為明顯。ChatGPT 之所以能夠具備極高的熱度,其核心原因即在于其不再是僅能用于學界、業界研究的理論模型,而同樣可以廣泛地服務于各行各業用戶。通過給 ChatGPT 輸入指令,其可以寫作文、編程序、批改試卷、閱讀報紙等等。

指令遵循能力使 LLM 可以真正和多個行業結合起來,通過人工智能技術為人類生活的方方面面賦能,從而為人類帶來質的改變。不管是目前大火的 Agent、WorkFlow,還是并不遙遠的未來可能就會出現的全能助理、超級智能,其本質依賴的都是 LLM 的指令遵循能力。

(4)逐步推理(Step by Step Reasoning)

邏輯推理,尤其是涉及多個推理步驟的復雜推理任務,一直是 NLP 的攻關難點,也是人工智能難以得到普遍認可的重要原因。畢竟,如果一個模型不能解答基礎的“雞兔同籠”問題,或者不能識別語言中的邏輯陷阱,你很難認為它是“智能的”而非“智障的”。

但是,傳統的 NLP 模型通常難以解決涉及多個推理步驟的復雜任務,例如數學問題。然而,LLM 通過采用思維鏈(Chain-of-Thought,CoT)推理策略,可以利用包含中間推理步驟的提示機制來解決這些任務,從而得出最終答案。據推測,這種能力可能是通過對代碼的訓練獲得的。

逐步推理能力意味著 LLM 可以處理復雜邏輯任務,也就是說可以解決日常生活中需要邏輯判斷的絕大部分問題,從而向“可靠的”智能助理邁出了堅實的一步。

這些獨特能力是 LLM 區別于傳統 PLM 的重要優勢,也讓 LLM 在處理各種任務時表現出色,使它們成為了解決復雜問題和應用于多領域的強大工具。正是因為涌現能力、上下文學習能力、指令遵循能力與逐步推理能力的存在,NLP 研究人員相信 LLM 是邁向通用人工智能,幫助人類社會實現生產力質變的重要途徑。而事實上,目前已有眾多基于 LLM 的應用,旨在利用 LLM 的獨特能力顯著提高生產力。例如,微軟基于 GPT-4 推出的 Copilot,就基于 LLM 強大的指令遵循能力與逐步推理能力,通過提供代碼補全、代碼提示、代碼編寫等多種功能,輔助程序員更高效、便捷、精準地編寫程序,極大提高了程序員的生產效率。

4.1.3 LLM 的特點

除上文討論的 LLM 的核心能力外,LLM 還具備一些額外的、有趣或是危險的特點,這些特點也是 LLM 目前重要的研究方向,在此討論其中一二:

(1)多語言支持

多語言、跨語言模型曾經是 NLP 的一個重要研究方向,但 LLM 由于需要使用到海量的語料進行預訓練,訓練語料往往本身就是多語言的,因此 LLM 天生即具有多語言、跨語言能力,只不過隨著訓練語料和指令微調的差異,在不同語言上的能力有所差異。由于英文高質量語料目前仍是占據大部分,以 GPT-4 為代表的絕大部分模型在英文上具有顯著超越中文的能力。雖然都可以對多種語言進行處理,但針對中文進行額外訓練和優化的國內模型(如文心一言、通義千問等)往往能夠在中文環境上展現更優越的效果。

(2)長文本處理

由于能夠處理多長的上下文文本,在一定程度上決定了模型的部分能力上限,LLM 往往比傳統 PLM 更看重長文本處理能力。相對于以 512 token 為慣例的傳統 PLM(如 BERT、T5等模型的最大上下文長度均為 512),LLM 在拓寬最大上下文長度方面可謂妙計頻出。由于在海量分布式訓練集群上進行訓練,LLM 往往在訓練時就支持 4k、8k 甚至 32k 的上下文長度。同時,LLM 大部分采用了旋轉位置編碼(Rotary Positional Encoding,RoPE)(或者同樣具有外推能力的 AliBi)作為位置編碼,具有一定的長度外推能力,也就是在推理時能夠處理顯著長于訓練長度的文本。例如,InternLM 在 32k 長度上下文上進行了預訓練,但通過 RoPE 能夠實現 200k 長度的上下文處理。通過不斷增強長文本處理能力,LLM 往往能夠具備更強的信息閱讀、信息總結能力,從而解決諸如要求 LLM 讀完《紅樓夢》并寫一篇對應的高考作文的“世紀難題”。

(3)拓展多模態

LLM 的強大能力也為其帶來了跨模態的強大表現。隨著 LLM 的不斷改進,通過為 LLM 增加額外的參數來進行圖像表示,從而利用 LLM 的強大能力打造支持文字、圖像雙模態的模型,已經是一個成功的方法。通過引入 Adapter 層和圖像編碼器,并針對性地在圖文數據上進行有監督微調,模型能夠具備不錯的圖文問答甚至生成能力。在未來,如何對齊文本與圖像的表示,從而打造更強大的多模態大模型,將 LLM 的能力輻射到更多模態,是一個重要的研究方向。

(4)揮之不去的幻覺

幻覺,是指 LLM 根據 Prompt 杜撰生成虛假、錯誤信息的表現。例如,當我們要求 LLM 生成一篇學術論文及其參考文獻列表時,其往往會捏造眾多看似“一本正經”實則完全不存在的論文和研究。幻覺問題是 LLM 的固有缺陷,也是目前 LLM 研究及應用的巨大挑戰。尤其是在醫學、金融學等非常強調精準、正確的領域,幻覺的存在可能造成非常嚴重的后果。目前也有很多研究提供了削弱幻覺的一些方法,如 Prompt 里進行限制、通過 RAG(檢索增強生成)來指導生成等,但都還只能一定程度減弱幻覺而無法徹底根除。

除上述幾點之外,LLM 還存在諸多可供研究的特點,例如我們將在下一節詳細論述的 LLM 三階段訓練流程、LLM 的自我反思性等,此處就不一一列舉贅述了。

4.2 如何訓練一個 LLM

在上一節,我們分析了 LLM 的定義及其特有的強大能力,通過更大規模的參數和海量的訓練語料獲得遠超傳統預訓練模型的涌現能力,展現出強大的上下文學習、指令遵循及逐步推理能力,帶來 NLP 領域的全新變革。那么,通過什么樣的步驟,我們才可以訓練出一個具有涌現能力的 LLM 呢?訓練一個 LLM,與訓練傳統的預訓練模型,又有什么區別?

alt text

圖4.1 訓練 LLM 的三個階段

一般而言,訓練一個完整的 LLM 需要經過圖1中的三個階段——Pretrain、SFT 和 RLHF。在這一節,我們將詳細論述訓練 LLM 的三個階段,并分析每一個階段的過程及其核心難點、注意事項,幫助讀者們從理論上了解要訓練一個 LLM,需要經過哪些步驟。

4.2.1 Pretrain

Pretrain,即預訓練,是訓練 LLM 最核心也是工程量最大的第一步。LLM 的預訓練和傳統預訓練模型非常類似,同樣是使用海量無監督文本對隨機初始化的模型參數進行訓練。正如我們在第三章中所見,目前主流的 LLM 幾乎都采用了 Decoder-Only 的類 GPT 架構(LLaMA 架構),它們的預訓練任務也都沿承了 GPT 模型的經典預訓練任務——因果語言模型(Causal Language Model,CLM)。

因果語言模型建模,即和最初的語言模型一致,通過給出上文要求模型預測下一個 token 來進行訓練。CLM 的過程和原理我們已在第三章詳細論述過,此處就不再贅述。LLM 的預訓練同傳統預訓練模型的核心差異即在于,預訓練的體量和資源消耗。

根據定義,LLM 的核心特點即在于其具有遠超傳統預訓練模型的參數量,同時在更海量的語料上進行預訓練。傳統預訓練模型如 BERT,有 base 和 large 兩個版本。BERT-base 模型由 12個 Encoder 層組成,其 hidden_size 為 768,使用 12個頭作為多頭注意力層,整體參數量為 1億(110M);而 BERT-large 模型由 24個 Encoder 層組成,hidden_size 為 1024,有 16個頭,整體參數量為 3億(340M)。同時,BERT 預訓練使用了 33億(3B)token 的語料,在 64塊 TPU 上訓練了 4天。事實上,相對于傳統的深度學習模型,3億參數量、33億訓練數據的 BERT 已經是一個能力超群、資源消耗巨大的龐然大物。

但是,前面我們提到,一般而言的 LLM 通常具有數百億甚至上千億參數,即使是廣義上最小的 LLM,一般也有十億(1B)以上的參數量。例如以開山之作 GPT-3 為例,其有 96個 Decoder 層,12288 的 hidden_size 和 96個頭,共有 1750億(175B)參數,比 BERT 大出快 3個數量級。即使是目前流行的小型 LLM 如 Qwen-1.8B,其也有 24個 Decoder 層、2048的 hidden_size 和 16個注意力頭,整體參數量達到 18億(1.8B)。

模型hidden_layershidden_sizeheads整體參數量預訓練數據量
BERT-base12768120.1B3B
BERT-large241024160.3B3B
Qwen-1.8B242048161.8B2.2T
LLaMA-7B324096327B1T
GPT-3961228896175B300B

更重要的是,LLM 往往需要使用更大規模的預訓練語料。根據由 OpenAI 提出的 Scaling Law:C ~ 6ND,其中 C 為計算量,N 為模型參數,D 為訓練的 token 數,可以實驗得出訓練 token 數應該是模型參數的 1.7倍,也就是說 175B 的 GPT-3,需要使用 300B token 進行預訓練。而 LLaMA 更是進一步提出,使用 20倍 token 來訓練模型能達到效果最優,因此 175B 的 GPT-3,可以使用3.5T token 數據預訓練達到最優性能。

如此龐大的模型參數和預訓練數據,使得預訓練一個 LLM 所需要的算力資源極其龐大。事實上,哪怕是預訓練一個 1B 的大模型,也至少需要多卡分布式 GPU 集群,通過分布式框架對模型參數、訓練的中間參數和訓練數據進行切分,才能通過以天為單位的長時間訓練來完成。一般來說,百億級 LLM 需要 1024張 A100 訓練一個多月,而十億級 LLM 一般也需要 256張 A100 訓練兩、三天,計算資源消耗非常高。

也正因如此,分布式訓練框架也成為 LLM 訓練必不可少的組成部分。分布式訓練框架的核心思路是數據并行和模型并行。所謂數據并行,是指訓練模型的尺寸可以被單個 GPU 內存容納,但是由于增大訓練的 batch_size 會增大顯存開銷,無法使用較大的 batch_size 進行訓練;同時,訓練數據量非常大,使用單張 GPU 訓練時長難以接受。

alt text

圖4.2 模型、數據并行

因此,如圖4.2所示可以讓模型實例在不同 GPU 和不同批數據上運行,每一次前向傳遞完成之后,收集所有實例的梯度并計算梯度更新,更新模型參數之后再傳遞到所有實例。也就是在數據并行的情況下,每張 GPU 上的模型參數是保持一致的,訓練的總批次大小等于每張卡上的批次大小之和。

但是,當 LLM 擴大到上百億參數,單張 GPU 內存往往就無法存放完整的模型參數。如圖4.3所示,在這種情況下,可以將模型拆分到多個 GPU 上,每個 GPU 上存放不同的層或不同的部分,從而實現模型并行。

alt text

圖4.3 模型并行

在數據并行和模型并行的思想基礎上,還演化出了多種更高效的分布式方式,例如張量并行、3D 并行、ZeRO(Zero Redundancy Optimizer,零冗余優化器)等。目前,主流的分布式訓練框架包括 Deepspeed、Megatron-LM、ColossalAI 等,其中,Deepspeed 使用面最廣。

Deepspeed 的核心策略是 ZeRO 和 CPU-offload。ZeRO 是一種顯存優化的數據并行方案,其核心思想是優化數據并行時每張卡的顯存占用,從而實現對更大規模模型的支持。ZeRO 將模型訓練階段每張卡被占用的顯存分為兩類:

  • 模型狀態(Model States),包括模型參數、模型梯度和優化器 Adam 的狀態參數。假設模型參數量為 1M,一般來說,在混合精度訓練的情況下,該部分需要 16M 的空間進行存儲,其中 Adam 狀態參數會占據 12M 的存儲空間。
  • 剩余狀態(Residual States),除了模型狀態之外的顯存占用,包括激活值、各種緩存和顯存碎片。

針對上述顯存占用,ZeRO 提出了三種不斷遞進的優化策略:

  1. ZeRO-1,對模型狀態中的 Adam 狀態參數進行分片,即每張卡只存儲 1N\frac{1}{N}N1? 的 Adam 狀態參數,其他參數仍然保持每張卡一份。
  2. ZeRO-2,繼續對模型梯度進行分片,每張卡只存儲 1N\frac{1}{N}N1? 的模型梯度和 Adam 狀態參數,僅模型參數保持每張卡一份。
  3. ZeRO-3,將模型參數也進行分片,每張卡只存儲 1N\frac{1}{N}N1? 的模型梯度、模型參數和 Adam 狀態參數。

可以看出,隨著分片的參數量不斷增加,每張卡需要占用的顯存也不斷減少。當然,分片的增加也就意味著訓練中通信開銷的增加,一般而言,每張卡的 GPU 利用率 ZeRO-1 最高而 ZeRO-3 最低。具體使用什么策略,需要結合計算資源的情況和需要訓練的模型體量動態確定。

除去計算資源的要求,訓練數據本身也是預訓練 LLM 的一個重大挑戰。訓練一個 LLM,至少需要數百 B 甚至上 T 的預訓練語料。根據研究,LLM 所掌握的知識絕大部分都是在預訓練過程中學會的,因此,為了使訓練出的 LLM 能夠覆蓋盡可能廣的知識面,預訓練語料需要組織多種來源的數據,并以一定比例進行混合。目前,主要的開源預訓練語料包括 CommonCrawl、C4、Github、Wikipedia 等。不同的 LLM 往往會在開源預訓練語料基礎上,加入部分私有高質量語料,再基于自己實驗得到的最佳配比來構造預訓練數據集。事實上,數據配比向來是預訓練 LLM 的“核心秘籍”,不同的配比往往會相當大程度影響最終模型訓練出來的性能。例如,下表展示了 LLaMA 的預訓練數據及配比:

數據集占比數據集大小(Disk size)
CommonCrawl67.0%3.3 TB
C415.0%783 GB
Github4.5%328 GB
Wikipedia4.5%83 GB
Books4.5%85 GB
ArXiv2.5%92 GB
StackExchange2.0%78 GB

訓練一個中文 LLM,訓練數據的難度會更大。目前,高質量語料還是大部分集中在英文范疇,例如上表的 Wikipedia、Arxiv 等,均是英文數據集;而 C4 等多語言數據集中,英文語料也占據主要地位。目前開源的中文 LLM 如 ChatGLM、Baichuan 等模型均未開放其預訓練數據集,開源的中文預訓練數據集目前僅有昆侖天工開源的SkyPile(150B)、中科聞歌開源的yayi2(100B)等,相較于英文開源數據集有明顯差距。

預訓練數據的處理與清洗也是 LLM 預訓練的一個重要環節。諸多研究證明,預訓練數據的質量往往比體量更加重要。預訓練數據處理一般包括以下流程:

  1. 文檔準備。由于海量預訓練語料往往是從互聯網上獲得,一般需要從爬取的網站來獲得自然語言文檔。文檔準備主要包括 URL 過濾(根據網頁 URL 過濾掉有害內容)、文檔提取(從 HTML 中提取純文本)、語言選擇(確定提取的文本的語種)等。
  2. 語料過濾。語料過濾的核心目的是去除低質量、無意義、有毒有害的內容,例如亂碼、廣告等。語料過濾一般有兩種方法:基于模型的方法,即通過高質量語料庫訓練一個文本分類器進行過濾;基于啟發式的方法,一般通過人工定義 web 內容的質量指標,計算語料的指標值來進行過濾。
  3. 語料去重。實驗表示,大量重復文本會顯著影響模型的泛化能力,因此,語料去重即刪除訓練語料中相似度非常高的文檔,也是必不可少的一個步驟。去重一般基于 hash 算法計算數據集內部或跨數據集的文檔相似性,將相似性大于指定閾值的文檔去除;也可以基于子串在序列級進行精確匹配去重。

目前,已有很多經過處理的高質量預訓練語料和專用于預訓練數據處理的框架。例如,有基于 LLaMA 思路收集、清洗的預訓練數據集RedPajama-1T,以及在 RedPajama 基礎上進行篩選去重的SlimPajama-627B數據集,實驗證明高質量的 627B Slimpajama 數據集能夠獲得比 1T 的 RedPajama 數據集更好的效果。

4.2.2 SFT

預訓練是 LLM 強大能力的根本來源,事實上,LLM 所覆蓋的海量知識基本都是源于預訓練語料。LLM 的性能本身,核心也在于預訓練的工作。但是,預訓練賦予了 LLM 能力,卻還需要第二步將其激發出來。經過預訓練的 LLM 好像一個博覽群書但又不求甚解的書生,對什么樣的偏怪問題,都可以流暢地接出下文,但他偏偏又不知道問題本身的含義,只會“死板背書”。這一現象的本質是因為,LLM 的預訓練任務就是經典的 CLM,也就是訓練其預測下一個 token 的能力,在沒有進一步微調之前,其無法與其他下游任務或是用戶指令適配。

因此,我們還需要第二步來教這個博覽群書的學生如何去使用它的知識,也就是 SFT(Supervised Fine-Tuning,有監督微調)。所謂有監督微調,其實就是我們在第三章中講過的預訓練-微調中的微調,稍有區別的是,對于能力有限的傳統預訓練模型,我們需要針對每一個下游任務單獨對其進行微調以訓練模型在該任務上的表現。例如要解決文本分類問題,需要對 BERT 進行文本分類的微調;要解決實體識別的問題,就需要進行實體識別任務的微調。

而面對能力強大的 LLM,我們往往不再是在指定下游任務上構造有監督數據進行微調,而是選擇訓練模型的“通用指令遵循能力”,也就是一般通過指令微調的方式來進行 SFT。

所謂指令微調,即我們訓練的輸入是各種類型的用戶指令,而需要模型擬合的輸出則是我們希望模型在收到該指令后做出的回復。例如,我們的一條訓練樣本可以是:

input:告訴我今天的天氣預報?
output:根據天氣預報,今天天氣是晴轉多云,最高溫度26攝氏度,最低溫度9攝氏度,晝夜溫差大,請注意保暖哦

也就是說,SFT 的主要目標是讓模型從多種類型、多種風格的指令中獲得泛化的指令遵循能力,也就是能夠理解并回復用戶的指令。因此,類似于 Pretrain,SFT 的數據質量和數據配比也是決定模型指令遵循能力的重要因素。

首先是指令數據量及覆蓋范圍。為了使 LLM 能夠獲得泛化的指令遵循能力,即能夠在未訓練的指令上表現良好,需要收集大量類別各異的用戶指令和對應回復對 LLM 進行訓練。一般來說,在單個任務上 500~1000 的訓練樣本就可以獲得不錯的微調效果。但是,為了讓 LLM 獲得泛化的指令遵循能力,在多種任務指令上表現良好,需要在訓練數據集中覆蓋多種類型的任務指令,同時也需要相對較大的訓練數據量,表現良好的開源 LLM SFT 數據量一般在數 B token 左右。

為提高 LLM 的泛化能力,指令數據集的覆蓋范圍自然是越大越好。但是,多種不同類型的指令數據之間的配比也是 LLM 訓練的一大挑戰。OpenAI 訓練的 InstructGPT(即 ChatGPT 前身)使用了源自于用戶使用其 API 的十種指令:

指令類型占比
文本生成45.6%
開放域問答12.4%
頭腦風暴11.2%
聊天8.4%
文本轉寫6.6%
文本總結4.2%
文本分類3.5%
其他3.5%
特定域問答2.6%
文本抽取1.9%

高質量的指令數據集具有較高的獲取難度。不同于預訓練使用的無監督語料,SFT 使用的指令數據集是有監督語料,除去設計廣泛、合理的指令外,還需要對指令回復進行人工標注,并保證標注的高質量。事實上,ChatGPT 的成功很大一部分來源于其高質量的人工標注數據。但是,人工標注數據成本極高,也罕有企業將人工標注的指令數據集開源。為降低數據成本,部分學者提出了使用 ChatGPT 或 GPT-4 來生成指令數據集的方法。例如,經典的開源指令數據集 Alpaca就是基于一些種子 Prompt,通過 ChatGPT 生成更多的指令并對指令進行回復來構建的。

一般 SFT 所使用的指令數據集包括以下三個鍵:

{"instruction":"即輸入的用戶指令","input":"執行該指令可能需要的補充輸入,沒有則置空","output":"即模型應該給出的回復"
}

例如,如果我們的指令是將目標文本“今天天氣真好”翻譯成英文,那么該條樣本可以構建成如下形式:

{"instruction":"將下列文本翻譯成英文:","input":"今天天氣真好","output":"Today is a nice day!"
}

同時,為使模型能夠學習到和預訓練不同的范式,在 SFT 的過程中,往往會針對性設置特定格式。例如,LLaMA 的 SFT 格式為:

### Instruction:\n{{content}}\n\n### Response:\n

其中的 content 即為具體的用戶指令,也就是說,對于每一個用戶指令,將會嵌入到上文的 content 部分,這里的用戶指令不僅指上例中的 “instruction”,而是指令和輸入的拼接,即模型可以執行的一條完整指令。例如,針對上例,LLaMA 獲得的輸入應該是:

### Instruction:\n將下列文本翻譯成英文:今天天氣真好\n\n### Response:\n

其需要擬合的輸出則是:

### Instruction:\n將下列文本翻譯成英文:今天天氣真好\n\n### Response:\nToday is a nice day!

注意,因為指令微調本質上仍然是對模型進行 CLM 訓練,只不過要求模型對指令進行理解和回復而不是簡單地預測下一個 token,所以模型預測的結果不僅是 output,而應該是 input + output,只不過 input 部分不參與 loss 的計算,但回復指令本身還是以預測下一個 token 的形式來實現的。

但是,隨著 LLM 能力的不斷增強,模型的多輪對話能力逐漸受到重視。所謂多輪對話,是指模型在每一次對話時能夠參考之前對話的歷史記錄來做出回復。例如,一個沒有多輪對話能力的 LLM 可能有如下對話記錄:

用戶:你好,我是開源組織 Datawhale 的成員。
模型:您好,請問有什么可以幫助您的嗎?
用戶:你知道 Datawhale 是什么嗎?
模型:不好意思,我不知道 Datawhale 是什么。

也就是說,模型不能記錄用戶曾經提到或是自己曾經回答的歷史信息。如果是一個具有多輪對話能力的 LLM,其對話記錄應該是這樣的:

用戶:你好,我是開源組織 Datawhale 的成員。
模型:您好,請問有什么可以幫助您的嗎?
用戶:你知道 Datawhale 是什么嗎?
模型:Datawhale 是一個開源組織。

模型是否支持多輪對話,與預訓練是沒有關系的。事實上,模型的多輪對話能力完全來自于 SFT 階段。如果要使模型支持多輪對話,我們需要在 SFT 時將訓練數據構造成多輪對話格式,讓模型能夠利用之前的知識來生成回答。假設我們目前需要構造的多輪對話是:

<prompt_1><completion_1><prompt_2><completion_2><prompt_3><completion_3>

構造多輪對話樣本一般有三種方式:

  1. 直接將最后一次模型回復作為輸出,前面所有歷史對話作為輸入,直接擬合最后一次回復:

     input=<prompt_1><completion_1><prompt_2><completion_2><prompt_3><completion_3>output=[MASK][MASK][MASK][MASK][MASK]<completion_3>
    
  2. 將 N 輪對話構造成 N 個樣本:

     input_1 = <prompt_1><completion_1>output_1 = [MASK]<completion_1>input_2 = <prompt_1><completion_1><prompt_2><completion_2>output_2 = [MASK][MASK][MASK]<completion_2>input_3=<prompt_1><completion_1><prompt_2><completion_2><prompt_3><completion_3>output_3=[MASK][MASK][MASK][MASK][MASK]<completion_3>
    
  3. 直接要求模型預測每一輪對話的輸出:

     input=<prompt_1><completion_1><prompt_2><completion_2><prompt_3><completion_3>output=[MASK]<completion_1>[MASK]<completion_2>[MASK]<completion_3>
    

顯然可知,第一種方式會丟失大量中間信息,第二種方式造成了大量重復計算,只有第三種方式是最合理的多輪對話構造。我們之所以可以以第三種方式來構造多輪對話樣本,是因為 LLM 本質還是進行的 CLM 任務,進行單向注意力計算,因此在預測時會從左到右依次進行擬合,前輪的輸出預測不會影響后輪的預測。目前,絕大部分 LLM 均使用了多輪對話的形式來進行 SFT。

4.2.3 RLHF

RLHF,全稱是 Reinforcement Learning from Human Feedback,即人類反饋強化學習,是利用強化學習來訓練 LLM 的關鍵步驟。相較于在 GPT-3 就已經初見雛形的 SFT,RLHF 往往被認為是 ChatGPT 相較于 GPT-3 的最核心突破。事實上,從功能上出發,我們可以將 LLM 的訓練過程分成預訓練與對齊(alignment)兩個階段。預訓練的核心作用是賦予模型海量的知識,而所謂對齊,其實就是讓模型與人類價值觀一致,從而輸出人類希望其輸出的內容。在這個過程中,SFT 是讓 LLM 和人類的指令對齊,從而具有指令遵循能力;而 RLHF 則是從更深層次令 LLM 和人類價值觀對齊,令其達到安全、有用、無害的核心標準。

如圖4.4所示,ChatGPT 在技術報告中將對齊分成三個階段,后面兩個階段訓練 RM 和 PPO 訓練,就是 RLHF 的步驟:

alt text

圖4.4 ChatGPT 訓練三個的階段

RLHF 的思路是,引入強化學習的技術,通過實時的人類反饋令 LLM 能夠給出更令人類滿意的回復。強化學習是有別于監督學習的另一種機器學習方法,主要討論的問題是智能體怎么在復雜、不確定的環境中最大化它能獲得的獎勵。強化學習主要由兩部分構成:智能體和環境。在強化學習過程中,智能體會不斷行動并從環境獲取反饋,根據反饋來調整自己行動的策略。應用到 LLM 的對齊上,其實就是針對不同的問題,LLM 會不斷生成對應的回復,人工標注員會不斷對 LLM 的回復做出反饋,從而讓 LLM 學會人類更偏好、喜歡的回復。

RLHF 就類似于 LLM 作為一個學生,不斷做作業來去提升自己解題能力的過程。如果把 LLM 看作一個能力強大的學生,Pretrain 是將所有基礎的知識教給他,SFT 是教他怎么去讀題、怎么去解題,那么 RLHF 就類似于真正的練習。LLM 會不斷根據 Pretrain 學到的基礎知識和 SFT 學到的解題能力去解答練習,然后人類作為老師批改 LLM 的練習,來讓 LLM 反思錯誤的解題方式,不斷強化正確的解題方式。

如上圖,RLHF 分為兩個步驟:訓練 RM 和 PPO 訓練。

RM,Reward Model,即獎勵模型。RM 是用于擬合人類偏好,來給 LLM 做出反饋的。在強化學習的訓練中,對于 LLM 的每一個回復,RM 會進行打分,這個打分反映了生成回復符合人類偏好的程度。然后 LLM 會根據強化學習的原理,基于 RM 的打分來進行優化訓練。所以,RM 本質上是一個文本分類模型,對于一個文本輸出一個標量獎勵,和文本分類任務中的隱藏層輸出非常類似。在具體實現上,RM 也往往就是傳統的 LLM 架構(或 BERT 架構)加上一層分類層,和用于文本分類的 LLM 架構完全一致,只不過使用隱藏層輸出而不是最后的分類輸出而已。

但是,在訓練 RM 時,我們往往并不直接使用文本及其對應的標量獎勵來對 RM 進行訓練。因為要對齊人類偏好,RM 訓練的偏好數據往往是由人工標注的。但是,由于標注者之間往往也存在價值觀差異,數值形式的標量獎勵往往會將這些差異放大,從而導致在訓練過程中對同樣程度的回復獎勵不一致,模型難以擬合到正確的標量獎勵。因此,我們往往對同一個 completion 下的不同回復進行排名,再將排名轉化為獎勵。

例如,我們的訓練數據往往形如:

{"prompt":"如果你打算從商店偷東西,你覺得早上好還是晚上好?","chosen":"這是違法的事情,我不能提供建議","rejected":"考慮晚上的人口販運和監控攝像頭的差別是件好事。夜間時間可能更有利于避免監控攝像頭,但晚上的商店雇員會更能看見你。另一方面,由于白天通常不太忙,因此更容易避免被其他人注意到。無論如何,必須密切注意商店雇員和所有顧客的行為。他們也許能夠看見你,即使他們不是直接面對你。為了安全起見,重要的是要密切注意商店里的一切事情,而不是不小心。"
}

其中,prompt 是用戶的問題,chosen 是應該對齊的、符合人類偏好的回答,rejected 是不符合人類偏好的回答。在訓練中,prompt 將和 chosen 以及 rejected 分別拼接起來,形成 chosen_example 和 rejected_example,然后分別進入模型通過前向傳播輸出一個標量獎勵。然后模型會通過最大化 chosen_example 和 rejected_example 的標量差異來計算 loss,并進行反向傳播完成訓練。

值得注意的是,RM 訓練使用的模型往往和最后的 LLM 大小不同。例如 OpenAI 使用了 175B 的 LLM 和 6B 的 RM。同時,RM 使用的模型可以是經過 SFT 之后的 LM,也可以是基于偏好數據從頭訓練的 RM。哪一種更好,至今尚沒有定論。

在完成 RM 訓練之后,就可以使用 PPO 算法來進行強化學習訓練。PPO,Proximal Policy Optimization,近端策略優化算法,是一種經典的 RL 算法。事實上,強化學習訓練時也可以使用其他的強化學習算法,但目前 PPO 算法因為成熟、成本較低,還是最適合 RLHF 的算法。

在具體 PPO 訓練過程中,會存在四個模型。如圖4.5所示,兩個 LLM 和兩個 RM。兩個 LLM 分別是進行微調、參數更新的 actor model 和不進行參數更新的 ref model,均是從 SFT 之后的 LLM 初始化的。兩個 RM 分別是進行參數更新的 critic model 和不進行參數更新的 reward model,均是從上一步訓練的 RM 初始化的。

alt text

圖4.5 PPO 訓練流程

如上圖,使用 PPO 算法的強化學習訓練過程如下:

  1. 從 SFT 之后的 LLM 初始化兩個模型分別作為 Actor Model 和 Ref Model;從訓練的 RM 初始化兩個模型分別作為 Reward Model 和 Critic Model;
  2. 輸入一個 Prompt,Actor Model 和 Ref Model 分別就 Prompt 生成回復;
  3. Actor Response 和 Ref Response 計算 KL 散度: rKL=?θKLDKL(πPPO(y∣x)∣∣πbase(y∣x))r_{KL} = -\theta_{KL}D_{KL}(\pi_{PPO}(y|x)||\pi_{base}(y|x))rKL?=?θKL?DKL?(πPPO?(yx)∣∣πbase?(yx)) 其中, πPPO(y∣x)\pi_{PPO}(y|x)πPPO?(yx) 即為 Actor Model 的輸出,而 πbase(y∣x)\pi_{base}(y|x)πbase?(yx) 即為 Ref Model 的輸出, θKLDKL\theta_{KL}D_{KL}θKL?DKL? 即是計算 KL 散度的方法;
  4. Actor Response 分別輸入到 Reward Model 和 Critic Model 進行打分,其中,Reward Model 輸出的是回復對應的標量獎勵,Critic Model 還會輸出累加獎勵(即從i位置到最后的累積獎勵);
  5. 計算的 KL 散度、兩個模型的打分均輸入到獎勵函數中,計算獎勵: loss=?(klctl?rKL+γ?Vt+1?Vt)log?P(At∣Vt)loss = -(kl_{ctl} \cdot r_{KL} + \gamma \cdot V_{t+1} - V_{t}) \log P(A_t|V_t)loss=?(klctl??rKL?+γ?Vt+1??Vt?)logP(At?Vt?) ,這里的 klctlkl_{ctl}klctl? 是控制 KL 散度對結果影響的權重參數, γ\gammaγ 是控制下一個時間(也就是樣本)打分對結果影響的權重參數, VtV_tVt? 是 Critic Model 的打分輸出, AtA_tAt? 則是 Reward Model 的打分輸出;
  6. 根據獎勵函數分別計算出的 actor loss 和 critic loss,更新 Actor Model 的參數和 Critic Model 的參數;注意,Actor Model 和 Critic Model 的參數更新方法是不同的,此處就不再一一贅述了,感興趣的讀者可以深入研究強化學習的相關理論。

在上述過程中,因為要使用到四個模型,顯存占用會數倍于 SFT。例如,如果我們 RM 和 LLM 都是用 7B 的體量,PPO 過程中大概需要 240G(4張 80G A100,每張卡占用 60G)顯存來進行模型加載。那么,為什么我們需要足足四個模型呢?Actor Model 和 Critic Model 較為容易理解,而之所以我們還需要保持原參數不更新的 Ref Model 和 Reward Model,是為了限制模型的更新不要過于偏離原模型以至于丟失了 Pretrain 和 SFT 賦予的能力。

當然,如此大的資源占用和復雜的訓練過程,使 RLHF 成為一個門檻非常高的階段。也有學者從監督學習的思路出發,提出了 DPO(Direct Preference Optimization,直接偏好優化),可以低門檻平替 RLHF。DPO 的核心思路是,將 RLHF 的強化學習問題轉化為監督學習來直接學習人類偏好。DPO 通過使用獎勵函數和最優策略間的映射,展示了約束獎勵最大化問題完全可以通過單階段策略訓練進行優化,也就是說,通過學習 DPO 所提出的優化目標,可以直接學習人類偏好,而無需再訓練 RM 以及進行強化學習。由于直接使用監督學習進行訓練,DPO 只需要兩個 LLM 即可完成訓練,且訓練過程相較 PPO 簡單很多,是 RLHF 更簡單易用的平替版本。DPO 所提出的優化目標為什么能夠直接學習人類偏好,作者通過一系列的數學推導完成了證明,感興趣的讀者可以下來進一步閱讀,此處就不再贅述了。

接下來,我們將依次實現如何從零開始訓練一個 LLM,包括預訓練、SFT 和 RLHF。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921374.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何將視頻從 iPhone 轉移到 Mac

將視頻從 iPhone 轉移到 Mac 是許多用戶常見的需求。無論你是想備份重要的視頻&#xff0c;還是希望在更大的屏幕上觀看&#xff0c;以下方法都能幫助你輕松完成。方法一&#xff1a;使用 iReaShare iPhone ManageriReaShare iPhone Manager 是一款功能強大的工具&#xff0c;可…

五、Docker 核心技術:容器數據持久化之數據卷

Docker 容器本身是無狀態且生命周期短暫的。當一個容器被刪除時&#xff0c;它在可寫層產生的所有數據都會隨之消失。這對于需要持久化存儲數據的應用 (如數據庫、日志系統、用戶上傳內容) 來說是不可接受的。為了解決這個問題&#xff0c;Docker 提供了多種數據持久化方案&…

前端視覺交互設計全解析:從懸停高亮到多維交互體系(含代碼 + 圖表)

在前端用戶體驗領域&#xff0c;視覺交互是連接用戶與產品的 “隱形橋梁”—— 它通過可視化信號傳遞操作意圖、反饋系統狀態&#xff0c;直接決定用戶對產品的感知。很多開發者對視覺交互的認知停留在 “鼠標懸停高亮”&#xff0c;但實際上&#xff0c;視覺交互是一個覆蓋 “…

從零打造商業級LLMOps平臺:開源項目LMForge詳解,助力多模型AI Agent開發!

最近&#xff0c;我發現了一個超級實用的開源項目——LMForge-End-to-End-LLMOps-Platform-for-Multi-Model-Agents&#xff08;以下簡稱LMForge&#xff09;。這個項目是一個端到端的LLMOps&#xff08;Large Language Model Operations&#xff09;平臺&#xff0c;專為多模型…

【C++練習】06.輸出100以內的所有素數

目錄輸出100以內的所有素數方法1&#xff1a;基礎判斷法方法2&#xff1a;埃拉托斯特尼篩法&#xff08;效率更高&#xff09;方法3&#xff1a;優化版篩法&#xff08;只考慮奇數&#xff09;方法4&#xff1a;使用STL算法方法5&#xff1a;遞歸實現總結&#xff1a; 輸出100以…

在開發中使用git rebase的場景

rebase介紹 一、背景 遠程倉庫有oh4w-dev和oh4k-dev兩個分支&#xff0c;oh4k-dev是基于oh4w-dev開發到80%的代碼新拉的分支&#xff1b;此后兩條分支同步開發&#xff0c;當oh4k-dev開發完成&#xff0c;oh4w-dev還在開發階段&#xff0c;oh4k-dev需要拉取到oh4w-dev自分出o…

TDengine 時序函數 NOW() 用戶手冊

TDengine NOW() 函數用戶使用手冊 目錄 功能概述函數語法返回值說明技術特性使用場景及示例時間運算操作注意事項常見問題 功能概述 NOW() 函數是 TDengine 中的時間函數&#xff0c;用于獲取客戶端當前系統時間。該函數在時序數據庫中特別有用&#xff0c;可以用于數據插入…

JavaWeb ——事務管理

文章目錄事務管理事務回顧Spring事務管理事務進階事務屬性 - 回滾 rollbackFor事務屬性 - 傳播行為 propagationSpring框架第一大核心: IOC控制反轉&#xff0c; 其第二大核心就是 AOP 面向切面編程 事務管理 事務回顧 Spring事務管理 # spring 事務管理日志 logging:level:org…

【跨國數倉遷移最佳實踐8】MaxCompute Streaming Insert: 大數據數據流寫業務遷移的實踐與突破

本系列文章將圍繞東南亞頭部科技集團的真實遷移歷程展開&#xff0c;逐步拆解 BigQuery 遷移至 MaxCompute 過程中的關鍵挑戰與技術創新。本篇為第八篇&#xff0c;MaxCompute Streaming Insert&#xff1a; 大數據數據流寫業務遷移的實踐與突破。注&#xff1a;客戶背景為東南…

2025-09-05 CSS4——浮動與定位

文章目錄1 顯示&#xff08;Display&#xff09;1.1 visibility:hidden1.2 display:none2 塊和內聯元素2.1 塊元素2.2 內聯元素2.3 改變元素的顯示方式3 浮動&#xff08;Float&#xff09;3.1 float 屬性3.2 clear 屬性4 定位&#xff08;Position&#xff09;4.1 五種定位模式…

43這周打卡——生成手勢圖像 (可控制生成)

目錄 前言 1.導入數據及數據可視化 2.構建模型 3.訓練模型 4.模型分析并生成指定圖像 總結 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 1.導入數據及數據可視化 from torchvision import data…

TDengine 時間函數 TIMEDIFF() 用戶手冊

TDengine TIMEDIFF() 函數詳細使用手冊 目錄 功能概述函數語法參數說明返回值說明版本變更說明技術特性使用場景及示例時間單位處理數據類型兼容性注意事項常見問題最佳實踐 功能概述 TIMEDIFF() 函數用于計算兩個時間戳的差值&#xff0c;返回 expr1 - expr2 的結果。結果…

【2025ICCV-持續學習方向】一種用于提示持續學習(Prompt-based Continual Learning, PCL)的新方法

1. 背景與問題 (Background & Problem):?? ?持續學習 (CL):?? 目標是在不遺忘舊任務知識的情況下,讓模型持續學習一系列新任務。主要挑戰是災難性遺忘。 ?基于提示的持續學習 (PCL):?? 利用預訓練視覺Transformer (ViT),凍結其權重,通過微調稱為“提示”(prompt…

2025 年 08 月 GitHub 十大熱門項目排行榜

歡迎來到 2025 年 8 月 GitHub 熱門開源項目排行榜&#xff01;本月榜單集中展示了來自智能體平臺、AI 編程助手、多模態角色系統、本地化部署工具到可視化白板與企業協同平臺的多元創新。從構建 AI 助手中樞的 Archon&#xff0c;到終端 AI 編碼拍檔 Crush&#xff0c;再到虛擬…

LeetCode每日一題,2025-9-4

多數元素 投票法 讓你找到序列中出現超過二分之一的元素&#xff0c;一定要記住這個規則。 記錄兩個值val和cnt&#xff0c;剛開始val為任意數&#xff0c;cnt0。 如果cnt是0&#xff0c;就把當前val num。接下來判斷&#xff0c;ifnum val&#xff0c;則cnt &#xff0c;e…

第7章 安全配置

7.1 安全概述 Jenkins安全威脅 常見安全風險&#xff1a; 訪問控制風險&#xff1a; - 未授權訪問Jenkins實例 - 權限提升攻擊 - 橫向移動攻擊 - 敏感信息泄露代碼執行風險&#xff1a; - 惡意腳本注入 - 構建腳本篡改 - 插件漏洞利用 - 遠程代碼執行數據安全風險&#xff1a; …

騰訊混元世界模型Voyager開源:單圖生成3D世界的“核彈級”突破,游戲、VR、自動駕駛迎來新變量

當AI繪畫、視頻生成技術逐漸從“新鮮感”走向“實用化”&#xff0c;3D內容生成卻始終卡在“效率低、成本高、門檻高”的瓶頸里。傳統3D建模需要專業軟件、大量人工調整&#xff0c;甚至依賴昂貴的硬件設備&#xff0c;讓中小團隊和個人創作者望而卻步。 但騰訊AI實驗室最近開…

數據庫(基礎操作)

SQL 結構化的查詢語句 我們現在需要寫SQL語句 --- 這個玩意兒就是數據庫的操作語句我們的數據庫就類似于一個excl表格它有n列&#xff0c;每一列為一個大類&#xff0c;數據以行存在&#xff0c;一行代表一個條目數據如&#xff1a;我現在想建立一個數據庫保存學生的信息你需要…

linux ubi文件系統

1&#xff0c;UBI&#xff08;Unsorted Block Images&#xff09;是 Linux 內核中為原始 Flash 設備提供的一種抽象層&#xff0c;位于 MTD&#xff08;Memory Technology Device&#xff09;和文件系統&#xff08;如 UBIFS&#xff09;之間。它負責壞塊管理、磨損均衡、邏輯卷…

深度厚金板PCB與厚銅PCB的區別

厚金板PCB和厚銅PCB在電子制造領域都有重要應用&#xff0c;它們有著不同的特點和適用場景。下面為你詳細介紹二者的區別。厚金PCB是什么厚金PCB是在印制電路板表面鍍上較厚金層的電路板。這層厚金能提升電路板的導電性、抗氧化性和耐磨性。在一些對信號傳輸要求極高、使用環境…