切換語言為:簡體

你可能高估了AI大模型的訓練過程

  • 爱糖宝
  • 2024-09-22
  • 2045
  • 0
  • 0

今天給大家科普一下 AI 大模型的訓練過程是什麼樣的。

之前在和一些同學溝通的過程中,經常被問到“一個大模型到底是如何被訓練出來的?",在交流完畢後,發現一個非常容易困擾大家的點,那就是——

大模型的訓練是無監督學習還是有監督學習?在大模型訓練過程中,資料的標籤是什麼?如何計算損失然後進行反向傳播的呢?

1、是有監督還是無監督

事實上,很多自然語言處理(NLP)的模型,尤其是上文提到的大語言模型(如 GPT 系列),都是透過無監督學習或自監督學習的方式進行訓練的。

也就是說它們不需要人工標註的標籤來進行訓練。

試想一下,訓練 GPT 的資料樣本大多來自於網際網路,如果需要對這些資料進行標註的話,會花費大量的人力,並且很多長文字是沒有辦法或者很難去標註的。

因此這類模型的訓練採用的基本是自監督學習的模式

自監督學習可以認為是無監督學習的一種特殊方式。

模型透過從輸入資料本身生成的偽標籤來進行訓練,這些偽標籤不是由人工標註的,而是由模型根據一定的規則自動生成的。

常見的自監督學習任務模型有以下兩種。

第一種是掩碼語言模型(Masked Language Model, MLM),這是 BERT 等模型使用的一種訓練方法。

它將其中一部分輸入詞進行隨機掩碼(替換為一個特殊的掩碼符號),模型的任務就是是預測這些被掩碼的詞。

這樣,模型就能學習到詞與上下文之間的關係,有點類似於讓模型不斷進行完形填空的意思。

第二種是因果語言模型(Causal Language Model, CLM),這是 GPT 系列模型使用的一種訓練方法。

在這種訓練模式下,模型被訓練來預測給定前文的下一個詞,這樣,模型就能學習到文字的順序結構和語言的生成過程。

說到這你可能還不完全清楚,看下面的例子就明白了。

2、GPT 的訓練過程

以因果語言模型的訓練為例,假設給模型的輸入資料是:The quick brown fox jumps over the lazy 這句話。

當然實際訓練時,輸入給模型的資料還會經過 Tokenization、詞嵌入和位置編碼這些步驟,但是我們這裏先繞過,不影響理解。

在 GPT 等模型的訓練時,如果給定上述句子作為模型的輸入,是希望模型可以預測出下一個詞是什麼,這是模型的任務。

因此,每給定一個單詞(Token),模型都要預測下一個詞,然後將預測出來的詞加上原來已有的詞作為新的輸入,繼續預測下一個詞,如此反覆迭代。

將訓練過程寫出虛擬碼是如下形式。

# 假設:
# - input_tokens 是輸入序列
# - target_tokens 是目標序列
# - transformer_model 是一個Transformer模型
# - optimizer 是用於最佳化模型引數的最佳化器
# - loss_function 是損失函式,例如交叉熵損失
for epoch in range(num_epochs):  # 迭代多個訓練週期
  for input_tokens, target_tokens in data_loader:
    # 1. 模型輸入
    # 將輸入token轉換為嵌入向量,進行詞嵌入和位置編碼
    input_embeddings = embedding_layer(input_tokens)
    position_embeddings = get_position_embeddings(input_embeddings)
    transformer_input = input_embeddings + position_embeddings
    # 2. Transformer模型
    # 透過Transformer模型得到輸出
    transformer_output = transformer_model(transformer_input)
    # 3. 模型輸出和損失計算
    # 將Transformer輸出轉換為logits
    logits = output_layer(transformer_output)
    loss = loss_function(logits, target_tokens) # 計算損失
    # 4. 梯度下降和反向傳播
    optimizer.zero_grad()  # 清除之前的梯度
    loss.backward()  # 反向傳播,計算梯度
    optimizer.step() # 更新模型引數

上面的 input_tokens 就可以認為是輸入的一句話。

可以看到在計算損失的時候,比較的是模型的輸出target_tokens 的損失。

模型的輸出我們好理解,就是模型預測的下一個詞,那麼 target_tokens 是什麼呢?

上面說到自監督學習的時候,說到一句話:“自監督學習中的偽標籤是模型透過一定的規則生成的”。

**target_tokens 就是偽標籤,**因為模型需要預測下一個詞,因此“一定的規則”就是對輸入 token 往後移一位來實現的,如下所示。

你可能高估了AI大模型的訓練過程

input_tokens 是原始句子中的單詞序列,而 target_tokens 是這個序列向右移動一個位置的結果。

在訓練過程中,模型會試圖根據 input_tokens 中的每個詞來預測 target_tokens 中的下一個詞。

例如,給定輸入 "The",模型應該預測輸出 "quick";然後將 "The" 和 "quick "合成新的輸入 "The quick" 給模型,模型應該預測出 "brown",以此類推。

這樣經過大量甚至是海量的文字資料的自監督學習,模型就可以學到很多自然語言的結構和句式了。

大語言模型也就訓練完成了。

當然上面的過程說的很粗糙,僅僅是想讓大家先搞清楚自監督學習這個概念,以及實際模型訓練時,模型是如何自我監督的。

相信看完之後,你會對大模型的訓練有一個更加清晰的認識了吧。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.