Mạng nơ-ron sâu: diện mạo 33 năm trước và 33 năm sau (2022)
(karpathy.github.io)- Bài báo năm 1989 của Yann LeCun và cộng sự về nhận dạng mã ZIP viết tay là một ví dụ ứng dụng thực tế ban đầu của mạng nơ-ron được huấn luyện end-to-end bằng backpropagation, và cách báo cáo về bộ dữ liệu, kiến trúc, hàm mất mát, tối ưu hóa, tỷ lệ lỗi cũng rất giống các bài báo deep learning hiện đại
- Bản tái hiện bằng PyTorch nhắm tới 7.291 ảnh chữ số xám 16x16 và một mạng nhỏ cỡ khoảng 1.000 nơ-ron, còn thời gian huấn luyện 3 ngày của bài báo gốc được rút xuống còn khoảng 90 giây trên CPU của M1 MacBook Air
- Bài báo gốc báo cáo lỗi huấn luyện 0,14%, lỗi kiểm thử 5,00%; bản tái hiện không thể giống hệt do dùng dữ liệu thay thế là MNIST thu nhỏ xuống 16x16, nhưng đạt tới lỗi huấn luyện 0,62% và lỗi kiểm thử 4,09%
- Khi áp dụng các kỹ thuật kiểu năm 2022 như cross-entropy, AdamW, tăng cường dữ liệu, Dropout và ReLU, lỗi kiểm thử giảm từ 4,09% xuống 1,59%; thời gian huấn luyện tăng khoảng 4 lần nhưng độ trễ suy luận không thay đổi
- Trong 33 năm, cấu trúc vĩ mô hầu như được giữ nguyên, nhưng quy mô dữ liệu, mô hình và compute đã tăng áp đảo; xu hướng foundation model và fine-tuning cũng đang nhanh chóng khiến cách huấn luyện mạng nơ-ron từ đầu cho từng tác vụ cụ thể trở nên lỗi thời
Vì sao tái hiện bài báo năm 1989 vào năm 2022
- Bài báo năm 1989 của Yann LeCun và cộng sự Backpropagation Applied to Handwritten Zip Code Recognition là một ví dụ ban đầu có ý nghĩa lịch sử của ứng dụng thực tế dựa trên backpropagation
- Đây được xem là một trong những bài báo đầu tiên áp dụng mạng nơ-ron huấn luyện end-to-end bằng backpropagation vào một bài toán thực tế
- Bộ dữ liệu khi đó gồm 7.291 ảnh chữ số xám 16x16, còn mạng có quy mô khoảng 1.000 nơ-ron
- Cấu trúc bài báo rất giống các bài báo deep learning hiện đại
- Định nghĩa bộ dữ liệu
- Mô tả kiến trúc mạng nơ-ron
- Trình bày hàm mất mát và tối ưu hóa
- Báo cáo tỷ lệ lỗi phân loại trên tập huấn luyện và tập kiểm thử
- Mã tái hiện được viết bằng PyTorch và công bố tại karpathy/lecun1989-repro
- Mạng gốc được triển khai bằng Lisp và dùng backpropagation simulator SN từ năm 1988 của Bottou và LeCun
- Thiết kế của các thư viện deep learning hiện đại nhìn chung được chia thành ba phần
- Thư viện Tensor tốc độ cao dựa trên C/CUDA
- Autograd engine theo dõi đồ thị tính toán forward và tạo các phép toán backpropagation
- API cấp cao, layer, kiến trúc, optimizer, hàm mất mát có thể script bằng Python
Tốc độ huấn luyện và giới hạn của việc tái hiện
- Quá trình huấn luyện gốc đi qua 7.291 mẫu huấn luyện 23 lần, tức tổng cộng đưa 167.693 cặp đầu vào-nhãn vào mạng
- Mạng năm 1989 được huấn luyện trong 3 ngày trên workstation SUN-4/260
- Bản tái hiện bằng PyTorch mất khoảng 90 giây trên CPU của MacBook Air M1, tức nhanh hơn khoảng 3.000 lần nếu so sánh đơn giản
- conda dùng bản build arm64 native chứ không phải giả lập Rosetta
- Nếu PyTorch tận dụng đầy đủ cả GPU và NPU của M1, mức tăng tốc có thể còn lớn hơn
- Khi chạy đơn giản trên GPU A100 thì ngược lại còn chậm hơn
- Mạng là một convnet 4 lớp rất nhỏ, nhiều nhất 12 kênh, tổng 9.760 tham số, 64K MACs, 1K activations
- SGD được tổ chức theo kiểu mỗi lần chỉ dùng một mẫu
- Để tận dụng tốt A100, CUDA và PyTorch, cần tăng mức sử dụng GPU bằng huấn luyện full-batch thay vì per-example SGD
- Hiệu năng được báo cáo trong bài báo gốc như sau
- Huấn luyện: loss 2.5e-3, lỗi 0,14%, miss 10
- Kiểm thử: loss 1.8e-2, lỗi 5,00%, miss 102
- Kết quả ở pass thứ 23 của script tái hiện như sau
- Huấn luyện: loss 4.073383e-03, lỗi 0,62%, miss 45
- Kiểm thử: loss 2.838382e-02, lỗi 4,09%, miss 82
- Việc tái hiện chính xác gặp khó vì nhiều lý do
- Bộ dữ liệu gốc dường như đã thất lạc theo thời gian
- Thay vào đó, các chữ số 28x28 của MNIST được thu nhỏ xuống 16x16 bằng bilinear interpolation, rồi lấy mẫu ngẫu nhiên không hoàn lại với số lượng cần thiết
- Mô tả khởi tạo trọng số khá trừu tượng, và định dạng PDF có thể đã làm mất dấu chấm hoặc ký hiệu căn bậc hai
- Cấu trúc kết nối thưa giữa H1 và H2 không được bài báo mô tả cụ thể nên cần ước lượng hợp lý
- Có lo ngại rằng tanh trong bài báo thực ra là normalized tanh vốn phổ biến thời đó
- Bài báo gốc dùng một thuật toán Newton đặc biệt với xấp xỉ đường chéo dương của Hessian, còn bản tái hiện dùng SGD đơn giản hơn
Giảm tỷ lệ lỗi bằng các kỹ thuật sau 33 năm
- Thay đổi đầu tiên là chuyển từ cách hồi quy MSE sang cách phân loại đa lớp hiện đại
- Ban đầu, bài toán phân loại 10 lớp được mô hình hóa như hồi quy MSELoss với mục tiêu -1 hoặc +1
- Bỏ tanh ở tầng đầu ra để tạo class logits và áp dụng CrossEntropyLoss
- Mô hình overfit hoàn toàn tập huấn luyện, đạt lỗi huấn luyện 0,00% và lỗi kiểm thử 4,38%
- Tiếp theo là dùng họ Adam thay cho SGD
- AdamW được dùng với learning rate bắt đầu từ 3e-4 rồi hạ xuống 1e-4 trong quá trình huấn luyện
- Kết quả là lỗi huấn luyện 0,00% và lỗi kiểm thử 3,59%
- weight decay trong tham số mặc định cũng giúp giảm overfitting
- Tăng cường dữ liệu được thực hiện bằng cách dịch ảnh đầu vào tối đa 1 pixel theo chiều ngang hoặc dọc
- Vì điều này mô phỏng việc tăng kích thước dữ liệu nên số pass được nâng từ 23 lên 60
- Chỉ tăng số pass trong thiết lập gốc thì không cải thiện kết quả nhiều
- Kết quả là lỗi huấn luyện 1,70% và lỗi kiểm thử 2,19%
- Kết hợp Dropout và ReLU tạo ra thêm cải thiện
- Thêm Dropout nhẹ ở mức 0,25 ngay trước layer H3, nơi có nhiều tham số nhất
- Vì Dropout đưa activation về 0 nên được xem là hợp với ReLU hơn tanh có miền hoạt động [-1, 1]
- Đổi toàn bộ phi tuyến tính từ tanh sang ReLU và tăng số pass lên 80
- Kết quả là lỗi huấn luyện 1,47%, lỗi kiểm thử 1,59%, miss kiểm thử 32
- Chỉ thay tanh bằng ReLU thôi thì không cải thiện nhiều; phần lớn cải thiện đến từ việc thêm Dropout
- Nếu có thể mang kỹ thuật này về năm 1989, số lỗi có thể giảm từ khoảng 80 xuống khoảng 30, và tỷ lệ lỗi kiểm thử có thể hạ xuống khoảng 1,5%
- Đổi lại, thời gian huấn luyện gần như tăng 4 lần, tức từ 3 ngày lên gần 12 ngày theo điều kiện năm 1989
- Độ trễ suy luận không bị ảnh hưởng
Tác động đến trước hết đến từ mở rộng dữ liệu, không phải mô hình lớn hơn
- Sau đó, dư địa cải thiện dễ dàng ngày càng ít đi
- Các kỹ thuật bổ sung như weight normalization không tạo được cải thiện lớn
- Một “micro-ViT” có số tham số và lượng tính toán tương đương cũng không đạt được hiệu năng của convnet
- Dù đã có nhiều đổi mới trong 33 năm qua, một số đổi mới chủ yếu chỉ có ý nghĩa ở mô hình lớn hơn nhiều
- residual connection, layer normalization, batch normalization liên quan nhiều hơn đến việc ổn định tối ưu hóa ở quy mô lớn
- Các cải thiện hiệu năng lớn hơn nữa có khả năng đến từ việc mở rộng kích thước mạng, nhưng điều đó sẽ làm tăng độ trễ suy luận khi kiểm thử
- Tăng dữ liệu cũng giúp cải thiện hiệu năng
- Dùng toàn bộ MNIST để tăng tập huấn luyện từ 7.291 lên 50.000 mẫu, tức khoảng 7 lần
- Chạy baseline hiện có trong 100 pass giúp lỗi kiểm thử cải thiện còn 2,74%, miss 54
- Kết hợp mở rộng dữ liệu với các kỹ thuật hiện đại cho kết quả tốt nhất
- Lỗi huấn luyện 1,07%, lỗi kiểm thử 1,25%, miss kiểm thử 24
- Ngay cả trong năm 1989, chỉ cần mở rộng bộ dữ liệu cũng đã có thể nâng hiệu năng hệ thống mà không làm tăng độ trễ suy luận
Những quan sát nối tiếp từ 1989 sang 2022 và 2055
- Trong 33 năm, cấu trúc vĩ mô gần như không thay đổi
- Vẫn xây dựng kiến trúc mạng nơ-ron khả vi gồm nhiều layer, rồi tối ưu end-to-end bằng backpropagation và stochastic gradient descent
- Khác biệt là quy mô khi đó nhỏ hơn rất nhiều
- Bộ dữ liệu và mô hình năm 1989 là cực nhỏ theo tiêu chuẩn hiện đại
- Tập huấn luyện chỉ có 7.291 ảnh xám 16x16
- Các bộ dữ liệu thị giác hiện đại dùng tới hàng trăm triệu ảnh màu độ phân giải cao thu thập từ web
- Ví dụ như Google JFT-300M hay OpenAI CLIP được huấn luyện trên 400M ảnh
- Tính theo dữ liệu pixel đầu vào, con số này lớn hơn xấp xỉ 100.000.000 lần
- Mạng năm 1989 có khoảng 9.760 tham số, 64K MACs, 1K activations
- Các mạng nơ-ron thị giác hiện đại đã đạt tới hàng tỷ tham số và quy mô khoảng 1e12 MACs
- Các mô hình ngôn ngữ tự nhiên có thể đạt tới hàng nghìn tỷ tham số
- Nếu nhìn lại năm 2022 từ năm 2055, có thể một mô thức tương tự sẽ lặp lại
- Mạng nơ-ron năm 2055 về mặt vĩ mô có thể gần như giống mạng năm 2022 nhưng lớn hơn
- Bộ dữ liệu và mô hình ngày nay có thể sẽ bị xem là nhỏ hơn khoảng 10.000.000 lần
- Cũng có thể tưởng tượng rằng những mô hình tối tân của năm 2022 sẽ được huấn luyện chỉ trong khoảng 1 phút như một dự án cuối tuần trên thiết bị tính toán cá nhân
- Và chỉ cần thay đổi chi tiết về mô hình, hàm mất mát, tăng cường dữ liệu, optimizer cũng có thể giảm một nửa tỷ lệ lỗi
- Cách huấn luyện mạng nơ-ron từ đầu cho từng tác vụ cụ thể đang nhanh chóng trở nên lỗi thời
- Các foundation model như GPT được huấn luyện bởi một số ít tổ chức có nguồn lực compute rất lớn
- Phần lớn ứng dụng có thể được triển khai bằng fine-tuning nhẹ trên một phần mạng, prompt engineering, hoặc chưng cất dữ liệu/mô hình sang mạng suy luận chuyên biệt nhỏ hơn
- Ở kịch bản cực đoan, đến năm 2055 người dùng có thể chỉ cần nói hoặc nghĩ bằng tiếng Anh để yêu cầu một neural net “megabrain” lớn hơn 10.000.000 lần thực hiện công việc, và nhu cầu tự huấn luyện mạng nơ-ron sẽ giảm đi
1 bình luận
Các ý kiến trên Hacker News
Có thêm một điểm thú vị. Ban đầu việc huấn luyện mất 3 ngày trên máy trạm Sun 4/260; tôi không tìm được cấu hình chính xác, nhưng nếu là thời kỳ đầu của các máy trạm SPARC thì tổng điện năng tiêu thụ có lẽ khoảng 200W
Bản thân CPU không quá ngốn điện, nhưng toàn bộ hệ thống gồm cả đĩa và màn hình rất có thể ở mức đó. Vậy là 200W × 72 giờ = 14.400Wh
Karpathy đã chạy mức huấn luyện tương tự trên MacBook trong 90 giây, thậm chí còn không tận dụng hết máy. Nếu ước chừng 20W × 0,025 giờ = 0,5Wh thì tức là hiệu suất năng lượng đã cải thiện gần 30.000 lần
Bài viết thật sự rất hay. Tuy nhiên, điểm đáng tiếc là dự đoán cho năm 2055 có tính siêu tuyến tính. Tác giả đã tránh được lỗi phổ biến là giữ nguyên công nghệ hiện tại rồi hồi quy tuyến tính các con số đến 33 năm sau, nhưng dường như vẫn giả định một dạng đối xứng đường thế giới lấy thời điểm hiện tại làm gốc
Vì khoảng thời gian đủ dài, các đột phá và trở ngại không thể dự đoán có thể khiến không dự báo nào trong số này đúng. Ai đó có thể tìm ra một kiến trúc nền tảng đơn giản hơn rất nhiều so với “perceptron++”, mọi người có thể đang huấn luyện các đám mây Gaussian 3D, hoặc máy tính lượng tử cuối cùng cũng cất cánh, đến mức ta còn chưa có cả danh từ để gọi những thành phần sẽ dùng
Ngược lại, chúng ta cũng có thể đụng phải giới hạn mở rộng chưa từng thấy trong phần cứng hoặc huấn luyện, hoặc xảy ra sự thoái lui ở cấp độ văn minh. Dù vậy, nếu là người đặt cược, tôi cũng không hẳn sẽ cược ngược lại kết luận của bài viết này. Nếu chỉ biết quá khứ và hiện tại rồi ngoại suy, có lẽ đây gần như là kết luận tốt nhất
Tôi nghiêng về khả năng thay đổi sẽ kịch tính hơn. Không chỉ vì tài nguyên, mà còn vì còn nhiều dư địa cho cải tiến thuật toán
Ở hướng dễ thấy hơn, đa số thư viện vẫn chưa tận dụng đầy đủ nhiều kỹ thuật tối ưu gradient đã biết. Vì việc cứ tăng thêm dữ liệu và thông lượng là quá dễ, nên vẫn còn nhiều công cụ chưa được áp dụng đang nằm đó
Và các mô hình lớn thành công đang cung cấp những manh mối quan trọng. Ví dụ, các mô hình ngôn ngữ đang học một dạng logic ngôn ngữ giống với cách chúng ta xử lý suy nghĩ, và rõ ràng chúng có thể kết nối những thông tin rất khác loại theo cách khá hợp lý
Một ngày nào đó, nếu nắm được bản chất của quá trình xử lý đó, việc xử lý ngôn ngữ có thể được đơn giản hóa đột ngột. Đây chỉ là một trong những cơ hội cho các tiến bộ mang tính cấp tiến về kiến trúc và thuật toán, và nó thực sự sẽ mang tính cách mạng
Vậy trong 33 năm tới, ta chỉ cần làm cùng việc đó nhưng tăng thêm dữ liệu và năng lực tính toán là được sao? Nếu đẩy tiếp một cách logic sự phấn khích kiểu “cuối cùng chuyện này cũng xảy ra trong đời mình” khi LLM mới xuất hiện, cùng bầu không khí “chỉ cần tăng kích thước mô hình và dữ liệu”, thì sẽ đi đến kết luận như vậy. Nhưng liệu thật sự có thể đi đến AGI chỉ bằng sức mạnh tính toán thô bạo không?
33 năm trước, “AI kết nối luận” không phải là mô hình chủ đạo, và “AI biểu tượng” cũng không phải là cách tiếp cận khác duy nhất. Còn có những hướng như “chức năng luận robot”, cho rằng không thể có trí tuệ thực sự nếu không tương tác với thế giới vật lý
33 năm sau, các cách tiếp cận khác như vậy có thể hồi sinh khi kết hợp với kết nối luận, hoặc cũng có thể xuất hiện một cách tiếp cận hoàn toàn mới
Bài viết xuất sắc. Tôi đã trực tiếp trải qua giai đoạn đầu của mạng nơ-ron nhân tạo. Tôi từng ở trong hội đồng tư vấn công cụ mạng nơ-ron của DARPA vào giữa thập niên 1980, viết phiên bản đầu tiên của sản phẩm thương mại SAIC ANSim, và cũng xây dựng một mô hình lan truyền ngược đơn giản được triển khai trong thiết bị phát hiện bom mà công ty làm theo hợp đồng với FAA
5–6 năm trước, tôi cũng quản lý một nhóm deep learning “truyền thống” ở Capital One. 18 tháng vừa qua thật sự là một quãng thời gian rất hào hứng. Tôi đang dành nhiều thời gian nhất có thể để khám phá LLM tự host và các API của Hugging Face, OpenAI, v.v.
Chỉ cần nghĩ đến công nghệ sau 33 năm nữa thôi là tôi đã thấy đầu mình muốn nổ tung
Thay đổi căn bản nhất là khác biệt ở chỗ mô hình được huấn luyện bằng cái gì
Ảnh chữ nhỏ giống một bài toán đố hơn, và hoàn toàn khác với việc học gần như toàn bộ giao tiếp ngôn ngữ và thị giác của nhân loại
Trong 33 năm tới, ngay cả khi tài nguyên tính toán tiếp tục mở rộng, chúng ta sẽ không dừng ở giai đoạn huấn luyện các mô hình bắt chước hành vi và tri thức của loài người. Bài toán đó, tức chính chúng ta, sẽ bị thu nhỏ thành một bài toán đồ chơi từ lâu trước đó
Chất lượng sẽ không giảm. Bởi sẽ có rất nhiều nỗ lực dành cho việc lọc dữ liệu và đảm bảo tính đa dạng. Luôn có thể cải thiện bằng cách cho mô hình thêm thời gian
Kiến trúc mô hình không quan trọng bằng dataset. Bất kỳ mô hình nào trong cùng một họ cũng có thể học cùng năng lực từ cùng dữ liệu, nhưng nếu thay dữ liệu thì năng lực của tất cả đều thay đổi. Trí tuệ nằm trong dữ liệu
Tương lai là kỹ thuật dữ liệu, không phải thiết kế kiến trúc mô hình. Ví von thì văn hóa loài người tiến hóa nhanh hơn sinh học loài người. Dữ liệu đang tiến hóa nhanh hơn mô hình
Trong AI gần đây, ta thấy các kiến trúc mới giảm mạnh, còn nhiều dataset khác nhau được áp dụng cho cùng một mô hình Transformer. Ngay cả trong Transformer, các biến thể được dùng rộng rãi cũng rất ít, còn hàng nghìn biến thể đã bị bỏ đi
Tôi muốn nghĩ rằng động cơ thật sự của trí tuệ là sự tiến hóa ngôn ngữ thông qua meme. Chúng ta và AI đang cùng cưỡi trên sự tăng trưởng theo hàm mũ của ngôn ngữ
Không rõ năng lực tính toán có tiếp tục mở rộng trong 33 năm tới như trước đây hay không. Nhưng cũng không nhất thiết phải như vậy
Khi đọc bài, tôi đã nghĩ: “Trời ơi, mình nhớ hồi cuối tuần đó, trong một dự án machine learning làm chơi, mình dùng MSE mà kết quả không ổn. Hóa ra là chọn sai hàm mất mát”
Các LLM hiện nay, hoặc LLM của năm sau, có lẽ sẽ đủ khả năng chỉ cho tôi cách cải thiện code và đồ thị của mình. Khi đó tôi sẽ có thể áp dụng các kỹ thuật cấp chuyên gia vốn trước đây bị khóa với tôi vì cần 50.000 giờ tích lũy kỹ năng
Một phần trong tôi nói rằng loài người đã hết thời, và 33 năm nữa chúng ta sẽ tạo ra một thế giới nơi con người trở nên vô nghĩa. Nhưng phần khác lại nói rằng nếu tránh được số phận đó cùng mọi thảm họa khác, tương lai có thể khá sáng sủa
Việc áp dụng LLM ngày nay vào đủ loại vấn đề sẽ không khiến chúng ta tận thế. Nhưng AGI có ý thức và có khả năng lập kế hoạch có thể xuất hiện trong vài năm nữa, và chúng ta cũng không biết giới hạn trên của việc có thể làm chúng thông minh đến mức nào
Tôi cho rằng chúng ta có trách nhiệm với mọi thực thể trí tuệ mà mình đưa vào thế giới. Có người than phiền rằng không có kỳ thi để được làm cha mẹ, vậy còn việc tạo ra bằng cách nhân bản một triệu bộ não ảo hoàn toàn mới thì sao? Hơn nữa, về bản chất là khiến chúng sinh ra để lao dịch suốt đời
Bài thật sự rất hay. Dù không được đề cập trực tiếp, tôi cho rằng khác biệt sau 33 năm nằm ở đầu vào mà mô hình xử lý. Mô hình tiên tiến năm 1989 dùng ảnh xám 16×16, còn nay chúng ta có ảnh màu ở mức vài megapixel
30 năm nữa, máy tính để bàn có thể huấn luyện CLIP trong 90 giây, nhưng mô hình tiên tiến khi đó sẽ được huấn luyện bằng gì?
Muốn vậy có lẽ cần từ hàng tỷ đến hàng nghìn nghìn tỷ giờ video và âm thanh về nhiều người khác nhau thực hiện đủ loại hoạt động của con người, và có lẽ còn nhiều loại đầu vào khác nữa
Hiện tại có vẻ tốt hơn là dùng ngân sách tính toán cho “bộ não” lớn hơn thay vì “đôi mắt” tốt hơn
Tôi không biết chính xác chúng sẽ ghi lại những gì, nhưng có thể huấn luyện mô hình bằng tổ hợp nhiều đầu vào như âm thanh, video, thông tin không gian, mống mắt, v.v.
Thật thú vị là trong giai đoạn đó, sự quan tâm dành cho mạng nơ-ron gần như biến mất hoàn toàn rồi lại quay trở lại
Giờ thì chắc chắn có người đang ghép các LLM lại để khiến chúng suy luận xuôi và suy luận ngược
Dù vậy, Turing Award cũng rất tuyệt
Vừa ngạc nhiên vì mọi thứ thay đổi ít đến mức nào, vừa ngạc nhiên vì thay đổi nhiều đến mức nào. Tôi nhớ cảm giác như được khai sáng khi đọc “Hiệu quả phi lý của RNN”, còn giờ thì có cảm giác như đang sống trong một thế giới hoàn toàn khác
Công nghệ mới tốt hơn rất nhiều, và các hệ quả trong tương lai cũng lớn. Nhưng với những người đã quan tâm từ thời đó, họ có một điểm tham chiếu để thấy rằng “tốt đến phát điên” không lập tức đồng nghĩa với “mất kiểm soát”
Đúng là nó đã tốt hơn rất nhiều
Bài viết của Andrej Karpathy lúc nào cũng mới mẻ. Càng biết nhiều, anh càng khám phá nền tảng của khoa học machine learning một cách trực diện và đơn giản hơn
Lĩnh vực này đầy những bài báo đề xuất các kiến trúc mới phức tạp cho những cải tiến nhỏ khó tái lập, rồi nhồi 50 trang vô dụng với hy vọng vượt kết quả mới nhất để khiến công trình của mình trông “nghiêm túc”