AlphaCode của DeepMind là một công cụ — không phải thay thế — cho lập trình viên con người
Đây là một phần của đánh giá các bài báo nghiên cứu về AI của chúng tôi, một loạt bài viết khám phá những phát hiện mới nhất trong trí tuệ nhân tạo.
DeepMind là phòng thí nghiệm nghiên cứu AI mới nhất giới thiệu một mô hình học sâu có thể tạo ra mã nguồn phần mềm với kết quả đáng kinh ngạc. Được gọi là AlphaCode, mô hình này dựa trên Transformers, cùng kiến trúc mà OpenAI sử dụng trong các mô hình tạo mã của mình.
Lập trình là một trong những ứng dụng triển vọng của học sâu và các mô hình ngôn ngữ lớn. Nhu cầu ngày càng tăng về tài năng lập trình đã thúc đẩy cuộc đua để tạo ra các công cụ có thể làm cho các nhà phát triển trở nên hiệu quả hơn và cung cấp công cụ cho người không phải là nhà phát triển để tạo ra phần mềm.
Và trong điều này, AlphaCode chắc chắn làm ấn tượng. Nó đã giải quyết những thách thức lập trình phức tạp mà thông thường đòi hỏi giờ đồng hồ để lập kế hoạch, viết mã và thử nghiệm. Một ngày nào đó, nó có thể trở thành một công cụ tốt để biến mô tả vấn đề thành mã hoạt động.
Nhưng chắc chắn nó không tương đương với bất kỳ lập trình viên con người nào. Đó là một phương pháp tạo phần mềm hoàn toàn khác, một phương pháp không hoàn chỉnh nếu thiếu tư duy và trực giác con người.
Cuộc thi lập trình
An example of a coding challenge description. Image via DeepMindAlphaCode không phải là sự lựa chọn duy nhất, nhưng nó thực hiện một nhiệm vụ rất phức tạp. Các hệ thống tương tự khác tập trung vào việc tạo ra đoạn mã ngắn, như một hàm hoặc một khối mã thực hiện một nhiệm vụ nhỏ (ví dụ, thiết lập máy chủ web, trích thông tin từ hệ thống API). Mặc dù là những thành tựu ấn tượng, những nhiệm vụ như vậy trở nên dễ dàng khi mô hình ngôn ngữ đã tiếp xúc đủ với một lượng lớn mã nguồn.
Ngược lại, AlphaCode nhằm giải quyết các vấn đề lập trình cạnh tranh. Người tham gia thách thức lập trình phải đọc mô tả thách thức, hiểu vấn đề, chuyển đổi nó thành một giải thuật, triển khai nó bằng một ngôn ngữ chung, và đánh giá nó dựa trên một bộ giới hạn của các trường hợp kiểm thử. Cuối cùng, kết quả của họ được đánh giá dựa trên hiệu suất trên các bài kiểm thử ẩn mà không có sẵn trong quá trình triển khai. Một thách thức lập trình có thể có điều kiện khác nhau như thời gian và hạn chế bộ nhớ.
Đơn giản là, một mô hình học máy tham gia thách thức lập trình phải tạo ra một chương trình đầy đủ giải quyết một vấn đề mà nó chưa bao giờ gặp trước đó. Điều này khó khăn hơn nhiều so với việc tổng hợp một đoạn mã nguồn dựa trên các ví dụ đã thấy trước đó.
An example of a coding challenge solution. Image via DeepMindSức mạnh của transformers và mô hình ngôn ngữ lớn
AlphaCode là một ví dụ khác về cách mô hình ngôn ngữ lớn đã tiến bộ trong việc giải quyết những vấn đề phức tạp. Loại hệ thống học sâu này thường được biết đến là mô hình chuỗi sang chuỗi (seq2seq). Thuật toán seq2seq nhận một chuỗi giá trị (chữ cái, pixel, số, vv.) làm đầu vào và tạo ra một chuỗi giá trị khác. Đây là phương pháp được sử dụng trong nhiều nhiệm vụ ngôn ngữ tự nhiên như dịch máy, tạo văn bản và nhận dạng giọng nói.
Theo bài báo của DeepMind, AlphaCode sử dụng kiến trúc Transformer encoder-decoder. Transformers đã trở nên đặc biệt phổ biến trong những năm gần đây vì chúng có thể xử lý các chuỗi dữ liệu lớn với yêu cầu bộ nhớ và tính toán ít hơn nhiều so với các đồng nghiệp, mạng nơ-ron tái phát (RNN) và mạng nhớ ngắn hạn dài (LSTM).
The structure of the Transformer network.Phần mã hóa của AlphaCode tạo ra một biểu diễn số của mô tả ngôn ngữ tự nhiên về vấn đề. Phần giải mã lấy vectơ nhúng được tạo ra bởi bộ mã hóa và cố gắng tạo ra mã nguồn của giải pháp.
Các mô hình Transformer đã chứng minh khả năng tốt trong những nhiệm vụ như vậy, đặc biệt khi được cung cấp đủ dữ liệu đào tạo và công suất tính toán. Nhưng hơn là sức mạnh tuyệt vời của việc đưa dữ liệu thô vào các mạng nơ-ron siêu lớn, theo ý kiến của tôi, sự tài năng thực sự của AlphaCode có liên quan đến sự khéo léo của các nhà khoa học của DeepMind trong quá trình thiết kế quá trình đào tạo và thuật toán để tạo ra và lọc các kết quả.
Học không giám sát và học giám sát
Để tạo ra AlphaCode, các nhà khoa học của DeepMind đã sử dụng sự kết hợp giữa việc tiền đào tạo không giám sát và fine-tuning giám sát. Thường được gọi là học tự giám sát, đây là một phương pháp đã trở nên phổ biến cho các ứng dụng nơi không có đủ dữ liệu được gán nhãn hoặc chú thích dữ liệu tốn kém và tốn thời gian.
Trong giai đoạn tiền đào tạo, AlphaCode đã trải qua học không giám sát trên 715 gigabyte dữ liệu được trích xuất từ GitHub. Mô hình được đào tạo bằng cách cố gắng dự đoán các phần thiếu sót của một đoạn ngôn ngữ hoặc đoạn mã. Ưu điểm của phương pháp này là nó không đòi hỏi bất kỳ loại chú thích nào, và khi tiếp xúc với nhiều hơn và nhiều hơn các mẫu, mô hình học máy dần dần trở nên giỏi hơn trong việc tạo ra biểu diễn số cho cấu trúc văn bản và mã nguồn.
The algorithm for training and applying AlphaCode. Image via DeepMindMô hình tiền đào tạo sau đó được điều chỉnh tinh chỉnh trên CodeContests, một bộ dữ liệu được chú thích được tạo ra bởi đội ngũ DeepMind. Bộ dữ liệu chứa các tuyên bố vấn đề, các bản nộp đúng và sai, và các bài kiểm tra được thu thập từ nhiều nguồn khác nhau, bao gồm Codeforces, Description2Code, và CodeNet của IBM. Mô hình được đào tạo để chuyển đổi mô tả văn bản về thách thức thành mã nguồn kết quả. Kết quả của nó được đánh giá bằng các bài kiểm tra và so sánh với các bản nộp đúng.
Khi tạo bộ dữ liệu, các nhà nghiên cứu đã chú ý đặc biệt để tránh chồng lấn lịch sử giữa các bộ đào tạo, xác thực và thử nghiệm. Điều này đảm bảo rằng mô hình học máy sẽ không tạo ra kết quả được nhớ khi đối mặt với thách thức lập trình.
Tạo mã và lọc
Sau khi AlphaCode được đào tạo, nó được kiểm thử trước những vấn đề nó chưa từng thấy trước đây. Khi AlphaCode xử lý một vấn đề mới, nó tạo ra nhiều giải pháp. Sau đó, nó sử dụng một thuật toán lọc để chọn ra 10 ứng viên tốt nhất và gửi chúng đến cuộc thi. Nếu ít nhất một trong số chúng là đúng, thì vấn đề được coi là đã giải quyết.
Theo bài báo của DeepMind, AlphaCode có thể tạo ra hàng triệu mẫu cho mỗi vấn đề, tuy nhiên thông thường nó chỉ tạo ra hàng nghìn giải pháp. Các mẫu sau đó được lọc để chỉ bao gồm những mẫu vượt qua các bài kiểm tra đi kèm trong tuyên bố vấn đề. Theo bài báo, điều này loại bỏ khoảng 99 phần trăm các mẫu được tạo ra, nhưng vẫn còn lại hàng nghìn mẫu hợp lệ.
Để tối ưu hóa quá trình chọn mẫu, một thuật toán phân cụm được sử dụng để chia giải pháp thành các nhóm. Theo các nhà nghiên cứu, quá trình phân cụm thường nhóm các giải pháp hoạt động cùng nhau. Điều này làm cho việc tìm một bộ ứng viên nhỏ có khả năng vượt qua các bài kiểm tra ẩn của cuộc thi trở nên dễ dàng hơn nhiều.
Theo DeepMind, khi được kiểm thử trên các cuộc thi lập trình thực tế trên nền tảng Codeforces phổ biến, AlphaCode xếp hạng trong khoảng 54 phần trăm hàng đầu của người tham gia trung bình, điều này rất ấn tượng đối với độ khó của các thách thức lập trình.
A visualization of AlphaCode’s problem-parsing and code-generation process. Image via DeepMindTrí tuệ nhân tạo so với con người
Blog của DeepMind đúng khi nói rằng AlphaCode là hệ thống tạo mã AI đầu tiên đã “đạt đến mức độ hiệu suất cạnh tranh trong các cuộc thi lập trình.”
Tuy nhiên, một số bài viết đã hiểu lầm tuyên bố này là AI lập trình “bằng cách nào đó ngang ngửa với các lập trình viên con người.” Đây là sai lầm của so sánh trí tuệ nhân tạo hẹp với khả năng giải quyết vấn đề tổng quát của con người.
Ví dụ, nói chung, bạn có thể mong đợi một người xuất sắc ở cờ vua và cờ Gô là thông minh ở nhiều cách khác nhau. Trên thực tế, bạn phải có nhiều kỹ năng nhận thức khác nhau trước khi bạn có thể học và thành thạo cờ vua. Tuy nhiên, những thập kỷ qua đã chứng minh rằng một hệ thống trí tuệ nhân tạo có thể tắt đường tắt đến những vấn đề rất khó mà không cần phải có bất kỳ kỹ năng nhận thức nào khác.
Hai ví dụ tiêu biểu là DeepBlue và AlphaGo, các hệ thống AI đã đánh bại các nhà vô địch thế giới ở cờ vua và cờ Gô. Mặc dù cả hai hệ thống đều là thành tựu tuyệt vời của khoa học máy tính và trí tuệ nhân tạo, nhưng chỉ xuất sắc ở một nhiệm vụ. Chúng không thể cạnh tranh với đối thủ con người của họ ở bất kỳ nhiệm vụ nào khác đòi hỏi kế hoạch và lên chiến thuật cẩn thận, kỹ năng mà những con người đó đã có trước khi trở thành những bậc thầy cờ vua và cờ Gô.
Điều tương tự có thể nói về lập trình cạnh tranh. Một lập trình viên con người đạt đến mức cạnh tranh trong các thách thức lập trình đã dành nhiều năm nghiên cứu. Họ có thể suy nghĩ trừu tượng về vấn đề, giải quyết những thách thức đơn giản hơn, viết các chương trình đơn giản và thể hiện nhiều kỹ năng khác mà chúng ta coi là hiển nhiên và không được đánh giá trong cuộc thi lập trình.
Nói một cách đơn giản, những cuộc thi này đã được thiết kế cho con người. Bạn có thể chắc chắn rằng nói chung, một người xếp hạng cao trong lập trình cạnh tranh là một lập trình viên giỏi. Điều này làm tại sao nhiều công ty sử dụng những thách thức này để đưa ra quyết định tuyển dụng.
AlphaCode, ngược lại, là một lối tắt cho lập trình cạnh tranh—mặc dù là một lối tắt xuất sắc. Nó tạo ra mã mới. Nó không sao chép từ dữ liệu đào tạo của mình. Nhưng nó không phải là tương đương của một lập trình viên trung bình.
Lập trình viên con người sử dụng trực giác của họ để hướng dẫn tài nguyên máy tính hạn chế của họ theo hướng giải pháp đúng. Họ sử dụng gỡ lỗi, phân tích và đánh giá để làm cho mã nguồn của họ hoàn thiện. Ngược lại, AlphaCode tạo ra hàng nghìn mẫu—đôi khi lên đến 100.000—và lọc chúng để tìm ra những mẫu hoạt động.
Như giáo sư khoa học máy tính Ernest Davis quan sát, “Có một phần đáng kể của việc loài khiêm tốn đánh máy Hamlet đang diễn ra ở đây. AlphaCode đã thành công trong việc đào tạo những con khỉ đến mức độ đáng kể, nhưng vẫn cần rất nhiều chúng. Sau đó, nó tạo ra 10 ứng viên và coi đó là một thành công nếu một trong số đó là đúng.”
Đây là một tham chiếu đến định lý khỉ vô tận, nói rằng “một con khỉ đánh phím ngẫu nhiên trên bàn phím máy đánh chữ trong một khoảng thời gian vô hạn hầu như chắc chắn sẽ gõ được bất kỳ văn bản nào đã cho,” bao gồm cả vở kịch Hamlet của Shakespeare.
Điều này không phải là một cuộc tấn công chống lại AlphaCode. Trên thực tế, AlphaCode chứng minh rằng với thiết kế tài tình, đủ công suất tính toán và lượng lớn dữ liệu, bạn có thể tạo ra một hệ thống trí tuệ nhân tạo có thể tìm kiếm không gian giải pháp rộng lớn mà thông qua tính toán bằng sức mạnh thô là không thể khám phá được (điều này cũng là những gì DeepMind đã làm với AlphaGo).
Tuy nhiên, chúng ta cũng phải công nhận những giới hạn của phương pháp này. Trước hết, như Davis chú ý, vấn đề trở nên rất khó khăn khi giải pháp trở nên dài hơn. “AlphaCode cần 1 triệu mẫu để đạt 34% đúng trên các chương trình 20 dòng; để tạo ra một chương trình 200 dòng—chiều dài của một bài tập tiêu chuẩn trong một lớp khoa học máy tính năm thứ hai—nó có thể cần đến 10^60 mẫu,” ông viết.
Thứ hai, AlphaCode rõ ràng yêu cầu các tuyên bố vấn đề và bộ kiểm thử được hình thành tốt để đánh giá và lọc hàng nghìn mẫu nó tạo ra. “Hiện nay, không còn câu hỏi nào nữa về việc việc cung cấp đầu vào và đầu ra là vô cùng hữu ích cho các đối thủ con người trong các cuộc thi lập trình,” Davis viết. “Tuy nhiên, nếu chúng không được cung cấp, lập trình viên con người có thể thành công trong hầu hết các trường hợp, với một chút nỗ lực hơn. Ngược lại, AlphaCode sẽ hoàn toàn bối rối nếu thiếu những ví dụ cụ thể được cung cấp; tỷ lệ thành công sẽ giảm đi một hệ số khoảng 100.”
Do đó, thay vì đối đầu AlphaCode với lập trình viên con người, chúng ta nên quan tâm hơn đến những gì AlphaCode và các hệ thống trí tuệ nhân tạo tương tự khác có thể làm khi hợp tác với lập trình viên con người. Những công cụ như vậy có thể có ảnh hưởng to lớn đến năng suất của lập trình viên con người. Chúng thậm chí có thể mang lại thay đổi cho văn hóa lập trình, dịch con người hướng đến việc hình thành vấn đề (một lĩnh vực vẫn là lĩnh vực của trí tuệ con người) và để hệ thống trí tuệ nhân tạo tạo ra mã nguồn.
Nhưng lập trình viên con người vẫn sẽ kiểm soát. Họ phải học cách tận dụng sức mạnh và giới hạn của mã nguồn do trí tuệ nhân tạo tạo ra.
AlphaCode nên được công nhận vì những gì nó là: một công cụ tạo mã có thể đề xuất các giải pháp ứng cử viên tốt cho các tuyên bố vấn đề được hình thành tốt. Nó cũng nên được công nhận vì những gì nó không phải là: sự tương đương số của một lập trình viên con người.
Bài viết này được đăng trên bởi Ben Dickson trên TechTalks, một xuất bản phẩm nghiên cứu xu hướng trong công nghệ, cách chúng ảnh hưởng đến cuộc sống và kinh doanh của chúng ta, và những vấn đề mà chúng giải quyết. Nhưng chúng tôi cũng thảo luận về mặt xấu của công nghệ, những hậu quả tối tăm của công nghệ mới, và những gì chúng ta cần phải chú ý. Bạn có thể đọc bài viết gốc tại đây.
