開放原始碼和開放權重模型之間有何區別?

開放原始碼和開放權重模型之間有何區別?

隨著 DeepSeek 模型的釋出,中國的人工智慧實驗室已經開始採用“開放”的方法來開發具有卓越推理能力的人工智慧模型。此外,谷歌上個月也加入了這一行列,推出了基於 Gemini 2.0 框架的輕量級開放模型 Gemma 3。同樣,為了在這個生態系統中邁出一步,並支援 OpenAI 中的“開放”,科技巨頭 OpenAI 正計劃在不久後釋出一個新的“開放權重”人工智慧模型。這將是 OpenAI 自 2019 年釋出 GPT 2 以來的首個開放重量級模型。

隨著越來越多的人使用大型語言模型(LLM),“開放權重”和“開源模型”等術語變得很常見。但究竟什麼是開放權重和開源模型呢?本文將解釋模型權重、開放權重和開源模型之間的區別,以及為什麼這對開發人員和研究人員很重要。

什麼是LLM中的權重?

在機器學習中,權重是模型在訓練過程中學習到的數字。這些數字控制著模型如何將輸入資料轉化為預測結果。在 LLM 中,權重儲存了從訓練資料中學到的知識。權重越大的模型通常可以學習到更復雜的語言模式。

LLM中的權重

在訓練過程中,模型會根據所看到的資料調整權重。它試圖使預測更加準確。訓練結束後,開發人員可以儲存這些權重。這樣,其他人就可以使用訓練好的模型,而無需再次進行訓練,從而節省了時間和資源。

以下是根據引數劃分的 LLM 型別:

開放權重模型指的是一種大型語言模型(LLM),在這種模型中,模型的引數(又稱“權重”)是公開的。這意味著任何人都可以下載、檢查、使用或微調該模型,而不會遇到任何許可壁壘或專有限制。

與封閉或專有模型不同的是,開放權重模型的釋出通常是為了鼓勵研究、實驗和社羣驅動的創新。它們通常用於學術環境、初創企業或獨立開發者,這些人希望突破這些模型的極限,或者只是在引擎蓋下修修補補。

最大的優點是什麼?它們有助於提高人工智慧研究的透明度和可重複性。當權重開放時,其他研究人員可以驗證結果、測試能力,或將其作為新工作的基準。這就像科學有了更好的版本控制。

現在,這裡有一個重要的細微差別:開放權重≠開源。開源模型可以讓你訪問所有內容–架構、訓練程式碼、資料集(有時)和權重–而開放權重模型只發布最終訓練好的引數。你得不到完整的配方,只有最後的菜餚。

什麼是開放權重模型?

“開放權重 “是指模型的訓練權重可供公眾使用。任何人都可以下載這些權重。只要有合適的計算機系統,他們就可以在自己的應用程式中使用這些權重。開放權重可以讓開發人員使用強大的預訓練模型來完成編寫文字或理解情感等任務。這就避免了從一開始就訓練模型的高昂成本和時間。

開放式權重的主要優勢在於可訪問性。開發人員可以在他們的專案中快速使用高階模型。這有助於推動新思路的產生。然而,開放權重並不總是意味著模型的設計或訓練資料也是公開的。使用者可能會獲得模型的能力,但卻不知道它究竟是如何建立或訓練的。

讓我們來看幾個例子

  • Llama 3(來自 Meta): Meta 釋出了各種 Llama 3 模型大小的權重。雖然權重可以獲得,但它們附帶了特定的許可證,其中包括使用限制,尤其是對基於該權重進行商業化服務的大型公司而言。訓練過程的細節部分被共享,但從傳統軟體的意義上講,它並不是完全開源的。
  • Mistral 7B(來自 Mistral AI): 該模型因其相對於其規模的強大效能而廣受歡迎。其權重是根據 Apache 2.0 許可釋出的,因此可以廣泛使用。雖然比 Llama 的許可證更為開放,但其重點主要在於提供權重和基本使用程式碼。

什麼是開源模型?

“開源模型 “是一個更廣泛的概念。開源模型通常包括權重、完整的原始碼、指南,通常還有訓練資料。這種開放性可以讓開發人員看到模型是如何工作的。他們可以改變模型,甚至用新資料重新訓練模型。

開源方法支援團隊合作和社羣開發。開發人員可以幫助改進模型、查詢錯誤並分享更改。這種群策群力的方式可以使模型更強大、更有用。使用和更改開源模型可能需要更多的技術知識,這對某些人來說可能是個挑戰。

讓我們來看幾個例子

  • BLOOM(BigScience Large Open-science Open-access Multilingual Language Model): 這是一項涉及眾多研究人員的大型合作專案。該模型的權重、程式碼及其大量多語言訓練資料的詳細資訊均以 RAIL 開放許可的形式釋出,旨在實現負責任的使用。
  • GPT-2(來自 OpenAI): GPT-2 是 OpenAI 釋出的具有里程碑意義的版本,雖然現在已經過時,但 OpenAI 在該版本中公開了模型程式碼和權重,促進了社羣中的大量研究和開發工作。
  • Falcon 模型(來自 TII): 這些模型(如 Falcon-40B 和 Falcon-180B)在 Apache 2.0 許可下發布了權重和程式碼,允許廣泛的商業和研究使用。

開放權重和開源模型之間的主要差異

  • 透明度:開源模型會顯示所有資訊,包括設計和訓練資料。開放權重模型可能只共享訓練資料。
  • 可修改性:您可以根據特定需求更改和重新訓練開源模型。除非基礎模型也是開源的,否則通常無法更改開放權重模型。
  • 社羣:開源模型的開發需要社羣的參與。開放權重模型通常沒有這種程度的群體工作。
  • 易用性:對於那些只想快速使用模型而不想研究其設計的開發人員來說,開放權重模型更容易使用。

第三角色:閉源模型

將這些模型與閉源模型進行比較也很有幫助。公司擁有這些模型。它們不會公開共享模型設計、權重或訓練資料。人們通常透過公司提供的特定軟體或工具來使用這些模型。這些軟體或工具通常需要透過許可證或訂閱付費。專有模型可能易於使用,並得到公司的支援。但它們的透明度很低,使用者無法更改。

比較模型型別:開放權重、開放原始碼、封閉原始碼

本表顯示了主要區別:

特徵 開放權重模型 開源模型 閉源模型
定義 訓練模型權重公開。 公開完整的模型細節(程式碼、權重、常用資料)。 模型細節為私人所有,歸公司所有。
透明度 低;只共享權重。 高;可提供全部模型細節。 低;使用者無法看到模型內部。
可修改程度 無法更改模型設計。 使用者可以更改、重新訓練和調整模型。 使用者不能更改模型。
社羣 社羣在開發中的作用很小。 強大的社羣作用;人們可以做出貢獻。 沒有社羣角色;公司控制開發。
易用性 通常很容易使用權重進行部署。 可能需要技術技能才能使用和更改。 通常介面簡單,但選項有限。
成本 權重通常免費;可能需要支付計算機費用。 模型通常免費;可能需要支付計算機/託管費用。 通常需要付費(許可證或訂閱)。
支援 支援有限;依賴文件或論壇。 社羣提供支援。 公司通常提供支援,可能需要額外付費。
適用於 快速使用,嘗試各種想法。 研究、學習、需要改變的專案。 企業需要受支援的工具,但無需更換。
道德規範 訓練資料不清晰或可能存在偏差。 透明度有助於社羣檢查道德規範。 缺乏透明度,引起潛在的資料使用問題。

對開發人員和研究人員意味著什麼?

在開放權重、開源或專有模型之間做出選擇會影響工作。開放權重模型適合在一項任務中快速使用。開源模型適用於需要更改、明確理解或社羣幫助的專案。專有模型適用於易用性和公司支援最重要且不需要更改的情況。

這種選擇還涉及對負責任的人工智慧開發的思考。公平使用資料、明確培訓內容和確保問責制都很重要。開發人員應考慮其選擇的影響。

如何使用開放重量模型?

以下是使用 Hugging Face transformers 庫的簡單示例:

設定

首先,安裝所需的庫:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
!pip install transformers torch
!pip install transformers torch
!pip install transformers torch

1. 使用開放權重

本例使用 Mistral 7b。這是一個具有開放權重的模型。我們用它來生成文字。

讓我們對模型進行量化,使其在本地機器上執行。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
import torch
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
)
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline import torch bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, )
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
import torch
bnb_config = BitsAndBytesConfig(
   load_in_4bit=True,
   bnb_4bit_quant_type="nf4",
   bnb_4bit_use_double_quant=True,
)

2. 使用 HuggingFace transformers 載入模型

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
model_name = "mistralai/Mistral-7B-Instruct-v0.2”
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
quantization_config=bnb_config,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
model_name = "mistralai/Mistral-7B-Instruct-v0.2” tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, load_in_4bit=True, quantization_config=bnb_config, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True, )
model_name = "mistralai/Mistral-7B-Instruct-v0.2”
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
       model_name,
       load_in_4bit=True,
       quantization_config=bnb_config,
       torch_dtype=torch.bfloat16,
       device_map="auto",
       trust_remote_code=True,
   )

3. 讓我們定義管道,以方便推斷

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pipe = pipeline(
"text-generation",
model=model,
tokenizer = tokenizer,
torch_dtype=torch.bfloat16,
device_map="auto"
)
pipe = pipeline( "text-generation", model=model, tokenizer = tokenizer, torch_dtype=torch.bfloat16, device_map="auto" )
pipe = pipeline(
   "text-generation",
   model=model,
   tokenizer = tokenizer,
   torch_dtype=torch.bfloat16,
   device_map="auto"
)

4. Performing inferencing

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
prompt = "As a data scientist, can you explain the concept of regularization in machine learning?"
sequences = pipe(
prompt,
do_sample=True,
max_new_tokens=100,
temperature=0.7,
top_k=50,
top_p=0.95,
num_return_sequences=1,
)
print(sequences[0]['generated_text'])
prompt = "As a data scientist, can you explain the concept of regularization in machine learning?" sequences = pipe( prompt, do_sample=True, max_new_tokens=100, temperature=0.7, top_k=50, top_p=0.95, num_return_sequences=1, ) print(sequences[0]['generated_text'])
prompt = "As a data scientist, can you explain the concept of regularization in machine learning?"
sequences = pipe(
   prompt,
   do_sample=True,
   max_new_tokens=100,
   temperature=0.7,
   top_k=50,
   top_p=0.95,
   num_return_sequences=1,
)
print(sequences[0]['generated_text'])

輸出

In machine learning, regularization is the process of preventing overfitting. Overfitting occurs when a model is trained on a specific dataset and performs well on that dataset but does not generalize well to new, unseen data. Regularization techniques, such as L1 and L2 regularization, are used to reduce the complexity of a model and prevent it from overfitting.

如何使用開源模型?

本例使用 GPT 2。這是一個開源模型,用於文字生成。因為它是開源的,所以你可以檢視它的程式碼或進行修改。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from transformers import TFGPT2LMHeadModel, GPT2Tokenizer
#get large GPT2 tokenizer and GPT2 model
tokenizer = GPT2Tokenizer.from_pretrained("gpt2-large")
GPT2 = TFGPT2LMHeadModel.from_pretrained("gpt2-large", pad_token_id=tokenizer.eos_token_id)
from transformers import TFGPT2LMHeadModel, GPT2Tokenizer #get large GPT2 tokenizer and GPT2 model tokenizer = GPT2Tokenizer.from_pretrained("gpt2-large") GPT2 = TFGPT2LMHeadModel.from_pretrained("gpt2-large", pad_token_id=tokenizer.eos_token_id)
from transformers import TFGPT2LMHeadModel, GPT2Tokenizer
#get large GPT2 tokenizer and GPT2 model
tokenizer = GPT2Tokenizer.from_pretrained("gpt2-large")
GPT2 = TFGPT2LMHeadModel.from_pretrained("gpt2-large", pad_token_id=tokenizer.eos_token_id)

進行文字生成

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
input_sequence = "I don't know about you, but there's only one thing I want to do after a long day of work"
# encode context the generation is conditioned on
input_ids = tokenizer.encode(input_sequence, return_tensors='tf')
# generate text until the output length (which includes the context length) reaches 50
greedy_output = GPT2.generate(input_ids, max_length = MAX_LEN)
print(tokenizer.decode(greedy_output[0], skip_special_tokens = True))
input_sequence = "I don't know about you, but there's only one thing I want to do after a long day of work" # encode context the generation is conditioned on input_ids = tokenizer.encode(input_sequence, return_tensors='tf') # generate text until the output length (which includes the context length) reaches 50 greedy_output = GPT2.generate(input_ids, max_length = MAX_LEN) print(tokenizer.decode(greedy_output[0], skip_special_tokens = True))
input_sequence = "I don't know about you, but there's only one thing I want to do after a long day of work"
# encode context the generation is conditioned on
input_ids = tokenizer.encode(input_sequence, return_tensors='tf')
# generate text until the output length (which includes the context length) reaches 50
greedy_output = GPT2.generate(input_ids, max_length = MAX_LEN)
print(tokenizer.decode(greedy_output[0], skip_special_tokens = True))

輸出

I don't know about you, but there's only one thing I want to do after a long day of work: go to the gym.I'm not talking about the gym that's right next to my house. I'm talking about the gym that's right next to my office.

最終,GPT 2 成功生成了文字。

小結

瞭解開放權重和開源模型之間的區別,有助於您在 LLM 世界中游刃有餘。開放權重可以方便地使用預先訓練好的模型。開源模型提供透明度、修改能力和社羣支援。閉源模型提供了便利和支援,但限制了訪問和控制。

隨著人工智慧的不斷發展,瞭解這些選項有助於開發人員和研究人員根據自己的目標、資源和價值觀選擇最佳方法。同時,我也熱切期待著 OpenAI 的開放權重模型的釋出,請在下面的評論區告訴我您對該模型的期望。

評論留言