Trong bài đăng này, tôi sẽ trình bày chi tiết và nguyên tắc của phương pháp LoRA (Low-Rank Adaptation Of Large Language Models), đồng thời phân tích bài báo . Trọng tâm chính của bài báo là đưa ra một cấu trúc mới giúp giảm chi phí tinh chỉnh mô hình trong khi vẫn tăng hiệu suất của nó. Các thao tác tinh chỉnh đã đóng vai trò quan trọng trong nghiên cứu xử lý ngôn ngữ tự nhiên trong một thời gian dài. Giả sử bạn có một mô hình đã được huấn luyện và muốn mở rộng kiến thức của nó. Bạn có thể thực hiện điều đó bằng cách tinh chỉnh, mà không cần huấn luyện lại mô hình từ đầu.
Giả sử một mô hình có n tham số sau khi đào tạo và bạn cần tinh chỉnh nó. Nếu bạn sử dụng phương pháp tinh chỉnh đầy đủ, tất cả các tham số của mô hình sẽ được cập nhật. Khi chúng ta xem xét các mô hình có hàng tỷ tham số, việc cập nhật tất cả các tham số sẽ tạo ra các vấn đề về thời gian và lưu trữ. Trong bài báo, kết quả hiệu suất tốt hơn hoặc ngang bằng được nhấn mạnh đối với các mô hình RoBERTa, DeBERTa, GPT-2 và GPT-3 bằng cách sử dụng phương pháp LoRA.
Bài báo đề cập rằng phương pháp LoRA lấy cảm hứng từ các nghiên cứu của Li et. al (2018a) và Aghajanyan et al. (2020). Các nghiên cứu này nhấn mạnh rằng thành công của các mô hình tham số hóa quá mức thực sự dựa trên chiều nội tại thấp. Đây trở thành điểm định hình nên giả thuyết của phương pháp LoRA.
Phương pháp LoRA là một nghiên cứu hoàn toàn dựa trên phân tích thứ hạng. Trong phương pháp này, hai ma trận tuần tự được thêm song song vào một số lớp dày đặc trong mạng nơ-ron như thể hiện trong Hình 1. Các ma trận tuần tự này được hình thành bởi một cấu hình thứ hạng nhất định. Hình bên dưới cho thấy một lớp dày đặc trông như thế nào sau khi thêm các ma trận thứ hạng tuần tự. Các biến đầu vào được gửi qua cả ma trận trọng số tiền huấn luyện ban đầu và ma trận đầu tiên của các ma trận tuần tự. Sau đó, các giá trị đầu ra được tính bằng cách cộng các đầu ra của hai ma trận song song này.

Phương pháp LoRA
Mạng nơ-ron có nhiều lớp dày đặc thực hiện phép nhân ma trận. Các ma trận trọng số trong các lớp này thực chất là các ma trận có hạng đầy đủ (tất cả các hàng và cột đều độc lập). Nhưng Aghajanyan và cộng sự đã đề cập trong bài báo của họ rằng các mô hình ngôn ngữ được huấn luyện trước có "chiều nội tại" thấp. Điều này đã hình thành giả thuyết LoRA trong khía cạnh này. Vì vậy, giả thuyết LoRA trở thành rằng các mô hình có thể học với những thay đổi có chiều thấp trong ma trận trọng số trong quá trình thích ứng với một nhiệm vụ cụ thể.
Các bản cập nhật cho ma trận này được thực hiện thông qua các ma trận

được phân tách bằng hạng thấp. Ở đây, B là ma trận dxr, A là ma trận rxk, trong khi r (hạng) nhỏ hơn nhiều so với d và k. Trong quá trình tinh chỉnh, các bản cập nhật gradient cho Wo bị ngăn chặn. Cả ma trận Wo và ∆W đều được nhân với cùng các giá trị đầu vào và kết quả được cộng lại và đầu ra h= w0 + ∆Wx = w0 +BAx được hình thành.
Khi bắt đầu quá trình đào tạo, họ sử dụng khởi tạo Gauss ngẫu nhiên cho các giá trị ma trận A và khởi tạo bằng không hoàn toàn cho các giá trị ma trận B. Nói cách khác, BA bằng không lúc ban đầu.
Ứng dụng LoRA trong kiến trúc máy biến áp
Có 4 ma trận trọng số Wq, Wk, Wv, Wo trong mô-đun tự chú ý và 2 ma trận trọng số trong mô-đun MLP trong kiến trúc máy biến áp. Trong quá trình điều chỉnh LoRA, họ đã đóng băng các trọng số trong mô-đun MLP và áp dụng phương pháp này vào các trọng số chú ý để giữ cho quá trình đào tạo được đơn giản.
Ưu điểm
- Tiện ích lớn nhất mà LoRA cung cấp là sử dụng bộ nhớ và lưu trữ. Ví dụ, trong bài viết, có đề cập rằng đối với mô hình máy biến áp lớn được đào tạo bằng Adam, mức sử dụng VRAM giảm tới 2/3 nếu << r d. Điều này là do trạng thái tối ưu hóa không được giữ lại cho các tham số đóng băng.
- Đối với mẫu GPT-3 175B, mức tiêu thụ VRAM giảm từ 1.2TB xuống 350GB.
- Trong trường hợp r=4 và chỉ có trọng số của ma trận giá trị và truy vấn được thay đổi, kích thước điểm kiểm tra được giảm từ 350GB xuống 35MB. Điều này cho phép thực hiện đào tạo với ít GPU hơn.
- Ngoài ra, vì không có cập nhật độ dốc trong hầu hết các tham số nên đã đạt được tốc độ tăng tốc 25% khi đào tạo GPT-3 175B bằng LoRA so với quy trình tinh chỉnh hoàn chỉnh.
Bài viết cũng đề cập rằng nếu cần quá trình tinh chỉnh cho một ngôn ngữ khác thì nên sử dụng toàn bộ mô hình thay vì LoRA.
Kiến thức bổ sung
Xếp hạng là gì
Hạng của ma trận là tổng số cột hoặc hàng độc lập tuyến tính của một ma trận. Giả sử ta có một ma trận với n cột và tất cả các cột đều độc lập với nhau, thì ta có thể nói rằng hạng cột của ma trận này là n. Tương tự, nếu tất cả các hàng của một ma trận với n hàng đều độc lập với nhau, thì ta có thể nói rằng hạng hàng của ma trận này là n.
Hạng hàng và hạng cột của ma trận phải bằng nhau. Ví dụ, chúng ta có thể xem ma trận bên dưới.
Ma trận A = [[1,2,5], [ 2, 4, 10] ]
Nếu chúng ta xem xét ma trận một cách cẩn thận, chúng ta có thể thấy rằng hàng thứ 2 gấp đôi hàng thứ 1. Tương tự như vậy, cột thứ 2 và thứ 3 của ma trận lần lượt gấp 2 và 5 lần cột thứ 1. Nói cách khác, trong khi có hai vectơ trên cùng một dòng trên cơ sở hàng trong ma trận và ba vectơ khác nhau trên một dòng khác trên cơ sở cột, thì chỉ có một vectơ duy nhất trên mỗi hàng và mỗi cột. Điều này có nghĩa là hạng của ma trận là 1.
Để tìm thứ hạng, chúng ta chuyển đổi ma trận sang dạng bậc thang, sau đó tính toán số hàng bao gồm ít nhất một giá trị khác không.
Ma trận thứ hạng thấp là gì
Trong ma trận, hạng có thể bằng hoặc nhỏ hơn số cột hoặc hàng. Ma trận có số hàng hoặc cột độc lập tuyến tính nhỏ hơn số hàng hoặc cột hiện tại được gọi là ma trận hạng thấp. Ma trận mà tất cả các hàng hoặc cột đều độc lập được gọi là ma trận hạng đầy đủ.
Phân tích/Phân rã thứ hạng là gì
Ta có thể viết lại ma trận có hạng r thành B=LR^T bằng cách phân rã nó thành các ma trận L và R. Ở đây, L là ma trận có kích thước mxr, trong khi R^T là ma trận có kích thước rxn. Quá trình này được gọi là phân rã hạng.
Tầm quan trọng của Phân tích thứ hạng:
Tầm quan trọng của quá trình phân tích ma trận theo hạng là nó cho phép ta chia một ma trận lớn thành các ma trận nhỏ hơn, L và R, và lưu trữ chúng trong ít không gian hơn. Điều này có nghĩa là bạn có thể lưu trữ ma trận B bằng cách lưu trữ các thừa số L và R của nó. Điều này làm giảm yêu cầu lưu trữ của B xuống còn (m+n)r số từ mn số. Một điểm đáng chú ý khác ở đây là sau khi phân rã một ma trận thành hai ma trận nhỏ này, nó cho phép thực hiện nhiều phép tính trên ma trận mà không cần tạo lại chính ma trận đó. Vì lý do này, khi xử lý một ma trận có hạng thấp, phân tích ma trận theo hạng luôn được coi là bước đầu tiên quan trọng. Sau khi phân tích ma trận theo hạng, các phép tính có thể được thực hiện nhanh hơn nhiều và sử dụng ít bộ nhớ hơn.
Hơn nữa
Để biết thêm thông tin chi tiết về ma trận hạng thấp, bạn có thể đọc blog và bài báo LoRA của Ethan R. Epperly . Ngoài ra, bạn có thể xem xét chi tiết các ứng dụng dựa trên mã của LoRA trên kho lưu trữ github microsoft/LoRA.
Gizem ABALI, MSc. / Trưởng nhóm