Tại sao mô hình LLAMA lại sử dụng SwiGLU (Swish-Gated Linear Unit)
Trong bài báo của LLAMA - Open and Efficient Foundation Language Models, một số cải thiện của kiến trúc mô hình so với kiến trúc Transformer thông thường đó chính là hàm activation SwiGLU.
Thay vì sử dụng hàm phi tuyến ReLU như trong bài báo của Transformer thì tác giả sử dụng SwiGLU. Bây giờ chúng ta sẽ giải đáp vì sao LLAMA lại dùng activation này.
Rõ ràng hàm phi tuyến hay được gọi là hàm activation giúp cho mô hình có thể học được những đường cong để xấp xỉ các phân phối dữ liệu phức tạp.
Cấu thành của hàm activation SwiGLU là sự nâng cấp của 2 thành phần:
Hàm activation GLU
Hàm activation Swish
1) GLU - Gated Linear Units
Công thức của GLU:
Cơ chế theo cổng phần nào bạn có thể liên tưởng đến cổng trong mô hình LSTM khi cho phép các cơ chế thu nhận/bỏ thông tin có kiểm soát khi mô hình tính toán. Ví dụ khi đào tạo một câu dài trong ngôn ngữ tự nhiên:
Ví dụ câu:
Anh ấy tên Ngọc rất thích trèo cây, đánh đu, chơi piano và mặc _____??
Nhiệm vụ mô hình phải lưu trữ được thông tin ở đầu câu ví dụ từ Anh để có thể điền vào chỗ trống là từ vest thay vì từ váy.
Mô hình hoàn toàn có thể loại bỏ thông tin như rất thích trèo cây vì cho dù nam hoặc nữ đều có thể có sở thích này.
Việc kiểm soát tiếp nhận thông tin bao nhiêu phần % thường được sử dụng thông qua hàm sigmoid vì điều đặc biệt là hàm này sẽ có đầu ra là những giá trị nằm trong đoạn [0, 1] - một cách nôm na, nếu đầu hàm sigmoid này trả về 0.8 tức là ta chỉ cho phép sử dụng 80% thông tin của đầu vào x. Ngoài ra thì sigmoid(Wx+b) là một mạng nơ ron không lớp ẩn có thể học được W và b, một lần nữa tăng việc lựa chọn nơ ron và thông tin nơ ron hữu ích cho hàm mục tiêu của bài toán.
2) Swish activation
Hàm activation Swish cũng gần như tương tự với hàm GELU tuy nhiên tham số để học chỉ còn duy nhất tham số beta.
Mục tiêu vẫn là kiểm soát thông tin đầu vào. Thực nghiệm cho thấy hàm activation này cho khả năng hội tụ tốt hơn so với các hàm activation thông thường như RELU.
3) Kết hợp Swish và GLU ta có SwiGLU.
SwiGLU nổi tiếng khi được sử dụng trong mô hình ngôn ngữ lớn PALM và LLAMA. Trong kiến trúc của mô hình LLAMA thì SwishGLU là một trong 3 điểm cải tiến Meta sử dụng để đào tạo mô hình ngôn ngữ lớn tương tự họ GPT của OpenAI.
SwiGLU tạo ra một sự phối hợp phức tạp hơn GLU và Swish bằng việc cho thêm bộ tham số học được bao gồm bộ W và b và bộ V, c giúp tăng khả năng của hàm activation, hay nói cách khác sẽ học được nhiều hơn việc sử dụng đầu vào x. Việc thêm bộ tham số để học xảy ra thông thường trong học sâu.
Tuy nhiên cơ chế cổng vẫn là cốt lõi làm nên thành công của hàm activation này.
4) Thực nghiệm hiệu năng của SwiGLU
Theo bài báo GLU Variants Improve Transformer,
Với bài toán segment-filling thì hàm activation này cho điểm Perplexity là thấp nhất.
Perplexity là thang đo hiệu quả của một mô hình ngôn ngữ. Perplexity càng thấp thì model càng có chất lượng cao.
Rõ ràng ta nhận thấy trong một số bài toán của GLUE Language-Understanding Benchmark thì SwiGLU có kết quả tốt nhất, đây cũng chính là lý do hàm này được tác giả của LLAMA lựa chọn.
5) Một số ưu thế của hàm activation này
Cơ chế cổng lựa chọn thông tin giúp cho mô hình có khả năng lựa chọn các nơ ron có đóng góp cao cho kết quả của bài toán
Trái với RELU là hàm đơn điệu, SwiGLU là hàm không đơn điệu cho phép mô hình xấp xỉ được các quan hệ phi tuyến phức tạp
Ngoài ra thì hàm này làm cho bề mặt đồ thị hàm mất mát mịn hơn làm tăng khả năng hội tụ của mô hình.
Trên đây là cách SwiGLU hoạt động và các lý do để hàm này được sử dụng nhiều hơn trong các bài toán AI gần đây.
Nguồn tham khảo:
Ngày hôm nay OpenAI đã công bố API gpt-3.5-turbo, model sử dụng trên production của ChatGPT với chi phí rẻ hơn 10 lần.

Team đã thử API và đây là kết quả
Input
Người hỏi: Nước nào đầu tiên đưa người lên vũ trụ? ChatGPT: Liên Xô (nay là Nga) là nước đầu tiên đưa người lên vũ trụ vào ngày 12 tháng 4 năm 1961 với phi hành gia Yuri Gagarin. Người hỏi: Còn nước thứ hai? ChatGPT: Hoa Kỳ là nước thứ hai đưa người lên vũ trụ vào ngày 5 tháng 5 năm 1961 với phi hành gia Alan Shepard. Người hỏi: Vậy còn nước thứ 3? Nước thứ 3 đưa người lên vũ trụ là Trung Quốc vào ngày 15 tháng 10 năm 2003 với phi hành gia Yang Liwei.
Kết quả tốt hơn rất nhiều so với mô hình GPT text-davinci-003 công bố trước.

Sử dụng bằng cách gọi API.

Dự đoán hạ tầng cần triển khai ChatGPT

Trong sự kiện Hướng dẫn đưa ChatGPT vào sản phẩm tuần trước có một câu hỏi rất hay đó là:
Thế để triển khai được mô hình ChatGPT thì phần cứng như thế nào ạ? Và triển khai như thế nào ạ?
Một câu hỏi rất hay, mặc dù OpenAI không hề công bố các kỹ thuật và hạ tầng này, dựa trên kinh nghiệm về triển khai mô hình GPT-2 trên Studio., team xin dự đoán một số kỹ thuật như sau?
1) Dự đoán kích cỡ mô hình của ChatGPT.
GPT-3 có 175 tỷ param, nếu mỗi param lưu trữ Float-16, quy ra kích cỡ
và theo chi tiết OpenAI công bố thì ChatGPT sử dụng GPT 3.5 khác GPT 3 ở chỗ OpenAI đưa học tăng cường với feedback của con người (RLHF) vào để finetune lại mô hình. Một số tin ngoài cho hay mô hình dao động trong khoảng 350GB đến 800GB.
Với kích cỡ như vậy, với một card đồ họa (GPU) thuộc loại thương mại mạnh mẽ nhất như bây giờ - A100 với 80GB RAM không thể chứa được mô hình này trong riêng một GPU.
2) Đưa mô hình để phục vụ người dùng
Trong trường hợp kích cỡ mô hình lớn hơn RAM của một GPU, nhưng không có nghĩa là chúng ta bó tay.
Giả sử chúng ta sẽ sử dụng 10 GPU A100 tương đương với không gian bộ nhớ là và với không gian này ta sẽ chứa đủ mô hình bên trên.
Sau đó ta sẽ chia mô hình thành 10 phần tương ứng cho 10 GPU mỗi GPU sẽ làm việc với một phần. Cơ chế này trong tiếng anh gọi là checkpoint shards
.

Việc chia này không hề phức tạp với ChatGPT khi mô hình chỉ dùng gia tăng số lượng layer của Transformer Decoder
Việc tính toán sẽ tuần tự từ A100 đầu tiên cho đến A100 cuối. Tất nhiên nếu chỉ sử dụng 10 A100 một lúc thì với kích cỡ mô hình như vậy thì team dự đoán chỉ phục vụ được từ 5-15 người và còn cất rất nhiều kỹ thuật khác để tối ưu.
Một số thư viện AI đã hỗ trợ việc checkpoint shards
ví dụ như HuggingFace
3) Scale hệ thống
Trước mắt để hiểu phần này bạn cần biết về Docker và cách đưa một mô hình AI vào trong Docker.
Bên trên chúng ta mới chỉ nhắc đến việc phục vụ được số lượng người dùng nhỏ, vậy với 100 triệu người dùng sau 2 tháng, chúng ta cần hệ thống như thế nào để có thể nhân rộng linh hoạt:
- Gia tăng GPUs khi người dùng tăng lên
- Giảm lượng GPUs khi người dùng ít dùng đi
Để scaling hiệu quả, thì team dự đoán có thể Kubernetes là một sự lựa chọn tốt.

Ở đây Một Cluster sẽ có nhiều Node Pool, mỗi Node Pool sẽ có nhiều Node, ta có thể sử dụng mỗi node là một A100 và trong một pool có ít nhất là 10 Node.
Sau đó ta sẽ scale Node Pool trong cluster theo mong muốn trên.
Những đánh giá này hoàn toàn dựa trên kinh nghiệm của ProtonX team và không phải do OpenAI công bố tuy nhiên team hi vọng có thể cho bạn một số cái nhìn khả dụng về thiết kế hệ thống AI lớn như vậy.
Học được nhiều điều hay ho tương tự ở lớp học MLEs - Scale ML System 02.
Một số lầm tưởng tai hại về ChatGPT?
Chúng ta đang chứng kiến một kỷ nguyên mở cho phép tất cả có thể nói lên quan điểm của mình, đây là bước tiến vô cùng văn minh của nhân loại.
Tuy nhiên mặt trái của vấn đề này đó là có khả năng những thông tin được đưa ra có tính chính xác không cao, và sự không chính xác này lại dễ dàng được lan truyền hơn thông tin chính xác.
Ví dụ điển hình gần đây khi ChatGPT ra đời, được đón nhận thì phong trào hội chứng sợ bỏ lỡ (FOMO) lại dậy sóng. Nhiều người cho rằng AI sẽ xâm chiếm thế giới và ChatGPT sẽ làm mất việc của nhiều người. Điều này không đúng. Có thể ở một mức độ nào đó, những việc đơn giản được tự động hóa bởi ChatGPT nhưng trên mức độ làm biến mất một ngành thì một lần nữa câu trả lời là Không. Một số câu hỏi nữa mà team có câu trả lời cho bạn:
-
ChatGPT thay thế hoàn toàn được con người hay không?
- Câu trả lời: Hiện tại là không, và còn rất lâu nữa.
-
ChatGPT thay thế được bác sĩ không?
- Câu trả lời: Chắc chắn là không. Mô hình chatGPT là mô hình xác suất nên sẽ không thể chính xác 100%. Rất nguy hiểm khi sử dụng ChatGPT cho những ngành nghề yêu cầu tính chính xác cao.
-
Ngành nghề nào sẽ mất đi vì ChatGPT?
- Câu trả lời: Không ngành nghề nào bị mất đi thậm chí nhiều ngành mới được sinh ra. Ví dụ tư vấn viên sử dụng ChatGPT hiệu quả.
-
Vậy lợi ích của việc sử dụng ChatGPT?
- Câu trả lời: ChatGPT sẽ giúp bạn hoàn thành những công việc lặp đi lặp lại. Để bạn dành thời gian tập trung vào những công việc sáng tạo, đem lại nhiều giá trị cho xã hội.
Sự thổi phồng AI như thế này đã được giáo sư Michael I. Jordan - hướng dẫn tiến sỹ cho Andrew Ng nhắc đến như sau:
“People are getting confused about the meaning of AI in discussions of technology trends—that there is some kind of intelligent thought in computers that is responsible for the progress and which is competing with humans,” he says. “We don’t have that, but people are talking as if we do.”

Đại ý rằng khi một công nghệ AI được nói đến, cộng đồng luôn cho rằng nó tiên tiến hơn thực tế.
Tất nhiên chúng ta không thể phủ nhận sự đột phá của ChatGPT ở ba điểm:
- Đầu tiên, rất ít công ty trên thế giới như OpenAI có đủ nguồn lực tập trung dữ liệu + tài nguyên tính toán để xây dựng được mô hình lớn như vậy (Với GPT3 là 175 tỷ tham số tương đương 350GB) và họ đã làm được.
- Thứ hai, họ rất thông minh trong việc biến việc truy vấn thông tin thông thường thành dưới dạng hội thoại vì họ biết rằng nếu mô hình GPT chỉ trả lời duy nhất một câu, thì khi mô hình trả lời sai sẽ làm người dùng thất vọng và bỏ đi.
- Họ lồng ghép việc chỉ sử dụng dữ liệu lấy về từ internet với dữ liệu họ thuê người đánh nhãn, điều này giúp giảm rủi ro mô hình AI sinh ra những kết quả độc hại.
Đọc thêm chi tiết về cách thức họ xây dựng mô hình tại đây.
Hi vọng bài viết này sẽ giúp bạn có sự lựa chọn đúng đắn khi tiếp cận thông tin.
Ước lượng giá trị mất mát tối ưu dựa vào số lượng tham số
1) Khi bạn làm việc đủ lâu với một mô hình, bạn sẽ nắm được rất nhiều thông số quan trọng để tăng tốc trong những lần training tiếp theo
Có một điều rất thú vị mà có thể bạn quan tâm, khi bạn làm việc với một mô hình đủ lâu, bạn có thể hình thành mối tương quan giữa số lượng tham số của mô hình và giá trị mất mát tối ưu.
Trong năm qua, đội ngũ ProtonX đã train rất nhiều mô hình cho Studio. sử dụng GPT2 - Medium với 345 triệu tham số với rất nhiều domain khác nhau, từ tuyển dụng cho đến công thức nấu ăn rồi viết bài marketing, chuẩn SEO, vv.
Với những domain cụ thể, team có những con số tương đối chính xác để dự đoán được hiệu suất của mô hình. Ví dụ như sau:
- Với domain đơn giản như mô tả công việc (JD), chỉ cần khoảng 100.000 văn bản trở lên, bạn đã có thể tạo ra được một mô hình có khả năng sinh được ra miêu tả đủ dùng.
Đây là output cho vị trí phân tích dữ liệu:

Theo người dùng phản hồi thì mô hình hiện tại đang hỗ trợ người dùng 50% trong việc viết miêu tả, tức là 50% còn lại người dùng cần chỉnh sửa và nhập các thông tin cá nhân như quyền lợi ứng viên, địa chỉ công ty.
2) Ước lượng giá trị mất mát tối ưu dựa vào số lượng tham số của mô hình
Gần đây team có đọc nghiên cứu Scaling Laws for Neural Language Models thì đã liên hệ trực tiếp quá trình training của team thì có một số nhận định khá tương đồng.
Có 3 luật quan trọng trong bài báo này nhưng trong bài viết này mình sẽ chỉ nhắc đến quy luật đầu tiên mà họ rút ra.
Với mô hình giới hạn tham số, giá trị mất mát tối ưu (hội tụ tốt) với lượng dataset đủ lớn sẽ xấp xỉ theo công thức sau:
Với và là hai giá trị cố định
- chính là giá trị mất mát tối ưu
- : số lượng tham số của mô hình
Áp dụng vào bài toán của team:
Hiện tại team có hơn 200.000 miêu tả công việc, nếu áp dụng công thức này thì giá trị mất mát hợp lý sẽ là:
Con số này khá thú vị, đó chính là con số mà team rất hay gặp trong khoảng training 7-10 epochs đầu tiên, vậy là nhận định này đã đúng với những gì thực tế diễn ra.
Ví dụ đây là epoch số 6 mà team đào tạo
'loss': 2.6251, 'learning_rate': 9.333333333333334e-06, 'epoch': 6.0}
30%|████████████████████████▉ | 37806/126020 [11:41:23<24:58:47, 1.02s/it]***** Running Evaluation *****
Num examples = 378055
Batch size = 8
{'eval_loss': 2.65189266204834, 'eval_runtime': 571.2631, 'eval_samples_per_second': 661.788, 'eval_steps_per_second': 20.682, 'epoch': 6.0}
30%|████████████████████████▉ | 37806/126020 [11:50:54<24:58:47, 1.02s/it]
Giá trị rất sát với công thức trên.
Tất nhiêu theo đánh giá của team, công thức này sẽ đúng hơn nữa khi dataset lớn hơn khoảng 1 triệu bản ghi, tuy nhiên là một trong những thước đo rất quan trọng giúp bạn có thể ước lượng được điểm dừng sớm.
Team rất mong bạn có thể tham khảo công thức này để tiết kiệm thời gian và có những insight quan trong mà mình làm việc mỗi ngày.