Có một "bữa trưa miễn phí" để tinh chỉnh mô hình lớn, trong đó một dòng mã duy nhất có thể cải thiện hiệu suất ít nhất 10%.
Thậm chí còn có hiệu suất tăng gấp đôi trên Llama 2 với các thông số 7B và Mistral cũng tăng một phần tư.
Mặc dù phương pháp này được sử dụng trong giai đoạn tinh chỉnh có giám sát, các mô hình RLHF cũng có thể được hưởng lợi từ nó.
来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Phương pháp tinh chỉnh.
Đây là một kỹ thuật chính quy hóa mới có thể được sử dụng để cải thiện hiệu suất của các mô hình được giám sát tinh chỉnh (SFT).
Phương thức này đã được HuggingFace đưa vào thư viện TRL và có thể được gọi bằng cách thêm một dòng mã bổ sung để nhập.
NEFT không chỉ dễ vận hành mà còn không làm tăng thêm chi phí đáng kể và các tác giả gọi đó là "bữa trưa miễn phí".
Một số cư dân mạng đã cố gắng tinh chỉnh Mistral-7B dựa trên Guanaco (một mô hình của gia đình alpaca) theo cách này, và sự cải thiện hiệu suất là rõ ràng.
Vậy, làm thế nào để NEFTune "đổ máu" một số lượng lớn các mô hình lớn chỉ với một dòng mã?
Thêm tiếng ồn vào mô hình
Tên đầy đủ của NEFTune là Noisy Embedding Fine Tuning, viết tắt của "Embedded Tuning with Noise".
Các nhà phát triển tin rằng overfitting là một yếu tố chính hạn chế hiệu suất của các mô hình lớn, vì vậy phương pháp thêm tiếng ồn vào lớp nhúng trong giai đoạn đào tạo được áp dụng để tránh xảy ra overfitting, do đó cải thiện hiệu suất.
Cụ thể, văn bản trong cơ sở dữ liệu đào tạo trước tiên được mã hóa và chuyển đổi thành một vectơ nhúng.
Sau đó, hệ thống tạo ngẫu nhiên một vectơ nhiễu và điều chỉnh tiếng ồn đến cường độ cài đặt bằng bộ chia tỷ lệ.
Tiếng ồn được chia tỷ lệ được thêm vào vectơ nhúng làm đầu vào cho mô hình và quá trình đào tạo bắt đầu.
Với mỗi lần lặp lại đào tạo, tiếng ồn mới được tạo ra và thêm vào lớp nhúng.
từ torch.nn import chức năng như F
def NEFTune (mô hình, noise_alpha = 5)
Def noised_embed(orig_embed, noise_alpha):
Định nghĩa new_func (x):
Nếu model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(dims)
embed_init trả về + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
khác:
trả về orig_embed(x)
new_func trả lại
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Mô hình trả lại
Trong mã này, tham số noise_alpha trong hàm NEFTune là cường độ nhiễu (hệ số) và mag_norm là phạm vi nhiễu trong quá trình thực tế.
NEFT chỉ thêm nhiễu vào mô hình trong quá trình đào tạo và không có quá trình nào như vậy trong giai đoạn suy luận và câu lệnh if trong mã đóng vai trò này.
Trong chế độ đào tạo, giá trị trả về của hàm new_func là lớp nhúng sau khi thêm nhiễu.
Mã này được đăng để giải thích sự cần thiết, nếu bạn chỉ muốn gọi NEFT, bạn có thể gọi nó trực tiếp từ thư viện TRL mà không cần sử dụng mã hoàn chỉnh ở trên.
Mã sau đây là một ví dụ về tinh chỉnh mô hình OPT-350M:
từ bộ dữ liệu nhập load_dataset
từ trl nhập SFTTrainer
Tập dữ liệu = load_dataset("imdb", split = "train")
Về bộ dữ liệu, các nhà phát triển đã sử dụng tổng cộng bốn bộ dữ liệu khác nhau như Alpaca và ShareGPT để tinh chỉnh chúng.
Theo các tác giả, lý do để chọn những dữ liệu này bao gồm chúng nổi tiếng hơn, đã được SOTA, v.v.
Ngoài ra, do cân nhắc hiệu suất phần cứng, các bộ dữ liệu đối thoại một vòng đã được chọn trong quá trình thử nghiệm.
Vì vậy, mô hình lớn hoạt động như thế nào sau khi điều chỉnh bằng phương pháp NEFT?
** Hiệu suất tốt hơn tới 1 lần**
Nhóm nghiên cứu chủ yếu kiểm tra chất lượng văn bản và khả năng đối thoại được tạo ra trước và sau khi điều chỉnh mô hình.
Chất lượng tiếng Trung của nó chủ yếu dựa trên bộ dữ liệu Apalca, được đánh giá bằng ChatGPT và GPT-4.
Mô hình được sử dụng làm tài liệu tham khảo là Text-Davinci-003 và tỷ lệ của mô hình được đào tạo vượt trội hơn TD3 là chỉ số đánh giá.
Để tiết kiệm tài nguyên, nhóm nghiên cứu trước tiên đã sử dụng ChatGPT để xác định xem nên tự đánh giá hay gọi GPT-4 và trong một số trường hợp được đánh giá thủ công.
Kết quả Trong các bộ dữ liệu đào tạo khác nhau, Llama 2 có hiệu suất cải thiện ít nhất 10% sau khi điều chỉnh và nó được tăng gấp đôi trực tiếp trên tập dữ liệu Alpaca.
Được triển khai cho OPT và Llama 1, phương pháp NEFT cũng có thể mang lại một số cải tiến về hiệu suất.
Nhiệm vụ được sử dụng để đánh giá khả năng trò chuyện của mô hình là OpenLLM Leadorboard.
Người ta thấy rằng khả năng trò chuyện của mô hình điều chỉnh NEFT cũng được cải thiện hơn nữa so với Evol-Instruct.
Các tác giả cũng đánh giá liệu việc cải thiện chất lượng văn bản và khả năng trò chuyện mà không làm tăng đáng kể chi phí sẽ dẫn đến sự suy giảm các khả năng khác.
Kết quả cho thấy phương pháp NEFT không có ảnh hưởng đáng kể đến các khả năng khác của mô hình trên các bộ dữ liệu và mô hình khác nhau.
Trong quá trình thử nghiệm, các tác giả cũng phát hiện ra rằng văn bản được tạo ra bởi mô hình không sao chép dữ liệu đào tạo, cho thấy mô hình có khả năng khái quát hóa nhất định.
Để xác nhận điều này, các tác giả đã đánh giá tổn thất mô hình và thấy rằng tổn thất tập dữ liệu thử nghiệm thấp hơn dữ liệu đào tạo, xác nhận quan điểm này.
Ngoài ra, các tác giả nhận thấy rằng sau khi điều chỉnh NEFT, văn bản do mô hình tạo ra không chỉ tăng chất lượng và độ dài mà còn tăng nội dung mà không lặp lại.
Để xác nhận rằng sự cải thiện chất lượng văn bản là do thêm nhiễu chứ không phải do tăng độ dài văn bản, các nhà nghiên cứu cũng đã thực hiện các thí nghiệm cắt bỏ.
Kết quả cho thấy chỉ cần buộc mô hình tạo ra văn bản dài hơn không thể đạt được hiệu quả của NEFT.
Địa chỉ giấy:
Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
Một dòng mã cải thiện hiệu suất mô hình lớn lên 10%, nhà phát triển: bữa trưa miễn phí
Nguồn gốc: Qubits
Có một "bữa trưa miễn phí" để tinh chỉnh mô hình lớn, trong đó một dòng mã duy nhất có thể cải thiện hiệu suất ít nhất 10%.
Thậm chí còn có hiệu suất tăng gấp đôi trên Llama 2 với các thông số 7B và Mistral cũng tăng một phần tư.
Mặc dù phương pháp này được sử dụng trong giai đoạn tinh chỉnh có giám sát, các mô hình RLHF cũng có thể được hưởng lợi từ nó.
Đây là một kỹ thuật chính quy hóa mới có thể được sử dụng để cải thiện hiệu suất của các mô hình được giám sát tinh chỉnh (SFT).
NEFT không chỉ dễ vận hành mà còn không làm tăng thêm chi phí đáng kể và các tác giả gọi đó là "bữa trưa miễn phí".
Thêm tiếng ồn vào mô hình
Tên đầy đủ của NEFTune là Noisy Embedding Fine Tuning, viết tắt của "Embedded Tuning with Noise".
Các nhà phát triển tin rằng overfitting là một yếu tố chính hạn chế hiệu suất của các mô hình lớn, vì vậy phương pháp thêm tiếng ồn vào lớp nhúng trong giai đoạn đào tạo được áp dụng để tránh xảy ra overfitting, do đó cải thiện hiệu suất.
Sau đó, hệ thống tạo ngẫu nhiên một vectơ nhiễu và điều chỉnh tiếng ồn đến cường độ cài đặt bằng bộ chia tỷ lệ.
Tiếng ồn được chia tỷ lệ được thêm vào vectơ nhúng làm đầu vào cho mô hình và quá trình đào tạo bắt đầu.
Với mỗi lần lặp lại đào tạo, tiếng ồn mới được tạo ra và thêm vào lớp nhúng.
từ torch.nn import chức năng như F
def NEFTune (mô hình, noise_alpha = 5)
Def noised_embed(orig_embed, noise_alpha):
Định nghĩa new_func (x):
Nếu model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(dims)
embed_init trả về + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
khác:
trả về orig_embed(x)
new_func trả lại
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Mô hình trả lại
Trong mã này, tham số noise_alpha trong hàm NEFTune là cường độ nhiễu (hệ số) và mag_norm là phạm vi nhiễu trong quá trình thực tế.
NEFT chỉ thêm nhiễu vào mô hình trong quá trình đào tạo và không có quá trình nào như vậy trong giai đoạn suy luận và câu lệnh if trong mã đóng vai trò này.
Trong chế độ đào tạo, giá trị trả về của hàm new_func là lớp nhúng sau khi thêm nhiễu.
Mã này được đăng để giải thích sự cần thiết, nếu bạn chỉ muốn gọi NEFT, bạn có thể gọi nó trực tiếp từ thư viện TRL mà không cần sử dụng mã hoàn chỉnh ở trên.
Mã sau đây là một ví dụ về tinh chỉnh mô hình OPT-350M:
từ bộ dữ liệu nhập load_dataset
từ trl nhập SFTTrainer
Tập dữ liệu = load_dataset("imdb", split = "train")
huấn luyện viên = SFTTrainer(
"Facebook / OPT-350M",
train_dataset=tập dữ liệu,
dataset_text_field="văn bản",
max_seq_length=512,
)
huấn luyện viên.train()
Về bộ dữ liệu, các nhà phát triển đã sử dụng tổng cộng bốn bộ dữ liệu khác nhau như Alpaca và ShareGPT để tinh chỉnh chúng.
Theo các tác giả, lý do để chọn những dữ liệu này bao gồm chúng nổi tiếng hơn, đã được SOTA, v.v.
Ngoài ra, do cân nhắc hiệu suất phần cứng, các bộ dữ liệu đối thoại một vòng đã được chọn trong quá trình thử nghiệm.
Vì vậy, mô hình lớn hoạt động như thế nào sau khi điều chỉnh bằng phương pháp NEFT?
** Hiệu suất tốt hơn tới 1 lần**
Nhóm nghiên cứu chủ yếu kiểm tra chất lượng văn bản và khả năng đối thoại được tạo ra trước và sau khi điều chỉnh mô hình.
Chất lượng tiếng Trung của nó chủ yếu dựa trên bộ dữ liệu Apalca, được đánh giá bằng ChatGPT và GPT-4.
Mô hình được sử dụng làm tài liệu tham khảo là Text-Davinci-003 và tỷ lệ của mô hình được đào tạo vượt trội hơn TD3 là chỉ số đánh giá.
Để tiết kiệm tài nguyên, nhóm nghiên cứu trước tiên đã sử dụng ChatGPT để xác định xem nên tự đánh giá hay gọi GPT-4 và trong một số trường hợp được đánh giá thủ công.
Kết quả Trong các bộ dữ liệu đào tạo khác nhau, Llama 2 có hiệu suất cải thiện ít nhất 10% sau khi điều chỉnh và nó được tăng gấp đôi trực tiếp trên tập dữ liệu Alpaca.
Người ta thấy rằng khả năng trò chuyện của mô hình điều chỉnh NEFT cũng được cải thiện hơn nữa so với Evol-Instruct.
Kết quả cho thấy phương pháp NEFT không có ảnh hưởng đáng kể đến các khả năng khác của mô hình trên các bộ dữ liệu và mô hình khác nhau.
Để xác nhận điều này, các tác giả đã đánh giá tổn thất mô hình và thấy rằng tổn thất tập dữ liệu thử nghiệm thấp hơn dữ liệu đào tạo, xác nhận quan điểm này.
Để xác nhận rằng sự cải thiện chất lượng văn bản là do thêm nhiễu chứ không phải do tăng độ dài văn bản, các nhà nghiên cứu cũng đã thực hiện các thí nghiệm cắt bỏ.
Kết quả cho thấy chỉ cần buộc mô hình tạo ra văn bản dài hơn không thể đạt được hiệu quả của NEFT.