生成式 AI 和 LLM 的運作方式
生成式 AI 是一種人工智慧,能夠建立原始內容,例如自然語言、影像、音訊和程式碼。 生成式 AI 的輸出是以使用者所提供的輸入為基礎。 使用者與生成式 AI 互動的一種常見方式,就是透過使用自然語言作為其輸入的聊天應用程式。 由 OpenAI 開發的 ChatGPT 是此方式的熱門範例。 使用自然語言作為輸入的生成式 AI 應用程式是由大型語言模型 (LLM) 提供,以執行自然語言處理 (NLP)。
生成式 AI 的運作方式
所有生成式 AI 都是建置在模型之上。 這些模型是以內容形式使用大量資料進行定型,例如自然語言、影像、音訊和程式碼。 生成式 AI 模型會使用定型資料中所識別的模式,來產生新的、統計上相似的內容。
使用者提供的輸入會供 AI 模型使用以建置輸出。 輸入首先會剖析為模型可以理解的資料形式。 然後,模型會使用該資料來識別其定型中的比對模式,將其組合以建置最終輸出。 生成式 AI 模型是專為產生獨特內容而設計,因此其不會針對相同的輸入產生相同的輸出。
支援自然語言作為輸入或輸出的生成式 AI 應用程式會利用 LLM 來這樣做。 LLM 用來執行 NLP,這會分類輸入文字並判斷其情感。 這種分類和情感分析是由生成式 AI 模型用來識別模式並建置輸出。 如果輸出是文字,則可以單獨使用 LLM 產生輸出。 如果輸出是音訊或影像,則會使用其他模型來提供資料與模式,用於產生該格式的輸出。
生成式 AI 的常見用途
生成式 AI 應用程式支援各種潛在使用案例和潛在輸出,在以下各節將會探索這些內容。
自然語言產生
某些生成式 AI 應用程式可以產生自然語言輸出,例如:
- LinkedIn 設定檔的專業措辭摘要
- 線上店面中商品的豐富描述
- 健康餐的想法
例如,假設使用者輸入「給我三個健康早餐的想法,包括甜椒」,則生成式 AI 應用程式可能會產生下列輸出:
好的,以下是三個含甜椒的健康早餐:
將雞蛋和甜椒一起炒:將一些甜椒切成丁,然後在平底鍋中炒至稍微變軟。 然後,加入一些打散的雞蛋,將所有食材和在一起。 與全麥吐司一起享用,成為一份營養早餐。
甜椒酪梨吐司:烤一片全麥麵包,上面放上切片甜椒、搗碎的酪梨,然後撒上鹽和胡椒。 這是一個絕佳的方式,可從酪梨攝取健康的油脂,並且從甜椒攝取維他命 C。
早餐墨西哥捲餅配甜椒:在平底鍋中炒一些切丁的甜椒、洋蔥和炒蛋。 然後,將炒好的食材用湯匙舀到全麥玉米餅上,淋上莎莎醬或辣醬。 捲起來,享受滿足又營養的早餐。
影像產生
某些生成式 AI 應用程式可從自然語言輸入產生影像輸出。 根據應用程式及其模型,使用者也許能夠指定:
- 要顯示影像的人員或事物
- 要在其中建立影像的藝術風格
- 用於產生類似影像的參考
影像生成可為線上帳戶建立虛擬人偶、為企業設計標誌,或為創作者提供藝術靈感。 例如,使用者可能會輸入要求:「創造大象吃漢堡的影像。」 生成式 AI 應用程式可能會產生下列輸出:
音訊生成
某些生成式 AI 應用程式可從自然語言輸入產生音訊輸出。 根據應用程式及其模型,使用者也許能夠:
- 從輸入文字合成自然的聲音
- 以特定風格或以某些樂器為特色創作音樂
- 根據自然語言中提供的設定準則修改輸入音訊檔案
音訊生成可提供數位語音助理的口語回應、為歌曲添加伴奏樂器進行音樂製作,或者,從參考錄音重現使用者的原始聲音。
程式碼產生
某些生成式 AI 應用程式可從自然語言輸入產生程式碼。 根據應用程式及其模型,使用者也許能夠產生以下情況的程式碼:
- 以其選擇的語言表示
- 接受特定的輸入和輸出結構
- 根據其參考文件使用特定技術
程式碼生成可提供常見作業的快速實作,例如排序或篩選資料、加速將程式碼從一種語言翻譯成另一種語言,或根據指定的參考文件回答有關技術的問題。 例如,假設輸入「示範如何使用 C# 撰寫井字遊戲的程式碼」,則生成式 AI 應用程式可能會產生下列輸出:
以下是如何在 C# 中撰寫井字遊戲的簡單範例:
using System;
namespace TicTacToe
{
class Program
{
static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
static int player = 1; // Player 1 will start
static int choice; // The number the player chooses
static int flag = 0; // Set the flag value to 0
// Check if the position is already marked or not
private static int CheckPosition(char mark)
{
for (int i = 0; i < 9; i++)
{
if (board[i] == mark)
{
return 1;
}
}
return 0;
}
// The rest of the generated code has been omitted for brevity
// ...
}
}
此程式碼會在 C# 中建立簡單的主控台型井字遊戲。 其會使用單維陣列代表棋盤,並在每次移動之後檢查勝利或平局。
LLM 的運作方式
定型 LLM 時,定型文字會先細分為語彙基元。 每個語彙基元都會識別唯一的文字值。 語彙基元可以是不同的字組、部分字組或字組與標點符號的組合。 每個語彙基元都會獲指派一個識別碼,讓文字可以表示為一連串的語彙基元識別碼。
在將文字細分為語彙基元之後,稱為內嵌的內容向量會指派給每個語彙基元。 這些內嵌向量是多重值數值資料,其中語彙基元向量的每個元素都代表語彙基元的語意屬性。 語彙基元向量的元素是根據語彙基元一起使用或在類似內容中使用的普遍程度來決定。
目標是根據上述語彙基元來預測序列中的下一個語彙基元。 加權會指派給現有序列中的每個語彙基元,代表其對下一個語彙基元的相對影響。 接著會執行計算,其會使用上述語彙基元的加權和內嵌,來預測下一個向量值。 然後,模型會選取最可能的語彙基元,以根據預測的向量繼續序列。
此流程會繼續針對序列中的每個語彙基元反覆執行,而輸出序列會以迴歸方式用作為下一個反覆項目的輸入。 輸出是以一次一個語彙基元建置的。 此策略類似於自動完成的運作方式,其中建議是根據到目前為止所輸入的內容,並使用每個新輸入進行更新。
在定型期間,已知語彙基元的完整順序,但在目前所考慮語彙基元之後的所有語彙基元都會加以忽略。 下一個語彙基元向量的預測值會與實際值進行比較,並計算損失。 然後會累加調整權數,以減少損失並改善模型。