Mô hình và nền tảng AI

Tối ưu hóa Ưu tiên Trực tiếp: Hướng dẫn Toàn diện

mm
Thêm Unite.AI vào các nguồn ưu tiên của bạn trên Google

Việc căn chỉnh các mô hình ngôn ngữ lớn (LLM) với các giá trị và ưu tiên của con người là một thách thức. Các phương pháp truyền thống, chẳng hạn như Học tăng cường từ Phản hồi của Con người (RLHF), đã mở đường bằng cách tích hợp đầu vào của con người để tinh chỉnh đầu ra của mô hình. Tuy nhiên, RLHF có thể phức tạp và đòi hỏi nhiều tài nguyên, đòi hỏi sức mạnh tính toán và xử lý dữ liệu đáng kể. Tối ưu hóa Ưu tiên Trực tiếp (DPO) xuất hiện như một phương pháp mới và tinh gọn hơn, cung cấp một giải pháp thay thế hiệu quả cho các phương pháp truyền thống. Bằng cách đơn giản hóa quá trình tối ưu hóa, DPO không chỉ giảm tải tính toán mà còn tăng cường khả năng của mô hình để thích nghi nhanh với ưu tiên của con người

Trong hướng dẫn này, chúng ta sẽ深入 tìm hiểu về DPO, khám phá các nền tảng, triển khai và ứng dụng thực tế của nó.

Cần thiết của Việc Căn chỉnh Ưu tiên

Để hiểu DPO, điều quan trọng là phải hiểu tại sao việc căn chỉnh LLM với ưu tiên của con người lại quan trọng. Mặc dù có khả năng ấn tượng, LLM được đào tạo trên các tập dữ liệu lớn có thể đôi khi tạo ra đầu ra không nhất quán, thiên vị hoặc không phù hợp với giá trị của con người. Sự không phù hợp này có thể biểu hiện theo nhiều cách:

  • Tạo ra nội dung không an toàn hoặc có hại
  • Cung cấp thông tin không chính xác hoặc误 dẫn
  • Hiện thị thiên vị có trong dữ liệu đào tạo

Để giải quyết những vấn đề này, các nhà nghiên cứu đã phát triển các kỹ thuật để tinh chỉnh LLM bằng phản hồi của con người. Phương pháp nổi bật nhất trong số này là RLHF.

Hiểu RLHF: Tiền thân của DPO

Học tăng cường từ Phản hồi của Con người (RLHF) đã là phương pháp chính để căn chỉnh LLM với ưu tiên của con người. Hãy chia nhỏ quá trình RLHF để hiểu sự phức tạp của nó:

a) Tinh chỉnh Siêu giám sát (SFT): Quá trình bắt đầu bằng cách tinh chỉnh một LLM đã được đào tạo trước trên một tập dữ liệu các phản hồi chất lượng cao. Bước này giúp mô hình tạo ra đầu ra liên quan và nhất quán hơn cho nhiệm vụ mục tiêu.

b) Mô hình Hóa Phản hồi: Một mô hình phản hồi riêng biệt được đào tạo để dự đoán ưu tiên của con người. Điều này bao gồm:

  • Tạo ra các cặp phản hồi cho các lời nhắc cho trước
  • Có con người đánh giá phản hồi nào họ thích
  • Đào tạo một mô hình để dự đoán những ưu tiên này

c) Học tăng cường: LLM đã được tinh chỉnh sau đó được tối ưu hóa thêm bằng học tăng cường. Mô hình phản hồi cung cấp phản hồi, hướng dẫn LLM tạo ra phản hồi phù hợp với ưu tiên của con người.

Dưới đây là một đoạn mã Python giả để minh họa quá trình RLHF:

Mặc dù hiệu quả, RLHF có một số hạn chế:

  • Nó đòi hỏi đào tạo và duy trì nhiều mô hình (SFT, mô hình phản hồi và mô hình được tối ưu hóa bằng RL)
  • Quá trình RL có thể không ổn định và nhạy cảm với siêu tham số
  • Nó đòi hỏi nhiều tài nguyên tính toán, đòi hỏi nhiều lượt đi và trở lại qua các mô hình

Những hạn chế này đã thúc đẩy việc tìm kiếm các phương pháp thay thế đơn giản và hiệu quả hơn, dẫn đến sự phát triển của DPO.

Tối ưu hóa Ưu tiên Trực tiếp: Các Khái niệm Cốt lõi

Tối ưu hóa Ưu tiên Trực tiếp https://arxiv.org/abs/2305.18290

Tối ưu hóa Ưu tiên Trực tiếp https://arxiv.org/abs/2305.18290

Hình ảnh này đối chiếu hai phương pháp khác nhau để căn chỉnh đầu ra của LLM với ưu tiên của con người: Học tăng cường từ Phản hồi của Con người (RLHF) và Tối ưu hóa Ưu tiên Trực tiếp (DPO). RLHF dựa vào mô hình phản hồi để hướng dẫn chính sách của mô hình ngôn ngữ qua các vòng phản hồi lặp lại, trong khi DPO tối ưu hóa trực tiếp đầu ra của mô hình để phù hợp với phản hồi được ưu tiên của con người bằng cách sử dụng dữ liệu ưu tiên. So sánh này nhấn mạnh điểm mạnh và ứng dụng tiềm năng của mỗi phương pháp, cung cấp thông tin về cách các mô hình LLM trong tương lai có thể được đào tạo để phù hợp hơn với kỳ vọng của con người.

Các Ý tưởng then chốt đằng sau DPO:

a) Mô hình Hóa Phản hồi Ngầm: DPO loại bỏ nhu cầu về mô hình phản hồi riêng biệt bằng cách coi mô hình ngôn ngữ chính nó là một hàm phản hồi ngầm.

b) Biểu diễn Dựa trên Chính sách: Thay vì tối ưu hóa một hàm phản hồi, DPO tối ưu hóa trực tiếp chính sách (mô hình ngôn ngữ) để tối đa hóa xác suất của phản hồi được ưu tiên.

c) Giải pháp Đóng: DPO tận dụng một nhận xét toán học cho phép có một giải pháp đóng cho chính sách tối ưu, tránh nhu cầu về các cập nhật RL lặp lại.

Triển khai DPO: Hướng dẫn Mã Thực tế

Hình ảnh dưới đây展示 một đoạn mã triển khai hàm mất mát DPO sử dụng PyTorch. Hàm này đóng vai trò quan trọng trong việc tinh chỉnh cách mô hình ngôn ngữ ưu tiên đầu ra dựa trên ưu tiên của con người. Dưới đây là phân tích các thành phần chính:

  • Chữ ký Hàm: Hàm dpo_loss nhận vào một số tham số, bao gồm log xác suất của chính sách (pi_logps), log xác suất của mô hình tham chiếu (ref_logps), và chỉ số đại diện cho hoàn thành được ưu tiên và không được ưu tiên (yw_idxs, yl_idxs). Ngoài ra, tham số beta kiểm soát cường độ của phạt KL.
  • Trích xuất Log Xác suất: Mã trích xuất log xác suất cho hoàn thành được ưu tiên và không được ưu tiên từ cả mô hình chính sách và mô hình tham chiếu.
  • Tính toán Tỷ lệ Log: Sự khác biệt giữa log xác suất cho hoàn thành được ưu tiên và không được ưu tiên được tính toán cho cả mô hình chính sách và mô hình tham chiếu. Tỷ lệ này quan trọng trong việc xác định hướng và độ lớn của tối ưu hóa.
  • Tính toán Mất mát và Phản hồi: Mất mát được tính toán sử dụng hàm logsigmoid, trong khi phản hồi được xác định bằng cách nhân sự khác biệt giữa log xác suất của mô hình chính sách và mô hình tham chiếu với beta.
Hàm mất mát DPO sử dụng PyTorch

Hàm mất mát DPO sử dụng PyTorch

Hãy cùng khám phá toán học đằng sau DPO để hiểu nó đạt được những mục tiêu này như thế nào.

Toán học của DPO

DPO là một cách diễn đạt lại vấn đề học ưu tiên. Dưới đây là một bước phân tích:

a) Điểm xuất phát: Tối ưu hóa Phản hồi với Giới hạn KL

Mục tiêu RLHF ban đầu có thể được biểu diễn như:

Công thức toán học phức tạp trong hình ảnh tiếp theo đại diện cho hàm mất mát được sử dụng trong Tối ưu hóa Ưu tiên Trực tiếp (DPO), một phương pháp đào tạo tiên tiến giúp tinh chỉnh cách LLM căn chỉnh đầu ra với ưu tiên của con người.

Trong đó:
  • πθ là chính sách (mô hình ngôn ngữ) chúng ta đang tối ưu
  • r(x,y) là hàm phản hồi
  • πref là chính sách tham chiếu (thường là mô hình SFT ban đầu)
  • β kiểm soát cường độ của giới hạn KL

b) Hình thức Chính sách Tối ưu: Có thể chứng minh rằng chính sách tối ưu cho mục tiêu này có dạng:

π_r(y|x) = 1/Z(x) * πref(y|x) * exp(1/β * r(x,y))

Trong đó Z(x) là một hằng số chuẩn hóa.

c) Sự đối ngẫu giữa Phản hồi và Chính sách: Sự nhận xét then chốt của DPO là biểu diễn hàm phản hồi dưới dạng chính sách tối ưu:

r(x,y) = β * log(π_r(y|x) / πref(y|x)) + β * log(Z(x))

d) Giả định Mô hình Ưu tiên với giả định rằng ưu tiên tuân theo mô hình Bradley-Terry, chúng ta có thể biểu diễn xác suất ưu tiên y1 hơn y2 như:

p*(y1 ≻ y2 | x) = σ(r*(x,y1) - r*(x,y2))

Trong đó σ là hàm logistic.

e) Mục tiêu DPO Thay thế sự đối ngẫu giữa phản hồi và chính sách vào mô hình ưu tiên, chúng ta đến với mục tiêu DPO:

L_DPO(πθ; πref) = -E_(x,y_w,y_l)~D [log σ(β * log(πθ(y_w|x) / πref(y_w|x)) - β * log(πθ(y_l|x) / πref(y_l|x)))]

Mục tiêu này có thể được tối ưu hóa bằng các kỹ thuật giảm gradient tiêu chuẩn, không cần đến các thuật toán RL.

Triển khai DPO

Bây giờ chúng ta đã hiểu lý thuyết đằng sau DPO, hãy xem cách triển khai nó trong thực tế. Chúng ta sẽ sử dụng PythonPyTorch cho ví dụ này:

import torch
import torch.nn.functional as F

<p>class DPOTrainer:
def __init__(self, model, ref_model, beta=0.1, lr=1e-5):
self.model = model
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
&quot;&quot;&quot;
pi_logps: log xác suất của chính sách, hình dạng (B,)
ref_logps: log xác suất của mô hình tham chiếu, hình dạng (B,)
yw_idxs: chỉ số hoàn thành được ưu tiên trong [0, B-1], hình dạng (T,)
yl_idxs: chỉ số hoàn thành không được ưu tiên trong [0, B-1], hình dạng (T,)
beta: nhiệt độ kiểm soát cường độ của phạt KL</p>

<p>Each pair of (yw_idxs[i], yl_idxs[i]) represents the indices of a single preference pair.
&quot;&quot;&quot;</p>

<p># Extract log probabilities for the preferred and dispreferred completions
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p># Calculate log-ratios
pi_logratios = pi_yw_logps - pi_yl_logps
ref_logratios = ref_yw_logps - ref_yl_logps</p>

<p># Compute DPO loss
losses = -F.logsigmoid(self.beta * (pi_logratios - ref_logratios))
rewards = self.beta * (pi_logps - ref_logps).detach()</p>

return losses.mean(), rewards

<p>def train_step(self, batch):
x, yw_idxs, yl_idxs = batch
self.optimizer.zero_grad()</p>

<p># Compute log probabilities for the model and the reference model
pi_logps = self.model(x).log_softmax(-1)
ref_logps = self.ref_model(x).log_softmax(-1)</p>

<p># Compute the loss
loss, _ = self.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)
loss.backward()
self.optimizer.step()</p>

return loss.item()

<p># Usage
model = YourLanguageModel() # Initialize your model
ref_model = YourLanguageModel() # Load pre-trained reference model
trainer = DPOTrainer(model, ref_model)</p>

<p>for batch in dataloader:
loss = trainer.train_step(batch)
print(f&quot;Loss: {loss}&quot;)

Thử thách và Hướng đi Tương lai

Mặc dù DPO mang lại nhiều lợi thế so với các phương pháp RLHF truyền thống, vẫn còn những thách thức và lĩnh vực cần nghiên cứu thêm:

a) Khả năng mở rộng đến Các Mô hình Lớn hơn:

Khi các mô hình ngôn ngữ tiếp tục phát triển về kích thước, việc áp dụng DPO một cách hiệu quả cho các mô hình có hàng trăm tỷ tham số vẫn là một thách thức mở. Các nhà nghiên cứu đang khám phá các kỹ thuật như:

  • Phương pháp tinh chỉnh hiệu quả (ví dụ: LoRA, tinh chỉnh tiền tố)
  • Tối ưu hóa đào tạo phân tán
  • Điểm kiểm tra gradient và đào tạo chính xác hỗn hợp

Ví dụ về việc sử dụng LoRA với DPO:


<p>from peft import LoraConfig, get_peft_model</p>

<p>class DPOTrainerWithLoRA(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, lora_rank=8):
lora_config = LoraConfig(
r=lora_rank,
lora_alpha=32,
target_modules=[&quot;q_proj&quot;, &quot;v_proj&quot;],
lora_dropout=0.05,
bias=&quot;none&quot;,
task_type=&quot;CAUSAL_LM&quot;
)
self.model = get_peft_model(model, lora_config)
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p># Usage
base_model = YourLargeLanguageModel()
dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)

b) Thích nghi Đa nhiệm và Thích nghi Một lần:

Phát triển các kỹ thuật DPO có thể thích nghi hiệu quả với các nhiệm vụ mới hoặc lĩnh vực với dữ liệu ưu tiên hạn chế là một lĩnh vực nghiên cứu tích cực. Các phương pháp đang được khám phá bao gồm:

  • Khung meta-học cho thích nghi nhanh
  • Tinh chỉnh dựa trên lời nhắc cho DPO
  • Học chuyển đổi từ mô hình ưu tiên chung đến các lĩnh vực cụ thể

c) Xử lý Ưu tiên Mập mờ hoặc Mâu thuẫn:

Dữ liệu ưu tiên trong thế giới thực thường chứa sự mập mờ hoặc mâu thuẫn. Cải thiện độ bền của DPO đối với loại dữ liệu này là rất quan trọng. Các giải pháp tiềm năng bao gồm:

  • Mô hình hóa ưu tiên xác suất
  • Học chủ động để giải quyết sự mập mờ
  • Tích hợp ưu tiên đa tác nhân

Ví dụ về mô hình hóa ưu tiên xác suất:


<p>class ProbabilisticDPOTrainer(DPOTrainer):
def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob):
# Compute log ratios
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p>log_ratio_diff = pi_yw_logps.sum(-1) - pi_yl_logps.sum(-1)
loss = -(preference_prob * F.logsigmoid(self.beta * log_ratio_diff) +
(1 - preference_prob) * F.logsigmoid(-self.beta * log_ratio_diff))
return loss.mean()</p>

<p># Usage
trainer = ProbabilisticDPOTrainer(model, ref_model)
loss = trainer.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob=0.8) # 80% tin cậy vào ưu tiên

d) Kết hợp DPO với Các Kỹ thuật Căn chỉnh Khác:

Tích hợp DPO với các phương pháp căn chỉnh khác có thể dẫn đến các hệ thống mạnh mẽ và linh hoạt hơn:

  • Nguyên tắc AI Hiến pháp cho sự thỏa mãn giới hạn rõ ràng
  • Tranh luận và mô hình hóa phản hồi递归 cho việc thu thập ưu tiên phức tạp
  • Học tăng cường ngược để suy luận các hàm phản hồi cơ bản

Ví dụ về việc kết hợp DPO với AI Hiến pháp:


<p>class ConstitutionalDPOTrainer(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, constraints=None):
super().__init__(model, ref_model, beta, lr)
self.constraints = constraints or []</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
base_loss = super().compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

<p>constraint_loss = 0
for constraint in self.constraints:
constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

return base_loss + constraint_loss

<p># Usage
def safety_constraint(model, pi_logps, ref_logps, yw_idxs, yl_idxs):
# Implement logic kiểm tra an toàn
unsafe_score = compute_unsafe_score(model, pi_logps, ref_logps)
return torch.relu(unsafe_score - 0.5) # Phạt nếu điểm an toàn &gt; 0.5</p>

<p>constraints = [safety_constraint]
trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)</p>

Các Xem xét Thực tế và Phương pháp Hay nhất

Khi triển khai DPO cho các ứng dụng thực tế, hãy xem xét các mẹo sau:

a) Chất lượng Dữ liệu: Chất lượng của dữ liệu ưu tiên của bạn là rất quan trọng. Đảm bảo rằng tập dữ liệu của bạn:

  • Bao gồm một phạm vi đa dạng của đầu vào và hành vi mong muốn
  • Có các chú thích ưu tiên nhất quán và đáng tin cậy
  • Cân bằng các loại ưu tiên khác nhau (ví dụ: tính xác thực, an toàn, phong cách)

b) Tuning Siêu tham số: Mặc dù DPO có ít siêu tham số hơn RLHF, việc tinh chỉnh vẫn quan trọng:

  • β (beta): Kiểm soát sự cân bằng giữa sự thỏa mãn ưu tiên và độ phân kỳ từ mô hình tham chiếu. Bắt đầu với các giá trị trong khoảng từ 0.1 đến 0.5.
  • Tốc độ học: Sử dụng tốc độ học thấp hơn so với tinh chỉnh tiêu chuẩn, thường nằm trong khoảng từ 1e-6 đến 1e-5.
  • Kích thước lô: Các kích thước lô lớn hơn (32-128) thường hoạt động tốt cho việc học ưu tiên.

c) Sự tinh chỉnh Lặp lại: DPO có thể được áp dụng lặp lại:

  1. Đào tạo một mô hình ban đầu sử dụng DPO
  2. Tạo các phản hồi mới bằng mô hình đã được đào tạo
  3. Thu thập dữ liệu ưu tiên mới trên các phản hồi này
  4. Đào tạo lại bằng tập dữ liệu được mở rộng

 

Tối ưu hóa Ưu tiên Trực tiếp

Tối ưu hóa Ưu tiên Trực tiếp Hiệu suất

Hình ảnh này cho thấy hiệu suất của các mô hình LLM như GPT-4 so với các đánh giá của con người trên các kỹ thuật đào tạo khác nhau, bao gồm Tối ưu hóa Ưu tiên Trực tiếp (DPO), Tinh chỉnh Siêu giám sát (SFT) và Tối ưu hóa Chính sách Proximal (PPO). Bảng cho thấy đầu ra của GPT-4 ngày càng phù hợp với ưu tiên của con người, đặc biệt là trong các nhiệm vụ tóm tắt. Mức độ đồng thuận giữa GPT-4 và người đánh giá cho thấy khả năng của mô hình trong việc tạo ra nội dung phù hợp với người đánh giá, gần như giống với nội dung do con người tạo ra.

Các Nghiên cứu Trường hợp và Ứng dụng

Để minh họa hiệu quả của DPO, hãy xem một số ứng dụng thực tế và biến thể của nó:

  • DPO Lặp lại: Phát triển bởi Snorkel (2023), biến thể này kết hợp lấy mẫu từ chối với DPO, cho phép một quá trình chọn lọc tinh gọn hơn cho dữ liệu đào tạo. Bằng cách lặp lại nhiều vòng lấy mẫu ưu tiên, mô hình có thể tổng quát hóa và tránh quá拟 với các ưu tiên nhiễu hoặc thiên vị.
  • IPO (Tối ưu hóa Ưu tiên Lặp lại): Giới thiệu bởi Azar et al. (2023), IPO thêm một thuật ngữ điều chỉnh để ngăn chặn quá拟, một vấn đề phổ biến trong tối ưu hóa dựa trên ưu tiên. Sự mở rộng này cho phép mô hình duy trì sự cân bằng giữa tuân thủ ưu tiên và khả năng tổng quát hóa.
  • KTO (Tối ưu hóa Chuyển giao Kiến thức): Một biến thể mới hơn từ Ethayarajh et al. (2023), KTO loại bỏ hoàn toàn ưu tiên nhị phân. Thay vào đó, nó tập trung vào việc chuyển giao kiến thức từ mô hình tham chiếu sang mô hình chính sách, tối ưu hóa cho sự căn chỉnh mượt mà và nhất quán hơn với giá trị của con người.
  • DPO Đa phương thức cho Học chéo miền bởi Xu et al. (2024): Một cách tiếp cận trong đó DPO được áp dụng trên nhiều phương thức—văn bản, hình ảnh và âm thanh—đемонstrating sự linh hoạt của nó trong việc căn chỉnh mô hình với ưu tiên của con người trên nhiều loại dữ liệu khác nhau. Nghiên cứu này nhấn mạnh tiềm năng của DPO trong việc tạo ra các hệ thống AI toàn diện hơn, có khả năng xử lý các nhiệm vụ phức tạp và đa phương thức.

Kết luận

Tối ưu hóa Ưu tiên Trực tiếp đại diện cho một bước tiến quan trọng trong việc căn chỉnh các mô hình ngôn ngữ với ưu tiên của con người. Sự đơn giản, hiệu quả và hiệu quả của nó làm cho nó trở thành một công cụ mạnh mẽ cho cả nhà nghiên cứu và người thực hành.

Bằng cách tận dụng sức mạnh của Tối ưu hóa Ưu tiên Trực tiếp và tuân theo các nguyên tắc này, bạn có thể tạo ra các mô hình ngôn ngữ không chỉ thể hiện khả năng ấn tượng mà còn phù hợp chặt chẽ với giá trị và ý định của con người.

Tôi đã dành 5 năm qua để đắm mình trong thế giới hấp dẫn của Máy học và Học sâu. Đam mê và chuyên môn của tôi đã dẫn tôi đến việc đóng góp vào hơn 50 dự án kỹ thuật phần mềm đa dạng, với sự tập trung đặc biệt vào AI/ML. Sự tò mò liên tục của tôi cũng đã thu hút tôi đến với Xử lý Ngôn ngữ Tự nhiên, một lĩnh vực tôi渴望 khám phá thêm.