Nó chỉ thêm một từ tại một thời điểm
Việc ChatGPT có thể tự động tạo ra thứ gì đó có thể đọc được ngay cả khi nhìn bề ngoài giống như văn bản do con người viết là điều đáng chú ý và bất ngờ. Nhưng làm thế nào để nó làm điều đó? Và tại sao nó hoạt động? Mục đích của tôi ở đây là đưa ra một bản phác thảo sơ bộ về những gì đang diễn ra bên trong ChatGPT—và sau đó khám phá lý do tại sao ChatGPT có thể làm rất tốt trong việc tạo ra thứ mà chúng tôi có thể coi là văn bản có ý nghĩa. Tôi nên nói ngay từ đầu rằng tôi sẽ tập trung vào bức tranh toàn cảnh về những gì đang diễn ra—và trong khi đề cập đến một số chi tiết kỹ thuật, tôi sẽ không đi sâu vào chúng. (Và bản chất của những gì tôi sẽ nói cũng áp dụng cho “các mô hình ngôn ngữ lớn” [LLM] hiện tại khác cũng như cho ChatGPT.)
Điều đầu tiên cần giải thích là điều mà ChatGPT luôn cố gắng thực hiện về cơ bản là tạo ra “sự tiếp tục hợp lý” của bất kỳ văn bản nào mà nó có được cho đến nay, trong đó “hợp lý” có nghĩa là “người ta có thể mong đợi ai đó viết gì sau khi xem những gì mọi người đã viết trên hàng tỷ trang web, v.v.”
Vì vậy, giả sử chúng ta có văn bản “ Điều tốt nhất về AI là khả năng của nó ”. Hãy tưởng tượng quét hàng tỷ trang văn bản do con người viết (giả sử trên web và trong sách được số hóa) và tìm tất cả các phiên bản của văn bản này—sau đó xem từ nào tiếp theo trong khoảng thời gian nào. ChatGPT thực hiện một cách hiệu quả điều gì đó như thế này, ngoại trừ việc (như tôi sẽ giải thích) nó không nhìn vào văn bản bằng chữ; nó tìm kiếm những thứ theo một nghĩa nào đó “phù hợp về ý nghĩa”. Nhưng kết quả cuối cùng là nó tạo ra một danh sách xếp hạng các từ có thể theo sau, cùng với “xác suất”:
Và điều đáng chú ý là khi ChatGPT làm một việc gì đó như viết một bài luận, điều mà nó thực sự làm chỉ là hỏi đi hỏi lại “đã đưa ra văn bản cho đến nay, từ tiếp theo nên là gì?”—và mỗi lần thêm một từ. (Chính xác hơn, như tôi sẽ giải thích, đó là thêm một “mã thông báo”, có thể chỉ là một phần của từ, đó là lý do tại sao đôi khi nó có thể “tạo nên từ mới”.)
Nhưng, OK, ở mỗi bước, nó nhận được một danh sách các từ có xác suất. Nhưng nó thực sự nên chọn cái nào để thêm vào bài luận (hoặc bất cứ thứ gì) mà nó đang viết? Người ta có thể nghĩ rằng nó phải là từ “được xếp hạng cao nhất” (nghĩa là từ có “xác suất” cao nhất được chỉ định). Nhưng đây là lúc một chút tà thuật bắt đầu len lỏi vào. Bởi vì một số lý do—rằng có thể một ngày nào đó chúng ta sẽ có cách hiểu theo kiểu khoa học—nếu chúng ta luôn chọn từ được xếp hạng cao nhất, chúng ta thường sẽ nhận được rất nhiều bài luận “phẳng”, dường như không bao giờ “thể hiện bất kỳ sự sáng tạo nào” (và thậm chí đôi khi lặp lại từng chữ). Nhưng nếu đôi khi (một cách ngẫu nhiên) chúng ta chọn những từ có thứ hạng thấp hơn, chúng ta sẽ nhận được một bài luận “thú vị hơn”.
Thực tế là có sự ngẫu nhiên ở đây có nghĩa là nếu chúng ta sử dụng cùng một lời nhắc nhiều lần, chúng ta có khả năng nhận được các bài luận khác nhau mỗi lần. Và, phù hợp với ý tưởng về voodoo, có một tham số đặc biệt được gọi là “nhiệt độ” xác định tần suất các từ được xếp hạng thấp hơn sẽ được sử dụng và đối với việc tạo bài luận, hóa ra “nhiệt độ” là 0,8 có vẻ tốt nhất. (Điều đáng nhấn mạnh là không có “lý thuyết” nào được sử dụng ở đây; vấn đề chỉ là những gì đã được chứng minh là có tác dụng trong thực tế. Và ví dụ, khái niệm “nhiệt độ” có ở đó bởi vì phân phối hàm mũ quen thuộc từ vật lý thống kê tình cờ được sử dụng , nhưng không có kết nối “vật lý”—ít nhất là cho đến nay chúng tôi biết.)
Trước khi chúng ta tiếp tục, tôi nên giải thích rằng vì mục đích trình bày, tôi hầu như sẽ không sử dụng toàn bộ hệ thống có trong ChatGPT ; thay vào đó, tôi thường làm việc với hệ thống GPT-2 đơn giản hơn , có tính năng hay là nó đủ nhỏ để có thể chạy trên máy tính để bàn tiêu chuẩn. Và về cơ bản, đối với mọi thứ tôi trình bày, tôi sẽ có thể bao gồm mã Ngôn ngữ Wolfram rõ ràng mà bạn có thể chạy ngay trên máy tính của mình. (Nhấp vào bất kỳ hình ảnh nào ở đây để sao chép mã đằng sau nó.)
Ví dụ: đây là cách lấy bảng xác suất ở trên. Đầu tiên, chúng ta phải truy xuất mạng nơ-ron “mô hình ngôn ngữ” bên dưới :
Sau đó, chúng ta sẽ xem xét bên trong mạng lưới thần kinh này và nói về cách thức hoạt động của nó. Nhưng hiện tại, chúng ta chỉ có thể áp dụng “mô hình mạng” này như một hộp đen cho văn bản của mình và yêu cầu 5 từ hàng đầu theo xác suất mà mô hình cho biết sẽ tuân theo:
Điều này lấy kết quả đó và biến nó thành một “ tập dữ liệu ” được định dạng rõ ràng:
Đây là điều sẽ xảy ra nếu một người liên tục “áp dụng mô hình”—ở mỗi bước thêm từ có xác suất cao nhất (được chỉ định trong mã này là “quyết định” từ mô hình):
Điều gì xảy ra nếu một người tiếp tục lâu hơn? Trong trường hợp (“nhiệt độ bằng không”) này, những gì xuất hiện sớm trở nên khá lộn xộn và lặp đi lặp lại:
Nhưng nếu thay vì luôn chọn từ “top” thì đôi khi người ta chọn ngẫu nhiên các từ “không phải top” (với độ “ngẫu nhiên” tương ứng với “nhiệt độ” là 0,8)? Một lần nữa, người ta có thể xây dựng văn bản:
Và mỗi khi một người làm điều này, các lựa chọn ngẫu nhiên khác nhau sẽ được thực hiện và văn bản sẽ khác—như trong 5 ví dụ sau:
Điều đáng chú ý là ngay cả ở bước đầu tiên, có rất nhiều “từ tiếp theo” khả thi để lựa chọn (ở nhiệt độ 0,8), mặc dù xác suất của chúng giảm đi khá nhanh (và, vâng, đường thẳng trên đồ thị log-log này tương ứng với một phân rã n –1 “định luật lũy thừa” rất đặc trưng cho thống kê chung của ngôn ngữ ):
Vì vậy, điều gì xảy ra nếu một người tiếp tục lâu hơn? Đây là một ví dụ ngẫu nhiên. Nó tốt hơn trường hợp từ trên cùng (nhiệt độ bằng không), nhưng tốt nhất vẫn hơi kỳ lạ:
Điều này đã được thực hiện với mẫu GPT-2 đơn giản nhất (từ năm 2019). Với các mẫu GPT-3 mới hơn và lớn hơn, kết quả sẽ tốt hơn. Đây là văn bản từ đầu (không có nhiệt độ) được tạo với cùng một “dấu nhắc”, nhưng với mẫu GPT-3 lớn nhất:
Và đây là một ví dụ ngẫu nhiên ở “nhiệt độ 0,8”:
Xác suất đến từ đâu?
OK, vì vậy ChatGPT luôn chọn từ tiếp theo dựa trên xác suất. Nhưng những xác suất đó đến từ đâu? Hãy bắt đầu với một vấn đề đơn giản hơn. Hãy xem xét việc tạo văn bản tiếng Anh một chữ cái (chứ không phải từ) tại một thời điểm. Làm thế nào chúng ta có thể tìm ra xác suất cho mỗi chữ cái?
Một điều rất tối thiểu mà chúng ta có thể làm là lấy một mẫu văn bản tiếng Anh và tính tần suất các chữ cái khác nhau xuất hiện trong đó. Vì vậy, ví dụ, điều này đếm các chữ cái trong bài viết trên Wikipedia về “mèo”:
Và điều này cũng xảy ra tương tự đối với “chó”:
Các kết quả tương tự, nhưng không giống nhau (“o” chắc chắn là phổ biến hơn trong mạo từ “dogs” bởi vì xét cho cùng, nó xuất hiện trong chính từ “dog”). Tuy nhiên, nếu chúng ta lấy một mẫu văn bản tiếng Anh đủ lớn thì cuối cùng chúng ta có thể mong đợi nhận được ít nhất là các kết quả tương đối nhất quán:
Đây là một ví dụ về những gì chúng tôi nhận được nếu chúng tôi chỉ tạo một chuỗi các chữ cái với các xác suất sau:
Chúng ta có thể chia phần này thành “các từ” bằng cách thêm vào các khoảng trắng như thể chúng là các chữ cái với một xác suất nhất định:
Chúng ta có thể thực hiện công việc tạo ra “từ” tốt hơn một chút bằng cách buộc phân phối “độ dài của từ” để đồng ý với những gì nó có trong tiếng Anh:
Chúng tôi đã không tình cờ nhận được bất kỳ “từ thực tế” nào ở đây, nhưng kết quả có vẻ tốt hơn một chút. Tuy nhiên, để đi xa hơn, chúng ta cần phải làm nhiều việc hơn là chỉ chọn ngẫu nhiên từng chữ cái. Và, ví dụ, chúng ta biết rằng nếu chúng ta có chữ “q”, thì về cơ bản chữ cái tiếp theo phải là “u”.
Đây là biểu đồ xác suất của các chữ cái:
Và đây là một biểu đồ thể hiện xác suất của các cặp chữ cái (“2 gam”) trong văn bản tiếng Anh điển hình. Các chữ cái đầu tiên có thể được hiển thị trên trang, các chữ cái thứ hai ở cuối trang:
Và chúng ta thấy ở đây, ví dụ, cột “q” trống (xác suất bằng 0) ngoại trừ trên hàng “u”. OK, vì vậy bây giờ thay vì tạo các “từ” của chúng ta mỗi lần một chữ cái, hãy tạo chúng bằng cách nhìn vào hai chữ cái cùng một lúc, sử dụng các xác suất “2 gam” này. Đây là một ví dụ về kết quả—có thể bao gồm một vài “từ thực tế”:
Với đủ văn bản tiếng Anh, chúng ta có thể ước tính khá tốt không chỉ cho xác suất của các chữ cái đơn lẻ hoặc cặp chữ cái (2 gam), mà còn cho các chuỗi chữ cái dài hơn. Và nếu chúng ta tạo ra “các từ ngẫu nhiên” với xác suất n -gram dài hơn dần dần, chúng ta sẽ thấy rằng chúng dần dần “thực tế hơn”:
Nhưng bây giờ, hãy giả sử—ít nhiều giống như ChatGPT—rằng chúng ta đang xử lý toàn bộ từ chứ không phải chữ cái. Có khoảng 40.000 từ thông dụng trong tiếng Anh . Và bằng cách xem xét một khối lượng lớn văn bản tiếng Anh (chẳng hạn như vài triệu cuốn sách, với tổng cộng vài trăm tỷ từ), chúng ta có thể ước tính mức độ phổ biến của mỗi từ . Và bằng cách sử dụng điều này, chúng ta có thể bắt đầu tạo các “câu”, trong đó mỗi từ được chọn ngẫu nhiên một cách độc lập, với cùng xác suất xuất hiện trong kho văn bản. Đây là một ví dụ về những gì chúng tôi nhận được:
Không ngạc nhiên, điều này là vô nghĩa. Vậy làm thế nào chúng ta có thể làm tốt hơn? Cũng giống như với các chữ cái, chúng ta có thể bắt đầu tính đến không chỉ xác suất đối với các từ đơn lẻ mà cả xác suất đối với các cặp hoặc n -gram từ dài hơn. Làm điều này cho các cặp, đây là 5 ví dụ về những gì chúng tôi nhận được, trong mọi trường hợp bắt đầu từ từ “mèo”:
Nó đang trở nên “trông hợp lý” hơn một chút. Và chúng ta có thể tưởng tượng rằng nếu chúng ta có thể sử dụng các n -gram đủ dài thì về cơ bản chúng ta sẽ “nhận được một ChatGPT”—theo nghĩa là chúng ta sẽ nhận được thứ gì đó có thể tạo ra các chuỗi từ có độ dài bằng bài luận với “bài luận tổng thể chính xác xác suất”. Nhưng đây là vấn đề: thậm chí không có đủ văn bản tiếng Anh đã từng được viết để có thể suy ra những xác suất đó.
Trong một lần thu thập thông tin trên web , có thể có vài trăm tỷ từ; trong những cuốn sách đã được số hóa có thể có hàng trăm tỷ từ khác. Nhưng với 40.000 từ phổ biến, thậm chí số lượng 2 gam có thể có đã là 1,6 tỷ—và số lượng 3 gam có thể có là 60 nghìn tỷ. Vì vậy, không có cách nào chúng ta có thể ước tính xác suất ngay cả đối với tất cả những điều này từ văn bản ngoài kia. Và vào thời điểm chúng ta đạt được “các đoạn tiểu luận” gồm 20 từ, số lượng khả năng lớn hơn số lượng hạt trong vũ trụ, vì vậy theo một nghĩa nào đó, chúng ta không bao giờ có thể viết ra hết được.
Vậy chúng ta có thể làm gì? Ý tưởng lớn là tạo ra một mô hình cho phép chúng tôi ước tính xác suất xảy ra các trình tự—mặc dù chúng tôi chưa bao giờ nhìn thấy rõ ràng các trình tự đó trong kho văn bản mà chúng tôi đã xem xét. Và cốt lõi của ChatGPT chính xác là cái gọi là “mô hình ngôn ngữ lớn” (LLM) được xây dựng để thực hiện tốt công việc ước tính các xác suất đó.
Mô hình là gì?
Giả sử bạn muốn biết (như Galileo đã làm vào cuối những năm 1500 ) mất bao lâu để một quả đạn đại bác rơi từ mỗi tầng của Tháp Pisa chạm đất. Chà, bạn chỉ có thể đo lường nó trong từng trường hợp và lập một bảng kết quả. Hoặc bạn có thể làm điều cốt yếu của khoa học lý thuyết: tạo ra một mô hình đưa ra một số loại quy trình để tính toán câu trả lời thay vì chỉ đo lường và ghi nhớ từng trường hợp.
Hãy tưởng tượng chúng ta có dữ liệu (hơi lý tưởng hóa) về khoảng thời gian quả đại bác rơi từ các tầng khác nhau:
Làm thế nào để chúng tôi biết được sẽ mất bao lâu để rơi từ một tầng mà chúng tôi không có dữ liệu rõ ràng? Trong trường hợp cụ thể này, chúng ta có thể sử dụng các định luật vật lý đã biết để giải quyết nó. Nhưng giả sử tất cả những gì chúng tôi có là dữ liệu và chúng tôi không biết luật cơ bản nào chi phối nó. Sau đó, chúng ta có thể đưa ra một phỏng đoán toán học, như vậy có lẽ chúng ta nên sử dụng một đường thẳng làm mô hình:
Chúng ta có thể chọn các đường thẳng khác nhau. Nhưng đây là dữ liệu trung bình gần nhất với dữ liệu chúng tôi cung cấp. Và từ đường thẳng này ta có thể ước lượng thời gian rơi cho bất kỳ tầng nào.
Làm thế nào chúng ta biết để thử sử dụng một đường thẳng ở đây? Ở một số mức độ chúng tôi đã không. Nó chỉ là một thứ đơn giản về mặt toán học, và chúng ta đã quen với thực tế là rất nhiều dữ liệu mà chúng ta đo lường hóa ra lại rất phù hợp với những thứ đơn giản về mặt toán học. Chúng ta có thể thử một cái gì đó phức tạp hơn về mặt toán học—chẳng hạn a + b x + c x 2 —và trong trường hợp này, chúng ta sẽ làm tốt hơn:
Tuy nhiên, mọi thứ có thể đi khá sai. Giống như đây là điều tốt nhất chúng ta có thể làm với a + b / x + c sin( x ):
Điều đáng hiểu là không bao giờ có “mô hình không có mô hình”. Bất kỳ mô hình nào bạn sử dụng đều có một số cấu trúc cơ bản cụ thể—sau đó, một bộ “nút bạn có thể xoay” nhất định (tức là các tham số bạn có thể đặt) để phù hợp với dữ liệu của mình. Và trong trường hợp của ChatGPT, rất nhiều “nút bấm” như vậy được sử dụng—thực tế là 175 tỷ trong số đó.
Nhưng điều đáng chú ý là cấu trúc cơ bản của ChatGPT—với “chỉ” bấy nhiêu tham số—là đủ để tạo ra một mô hình tính toán xác suất từ tiếp theo “đủ tốt” để cung cấp cho chúng tôi các đoạn văn bản có độ dài bài luận hợp lý.
Mô hình cho các nhiệm vụ giống con người
Ví dụ chúng tôi đưa ra ở trên liên quan đến việc tạo một mô hình cho dữ liệu số về cơ bản xuất phát từ vật lý đơn giản—nơi mà chúng ta đã biết trong nhiều thế kỷ rằng “áp dụng toán học đơn giản”. Nhưng đối với ChatGPT, chúng tôi phải tạo ra một mô hình văn bản ngôn ngữ của con người thuộc loại do bộ não con người tạo ra. Và đối với những thứ như thế, chúng ta (ít nhất là chưa) không có thứ gì giống như “toán học đơn giản”. Vì vậy, những gì có thể là một mô hình của nó như thế nào?
Trước khi nói về ngôn ngữ, hãy nói về một nhiệm vụ khác của con người: nhận dạng hình ảnh. Và như một ví dụ đơn giản về điều này, hãy xem xét hình ảnh của các chữ số (và, vâng, đây là một ví dụ học máy cổ điển ):
Một điều chúng tôi có thể làm là lấy một loạt các hình ảnh mẫu cho mỗi chữ số:
Sau đó, để tìm hiểu xem một hình ảnh chúng tôi cung cấp làm đầu vào có tương ứng với một chữ số cụ thể hay không, chúng tôi chỉ cần thực hiện so sánh rõ ràng từng pixel với các mẫu mà chúng tôi có. Nhưng với tư cách là con người, chúng ta dường như làm điều gì đó tốt hơn—bởi vì chúng ta vẫn có thể nhận ra các chữ số, ngay cả khi chúng được viết tay chẳng hạn và có đủ loại sửa đổi và biến dạng:
Khi chúng tôi tạo một mô hình cho dữ liệu số của mình ở trên, chúng tôi có thể lấy một giá trị số x mà chúng tôi đã cung cấp và chỉ cần tính a + bx cho a và b cụ thể . Vì vậy, nếu chúng ta coi giá trị cấp độ xám của mỗi pixel ở đây là một số biến x i thì có chức năng nào đó của tất cả các biến đó mà—khi được đánh giá—cho chúng ta biết hình ảnh có chữ số nào không? Hóa ra là có thể xây dựng một chức năng như vậy. Không có gì đáng ngạc nhiên, mặc dù nó không đặc biệt đơn giản. Và một ví dụ điển hình có thể liên quan đến nửa triệu phép toán.
Nhưng kết quả cuối cùng là nếu chúng ta cung cấp tập hợp các giá trị pixel cho một hình ảnh vào chức năng này, thì sẽ xuất hiện số chỉ định chữ số mà chúng ta có hình ảnh. Sau đó, chúng ta sẽ nói về cách xây dựng một chức năng như vậy và ý tưởng về mạng lưới thần kinh. Nhưng hiện tại, hãy coi hàm này là hộp đen, nơi chúng tôi cung cấp hình ảnh của các chữ số viết tay (dưới dạng mảng giá trị pixel) và chúng tôi lấy ra các số tương ứng với:
Nhưng những gì đang thực sự xảy ra ở đây? Giả sử chúng ta làm mờ dần một chữ số. Trong một thời gian ngắn, chức năng của chúng tôi vẫn “nhận ra” nó, ở đây là “2”. Nhưng ngay sau đó, nó “mất nó” và bắt đầu đưa ra kết quả “sai”:
Nhưng tại sao chúng tôi lại nói đó là kết quả “sai”? Trong trường hợp này, chúng tôi biết rằng chúng tôi có tất cả các hình ảnh bằng cách làm mờ số “2”. Nhưng nếu mục tiêu của chúng ta là tạo ra một mô hình về những gì con người có thể làm trong việc nhận dạng hình ảnh, thì câu hỏi thực sự cần đặt ra là con người sẽ làm gì nếu được nhìn thấy một trong những hình ảnh mờ đó mà không biết nó đến từ đâu.
Và chúng tôi có một “mô hình tốt” nếu kết quả chúng tôi nhận được từ chức năng của mình thường phù hợp với những gì con người sẽ nói. Và thực tế khoa học không cần thiết là đối với một nhiệm vụ nhận dạng hình ảnh như thế này, về cơ bản chúng ta đã biết cách xây dựng các hàm thực hiện điều này.
Chúng ta có thể “chứng minh bằng toán học” rằng chúng hoạt động không? Ồ không. Vì để làm được điều đó chúng ta phải có một lý thuyết toán học về những gì con người chúng ta đang làm. Lấy hình ảnh “2” và thay đổi một vài điểm ảnh. Chúng ta có thể tưởng tượng rằng chỉ với một vài pixel “không đúng chỗ”, chúng ta vẫn nên coi hình ảnh là “2”. Nhưng điều đó nên đi bao xa? Đó là một câu hỏi về nhận thức thị giác của con người . Và, vâng, câu trả lời chắc chắn sẽ khác đối với ong hoặc bạch tuộc—và có khả năng hoàn toàn khác đối với người ngoài hành tinh giả định .
Mạng lưới thần kinh
OK, vậy làm thế nào để các mô hình điển hình của chúng tôi cho các nhiệm vụ như nhận dạng hình ảnh thực sự hoạt động? Cách tiếp cận hiện tại phổ biến nhất và thành công nhất là sử dụng mạng lưới thần kinh . Được phát minh—ở dạng rất gần với cách sử dụng ngày nay— vào những năm 1940 , mạng lưới thần kinh có thể được coi là sự lý tưởng hóa đơn giản về cách hoạt động của bộ não .
Trong não người có khoảng 100 tỷ tế bào thần kinh (tế bào thần kinh), mỗi tế bào có khả năng tạo ra một xung điện có lẽ lên đến một nghìn lần một giây. Các nơ-ron được kết nối trong một mạng lưới phức tạp, với mỗi nơ-ron có các nhánh giống như cây cho phép nó truyền tín hiệu điện đến có lẽ hàng nghìn nơ-ron khác. Và theo một phép tính gần đúng, việc bất kỳ nơ-ron cụ thể nào tạo ra xung điện tại một thời điểm nhất định hay không phụ thuộc vào loại xung mà nó nhận được từ các nơ-ron khác — với các kết nối khác nhau đóng góp với các “trọng lượng” khác nhau.
Khi chúng ta “nhìn thấy một hình ảnh”, điều đang xảy ra là khi các photon ánh sáng từ hình ảnh chiếu vào các tế bào (“cơ quan cảm quang”) ở phía sau mắt chúng ta, chúng sẽ tạo ra các tín hiệu điện trong các tế bào thần kinh. Các tế bào thần kinh này được kết nối với các tế bào thần kinh khác, và cuối cùng các tín hiệu đi qua toàn bộ chuỗi các lớp tế bào thần kinh. Và chính trong quá trình này, chúng ta “nhận ra” hình ảnh, cuối cùng “hình thành suy nghĩ” rằng chúng ta đang “nhìn thấy số 2” (và có thể cuối cùng làm điều gì đó như nói to từ “hai”).
Chức năng “hộp đen” trong phần trước là một phiên bản “được toán học hóa” của một mạng lưới thần kinh như vậy. Nó tình cờ có 11 lớp (mặc dù chỉ có 4 “lớp lõi”):
Không có gì đặc biệt “bắt nguồn từ lý thuyết” về mạng lưới thần kinh này; nó chỉ là một thứ— vào năm 1998—được xây dựng như một phần của kỹ thuật , và được chứng minh là hoạt động. (Tất nhiên, điều đó không khác nhiều so với cách chúng ta có thể mô tả bộ não của mình được tạo ra thông qua quá trình tiến hóa sinh học.)
OK, nhưng làm thế nào để một mạng lưới thần kinh như thế này “nhận ra mọi thứ”? Điều quan trọng là khái niệm về người thu hút . Hãy tưởng tượng chúng ta có hình ảnh viết tay của 1 và 2:
Bằng cách nào đó, chúng tôi muốn tất cả những người 1 “bị thu hút đến một nơi” và tất cả những người 2 “bị thu hút đến một nơi khác”. Hoặc, nói một cách khác, nếu một hình ảnh bằng cách nào đó “ gần với số 1 ” hơn là số 2, thì chúng tôi muốn nó kết thúc ở “vị trí số 1” và ngược lại.
Nói một cách đơn giản, giả sử chúng ta có một số vị trí nhất định trên mặt phẳng, được biểu thị bằng các dấu chấm (trong bối cảnh thực tế, chúng có thể là vị trí của các quán cà phê). Sau đó, chúng ta có thể tưởng tượng rằng bắt đầu từ bất kỳ điểm nào trên mặt phẳng, chúng ta luôn muốn kết thúc ở điểm gần nhất (tức là chúng ta luôn đến quán cà phê gần nhất). Chúng ta có thể biểu diễn điều này bằng cách chia mặt phẳng thành các vùng (“lưu vực thu hút”) được phân tách bằng các “đường phân thủy” được lý tưởng hóa:
Chúng ta có thể coi điều này giống như thực hiện một loại “nhiệm vụ nhận dạng”, trong đó chúng ta không làm điều gì đó như xác định chữ số nào mà một hình ảnh nhất định “trông giống nhất”—mà thay vào đó, chúng ta chỉ trực tiếp nhìn thấy dấu chấm đã cho là gì. điểm gần nhất với. (Thiết lập “Sơ đồ Voronoi” mà chúng tôi đang trình bày ở đây phân tách các điểm trong không gian Euclide 2D; nhiệm vụ nhận dạng chữ số có thể được coi là thực hiện một việc gì đó rất giống—nhưng trong không gian 784 chiều được hình thành từ các mức xám của tất cả các pixel trong mỗi hình ảnh.)
Vậy làm thế nào để chúng ta tạo ra một mạng nơ-ron “thực hiện nhiệm vụ nhận dạng”? Hãy xem xét trường hợp rất đơn giản này:
Mục tiêu của chúng tôi là lấy một “đầu vào” tương ứng với một vị trí { x , y }—và sau đó “nhận ra” nó là điểm nào trong ba điểm mà nó gần nhất. Hay nói cách khác, chúng ta muốn mạng nơ-ron tính toán một hàm của { x , y } như:
Vì vậy, làm thế nào để chúng ta làm điều này với một mạng lưới thần kinh? Cuối cùng thì mạng nơ-ron là một tập hợp được kết nối của các “nơ-ron” được lý tưởng hóa—thường được sắp xếp theo lớp—với một ví dụ đơn giản là:
Mỗi “nơ-ron” được thiết lập hiệu quả để đánh giá một hàm số đơn giản. Và để “sử dụng” mạng, chúng tôi chỉ cần cung cấp các số (chẳng hạn như tọa độ x và y ) ở trên cùng, sau đó có các nơ-ron trên mỗi lớp “đánh giá chức năng của chúng” và đưa kết quả chuyển tiếp qua mạng—cuối cùng tạo ra kết quả cuối cùng ở dưới cùng:
Trong thiết lập truyền thống (lấy cảm hứng từ sinh học), mỗi nơ-ron thực sự có một tập hợp “kết nối đến” nhất định từ các nơ-ron trên lớp trước đó, với mỗi kết nối được gán một “trọng số” nhất định (có thể là số dương hoặc số âm). Giá trị của một nơ-ron nhất định được xác định bằng cách nhân giá trị của “các nơ-ron trước đó” với các trọng số tương ứng của chúng, sau đó cộng các giá trị này lại với nhau và thêm một hằng số—và cuối cùng áp dụng hàm “ngưỡng” (hoặc “kích hoạt”). Về mặt toán học, nếu một nơ-ron có đầu vào x = { x 1 , x 2 …} thì chúng ta tính f [ w . x + b ], trong đó trọng số wvà hằng số b thường được chọn khác nhau cho từng nơ-ron trong mạng; hàm f thường giống nhau.
Máy tính w . x + b chỉ là vấn đề nhân và cộng ma trận. “Hàm kích hoạt” f giới thiệu tính phi tuyến tính (và cuối cùng là thứ dẫn đến hành vi không cần thiết). Các chức năng kích hoạt khác nhau thường được sử dụng; ở đây chúng tôi sẽ chỉ sử dụng Ramp (hoặc ReLU):
Đối với mỗi nhiệm vụ mà chúng ta muốn mạng nơ-ron thực hiện (hoặc, tương đương, đối với từng chức năng tổng thể mà chúng ta muốn nó đánh giá), chúng ta sẽ có các lựa chọn trọng số khác nhau. (Và—như chúng ta sẽ thảo luận sau—các trọng số này thường được xác định bằng cách “đào tạo” mạng nơ-ron bằng cách sử dụng máy học từ các ví dụ về đầu ra mà chúng ta muốn.)
Cuối cùng, mọi mạng nơ-ron chỉ tương ứng với một hàm toán học tổng thể nào đó—mặc dù viết ra có thể hơi lộn xộn. Đối với ví dụ trên, nó sẽ là:
Mạng thần kinh của ChatGPT cũng chỉ tương ứng với một hàm toán học như thế này—nhưng hiệu quả với hàng tỷ thuật ngữ.
Nhưng hãy quay trở lại với từng tế bào thần kinh. Dưới đây là một số ví dụ về các hàm mà một nơ-ron có hai đầu vào (đại diện cho tọa độ x và y ) có thể tính toán với nhiều lựa chọn trọng số và hằng số khác nhau (và Ramp là hàm kích hoạt):
Nhưng còn mạng lớn hơn từ phía trên thì sao? Vâng, đây là những gì nó tính toán:
Nó không hoàn toàn “đúng”, nhưng nó gần với hàm “điểm gần nhất” mà chúng tôi đã trình bày ở trên.
Hãy xem điều gì xảy ra với một số mạng lưới thần kinh khác. Trong mỗi trường hợp, như chúng tôi sẽ giải thích sau, chúng tôi đang sử dụng công nghệ máy học để tìm ra lựa chọn trọng số tốt nhất. Sau đó, chúng tôi sẽ chỉ ra ở đây tính toán của mạng nơ-ron với các trọng số đó:
Các mạng lớn hơn thường hoạt động tốt hơn trong việc xấp xỉ chức năng mà chúng tôi đang hướng tới. Và ở “giữa mỗi lưu vực thu hút”, chúng tôi thường nhận được chính xác câu trả lời mà chúng tôi muốn. Nhưng tại các ranh giới —nơi mà mạng nơ-ron “khó đưa ra quyết định”—mọi thứ có thể trở nên lộn xộn hơn.
Với “nhiệm vụ nhận dạng” kiểu toán học đơn giản này, rõ ràng “câu trả lời đúng” là gì. Nhưng trong vấn đề nhận dạng các chữ số viết tay, nó không rõ ràng như vậy. Điều gì sẽ xảy ra nếu ai đó viết số “2” quá tệ trông giống như số “7”, v.v.? Tuy nhiên, chúng ta có thể hỏi làm thế nào một mạng nơ-ron phân biệt các chữ số—và điều này đưa ra một dấu hiệu:
Chúng ta có thể nói “về mặt toán học” cách mạng tạo ra sự khác biệt không? Không thực sự. Nó chỉ là “làm những gì mạng lưới thần kinh làm”. Nhưng hóa ra điều đó thường có vẻ khá phù hợp với những khác biệt mà con người chúng ta tạo ra.
Hãy lấy một ví dụ phức tạp hơn. Giả sử chúng ta có hình ảnh của mèo và chó. Và chúng tôi có một mạng lưới thần kinh đã được đào tạo để phân biệt chúng . Đây là những gì nó có thể làm trên một số ví dụ:
Bây giờ, “câu trả lời đúng” là gì thậm chí còn ít rõ ràng hơn. Còn một con chó mặc bộ đồ mèo thì sao? v.v. Dù đầu vào được cung cấp là gì, mạng lưới thần kinh sẽ tạo ra câu trả lời. Và, hóa ra, để làm điều đó theo cách phù hợp một cách hợp lý với những gì con người có thể làm. Như tôi đã nói ở trên, đó không phải là một thực tế mà chúng ta có thể “rút ra từ những nguyên tắc đầu tiên”. Đó chỉ là điều đã được chứng minh bằng thực nghiệm là đúng, ít nhất là trong một số lĩnh vực nhất định. Nhưng đó là lý do chính khiến mạng lưới thần kinh trở nên hữu ích: bằng cách nào đó chúng nắm bắt được cách làm việc “giống con người”.
Cho bạn xem bức tranh về một con mèo và hỏi “Tại sao lại là con mèo?”. Có thể bạn sẽ bắt đầu nói “Chà, tôi thấy đôi tai nhọn của nó, v.v.” Nhưng không dễ để giải thích làm thế nào bạn nhận ra hình ảnh đó là một con mèo. Chỉ là bằng cách nào đó bộ não của bạn đã tìm ra điều đó. Nhưng đối với một bộ não thì không có cách nào (ít nhất là cho đến nay) để “đi vào bên trong” và xem nó tìm ra nó như thế nào. Còn đối với một mạng lưới thần kinh (nhân tạo) thì sao? Chà, thật đơn giản để xem mỗi “nơ-ron” làm gì khi bạn đưa ra bức ảnh về một con mèo. Nhưng ngay cả để có được một hình dung cơ bản thường là rất khó khăn.
Trong mạng cuối cùng mà chúng tôi đã sử dụng cho bài toán “điểm gần nhất” ở trên, có 17 nơ-ron. Trong mạng nhận dạng các chữ số viết tay có 2190. Và trong mạng chúng tôi đang sử dụng để nhận dạng chó và mèo có 60.650. Thông thường, sẽ rất khó để hình dung không gian 60.650 chiều là bao nhiêu. Nhưng vì đây là một mạng được thiết lập để xử lý hình ảnh, nên nhiều lớp tế bào thần kinh của nó được tổ chức thành các mảng, giống như các mảng pixel mà nó đang xem xét.
Và nếu chúng ta lấy một hình ảnh con mèo điển hình
sau đó chúng ta có thể biểu diễn trạng thái của các nơ-ron ở lớp đầu tiên bằng một tập hợp các hình ảnh dẫn xuất—nhiều hình ảnh trong số đó chúng ta có thể dễ dàng hiểu là những thứ như “con mèo không có nền” hoặc “đường viền của con mèo”:
Đến lớp thứ 10, khó diễn giải những gì đang diễn ra hơn:
Nhưng nói chung, chúng ta có thể nói rằng mạng nơ-ron đang “chọn ra một số đặc điểm nhất định” (có thể có đôi tai nhọn trong số đó) và sử dụng những đặc điểm này để xác định hình ảnh là gì. Nhưng những đặc điểm đó có phải là những đặc điểm mà chúng ta đặt tên—chẳng hạn như “đôi tai nhọn” không? Hầu hết là không.
Bộ não của chúng ta có sử dụng các tính năng tương tự không? Hầu hết chúng ta không biết. Nhưng điều đáng chú ý là một số lớp đầu tiên của mạng nơ-ron giống như lớp mà chúng tôi đang trình bày ở đây dường như chọn ra các khía cạnh của hình ảnh (như các cạnh của vật thể) có vẻ giống với những gì chúng ta biết được chọn ra ở cấp độ đầu tiên. xử lý hình ảnh trong não.
Nhưng giả sử chúng ta muốn có một “lý thuyết nhận dạng mèo” trong mạng lưới thần kinh. Chúng ta có thể nói: “Hãy nhìn xem, mạng cụ thể này làm được điều đó” – và ngay lập tức điều đó cho chúng ta cảm nhận về “vấn đề khó đến mức nào” (và, ví dụ, có thể cần bao nhiêu nơ-ron hoặc lớp). Nhưng ít nhất cho đến bây giờ, chúng tôi không có cách nào để “đưa ra một mô tả tường thuật” về những gì mạng đang làm. Và có lẽ đó là bởi vì nó thực sự không thể rút gọn về mặt tính toán, và không có cách chung nào để tìm ra những gì nó làm ngoại trừ việc lần theo từng bước một cách rõ ràng. Hoặc có thể chỉ là chúng ta chưa “tìm hiểu khoa học”, và xác định được “các quy luật tự nhiên” cho phép chúng ta tóm tắt những gì đang diễn ra.
Chúng ta sẽ gặp phải các loại sự cố tương tự khi nói về việc tạo ngôn ngữ với ChatGPT. Và một lần nữa, không rõ liệu có cách nào để “tóm tắt những gì nó đang làm” hay không. Nhưng sự phong phú và chi tiết của ngôn ngữ (và kinh nghiệm của chúng tôi với nó) có thể cho phép chúng tôi tiến xa hơn so với hình ảnh.
Học máy và đào tạo mạng lưới thần kinh
Cho đến nay, chúng ta đã nói về mạng lưới thần kinh “đã biết” cách thực hiện các nhiệm vụ cụ thể. Nhưng điều làm cho mạng lưới thần kinh trở nên hữu ích (có lẽ cũng có trong bộ não) là về nguyên tắc, chúng không chỉ có thể thực hiện tất cả các loại nhiệm vụ mà còn có thể được “đào tạo từ các ví dụ” dần dần để thực hiện các nhiệm vụ đó.
Khi chúng ta tạo một mạng lưới thần kinh để phân biệt mèo với chó, chúng ta không thực sự phải viết một chương trình (giả sử) tìm thấy râu một cách rõ ràng; thay vào đó, chúng tôi chỉ hiển thị rất nhiều ví dụ về thế nào là mèo và thế nào là chó, sau đó để mạng “máy học” từ những cách này để phân biệt chúng.
Và vấn đề là mạng được đào tạo “khái quát hóa” từ các ví dụ cụ thể mà nó được hiển thị. Như chúng ta đã thấy ở trên, không chỉ đơn giản là mạng nhận ra mẫu pixel cụ thể của hình ảnh con mèo mẫu mà nó được hiển thị; đúng hơn là mạng lưới thần kinh bằng cách nào đó quản lý để phân biệt các hình ảnh trên cơ sở những gì chúng ta coi là một loại “mèo nói chung”.
Vậy làm thế nào để đào tạo mạng lưới thần kinh thực sự hoạt động? Về cơ bản, những gì chúng tôi luôn cố gắng làm là tìm ra các trọng số giúp mạng nơ-ron tái tạo thành công các ví dụ mà chúng tôi đã đưa ra. Và sau đó, chúng tôi dựa vào mạng lưới thần kinh để “nội suy” (hoặc “khái quát hóa”) “giữa” các ví dụ này theo cách “hợp lý”.
Hãy xét một bài toán thậm chí còn đơn giản hơn bài toán điểm gần nhất ở trên. Chúng ta hãy cố gắng lấy một mạng lưới thần kinh để tìm hiểu chức năng:
Đối với nhiệm vụ này, chúng tôi sẽ cần một mạng chỉ có một đầu vào và một đầu ra, chẳng hạn như:
Nhưng chúng ta nên sử dụng trọng lượng nào, v.v.? Với mọi tập hợp trọng số có thể, mạng nơ-ron sẽ tính toán một số chức năng. Và, ví dụ, đây là những gì nó làm với một vài bộ trọng lượng được chọn ngẫu nhiên:
Và, vâng, chúng ta có thể thấy rõ ràng rằng không có trường hợp nào trong số này thậm chí tiến gần đến việc tái tạo chức năng mà chúng ta muốn. Vậy làm cách nào để tìm các trọng số sẽ tái tạo chức năng?
Ý tưởng cơ bản là cung cấp nhiều ví dụ “đầu vào → đầu ra” để “học hỏi từ” —và sau đó cố gắng tìm các trọng số sẽ tái tạo các ví dụ này. Đây là kết quả của việc làm đó với nhiều ví dụ dần dần:
Ở mỗi giai đoạn trong quá trình “đào tạo” này, các trọng số trong mạng được điều chỉnh dần dần—và chúng tôi thấy rằng cuối cùng chúng tôi có được một mạng tái tạo thành công chức năng mà chúng tôi muốn. Vậy làm thế nào để chúng ta điều chỉnh trọng lượng? Ý tưởng cơ bản là ở mỗi giai đoạn, hãy xem “chúng ta còn cách bao xa” để đạt được chức năng mà chúng ta muốn — và sau đó cập nhật các trọng số theo cách để tiến gần hơn.
Để tìm hiểu “chúng ta còn cách bao xa” chúng ta tính toán cái thường được gọi là “hàm tổn thất” (hoặc đôi khi là “hàm chi phí”). Ở đây, chúng ta đang sử dụng một hàm mất mát (L2) đơn giản, đó chỉ là tổng bình phương của sự khác biệt giữa các giá trị chúng ta nhận được và các giá trị thực. Và những gì chúng ta thấy là khi quá trình đào tạo của chúng ta tiến triển, hàm mất mát giảm dần (tuân theo một “đường cong học tập” nhất định khác nhau đối với các nhiệm vụ khác nhau)—cho đến khi chúng ta đạt đến điểm mà mạng (ít nhất là ở mức gần đúng) tái tạo thành công chức năng chúng tôi muốn:
Được rồi, phần thiết yếu cuối cùng cần giải thích là cách các trọng số được điều chỉnh để giảm hàm mất mát. Như chúng ta đã nói, hàm mất mát cung cấp cho chúng ta một “khoảng cách” giữa các giá trị chúng ta có và các giá trị thực. Nhưng “các giá trị mà chúng tôi có” được xác định ở mỗi giai đoạn bởi phiên bản mạng nơ-ron hiện tại—và bởi các trọng số trong đó. Nhưng bây giờ hãy tưởng tượng rằng các trọng số là các biến số—chẳng hạn như w i . Chúng tôi muốn tìm hiểu cách điều chỉnh giá trị của các biến này để giảm thiểu tổn thất phụ thuộc vào chúng.
Ví dụ, hãy tưởng tượng (trong một sự đơn giản hóa đáng kinh ngạc của các mạng thần kinh điển hình được sử dụng trong thực tế) rằng chúng ta chỉ có hai trọng số w 1 và w 2 . Sau đó, chúng ta có thể mất một hàm của w 1 và w 2 trông như thế này:
Phân tích số cung cấp nhiều kỹ thuật để tìm giá trị nhỏ nhất trong các trường hợp như thế này. Nhưng một cách tiếp cận điển hình là chỉ đi dần dần theo con đường đi xuống dốc nhất từ bất cứ thứ gì trước đó w 1 , w 2 chúng ta đã có:
Giống như nước chảy từ núi xuống, tất cả những gì được đảm bảo là quy trình này sẽ kết thúc ở một mức tối thiểu cục bộ nào đó trên bề mặt (“hồ trên núi”); nó cũng có thể không đạt đến mức tối thiểu toàn cầu cuối cùng.
Không rõ ràng rằng việc tìm ra con đường dốc nhất trên “cảnh quan trọng lượng” là khả thi. Nhưng tính toán đến để giải cứu. Như chúng tôi đã đề cập ở trên, người ta luôn có thể coi mạng nơ-ron là tính toán một hàm toán học—phụ thuộc vào đầu vào và trọng số của nó. Nhưng bây giờ hãy xem xét sự khác biệt đối với các trọng số này. Hóa ra quy tắc chuỗi của phép tính có hiệu lực cho phép chúng ta “làm sáng tỏ” các hoạt động được thực hiện bởi các lớp liên tiếp trong mạng lưới thần kinh. Và kết quả là chúng ta có thể—ít nhất là trong một số phép tính gần đúng cục bộ—“đảo ngược” hoạt động của mạng nơ-ron và dần dần tìm ra các trọng số giúp giảm thiểu tổn thất liên quan đến đầu ra.
Hình trên cho thấy loại tối thiểu hóa mà chúng ta có thể cần thực hiện trong trường hợp đơn giản phi thực tế chỉ với 2 trọng số. Nhưng hóa ra là ngay cả khi có nhiều trọng số hơn (ChatGPT sử dụng 175 tỷ), bạn vẫn có thể thực hiện việc giảm thiểu, ít nhất là ở một mức độ gần đúng nào đó. Và trên thực tế, bước đột phá lớn trong “học sâu” xảy ra vào khoảng năm 2011 có liên quan đến việc phát hiện ra rằng theo một nghĩa nào đó, việc tối thiểu hóa (ít nhất là gần đúng) có thể dễ dàng hơn khi có nhiều trọng số liên quan hơn là khi có khá ít trọng số.
Nói cách khác—hơi phản trực giác—có thể dễ dàng giải quyết các vấn đề phức tạp hơn bằng mạng nơ-ron so với các vấn đề đơn giản hơn. Và lý do sơ bộ cho điều này dường như là khi một người có nhiều “biến trọng lượng” thì người đó có một không gian nhiều chiều với “rất nhiều hướng khác nhau” có thể đưa một người đến mức tối thiểu—trong khi với ít biến hơn thì dễ kết thúc hơn bị mắc kẹt trong một mức tối thiểu cục bộ (“hồ trên núi”) mà không có “hướng thoát ra”.
Cần chỉ ra rằng trong các trường hợp điển hình, có nhiều tập hợp trọng số khác nhau, tất cả sẽ cung cấp cho các mạng nơ-ron có hiệu suất gần như giống nhau. Và thông thường, trong đào tạo mạng nơ-ron thực tế, có rất nhiều lựa chọn ngẫu nhiên được đưa ra—dẫn đến “các giải pháp khác nhau nhưng tương đương”, như sau:
Nhưng mỗi “giải pháp khác nhau” như vậy ít nhất sẽ có hành vi khác nhau một chút. Và nếu chúng ta yêu cầu, chẳng hạn, đối với một “phép ngoại suy” bên ngoài khu vực mà chúng ta đã đưa ra các ví dụ đào tạo, chúng ta có thể nhận được các kết quả khác biệt đáng kể:
Nhưng cái nào trong số này là “đúng”? Thực sự không có cách nào để nói. Tất cả đều “phù hợp với dữ liệu quan sát được”. Nhưng tất cả chúng đều tương ứng với những cách “bẩm sinh” khác nhau để “nghĩ về” những việc cần làm “bên ngoài khuôn khổ”. Và một số có vẻ “hợp lý” đối với con người chúng ta hơn những người khác.
Thực hành và truyền thuyết về đào tạo mạng lưới thần kinh
Đặc biệt trong thập kỷ qua, đã có nhiều tiến bộ trong nghệ thuật đào tạo mạng lưới thần kinh. Và, vâng, về cơ bản nó là một nghệ thuật. Đôi khi—đặc biệt là khi nhìn lại—người ta có thể thấy ít nhất một tia “lời giải thích khoa học” cho điều gì đó đang được thực hiện. Nhưng hầu hết mọi thứ đã được phát hiện bằng cách thử và sai, bổ sung các ý tưởng và thủ thuật đã dần dần xây dựng nên một truyền thuyết quan trọng về cách làm việc với mạng lưới thần kinh.
Có một số phần quan trọng. Đầu tiên, vấn đề là người ta nên sử dụng kiến trúc mạng nơ-ron nào cho một nhiệm vụ cụ thể. Sau đó, có một vấn đề quan trọng về cách một người sẽ lấy dữ liệu để huấn luyện mạng lưới thần kinh. Và ngày càng có nhiều người không xử lý việc đào tạo mạng từ đầu: thay vào đó, một mạng mới có thể kết hợp trực tiếp một mạng đã được đào tạo khác hoặc ít nhất có thể sử dụng mạng đó để tạo thêm các ví dụ đào tạo cho chính nó.
Người ta có thể nghĩ rằng đối với mỗi loại nhiệm vụ cụ thể, người ta sẽ cần một kiến trúc mạng nơ-ron khác nhau. Nhưng những gì đã được tìm thấy là cùng một kiến trúc dường như thường hoạt động ngay cả đối với các nhiệm vụ rõ ràng là hoàn toàn khác nhau. Ở một mức độ nào đó, điều này nhắc nhở một người về ý tưởng tính toán phổ quát (và Nguyên tắc tính toán tương đương của tôi ), nhưng, như tôi sẽ thảo luận sau, tôi nghĩ nó phản ánh thực tế nhiều hơn rằng các tác vụ mà chúng ta thường cố gắng thực hiện có tính chất thần kinh. mạng phải làm là những mạng “giống con người”—và mạng nơ-ron có thể nắm bắt “các quy trình giống con người” khá chung chung.
Trong những ngày đầu tiên của mạng lưới thần kinh, có xu hướng cho rằng người ta nên “làm cho mạng lưới thần kinh làm càng ít càng tốt”. Ví dụ, khi chuyển đổi lời nói thành văn bản, người ta cho rằng trước tiên người ta nên phân tích âm thanh của lời nói, chia nhỏ nó thành các âm vị, v.v. để cố gắng huấn luyện mạng nơ-ron về “vấn đề đầu cuối”, để nó “khám phá” các tính năng trung gian, mã hóa, v.v. cần thiết cho chính nó.
Cũng có ý kiến cho rằng người ta nên đưa các thành phần riêng lẻ phức tạp vào mạng nơ-ron, để nó có hiệu lực “thực hiện rõ ràng các ý tưởng thuật toán cụ thể”. Nhưng một lần nữa, điều này hầu như không đáng giá; thay vào đó, tốt hơn hết là chỉ xử lý các thành phần rất đơn giản và để chúng “tự tổ chức” (mặc dù thường theo cách chúng ta không thể hiểu được) để đạt được (có lẽ) tương đương với những ý tưởng thuật toán đó.
Điều đó không có nghĩa là không có “ý tưởng cấu trúc” nào phù hợp với mạng lưới thần kinh. Do đó, ví dụ, có các mảng nơ-ron 2D với các kết nối cục bộ ít nhất có vẻ rất hữu ích trong giai đoạn đầu của quá trình xử lý hình ảnh. Và việc có các kiểu kết nối tập trung vào việc “nhìn lại theo trình tự” có vẻ hữu ích—như chúng ta sẽ thấy sau này—trong việc xử lý những thứ như ngôn ngữ của con người, chẳng hạn như trong ChatGPT.
Nhưng một tính năng quan trọng của mạng nơ-ron là—giống như máy tính nói chung—cuối cùng chúng chỉ xử lý dữ liệu. Và các mạng nơ-ron hiện tại—với các cách tiếp cận hiện tại đối với đào tạo mạng nơ-ron— đặc biệt xử lý các mảng số . Nhưng trong quá trình xử lý, các mảng đó hoàn toàn có thể được sắp xếp lại và định hình lại. Và ví dụ, mạng mà chúng tôi sử dụng để xác định các chữ số ở trên bắt đầu bằng một mảng 2D “giống như hình ảnh”, nhanh chóng “làm dày” thành nhiều kênh, nhưng sau đó “tập trung lại” thành một mảng 1D cuối cùng sẽ chứa các phần tử đại diện cho các giá trị khác nhau. chữ số đầu ra có thể:
Nhưng, OK, làm thế nào người ta có thể biết một người sẽ cần một mạng nơ-ron lớn như thế nào cho một nhiệm vụ cụ thể? Đó là một cái gì đó của một nghệ thuật. Ở một mức độ nào đó, điều quan trọng là phải biết “nhiệm vụ khó đến mức nào”. Nhưng đối với các nhiệm vụ giống như con người thường rất khó ước tính. Vâng, có thể có một cách có hệ thống để thực hiện nhiệm vụ một cách rất “máy móc” bằng máy tính. Nhưng thật khó để biết liệu có những thứ mà người ta có thể coi là thủ thuật hoặc lối tắt cho phép một người thực hiện nhiệm vụ ít nhất ở “mức độ giống con người” dễ dàng hơn rất nhiều hay không. Có thể cần liệt kê một cây trò chơi khổng lồ để chơi một trò chơi nhất định một cách “máy móc”; nhưng có thể có một cách (“heuristic”) dễ dàng hơn nhiều để đạt được “trò chơi ở cấp độ con người”.
Khi một người xử lý các mạng nơ-ron nhỏ và các tác vụ đơn giản, đôi khi người ta có thể thấy rõ ràng rằng người ta “không thể đến đó từ đây”. Ví dụ, đây là cách tốt nhất mà dường như có thể thực hiện với nhiệm vụ từ phần trước với một vài mạng lưới thần kinh nhỏ:
Và những gì chúng ta thấy là nếu mạng quá nhỏ, nó không thể tái tạo chức năng mà chúng ta muốn. Nhưng trên một số kích thước, nó không có vấn đề gì – ít nhất là nếu người ta huấn luyện nó đủ lâu, với đủ ví dụ. Và, nhân tiện, những bức ảnh này minh họa một phần truyền thuyết về mạng nơ-ron: rằng người ta thường có thể thoát khỏi một mạng nhỏ hơn nếu có một “sự ép buộc” ở giữa buộc mọi thứ phải đi qua một số lượng nơ-ron trung gian nhỏ hơn. (Cũng cần lưu ý rằng “không có lớp trung gian”—hay còn gọi là “ perceptron ”—mạng chỉ có thể học các hàm cơ bản là tuyến tính—nhưng ngay khi có một lớp trung gian thì về nguyên tắc luôn có thể thực hiện đượcđể ước tính tốt bất kỳ chức năng nào một cách tùy ý, ít nhất là nếu một chức năng có đủ nơ-ron, mặc dù để làm cho nó có thể huấn luyện được một cách khả thi, người ta thường có một số loại chính quy hóa hoặc chuẩn hóa .)
Được rồi, giả sử một người đã ổn định trên một kiến trúc mạng thần kinh nhất định. Bây giờ có vấn đề lấy dữ liệu để huấn luyện mạng. Và nhiều thách thức thực tế xung quanh mạng lưới thần kinh—và học máy nói chung—tập trung vào việc thu thập hoặc chuẩn bị dữ liệu huấn luyện cần thiết. Trong nhiều trường hợp (“học có giám sát”), người ta muốn lấy các ví dụ rõ ràng về đầu vào và đầu ra mà người ta mong đợi từ chúng. Vì vậy, ví dụ, một người có thể muốn các hình ảnh được gắn thẻ bởi những gì có trong chúng hoặc một số thuộc tính khác. Và có thể một người sẽ phải trải qua một cách rõ ràng—thường là với nỗ lực rất lớn—và thực hiện việc gắn thẻ. Nhưng rất thường xuyên, hóa ra là có thể sử dụng một cái gì đó đã được thực hiện hoặc sử dụng nó như một loại ủy quyền nào đó. Và vì vậy, ví dụ, người ta có thể sử dụng thẻ alt đã được cung cấp cho hình ảnh trên web. Hoặc, trong một miền khác, người ta có thể sử dụng phụ đề chi tiết đã được tạo cho video. Hoặc—đối với đào tạo dịch thuật ngôn ngữ—người ta có thể sử dụng các phiên bản song song của các trang web hoặc các tài liệu khác tồn tại ở các ngôn ngữ khác nhau.
Bạn cần bao nhiêu dữ liệu để hiển thị một mạng lưới thần kinh để đào tạo nó cho một nhiệm vụ cụ thể? Một lần nữa, thật khó để ước tính từ những nguyên tắc đầu tiên. Chắc chắn các yêu cầu có thể được giảm đáng kể bằng cách sử dụng “học chuyển giao” để “chuyển giao” những thứ như danh sách các tính năng quan trọng đã được học trong một mạng khác. Nhưng nhìn chung, mạng lưới thần kinh cần phải “xem rất nhiều ví dụ” để đào tạo tốt. Và ít nhất đối với một số nhiệm vụ, đó là một phần quan trọng của truyền thuyết mạng nơ-ron mà các ví dụ có thể lặp đi lặp lại một cách đáng kinh ngạc. Và thực sự, đó là một chiến lược tiêu chuẩn để hiển thị lặp đi lặp lại một mạng lưới thần kinh tất cả các ví dụ mà người ta có. Trong mỗi “vòng huấn luyện” (hoặc “kỷ nguyên”) này, mạng nơ-ron ít nhất sẽ ở trạng thái hơi khác một chút và bằng cách nào đó, việc “nhắc nó” về một ví dụ cụ thể sẽ hữu ích trong việc khiến nó “nhớ ví dụ đó”. (Và vâng,
Nhưng thường thì chỉ lặp đi lặp lại cùng một ví dụ là không đủ. Cũng cần phải hiển thị các biến thể mạng thần kinh của ví dụ. Và đó là một tính năng của truyền thuyết mạng nơ-ron mà các biến thể “tăng cường dữ liệu” đó không cần phải phức tạp để trở nên hữu ích. Chỉ cần sửa đổi một chút hình ảnh bằng xử lý hình ảnh cơ bản có thể làm cho chúng về cơ bản “tốt như mới” để huấn luyện mạng nơ-ron. Và, tương tự, khi hết video thực tế, v.v. để đào tạo ô tô tự lái, người ta có thể tiếp tục và chỉ lấy dữ liệu từ việc chạy mô phỏng trong môi trường giống như trò chơi điện tử mô hình mà không có tất cả chi tiết của các cảnh trong thế giới thực.
Làm thế nào về một cái gì đó như ChatGPT? Chà, nó có một tính năng hay là nó có thể thực hiện “học tập không giám sát”, giúp việc lấy các ví dụ để đào tạo dễ dàng hơn nhiều. Hãy nhớ lại rằng nhiệm vụ cơ bản của ChatGPT là tìm ra cách tiếp tục một đoạn văn bản được đưa ra. Vì vậy, để có được “ví dụ đào tạo”, tất cả những gì người ta phải làm là lấy một đoạn văn bản và che đi phần cuối của nó, sau đó sử dụng phần này làm “đầu vào để đào tạo từ”—với “đầu ra” là phần hoàn chỉnh, mảnh văn bản chưa được che giấu. Chúng ta sẽ thảo luận vấn đề này nhiều hơn sau, nhưng điểm chính là—không giống như, chẳng hạn, đối với việc tìm hiểu những gì có trong hình ảnh—không cần “gắn thẻ rõ ràng”; Trên thực tế, ChatGPT có thể học trực tiếp từ bất kỳ ví dụ nào về văn bản mà nó đưa ra.
OK, vậy còn quá trình học thực tế trong mạng nơ-ron thì sao? Cuối cùng, tất cả chỉ là xác định trọng số nào sẽ nắm bắt tốt nhất các ví dụ đào tạo đã được đưa ra. Và có tất cả các loại lựa chọn chi tiết và “cài đặt siêu tham số” (được gọi như vậy vì trọng số có thể được coi là “tham số”) có thể được sử dụng để điều chỉnh cách thực hiện điều này. Có nhiều lựa chọn khác nhau về chức năng mất mát(tổng các bình phương, tổng các giá trị tuyệt đối, v.v.). Có nhiều cách khác nhau để giảm thiểu tổn thất (khoảng cách trong không gian trọng lượng để di chuyển ở mỗi bước, v.v.). Và sau đó là những câu hỏi như trình bày một “lô” các ví dụ lớn đến mức nào để có được từng ước tính liên tiếp về tổn thất mà một người đang cố gắng giảm thiểu. Và, vâng, người ta có thể áp dụng máy học (ví dụ như chúng tôi làm trong Ngôn ngữ Wolfram) để tự động hóa máy học—và để tự động thiết lập những thứ như siêu tham số.
Nhưng cuối cùng, toàn bộ quá trình đào tạo có thể được mô tả bằng cách xem mức độ mất mát giảm dần như thế nào (như trong trình theo dõi tiến trình Ngôn ngữ Wolfram này cho một khóa đào tạo nhỏ ):
Và những gì người ta thường thấy là tổn thất giảm trong một thời gian, nhưng cuối cùng sẽ giảm dần ở một số giá trị không đổi. Nếu giá trị đó đủ nhỏ, thì việc đào tạo có thể được coi là thành công; nếu không, đó có thể là một dấu hiệu nên thử thay đổi kiến trúc mạng.
Người ta có thể cho biết phải mất bao lâu để “đường cong học tập” phẳng ra không? Giống như đối với rất nhiều thứ khác, dường như có các mối quan hệ mở rộng quy luật lũy thừa gần đúng phụ thuộc vào kích thước của mạng nơ-ron và lượng dữ liệu mà một người sử dụng. Nhưng kết luận chung là đào tạo một mạng lưới thần kinh rất khó—và cần rất nhiều nỗ lực tính toán. Và trên thực tế, phần lớn nỗ lực đó được dành để thực hiện các phép toán trên các dãy số, vốn là thứ mà GPU giỏi—đó là lý do tại sao việc đào tạo mạng nơ-ron thường bị giới hạn bởi tính khả dụng của GPU.
Trong tương lai, liệu sẽ có những cách cơ bản tốt hơn để đào tạo mạng lưới thần kinh hay nói chung là làm những gì mạng lưới thần kinh làm? Gần như chắc chắn, tôi nghĩ vậy. Ý tưởng cơ bản của mạng nơ-ron là tạo ra một “kết cấu máy tính” linh hoạt từ một số lượng lớn các thành phần đơn giản (về cơ bản là giống hệt nhau)—và để “kết cấu” này trở thành một thứ có thể được sửa đổi dần dần để học hỏi từ các ví dụ. Trong các mạng nơ-ron hiện tại, về cơ bản, người ta sử dụng các ý tưởng về phép tính—áp dụng cho số thực—để thực hiện sửa đổi gia tăng đó. Nhưng ngày càng rõ ràng rằng việc có những con số có độ chính xác cao không thành vấn đề; 8 bit trở xuống có thể là đủ ngay cả với các phương pháp hiện tại.
Với các hệ thống tính toán như máy tự động di động về cơ bản hoạt động song song trên nhiều bit riêng lẻ, chưa bao giờ rõ ràng cách thực hiện loại sửa đổi gia tăng này , nhưng không có lý do gì để nghĩ rằng điều đó là không thể. Và trên thực tế, giống như “ bước đột phá về học sâu của năm 2012 ”, có thể việc sửa đổi gia tăng như vậy sẽ thực sự dễ dàng hơn trong các trường hợp phức tạp hơn là trong các trường hợp đơn giản.
Mạng nơ-ron—có lẽ hơi giống bộ não—được thiết lập để có một mạng nơ-ron về cơ bản là cố định, với thứ được thay đổi là cường độ (“trọng lượng”) của các kết nối giữa chúng. (Có lẽ ít nhất là trong bộ não trẻ, số lượng đáng kể các kết nối hoàn toàn mới cũng có thể phát triển.) Nhưng trong khi đây có thể là một thiết lập thuận tiện cho sinh học, thì không rõ ràng rằng nó thậm chí còn gần với cách tốt nhất để đạt được chức năng mà chúng ta cần. Và một cái gì đó liên quan đến việc viết lại mạng lũy tiến tương đương (có lẽ gợi nhớ đến Dự án Vật lý của chúng tôi ) cuối cùng cũng có thể tốt hơn.
Nhưng ngay cả trong khuôn khổ của các mạng nơ-ron hiện có, hiện vẫn có một hạn chế quan trọng: việc đào tạo mạng nơ-ron như hiện nay được thực hiện về cơ bản là tuần tự, với tác động của từng lô ví dụ được truyền trở lại để cập nhật các trọng số. Và thực tế là với phần cứng máy tính hiện tại—thậm chí có tính đến GPU—hầu hết mạng nơ-ron ở trạng thái “không hoạt động” trong phần lớn thời gian trong quá trình đào tạo, mỗi lần chỉ một phần được cập nhật. Và theo một nghĩa nào đó, điều này là do các máy tính hiện tại của chúng ta có xu hướng có bộ nhớ tách biệt với CPU (hoặc GPU) của chúng. Nhưng trong não bộ thì có lẽ là khác—với mọi “phần tử bộ nhớ” (tức là tế bào thần kinh) cũng là một phần tử tính toán có khả năng hoạt động. Và nếu chúng ta có thể thiết lập phần cứng máy tính tương lai của mình theo cách này thì có thể thực hiện đào tạo hiệu quả hơn nhiều.
“Chắc chắn một mạng đủ lớn có thể làm bất cứ điều gì!”
Khả năng của một thứ như ChatGPT có vẻ ấn tượng đến mức người ta có thể tưởng tượng rằng nếu một người có thể “tiếp tục” và huấn luyện các mạng thần kinh ngày càng lớn hơn, thì cuối cùng họ sẽ có thể “làm mọi thứ”. Và nếu một người quan tâm đến những thứ có thể dễ dàng tiếp cận với suy nghĩ của con người ngay lập tức, thì rất có thể đây là trường hợp. Nhưng bài học của khoa học hàng trăm năm qua là có những thứ có thể được tìm ra bằng các quy trình chính thức, nhưng không dễ dàng tiếp cận được với suy nghĩ của con người ngay lập tức.
Toán học không cần thiết là một ví dụ lớn. Nhưng trường hợp chung thực sự là tính toán. Và cuối cùng, vấn đề là hiện tượng tính toán bất khả quy . Có một số tính toán mà người ta có thể nghĩ rằng sẽ mất nhiều bước để thực hiện, nhưng thực tế có thể được “rút gọn” thành một thứ gì đó khá tức thì. Nhưng việc phát hiện ra tính bất khả quy của máy tính ngụ ý rằng điều này không phải lúc nào cũng hiệu quả. Và thay vào đó, có các quy trình—có thể giống như quy trình bên dưới—nơi để tìm ra điều gì xảy ra chắc chắn đòi hỏi về cơ bản phải theo dõi từng bước tính toán:
Những thứ mà chúng ta thường làm với bộ não của mình có lẽ được chọn một cách cụ thể để tránh tính bất khả quy của máy tính. Phải nỗ lực đặc biệt để làm toán trong não của một người. Và trên thực tế, hầu như không thể “nghĩ thấu đáo” các bước trong hoạt động của bất kỳ chương trình không tầm thường nào chỉ trong não của một người.
Nhưng tất nhiên để làm được điều đó chúng ta có máy tính. Và với máy tính, chúng ta có thể dễ dàng làm những việc dài, không thể tính toán được. Và điểm mấu chốt là nhìn chung không có lối tắt nào cho những điều này.
Vâng, chúng ta có thể ghi nhớ rất nhiều ví dụ cụ thể về những gì xảy ra trong một số hệ thống máy tính cụ thể. Và có lẽ chúng ta thậm chí có thể thấy một số mẫu (“có thể rút gọn bằng máy tính”) cho phép chúng ta thực hiện một chút khái quát hóa. Nhưng vấn đề là tính bất khả quy của tính toán có nghĩa là chúng ta không bao giờ có thể đảm bảo rằng điều không mong muốn sẽ không xảy ra—và chỉ bằng cách thực hiện phép tính một cách rõ ràng, bạn mới có thể biết điều gì thực sự xảy ra trong bất kỳ trường hợp cụ thể nào.
Và cuối cùng, chỉ có một sự căng thẳng cơ bản giữa khả năng học hỏi và tính không thể rút gọn trong tính toán. Học tập liên quan đến hiệu quả nén dữ liệu bằng cách tận dụng các quy luật . Nhưng tính bất khả quy của tính toán ngụ ý rằng cuối cùng thì có một giới hạn đối với những quy luật có thể có.
Như một vấn đề thực tế, người ta có thể tưởng tượng việc xây dựng các thiết bị tính toán nhỏ—như máy tự động di động hoặc máy Turing—thành các hệ thống có thể đào tạo được như mạng lưới thần kinh. Và thực sự những thiết bị như vậy có thể đóng vai trò là “công cụ” tốt cho mạng thần kinh—như Wolfram|Alpha có thể là một công cụ tốt cho ChatGPT . Nhưng tính bất khả quy của máy tính ngụ ý rằng người ta không thể mong đợi “vào bên trong” các thiết bị đó và yêu cầu chúng học.
Hay nói cách khác, có một sự đánh đổi cuối cùng giữa khả năng và khả năng đào tạo: bạn càng muốn một hệ thống thực hiện “việc sử dụng thực sự” các khả năng tính toán của nó, thì hệ thống đó càng thể hiện tính không thể thay đổi tính toán và càng ít khả năng đào tạo được. Và nó càng dễ huấn luyện về cơ bản, nó càng ít có khả năng thực hiện các phép tính phức tạp.
(Đối với ChatGPT như hiện tại, tình hình thực sự còn nghiêm trọng hơn nhiều, bởi vì mạng thần kinh được sử dụng để tạo ra từng mã thông báo đầu ra là một mạng “chuyển tiếp” thuần túy, không có vòng lặp và do đó không có khả năng thực hiện bất kỳ loại tính toán với “luồng điều khiển” không cần thiết.)
Tất nhiên, người ta có thể tự hỏi liệu việc có thể thực hiện các phép tính tối giản có thực sự quan trọng hay không. Và thực sự đối với phần lớn lịch sử loài người, nó không đặc biệt quan trọng. Nhưng thế giới công nghệ hiện đại của chúng ta đã được xây dựng dựa trên kỹ thuật sử dụng ít nhất là các phép tính toán học — và ngày càng có nhiều phép tính tổng quát hơn. Và nếu chúng ta nhìn vào thế giới tự nhiên, thì nó chứa đầy những tính toán không thể giản lược được — mà chúng ta đang dần hiểu cách mô phỏng và sử dụng cho các mục đích công nghệ của mình.
Đúng vậy, một mạng lưới thần kinh chắc chắn có thể nhận thấy các loại quy luật trong thế giới tự nhiên mà chúng ta cũng có thể dễ dàng nhận thấy với “tư duy không cần trợ giúp của con người”. Nhưng nếu chúng ta muốn tìm ra những thứ thuộc phạm vi của toán học hoặc khoa học tính toán thì mạng nơ-ron sẽ không thể làm được điều đó—trừ khi nó “sử dụng một cách hiệu quả hệ thống tính toán “thông thường” như một công cụ.
Nhưng có điều gì đó có khả năng gây nhầm lẫn về tất cả những điều này. Trước đây, có rất nhiều nhiệm vụ—kể cả viết luận—mà chúng ta cho rằng “về cơ bản là quá khó” đối với máy tính. Và bây giờ chúng ta thấy chúng được thực hiện bởi những thứ như ChatGPT, chúng ta có xu hướng đột nhiên nghĩ rằng máy tính phải trở nên mạnh mẽ hơn rất nhiều—đặc biệt là vượt qua những thứ mà về cơ bản chúng đã có thể làm được (chẳng hạn như tính toán dần dần hành vi của các hệ thống tính toán như máy tự động di động) .
Nhưng đây không phải là kết luận đúng để rút ra. Các quy trình không thể rút gọn về mặt tính toán vẫn không thể rút gọn về mặt tính toán và về cơ bản vẫn khó đối với máy tính—ngay cả khi máy tính có thể dễ dàng tính toán các bước riêng lẻ của chúng. Và thay vào đó, điều chúng ta nên kết luận là những công việc—như viết luận—mà con người chúng ta có thể làm, nhưng chúng ta không nghĩ rằng máy tính có thể làm được, thực sự ở một khía cạnh nào đó dễ tính toán hơn chúng ta nghĩ.
Nói cách khác, lý do mạng nơ-ron có thể thành công trong việc viết một bài luận là bởi vì viết một bài luận hóa ra lại là một vấn đề “nông cạn hơn về mặt tính toán” so với chúng ta nghĩ. Và theo một nghĩa nào đó, điều này đưa chúng ta đến gần hơn với việc “có một lý thuyết” về cách con người chúng ta quản lý để làm những việc như viết luận hoặc nói chung là xử lý ngôn ngữ.
Nếu bạn có một mạng lưới thần kinh đủ lớn thì vâng, bạn có thể làm bất cứ điều gì con người có thể dễ dàng làm. Nhưng bạn sẽ không nắm bắt được những gì thế giới tự nhiên nói chung có thể làm được—hoặc những công cụ mà chúng ta đã tạo ra từ thế giới tự nhiên có thể làm được. Và chính việc sử dụng những công cụ đó—cả thực tế và khái niệm—đã cho phép chúng ta trong những thế kỷ gần đây vượt qua ranh giới của những thứ mà “suy nghĩ thuần túy của con người không cần trợ giúp” có thể tiếp cận được, và nắm bắt cho mục đích của con người nhiều hơn những gì có sẵn trong thế giới vật lý và máy tính. vũ trụ.
Khái niệm nhúng
Mạng lưới thần kinh — ít nhất là như chúng hiện đang được thiết lập — về cơ bản dựa trên các con số. Vì vậy, nếu chúng ta định sử dụng chúng để làm việc trên một thứ gì đó như văn bản, chúng ta sẽ cần một cách để biểu thị văn bản của mình bằng các con số . Và chắc chắn chúng ta có thể bắt đầu (về cơ bản giống như ChatGPT) bằng cách chỉ định một số cho mỗi từ trong từ điển. Nhưng có một ý tưởng quan trọng—ví dụ như đó là trọng tâm của ChatGPT—còn vượt xa điều đó. Và đó là ý tưởng “nhúng”. Người ta có thể nghĩ về phép nhúng như một cách để cố gắng biểu thị “bản chất” của một thứ gì đó bằng một dãy số—với thuộc tính “những thứ ở gần” được biểu thị bằng các số ở gần.
Và vì vậy, chẳng hạn, chúng ta có thể nghĩ về việc nhúng từ giống như việc cố gắng sắp xếp các từ trong một loại “không gian có nghĩa”, trong đó các từ bằng cách nào đó “gần nghĩa” xuất hiện gần đó trong quá trình nhúng. Các phần nhúng thực tế được sử dụng—chẳng hạn như trong ChatGPT—có xu hướng liên quan đến danh sách số lớn. Nhưng nếu chúng tôi chiếu xuống 2D, chúng tôi có thể hiển thị các ví dụ về cách các từ được trình bày bằng cách nhúng:
Và, vâng, những gì chúng ta thấy rất tốt trong việc ghi lại những ấn tượng điển hình hàng ngày. Nhưng làm thế nào chúng ta có thể xây dựng một nhúng như vậy? Về cơ bản, ý tưởng là xem xét một lượng lớn văn bản (ở đây là 5 tỷ từ trên web) và sau đó xem “môi trường” tương tự như thế nào trong đó các từ khác nhau xuất hiện. Vì vậy, ví dụ: “alligator” và “crocodile” sẽ thường xuất hiện gần như hoán đổi cho nhau trong các câu tương tự khác và điều đó có nghĩa là chúng sẽ được đặt gần nhau trong phần nhúng. Nhưng “củ cải” và “đại bàng” sẽ không có xu hướng xuất hiện trong các câu tương tự, vì vậy chúng sẽ được đặt cách xa nhau trong phần nhúng.
Nhưng làm cách nào để thực sự triển khai một thứ như thế này bằng cách sử dụng mạng lưới thần kinh? Hãy bắt đầu bằng cách nói về nhúng không phải cho từ, mà cho hình ảnh. Chúng tôi muốn tìm một số cách để mô tả các hình ảnh bằng danh sách các số sao cho “các hình ảnh mà chúng tôi cho là tương tự” được gán cho các danh sách số tương tự nhau.
Làm thế nào để chúng ta biết liệu chúng ta có nên “xem xét các hình ảnh tương tự” hay không? Chà, nếu hình ảnh của chúng tôi, chẳng hạn như các chữ số viết tay, chúng tôi có thể “coi hai hình ảnh giống nhau” nếu chúng có cùng chữ số. Trước đó chúng ta đã thảo luận về một mạng lưới thần kinh được đào tạo để nhận dạng các chữ số viết tay. Và chúng ta có thể coi mạng nơ-ron này được thiết lập sao cho ở đầu ra cuối cùng, nó đặt hình ảnh vào 10 ngăn khác nhau, mỗi ngăn chứa một chữ số.
Nhưng điều gì sẽ xảy ra nếu chúng ta “chặn” những gì đang diễn ra bên trong mạng thần kinh trước khi quyết định cuối cùng “đó là ‘4’” được đưa ra? Chúng ta có thể mong đợi rằng bên trong mạng nơ-ron có những con số đặc trưng cho hình ảnh “hầu hết giống 4 nhưng hơi giống 2” hoặc một số thứ tương tự. Và ý tưởng là lấy những con số như vậy để sử dụng làm thành phần trong một phép nhúng.
Vì vậy, đây là khái niệm. Thay vì trực tiếp cố gắng mô tả “hình ảnh nào gần hình ảnh nào”, thay vào đó, chúng tôi xem xét một nhiệm vụ được xác định rõ (trong trường hợp này là nhận dạng chữ số) mà chúng tôi có thể nhận được dữ liệu huấn luyện rõ ràng—sau đó sử dụng thực tế là khi thực hiện nhiệm vụ này, mạng nơ-ron hoàn toàn phải đưa ra số tiền đối với “quyết định về độ gần”. Vì vậy, thay vì chúng ta phải nói rõ ràng về “độ gần của hình ảnh”, chúng ta chỉ nói về câu hỏi cụ thể về chữ số mà một hình ảnh đại diện, và sau đó chúng ta “để nó cho mạng lưới thần kinh” để xác định ngầm định điều đó ngụ ý gì về “độ gần của hình ảnh”.
Vậy chi tiết hơn thì điều này hoạt động như thế nào đối với mạng nhận dạng chữ số? Chúng ta có thể coi mạng bao gồm 11 lớp liên tiếp, mà chúng ta có thể tóm tắt một cách hình tượng như thế này (với các chức năng kích hoạt được hiển thị dưới dạng các lớp riêng biệt):
Lúc đầu, chúng tôi đang đưa vào các hình ảnh thực tế của lớp đầu tiên, được biểu thị bằng các mảng giá trị pixel 2D. Và cuối cùng—từ lớp cuối cùng—chúng tôi lấy ra một mảng gồm 10 giá trị, mà chúng tôi có thể nghĩ đến việc nói “mức độ chắc chắn” của mạng là hình ảnh tương ứng với từng chữ số từ 0 đến 9.
Cung cấp hình ảnh và các giá trị của các nơ-ron trong lớp cuối cùng đó là:
Nói cách khác, tại thời điểm này, mạng nơ-ron “cực kỳ chắc chắn” rằng hình ảnh này là số 4—và để thực sự nhận được kết quả đầu ra “4”, chúng ta chỉ cần chọn ra vị trí của nơ-ron có giá trị lớn nhất.
Nhưng nếu chúng ta nhìn sớm hơn một bước thì sao? Hoạt động cuối cùng trong mạng được gọi là softmax cố gắng “bắt buộc phải chắc chắn”. Nhưng trước khi điều đó được áp dụng, các giá trị của nơ-ron là:
Tế bào thần kinh đại diện cho “4” vẫn có giá trị số cao nhất. Nhưng cũng có thông tin về giá trị của các nơ-ron khác. Và chúng ta có thể mong đợi rằng danh sách các con số này theo một nghĩa nào đó có thể được sử dụng để mô tả “bản chất” của hình ảnh—và do đó để cung cấp thứ gì đó mà chúng ta có thể sử dụng làm phương pháp nhúng. Và vì vậy, ví dụ: mỗi trong số 4 ở đây có một “chữ ký” hơi khác (hoặc “tính năng nhúng”)—tất cả đều rất khác so với 8:
Ở đây, về cơ bản, chúng tôi đang sử dụng 10 số để mô tả hình ảnh của mình. Nhưng nó thường tốt hơn để sử dụng nhiều hơn thế. Và ví dụ: trong mạng nhận dạng chữ số của chúng tôi, chúng tôi có thể nhận được một mảng gồm 500 số bằng cách nhấn vào lớp trước đó. Và đây có lẽ là một mảng hợp lý để sử dụng như một “hình ảnh nhúng”.
Nếu chúng ta muốn tạo một trực quan rõ ràng về “không gian hình ảnh” cho các chữ số viết tay, chúng ta cần “giảm kích thước”, một cách hiệu quả bằng cách chiếu vectơ 500 chiều mà chúng ta đã đưa vào, chẳng hạn như không gian 3D:
Chúng ta vừa nói về việc tạo đặc tính (và do đó nhúng) cho hình ảnh dựa trên việc xác định sự giống nhau của hình ảnh một cách hiệu quả bằng cách xác định xem (theo tập huấn luyện của chúng tôi) chúng có tương ứng với cùng một chữ số viết tay hay không. Và chúng ta có thể làm điều tương tự nói chung hơn nhiều đối với hình ảnh nếu chúng ta có một tập huấn luyện xác định, chẳng hạn như mỗi hình ảnh thuộc về loại đối tượng nào trong số 5000 loại đối tượng phổ biến (mèo, chó, ghế, …). Và theo cách này, chúng ta có thể tạo một hình ảnh nhúng được “neo” bằng cách xác định các đối tượng chung của chúng ta, nhưng sau đó “khái quát hóa xung quanh đó” theo hành vi của mạng nơ-ron. Và vấn đề là trong chừng mực hành vi đó phù hợp với cách con người chúng ta cảm nhận và giải thích hình ảnh, thì điều này cuối cùng sẽ trở thành một sự nhúng “có vẻ phù hợp với chúng ta” và hữu ích trong thực tế khi thực hiện các nhiệm vụ “giống như phán đoán của con người”.
OK, vậy làm cách nào để chúng ta thực hiện theo cùng một cách tiếp cận để tìm các phần nhúng cho các từ? Điều quan trọng là bắt đầu từ một nhiệm vụ về những từ mà chúng ta có thể dễ dàng luyện tập. Và nhiệm vụ tiêu chuẩn như vậy là “dự đoán từ”. Hãy tưởng tượng chúng ta được tặng “con mèo ___”. Dựa trên một khối lượng lớn văn bản (giả sử nội dung văn bản của trang web), xác suất cho các từ khác nhau có thể “điền vào chỗ trống” là gì? Hoặc, cách khác, đưa ra “___ đen ___” xác suất cho các “từ đệm” khác nhau là bao nhiêu?
Làm thế nào để chúng tôi thiết lập vấn đề này cho một mạng lưới thần kinh? Cuối cùng, chúng ta phải hình thành mọi thứ dưới dạng các con số. Và một cách để làm điều này là gán một số duy nhất cho mỗi từ trong số 50.000 từ thông dụng trong tiếng Anh. Vì vậy, ví dụ: “the” có thể là 914 và “cat” (có khoảng trắng phía trước) có thể là 3542. (Và đây là những con số thực được GPT-2 sử dụng.) Vì vậy, đối với bài toán “con ___” , đầu vào của chúng tôi có thể là {914, 3542}. Đầu ra nên như thế nào? Chà, nó phải là một danh sách gồm 50.000 số hoặc hơn để đưa ra xác suất hiệu quả cho từng từ có thể “điền vào”. Và một lần nữa, để tìm ra cách nhúng, chúng tôi muốn “chặn” “phần bên trong” của mạng nơ-ron ngay trước khi nó “đi đến kết luận”—và sau đó chọn danh sách các số xuất hiện ở đó và chúng tôi có thể nghĩ ra như “đặc trưng cho từng từ”.
OK, vậy những đặc điểm đó trông như thế nào? Trong 10 năm qua, đã có một loạt các hệ thống khác nhau được phát triển ( word2vec , GloVe , BERT , GPT , …), mỗi hệ thống dựa trên một cách tiếp cận mạng nơ-ron khác nhau. Nhưng suy cho cùng tất cả chúng đều lấy từ ngữ và đặc trưng hóa chúng bằng những danh sách từ hàng trăm đến hàng nghìn con số.
Ở dạng thô, các “vectơ nhúng” này khá thiếu thông tin. Ví dụ: đây là những gì GPT-2 tạo ra dưới dạng vectơ nhúng thô cho ba từ cụ thể:
Nếu chúng ta làm những việc như đo khoảng cách giữa các vectơ này, thì chúng ta có thể tìm thấy những thứ như “độ gần” của từ. Sau đó, chúng ta sẽ thảo luận chi tiết hơn về những gì chúng ta có thể coi là tầm quan trọng “nhận thức” của các nhúng như vậy. Nhưng hiện tại, điểm chính là chúng ta có một cách hữu ích để biến các từ thành các tập hợp số “thân thiện với mạng nơ-ron”.
Nhưng thực ra chúng ta có thể đi xa hơn là chỉ mô tả các từ bằng tập hợp các con số; chúng ta cũng có thể làm điều này đối với các chuỗi từ hoặc toàn bộ khối văn bản. Và bên trong ChatGPT, đó là cách nó xử lý mọi thứ. Nó lấy văn bản mà nó có được cho đến nay và tạo ra một vectơ nhúng để biểu diễn nó. Sau đó, mục tiêu của nó là tìm xác suất cho các từ khác nhau có thể xảy ra tiếp theo. Và nó thể hiện câu trả lời của nó cho điều này dưới dạng một danh sách các con số về cơ bản đưa ra xác suất cho mỗi từ trong số 50.000 từ có thể hoặc hơn.
(Nói đúng ra, ChatGPT không xử lý các từ, mà là với “mã thông báo” —đơn vị ngôn ngữ thuận tiện có thể là toàn bộ từ hoặc có thể chỉ là các phần như “pre” hoặc “ing” hoặc “ized”. Làm việc với mã thông báo giúp dễ dàng hơn để ChatGPT xử lý các từ hiếm, từ ghép và không phải tiếng Anh, và đôi khi, dù tốt hay xấu, để phát minh ra từ mới.)
Trò chuyện bên trongGPT
OK, vậy là cuối cùng chúng ta đã sẵn sàng để thảo luận về những gì bên trong ChatGPT. Và vâng, cuối cùng, đó là một mạng thần kinh khổng lồ—hiện là phiên bản của cái gọi là mạng GPT-3 với 175 tỷ trọng lượng. Theo nhiều cách, đây là một mạng nơ-ron rất giống những mạng khác mà chúng ta đã thảo luận. Nhưng đó là một mạng lưới thần kinh được thiết lập đặc biệt để xử lý ngôn ngữ. Và tính năng đáng chú ý nhất của nó là một phần của kiến trúc mạng nơ-ron được gọi là “máy biến áp”.
Trong các mạng nơ-ron đầu tiên mà chúng ta đã thảo luận ở trên, mọi nơ-ron ở bất kỳ lớp nào về cơ bản đều được kết nối (ít nhất là có trọng lượng) với mọi nơ-ron trên lớp trước đó. Nhưng loại mạng được kết nối đầy đủ này (có lẽ) là quá mức cần thiết nếu một người làm việc với dữ liệu có cấu trúc cụ thể, đã biết. Và do đó, ví dụ, trong giai đoạn đầu xử lý hình ảnh, thông thường sử dụng cái gọi là mạng nơ-ron tích chập (“convnets”), trong đó các nơ-ron được bố trí một cách hiệu quả trên một lưới tương tự như các pixel trong ảnh—và được kết nối với nhau. chỉ đến các nơ-ron lân cận trên lưới.
Ý tưởng của máy biến áp là làm một cái gì đó ít nhất là tương tự đối với các chuỗi mã thông báo tạo nên một đoạn văn bản. Nhưng thay vì chỉ xác định một vùng cố định trong chuỗi có thể có các kết nối, các máy biến áp thay vào đó đưa ra khái niệm “ chú ý ”—và ý tưởng “chú ý” nhiều hơn đến một số phần của chuỗi hơn những phần khác. Có thể một ngày nào đó sẽ hợp lý nếu chỉ bắt đầu một mạng lưới thần kinh chung và thực hiện tất cả các tùy chỉnh thông qua đào tạo. Nhưng ít nhất cho đến bây giờ, trong thực tế, điều quan trọng là phải “mô đun hóa” mọi thứ — như cách mà máy biến thế đã làm, và có lẽ như bộ não của chúng ta cũng vậy.
OK, vậy ChatGPT (hay đúng hơn là mạng GPT-3 dựa trên nó) thực sự làm gì? Hãy nhớ lại rằng mục tiêu tổng thể của nó là tiếp tục văn bản theo cách “hợp lý”, dựa trên những gì nó thấy được từ quá trình đào tạo mà nó đã có (bao gồm việc xem hàng tỷ trang văn bản từ web, v.v.). Vì vậy, tại bất kỳ thời điểm nào, nó có một lượng văn bản nhất định—và mục tiêu của nó là đưa ra một lựa chọn thích hợp cho mã thông báo tiếp theo để thêm vào.
Nó hoạt động trong ba giai đoạn cơ bản. Đầu tiên, nó lấy chuỗi mã thông báo tương ứng với văn bản cho đến nay và tìm phần nhúng (tức là một dãy số) đại diện cho các mã này. Sau đó, nó hoạt động trên phần nhúng này—theo “cách mạng nơ-ron tiêu chuẩn”, với các giá trị “lượn qua” các lớp liên tiếp trong mạng—để tạo ra một phần nhúng mới (tức là một dãy số mới). Sau đó, nó lấy phần cuối cùng của mảng này và tạo từ mảng đó một mảng khoảng 50.000 giá trị biến thành xác suất cho các mã thông báo tiếp theo có thể khác nhau. (Và, vâng, điều đó xảy ra là có cùng số lượng thẻ được sử dụng như số từ phổ biến trong tiếng Anh, mặc dù chỉ có khoảng 3000 thẻ là từ nguyên và phần còn lại là các từ rời rạc.)
Một điểm quan trọng là mọi phần của quy trình này đều được thực hiện bởi một mạng thần kinh, có trọng số được xác định bằng cách đào tạo từ đầu đến cuối của mạng. Nói cách khác, trên thực tế không có gì ngoại trừ kiến trúc tổng thể được “thiết kế rõ ràng”; mọi thứ chỉ là “học” từ dữ liệu đào tạo.
Tuy nhiên, có rất nhiều chi tiết trong cách thiết lập kiến trúc—phản ánh tất cả các loại kinh nghiệm và truyền thuyết về mạng nơ-ron. Và—mặc dù điều này chắc chắn đang đi vào ngõ cụt—tôi nghĩ sẽ hữu ích khi nói về một số chi tiết đó, đặc biệt là để hiểu được những gì cần thiết để xây dựng một thứ gì đó như ChatGPT.
Đầu tiên là mô-đun nhúng. Đây là sơ đồ biểu diễn Ngôn ngữ Wolfram cho GPT-2:
Đầu vào là một vectơ gồm n mã thông báo (được biểu diễn như trong phần trước bằng các số nguyên từ 1 đến khoảng 50.000). Mỗi mã thông báo này được chuyển đổi (bằng mạng nơ-ron một lớp ) thành một vectơ nhúng (có độ dài 768 đối với GPT-2 và 12.288 đối với GPT-3 của ChatGPT). Trong khi đó, có một “đường dẫn thứ cấp” lấy chuỗi vị trí (số nguyên) cho mã thông báo và từ những số nguyên này tạo ra một vectơ nhúng khác. Và cuối cùng, các vectơ nhúng từ giá trị mã thông báo và vị trí mã thông báo được cộng lại với nhau —để tạo ra chuỗi vectơ nhúng cuối cùng từ mô-đun nhúng.
Tại sao người ta chỉ cộng các vectơ nhúng giá trị mã thông báo và vị trí mã thông báo với nhau? Tôi không nghĩ có bất kỳ khoa học cụ thể nào về điều này. Chỉ là có nhiều thứ khác nhau đã được thử, và đây là thứ có vẻ hiệu quả. Và đó là một phần truyền thuyết về mạng lưới thần kinh mà—theo một nghĩa nào đó—miễn là thiết lập mà người ta có là “gần đúng”, thông thường có thể hiểu chi tiết chỉ bằng cách đào tạo đầy đủ mà không cần thực sự “hiểu sơ sơ”. cấp độ kỹ thuật” khá rõ ràng về cách mà mạng lưới thần kinh tự cấu hình.
Đây là chức năng của mô-đun nhúng, hoạt động trên chuỗi xin chào xin chào xin chào xin chào xin chào xin chào xin chào xin chào xin chào tạm biệt bye bye bye bye bye bye bye bye bye :
Các phần tử của vectơ nhúng cho mỗi mã thông báo được hiển thị ở cuối trang và trên toàn trang, đầu tiên chúng ta thấy một loạt các nhúng “ xin chào ”, tiếp theo là một loạt các nhúng “ bye ”. Mảng thứ hai ở trên là nhúng theo vị trí—với cấu trúc có vẻ hơi ngẫu nhiên của nó chỉ là thứ “tình cờ học được” (trong trường hợp này là trong GPT-2).
Được rồi, sau mô-đun nhúng là “sự kiện chính” của máy biến áp: một chuỗi cái gọi là “khối chú ý” (12 cho GPT-2, 96 cho GPT-3 của ChatGPT). Tất cả đều khá phức tạp—và gợi nhớ đến các hệ thống kỹ thuật lớn khó hiểu điển hình, hoặc, đối với vấn đề đó, các hệ thống sinh học. Nhưng dù sao đi nữa, đây là biểu diễn sơ đồ của một “khối chú ý” duy nhất (dành cho GPT-2):
Trong mỗi khối chú ý như vậy có một tập hợp các “đầu chú ý” (12 đối với GPT-2, 96 đối với GPT-3 của ChatGPT)—mỗi khối hoạt động độc lập trên các khối giá trị khác nhau trong vectơ nhúng. (Và, vâng, chúng tôi không biết bất kỳ lý do cụ thể nào tại sao nên tách vectơ nhúng hoặc ý nghĩa của các phần khác nhau của nó là gì”; đây chỉ là một trong những thứ được cho là “có hiệu quả” .)
OK, vậy những người đứng đầu sự chú ý làm gì? Về cơ bản, chúng là một cách “nhìn lại” trong chuỗi mã thông báo (tức là trong văn bản được tạo ra cho đến nay) và “đóng gói quá khứ” ở dạng hữu ích cho việc tìm kiếm mã thông báo tiếp theo. Trong phần đầu tiên ở trên, chúng ta đã nói về việc sử dụng xác suất 2 gam để chọn từ dựa trên từ liền trước của chúng. Cơ chế “chú ý” trong máy biến áp làm gì là cho phép “chú ý đến” ngay cả những từ có trước đó — do đó, có khả năng nắm bắt cách thức, chẳng hạn, động từ có thể chỉ những danh từ xuất hiện nhiều từ trước chúng trong một câu.
Ở cấp độ chi tiết hơn, điều mà một đầu chú ý làm là kết hợp lại các khối trong các vectơ nhúng được liên kết với các mã thông báo khác nhau, với các trọng số nhất định. Và do đó, ví dụ: 12 tiêu đề chú ý trong khối chú ý đầu tiên (trong GPT-2) có nội dung sau (“nhìn-lại-tất-cả-đường-đến-đầu-của-trình-tự-của- tokens”) các mẫu “trọng số tái tổ hợp” cho chuỗi “ xin chào , tạm biệt ” ở trên:
Sau khi được xử lý bởi các đầu chú ý, “vectơ nhúng có trọng số lại” thu được (có độ dài 768 đối với GPT-2 và chiều dài 12.288 đối với GPT-3 của ChatGPT) được truyền qua một lớp mạng thần kinh “được kết nối đầy đủ” tiêu chuẩn . Thật khó để hiểu được lớp này đang làm gì. Nhưng đây là đồ thị của ma trận trọng số 768×768 mà nó đang sử dụng (ở đây dành cho GPT-2):
Lấy các đường trung bình động 64 × 64, một số cấu trúc (đi bộ ngẫu nhiên) bắt đầu xuất hiện:
Điều gì quyết định cấu trúc này? Cuối cùng, có lẽ đó là một số “mã hóa mạng lưới thần kinh” của các tính năng của ngôn ngữ loài người. Nhưng cho đến bây giờ, những tính năng đó có thể là gì vẫn chưa được biết. Trên thực tế, chúng tôi đang “mở bộ não của ChatGPT” (hoặc ít nhất là GPT-2) và phát hiện ra, vâng, nó phức tạp ở trong đó và chúng tôi không hiểu nó—mặc dù cuối cùng nó tạo ra ngôn ngữ con người có thể nhận biết được .
Được rồi, vậy là sau khi đi qua một khối chú ý, chúng ta đã có một vectơ nhúng mới—vector này sau đó được lần lượt chuyển qua các khối chú ý bổ sung (tổng cộng là 12 đối với GPT-2; 96 đối với GPT-3). Mỗi khối chú ý có mô hình cụ thể của riêng nó về trọng số “chú ý” và “được kết nối đầy đủ”. Đối với GPT-2, đây là chuỗi các trọng số chú ý cho đầu vào “xin chào, tạm biệt”, dành cho chú ý đầu tiên:
Và đây là “ma trận” (trung bình di chuyển) cho các lớp được kết nối đầy đủ:
Thật kỳ lạ, mặc dù các “ma trận trọng số” này trong các khối chú ý khác nhau trông khá giống nhau, nhưng sự phân bố kích thước của các trọng số có thể hơi khác nhau (và không phải lúc nào cũng là Gaussian):
Vì vậy, sau khi đi qua tất cả các khối chú ý này, hiệu ứng ròng của máy biến áp là gì? Về cơ bản, đó là chuyển đổi bộ sưu tập nhúng ban đầu cho chuỗi mã thông báo thành bộ sưu tập cuối cùng. Và cách hoạt động cụ thể của ChatGPT sau đó là chọn lần nhúng cuối cùng trong bộ sưu tập này và “giải mã” nó để tạo ra một danh sách các xác suất cho mã thông báo nào sẽ xuất hiện tiếp theo.
Vì vậy, đó là phác thảo những gì bên trong ChatGPT. Nó có vẻ phức tạp (đặc biệt là do có nhiều “lựa chọn kỹ thuật” chắc chắn hơi tùy tiện của nó), nhưng thực ra các yếu tố cuối cùng liên quan lại rất đơn giản. Bởi vì cuối cùng, những gì chúng ta đang giải quyết chỉ là một mạng nơ-ron được tạo thành từ “các nơ-ron nhân tạo”, mỗi nơ-ron thực hiện một thao tác đơn giản là lấy một tập hợp các đầu vào số, sau đó kết hợp chúng với các trọng số nhất định.
Đầu vào ban đầu của ChatGPT là một dãy số (các vectơ nhúng cho mã thông báo cho đến nay) và điều gì xảy ra khi ChatGPT “chạy” để tạo mã thông báo mới chỉ là những con số này “lướt qua” các lớp của mạng lưới thần kinh, với mỗi nơ-ron “làm công việc của nó” và chuyển kết quả cho các nơ-ron ở lớp tiếp theo. Không có vòng lặp hoặc “quay lại”. Mọi thứ chỉ “chuyển tiếp” thông qua mạng.
Đó là một thiết lập rất khác so với một hệ thống tính toán thông thường—chẳng hạn như máy Turing —trong đó các kết quả được “xử lý lại” lặp đi lặp lại bởi cùng các phần tử tính toán. Ở đây—ít nhất là trong việc tạo ra một mã thông báo đầu ra nhất định—mỗi phần tử tính toán (tức là nơ-ron) chỉ được sử dụng một lần.
Nhưng theo một nghĩa nào đó, vẫn còn một “vòng lặp bên ngoài” sử dụng lại các yếu tố tính toán ngay cả trong ChatGPT. Bởi vì khi ChatGPT định tạo mã thông báo mới, nó luôn “đọc” (tức là lấy làm đầu vào) toàn bộ chuỗi mã thông báo trước nó, bao gồm cả mã thông báo mà chính ChatGPT đã “viết” trước đó. Và chúng ta có thể coi thiết lập này có nghĩa là ChatGPT thực hiện—ít nhất là ở cấp độ ngoài cùng của nó—liên quan đến một “vòng phản hồi”, mặc dù vòng lặp trong đó mỗi lần lặp được hiển thị rõ ràng dưới dạng mã thông báo xuất hiện trong văn bản mà nó tạo ra.
Nhưng hãy quay lại vấn đề cốt lõi của ChatGPT: mạng thần kinh được sử dụng nhiều lần để tạo từng mã thông báo. Ở một mức độ nào đó, nó rất đơn giản: toàn bộ tập hợp các tế bào thần kinh nhân tạo giống hệt nhau. Và một số phần của mạng chỉ bao gồm các lớp nơ-ron (“ được kết nối đầy đủ ”) trong đó mọi nơ-ron trên một lớp nhất định được kết nối (với một số trọng lượng) với mọi nơ-ron trên lớp trước đó. Nhưng đặc biệt với kiến trúc biến áp của nó, ChatGPT có các bộ phận với nhiều cấu trúc hơn, trong đó chỉ các nơ-ron cụ thể trên các lớp khác nhau được kết nối. (Tất nhiên, người ta vẫn có thể nói rằng “tất cả các tế bào thần kinh đều được kết nối với nhau” – nhưng một số chỉ có trọng lượng bằng không.)
Ngoài ra, có những khía cạnh của mạng nơ-ron trong ChatGPT mà hầu như không được coi là chỉ bao gồm các lớp “đồng nhất”. Và ví dụ—như phần tóm tắt mang tính biểu tượng ở trên chỉ ra—bên trong một khối chú ý có những nơi mà “nhiều bản sao được tạo ra” của dữ liệu đến, mỗi bản sau đó đi qua một “đường dẫn xử lý” khác nhau, có khả năng liên quan đến một số lớp khác nhau và chỉ tái hợp sau này. Nhưng mặc dù đây có thể là một biểu diễn thuận tiện cho những gì đang diễn ra, nhưng về nguyên tắc, ít nhất luôn có thể nghĩ đến các lớp “lấp đầy dày đặc”, nhưng chỉ cần có một số trọng số bằng không.
Nếu nhìn vào con đường dài nhất thông qua ChatGPT, thì có khoảng 400 lớp (lõi) tham gia—theo một số cách không phải là một con số lớn. Nhưng có hàng triệu tế bào thần kinh—với tổng số 175 tỷ kết nối và do đó có 175 tỷ trọng số. Và một điều cần nhận ra là mỗi khi ChatGPT tạo mã thông báo mới, nó phải thực hiện một phép tính liên quan đến từng trọng số này. Về mặt triển khai, các tính toán này có thể được tổ chức phần nào “theo lớp” thành các hoạt động mảng song song cao có thể được thực hiện thuận tiện trên GPU. Nhưng đối với mỗi mã thông báo được tạo ra, vẫn phải thực hiện 175 tỷ phép tính (và cuối cùng là nhiều hơn một chút)—do đó, vâng, không có gì ngạc nhiên khi có thể mất một lúc để tạo một đoạn văn bản dài với ChatGPT.
Nhưng cuối cùng, điều đáng chú ý là tất cả các hoạt động này—đơn giản như chúng vốn có—bằng cách nào đó có thể cùng nhau quản lý để thực hiện công việc tạo văn bản “giống như con người” tốt như vậy. Cần phải nhấn mạnh lại rằng (ít nhất là theo những gì chúng tôi biết) không có “lý do lý thuyết cuối cùng” nào giải thích tại sao mọi thứ như thế này lại hoạt động. Và trên thực tế, như chúng ta sẽ thảo luận, tôi nghĩ chúng ta phải xem đây là một khám phá khoa học—có khả năng gây ngạc nhiên—: rằng bằng cách nào đó trong một mạng lưới thần kinh như ChatGPT, có thể nắm bắt được bản chất của những gì bộ não con người quản lý để tạo ra ngôn ngữ .
Đào tạo ChatGPT
Được rồi, vậy là chúng tôi đã đưa ra phác thảo về cách ChatGPT hoạt động sau khi được thiết lập. Nhưng nó đã được thiết lập như thế nào? Tất cả 175 tỷ trọng số đó trong mạng lưới thần kinh của nó được xác định như thế nào? Về cơ bản, chúng là kết quả của quá trình đào tạo quy mô rất lớn, dựa trên một kho văn bản khổng lồ—trên web, trong sách, v.v.—do con người viết ra. Như chúng tôi đã nói, ngay cả khi được cung cấp tất cả dữ liệu đào tạo đó, chắc chắn mạng lưới thần kinh sẽ không thể tạo thành công văn bản “giống con người”. Và, một lần nữa, dường như cần có những phần kỹ thuật chi tiết để biến điều đó thành hiện thực. Nhưng điều ngạc nhiên lớn—và khám phá—của ChatGPT là nó hoàn toàn có thể thực hiện được. Và điều đó—trên thực tế—một mạng nơ-ron với “chỉ” 175 tỷ trọng số có thể tạo ra một “mô hình hợp lý” của văn bản mà con người viết ra.
Trong thời hiện đại, có rất nhiều văn bản do con người viết ra ở dạng kỹ thuật số. Web công cộng có ít nhất vài tỷ trang do con người viết, với tổng số có lẽ là một nghìn tỷ từ văn bản. Và nếu một trong số đó bao gồm các trang web không công khai, con số có thể lớn hơn ít nhất 100 lần. Cho đến nay, hơn 5 triệu cuốn sách số hóa đã được cung cấp (trong số 100 triệu cuốn đã từng được xuất bản), cung cấp thêm 100 tỷ từ văn bản. Và đó thậm chí còn chưa đề cập đến văn bản bắt nguồn từ lời nói trong video, v.v. (Để so sánh cá nhân, tổng sản lượng tài liệu đã xuất bản trong đời của tôi là dưới 3 triệu từ một chút và trong 30 năm qua tôi đã viếtkhoảng 15 triệu từ trong email và có lẽ đã nhập tổng cộng 50 triệu từ—và chỉ trong vài năm qua, tôi đã nói hơn 10 triệu từ trên các buổi phát trực tiếp . Và, vâng, tôi sẽ đào tạo một bot từ tất cả những điều đó.)
Nhưng, OK, với tất cả dữ liệu này, làm cách nào để đào tạo một mạng lưới thần kinh từ nó? Quá trình cơ bản là rất nhiều như chúng ta đã thảo luận trong các ví dụ đơn giản ở trên. Bạn trình bày một loạt các ví dụ, sau đó bạn điều chỉnh các trọng số trong mạng để giảm thiểu lỗi (“mất mát”) mà mạng tạo ra trên các ví dụ đó. Vấn đề chính gây tốn kém cho việc “lan truyền ngược” từ lỗi là mỗi khi bạn thực hiện việc này, mọi trọng số trong mạng thường sẽ thay đổi ít nhất một chút và có rất nhiều trọng số cần xử lý. (“Tính toán ngược” thực tế thường chỉ khó hơn một yếu tố không đổi nhỏ so với tính toán chuyển tiếp.)
Với phần cứng GPU hiện đại, thật đơn giản để tính toán kết quả từ hàng loạt hàng nghìn ví dụ song song. Nhưng khi nói đến việc thực sự cập nhật các trọng số trong mạng thần kinh, các phương pháp hiện tại yêu cầu người ta thực hiện việc này về cơ bản từng đợt một. (Và, vâng, đây có lẽ là nơi bộ não thực sự—với các yếu tố tính toán và bộ nhớ kết hợp của chúng—hiện tại, ít nhất có một lợi thế về mặt kiến trúc.)
Ngay cả trong những trường hợp học các hàm số có vẻ đơn giản mà chúng tôi đã thảo luận trước đó, chúng tôi thấy rằng chúng tôi thường phải sử dụng hàng triệu ví dụ để đào tạo thành công một mạng, ít nhất là từ đầu. Vì vậy, điều này có nghĩa là chúng ta sẽ cần bao nhiêu ví dụ để đào tạo một mô hình “ngôn ngữ giống con người”? Dường như không có bất kỳ cách “lý thuyết” cơ bản nào để biết. Nhưng trên thực tế, ChatGPT đã được đào tạo thành công trên vài trăm tỷ từ văn bản.
Một số văn bản nó được nạp nhiều lần, một số chỉ một lần. Nhưng bằng cách nào đó, nó “có được thứ nó cần” từ văn bản mà nó nhìn thấy. Nhưng với khối lượng văn bản này để học hỏi, cần phải có một mạng lớn như thế nào để “học tốt”? Một lần nữa, chúng ta chưa có một cách lý thuyết cơ bản để nói. Cuối cùng—như chúng ta sẽ thảo luận thêm bên dưới—có lẽ có một “nội dung thuật toán tổng thể” nhất định đối với ngôn ngữ của con người và những gì con người thường nói bằng ngôn ngữ đó. Nhưng câu hỏi tiếp theo là mạng lưới thần kinh sẽ hiệu quả đến mức nào khi triển khai một mô hình dựa trên nội dung thuật toán đó. Và một lần nữa, chúng tôi không biết—mặc dù sự thành công của ChatGPT cho thấy nó khá hiệu quả.
Và cuối cùng, chúng ta chỉ có thể lưu ý rằng ChatGPT thực hiện những gì nó làm bằng cách sử dụng vài trăm tỷ trọng số—có thể so sánh về số lượng với tổng số từ (hoặc mã thông báo) của dữ liệu đào tạo mà nó được cung cấp. Theo một số cách, có lẽ điều đáng ngạc nhiên (mặc dù cũng được quan sát theo kinh nghiệm trong các chất tương tự nhỏ hơn của ChatGPT) rằng “kích thước của mạng” dường như hoạt động tốt lại có thể so sánh với “kích thước của dữ liệu đào tạo”. Rốt cuộc, chắc chắn không phải bằng cách nào đó “bên trong ChatGPT”, tất cả văn bản đó từ web và sách, v.v. được “lưu trữ trực tiếp”. Bởi vì những gì thực sự bên trong ChatGPT là một loạt các số—với độ chính xác nhỏ hơn 10 chữ số một chút—là một loại mã hóa phân tán nào đó của cấu trúc tổng hợp của tất cả văn bản đó.
Nói cách khác, chúng ta có thể hỏi “nội dung thông tin hiệu quả” của ngôn ngữ loài người là gì và người ta thường nói gì với nó. Có kho văn bản thô của các ví dụ về ngôn ngữ. Và sau đó là biểu diễn trong mạng thần kinh của ChatGPT. Biểu diễn đó rất có thể khác xa với biểu diễn “tối thiểu về mặt thuật toán” (như chúng ta sẽ thảo luận bên dưới). Nhưng đó là một đại diện mà mạng lưới thần kinh có thể sử dụng dễ dàng. Và trong biểu diễn này, có vẻ như cuối cùng có một chút “nén” dữ liệu huấn luyện; có vẻ như trung bình về cơ bản chỉ mất ít hơn một trọng lượng mạng thần kinh một chút để mang “nội dung thông tin” của một từ dữ liệu huấn luyện.
Khi chúng tôi chạy ChatGPT để tạo văn bản, về cơ bản, chúng tôi phải sử dụng từng trọng số một lần. Vì vậy, nếu có n trọng số, chúng ta có thứ tự n bước tính toán để thực hiện—mặc dù trên thực tế, nhiều bước trong số chúng thường có thể được thực hiện song song trong GPU. Nhưng nếu chúng ta cần khoảng n từ dữ liệu huấn luyện để thiết lập các trọng số đó, thì từ những gì chúng ta đã nói ở trên, chúng ta có thể kết luận rằng chúng ta sẽ cần khoảng n 2 bước tính toán để thực hiện việc huấn luyện mạng—đó là lý do tại sao, với phương pháp hiện tại, cuối cùng người ta cần nói về những nỗ lực đào tạo hàng tỷ đô la.
Ngoài đào tạo cơ bản
Phần lớn nỗ lực trong việc đào tạo ChatGPT được dành cho việc “hiển thị nó” một lượng lớn văn bản hiện có từ web, sách, v.v. Nhưng hóa ra còn có một phần khác—dường như khá quan trọng—cũng vậy.
Ngay sau khi hoàn thành quá trình “đào tạo thô” từ kho văn bản gốc được hiển thị, mạng nơ-ron bên trong ChatGPT đã sẵn sàng bắt đầu tạo văn bản của chính nó, tiếp tục từ lời nhắc, v.v. Tuy nhiên, kết quả từ việc này thường có vẻ hợp lý , chúng có xu hướng — đặc biệt là đối với các đoạn văn bản dài hơn — “đi lang thang” theo những cách thường không giống con người. Chẳng hạn, đó không phải là điều mà người ta có thể dễ dàng phát hiện bằng cách thực hiện các thống kê truyền thống trên văn bản. Nhưng đó là điều mà những người thực sự đọc văn bản dễ dàng nhận thấy.
Và một ý tưởng quan trọng trong việc xây dựng ChatGPT là có thêm một bước nữa sau khi “đọc một cách thụ động” những thứ như web: để con người thực tương tác tích cực với ChatGPT, xem những gì nó tạo ra và thực tế là cung cấp cho nó phản hồi về “làm thế nào để trở thành một chatbot tốt”. Nhưng làm thế nào mạng lưới thần kinh có thể sử dụng thông tin phản hồi đó? Bước đầu tiên chỉ là để con người đánh giá kết quả từ mạng lưới thần kinh. Nhưng sau đó, một mô hình mạng thần kinh khác được xây dựng để cố gắng dự đoán các xếp hạng đó. Nhưng giờ đây, mô hình dự đoán này có thể được chạy—về cơ bản giống như một hàm mất mát—trên mạng ban đầu, thực tế là cho phép mạng đó được “điều chỉnh” bởi phản hồi của con người đã được đưa ra. Và kết quả trong thực tế dường như có ảnh hưởng lớn đến sự thành công của hệ thống trong việc tạo ra đầu ra “giống con người”.
Nói chung, thật thú vị khi mạng “được đào tạo ban đầu” dường như cần một chút “chọc” để khiến nó đi theo những hướng cụ thể một cách hữu ích. Người ta có thể nghĩ rằng để mạng hoạt động như thể nó “đã học được điều gì đó mới”, người ta sẽ phải truy cập và chạy thuật toán đào tạo, điều chỉnh trọng số, v.v.
Nhưng không phải vậy. Thay vào đó, về cơ bản, có vẻ như bạn chỉ cần nói với ChatGPT điều gì đó một lần—như một phần của lời nhắc bạn đưa ra—và sau đó, nó có thể sử dụng thành công những gì bạn đã nói với nó khi nó tạo văn bản. Và một lần nữa, tôi nghĩ rằng thực tế là điều này hoạt động là một đầu mối quan trọng để hiểu ChatGPT “thực sự đang làm gì” và nó liên quan như thế nào đến cấu trúc ngôn ngữ và suy nghĩ của con người.
Chắc chắn có điều gì đó khá giống con người về nó: rằng ít nhất một khi nó đã được đào tạo trước, bạn có thể nói với nó điều gì đó chỉ một lần và nó có thể “nhớ nó”—ít nhất là “đủ lâu” để tạo ra một đoạn văn bản bằng cách sử dụng nó . Vì vậy, những gì đang xảy ra trong một trường hợp như thế này? Có thể là “mọi thứ bạn có thể nói với nó đã ở đâu đó rồi”—và bạn chỉ đang dẫn nó đến đúng chỗ. Nhưng điều đó không có vẻ hợp lý. Thay vào đó, điều có vẻ đúng hơn là, vâng, các yếu tố đã có sẵn ở đó, nhưng các chi tiết cụ thể được xác định bởi thứ gì đó giống như “quỹ đạo giữa các yếu tố đó” và đó là những gì bạn đang giới thiệu khi bạn nói với nó điều gì đó.
Và thực sự, giống như đối với con người, nếu bạn nói với nó điều gì đó kỳ lạ và bất ngờ hoàn toàn không phù hợp với khuôn khổ mà nó biết, thì có vẻ như nó sẽ không thể “tích hợp” thành công điều này. Nó chỉ có thể “tích hợp” nó nếu về cơ bản nó chạy theo một cách khá đơn giản trên khuôn khổ mà nó đã có.
Cũng đáng để chỉ ra một lần nữa rằng chắc chắn có những “giới hạn thuật toán” đối với những gì mạng lưới thần kinh có thể “nhặt”. Nói với nó các quy tắc “nông cạn” ở dạng “cái này chuyển sang cái kia”, v.v., và mạng nơ-ron rất có thể sẽ có thể biểu diễn và tái tạo những điều này một cách chính xác—và thực sự những gì nó “đã biết” từ ngôn ngữ sẽ cung cấp cho nó một mô hình ngay lập tức để làm theo. Nhưng cố gắng cung cấp cho nó các quy tắc cho một tính toán “sâu” thực sự bao gồm nhiều bước có khả năng không thể rút gọn về mặt tính toán và nó sẽ không hoạt động. (Hãy nhớ rằng ở mỗi bước, nó luôn chỉ “cung cấp dữ liệu về phía trước” trong mạng của nó, không bao giờ lặp lại trừ khi tạo ra các mã thông báo mới.)
Tất nhiên, mạng có thể tìm hiểu câu trả lời cho các phép tính “bất khả quy” cụ thể. Nhưng ngay khi có nhiều khả năng tổ hợp, thì không có cách tiếp cận “kiểu tra cứu bảng” nào như vậy sẽ hiệu quả. Và vì vậy, vâng, giống như con người, đã đến lúc mạng lưới thần kinh “tiếp cận” và sử dụng các công cụ tính toán thực tế. (Và, vâng, Ngôn ngữ Wolfram|Alpha và Wolfram đặc biệt phù hợp , bởi vì chúng được xây dựng để “nói về mọi thứ trên thế giới”, giống như mạng lưới thần kinh mô hình ngôn ngữ.)
Điều gì thực sự cho phép ChatGPT hoạt động?
Ngôn ngữ của con người—và các quá trình tư duy liên quan đến việc tạo ra nó—dường như luôn đại diện cho một loại phức tạp đỉnh cao. Và thực sự, có vẻ hơi đáng chú ý là bộ não con người—với mạng lưới “chỉ” 100 tỷ nơ-ron thần kinh (và có thể là 100 nghìn tỷ kết nối) có thể chịu trách nhiệm cho việc đó. Có lẽ, người ta có thể tưởng tượng, có một thứ gì đó đối với bộ não hơn là mạng lưới nơ-ron của chúng—giống như một lớp vật lý mới nào đó chưa được khám phá. Nhưng giờ đây với ChatGPT, chúng tôi đã có một thông tin mới quan trọng: chúng tôi biết rằng một mạng thần kinh nhân tạo, thuần túy với số lượng kết nối bằng với số lượng tế bào thần kinh có trong não có khả năng tạo ra ngôn ngữ của con người một cách đáng ngạc nhiên.
Và, đúng vậy, đó vẫn là một hệ thống lớn và phức tạp—với số trọng lượng mạng nơ-ron tương đương với số từ của văn bản hiện có trên thế giới. Nhưng ở một mức độ nào đó, dường như vẫn khó tin rằng tất cả sự phong phú của ngôn ngữ và những điều mà nó có thể nói lại có thể được gói gọn trong một hệ thống hữu hạn như vậy. Một phần của những gì đang diễn ra chắc chắn là sự phản ánh của hiện tượng phổ biến (lần đầu tiên trở nên rõ ràng trong ví dụ về quy tắc 30) rằng các quy trình tính toán trên thực tế có thể khuếch đại đáng kể độ phức tạp rõ ràng của các hệ thống ngay cả khi các quy tắc cơ bản của chúng đơn giản. Tuy nhiên, trên thực tế, như chúng ta đã thảo luận ở trên, các mạng nơ-ron thuộc loại được sử dụng trong ChatGPT có xu hướng được xây dựng đặc biệt để hạn chế tác động của hiện tượng này—và khả năng tính toán bất khả thi liên quan đến nó—nhằm mục đích làm cho việc đào tạo của chúng trở nên dễ tiếp cận hơn.
Vậy làm thế nào mà một thứ như ChatGPT có thể tiến xa như vậy với ngôn ngữ? Tôi nghĩ câu trả lời cơ bản là ngôn ngữ ở cấp độ cơ bản đơn giản hơn nhiều so với vẻ ngoài của nó. Và điều này có nghĩa là ChatGPT—ngay cả với cấu trúc mạng thần kinh đơn giản cuối cùng của nó—có thể “nắm bắt được bản chất” thành công của ngôn ngữ con người và suy nghĩ đằng sau nó. Và hơn nữa, trong quá trình đào tạo của mình, ChatGPT bằng cách nào đó đã “khám phá ngầm” bất kỳ quy luật nào trong ngôn ngữ (và suy nghĩ) khiến điều này trở nên khả thi.
Theo tôi, thành công của ChatGPT là mang lại cho chúng ta bằng chứng về một mảng khoa học cơ bản và quan trọng: nó gợi ý rằng chúng ta có thể mong đợi sẽ có “các quy luật ngôn ngữ” mới—và “các quy luật tư duy” hiệu quả—ra khỏi đó để khám phá . Trong ChatGPT—được xây dựng giống như một mạng nơ-ron—các luật đó tốt nhất là ngầm hiểu. Nhưng nếu bằng cách nào đó chúng ta có thể làm cho luật trở nên rõ ràng, thì sẽ có khả năng thực hiện những điều mà ChatGPT có thể làm theo những cách trực tiếp, hiệu quả hơn—và minh bạch hơn rất nhiều.
Nhưng, OK, vậy những luật này có thể như thế nào? Cuối cùng, chúng phải cho chúng ta một số loại đơn thuốc về cách ngôn ngữ—và những điều chúng ta nói với nó—được kết hợp với nhau. Sau đó, chúng ta sẽ thảo luận về cách “tìm kiếm bên trong ChatGPT” có thể cho chúng ta một số gợi ý về điều này và cách những gì chúng ta biết từ việc xây dựng ngôn ngữ máy tính gợi ý một con đường phía trước. Nhưng trước tiên, hãy thảo luận về hai ví dụ đã biết từ lâu về “quy luật ngôn ngữ”—và cách chúng liên quan đến hoạt động của ChatGPT.
Đầu tiên là cú pháp của ngôn ngữ. Ngôn ngữ không chỉ là một mớ hỗn độn ngẫu nhiên của các từ. Thay vào đó, có (khá) các quy tắc ngữ pháp xác định về cách các từ thuộc các loại khác nhau có thể được đặt cùng nhau: ví dụ: trong tiếng Anh, danh từ có thể được đặt trước tính từ và theo sau là động từ, nhưng thông thường hai danh từ không thể đứng ngay cạnh nhau. khác. Cấu trúc ngữ pháp như vậy có thể (ít nhất là xấp xỉ) được nắm bắt bởi một tập hợp các quy tắc xác định cách có thể kết hợp số lượng “cây phân tích cú pháp” lại với nhau :
ChatGPT không có bất kỳ “kiến thức” rõ ràng nào về các quy tắc đó. Nhưng bằng cách nào đó trong quá trình huấn luyện, nó đã ngầm “phát hiện” ra chúng—và sau đó dường như rất giỏi trong việc theo dõi chúng. Vì vậy, làm thế nào để làm việc này? Ở cấp độ “bức tranh lớn” thì không rõ ràng. Nhưng để hiểu rõ hơn, có lẽ nên xem xét một ví dụ đơn giản hơn nhiều.
Hãy xem xét một “ngôn ngữ” được hình thành từ các chuỗi (‘s và )’s, với một ngữ pháp xác định rằng các dấu ngoặc đơn phải luôn được cân bằng, như được biểu thị bằng một cây phân tích cú pháp như:
Chúng ta có thể đào tạo một mạng lưới thần kinh để tạo ra các chuỗi dấu ngoặc đơn “đúng ngữ pháp” không? Có nhiều cách khác nhau để xử lý trình tự trong mạng thần kinh, nhưng hãy sử dụng mạng biến áp, như ChatGPT đã làm. Và với một mạng máy biến áp đơn giản, chúng ta có thể bắt đầu cung cấp cho nó các chuỗi dấu ngoặc đơn đúng ngữ pháp làm ví dụ huấn luyện. Một điều tinh tế (thực tế cũng xuất hiện trong thế hệ ngôn ngữ con người của ChatGPT) là ngoài “mã thông báo nội dung” của chúng tôi (ở đây “(” và “)”), chúng tôi phải bao gồm mã thông báo “Kết thúc”, được tạo để chỉ ra rằng đầu ra không nên tiếp tục nữa (tức là đối với ChatGPT, đầu ra đó đã đạt đến “phần cuối của câu chuyện”).
Nếu chúng ta thiết lập một mạng biến áp chỉ với một khối chú ý có 8 đầu và vectơ đặc trưng có độ dài 128 (ChatGPT cũng sử dụng vectơ đặc trưng có độ dài 128, nhưng có 96 khối chú ý, mỗi khối có 96 đầu) thì dường như không thể lấy nó để học nhiều về ngôn ngữ ngoặc đơn. Nhưng với 2 khối chú ý, quá trình học dường như hội tụ—ít nhất là sau 10 triệu ví dụ hoặc hơn đã được đưa ra (và, như thường thấy với lưới máy biến áp, việc hiển thị thêm nhiều ví dụ dường như làm giảm hiệu suất của nó).
Vì vậy, với mạng này, chúng tôi có thể thực hiện tương tự như những gì ChatGPT thực hiện và hỏi xác suất mã thông báo tiếp theo sẽ là gì — theo trình tự dấu ngoặc đơn:
Và trong trường hợp đầu tiên, mạng “khá chắc chắn” rằng chuỗi không thể kết thúc ở đây—điều này tốt, vì nếu kết thúc, các dấu ngoặc đơn sẽ bị mất cân bằng. Tuy nhiên, trong trường hợp thứ hai, nó “nhận ra chính xác” rằng trình tự có thể kết thúc ở đây, mặc dù nó cũng “chỉ ra” rằng có thể “bắt đầu lại”, đặt dấu “(”, có lẽ là dấu “)” để theo dõi . Nhưng, rất tiếc, ngay cả với trọng số 400.000 hoặc tương tự được đào tạo cẩn thận, nó vẫn cho biết có xác suất 15% để có “)” làm mã thông báo tiếp theo—điều này không đúng, vì điều đó nhất thiết sẽ dẫn đến một dấu ngoặc đơn không cân bằng.
Đây là những gì chúng tôi nhận được nếu chúng tôi yêu cầu mạng hoàn thành xác suất cao nhất cho các chuỗi dài hơn dần dần của (‘s:
Và, vâng, cho đến một độ dài nhất định, mạng vẫn hoạt động tốt. Nhưng sau đó nó bắt đầu thất bại. Đó là một điều khá điển hình có thể thấy trong một tình huống “chính xác” như thế này với mạng nơ-ron (hoặc với máy học nói chung). Các trường hợp mà con người “có thể giải quyết trong nháy mắt” thì mạng lưới thần kinh cũng có thể giải quyết. Nhưng các trường hợp yêu cầu thực hiện điều gì đó “thuật toán hơn” (ví dụ: đếm rõ ràng các dấu ngoặc đơn để xem chúng có đóng không) thì mạng nơ-ron có xu hướng bằng cách nào đó “quá nông cạn về mặt tính toán” để thực hiện một cách đáng tin cậy. (Nhân tiện, ngay cả ChatGPT đầy đủ hiện tại cũng gặp khó khăn khi khớp chính xác các dấu ngoặc đơn trong các chuỗi dài.)
Vậy điều này có ý nghĩa gì đối với những thứ như ChatGPT và cú pháp của một ngôn ngữ như tiếng Anh? Ngôn ngữ trong ngoặc đơn là “khắc khổ” —và nhiều hơn nữa là một “câu chuyện thuật toán”. Nhưng trong tiếng Anh, sẽ thực tế hơn nhiều nếu có thể “đoán” xem từ nào sẽ phù hợp về mặt ngữ pháp dựa trên cơ sở lựa chọn từ địa phương và các gợi ý khác. Và, vâng, mạng lưới thần kinh tốt hơn nhiều trong việc này—mặc dù có lẽ nó có thể bỏ sót một số trường hợp “chính xác về mặt hình thức” mà con người cũng có thể bỏ sót. Nhưng điểm chính là thực tế là có một cấu trúc cú pháp tổng thể đối với ngôn ngữ—với tất cả sự đều đặn ngụ ý—theo một nghĩa nào đó sẽ giới hạn “mức độ” mà mạng lưới thần kinh phải học.
Cú pháp cung cấp một loại ràng buộc về ngôn ngữ. Nhưng rõ ràng có nhiều hơn nữa. Một câu như “Các điện tử tò mò ăn các lý thuyết màu xanh cho cá” là đúng về mặt ngữ pháp nhưng không phải là điều mà người ta thường mong đợi sẽ nói và sẽ không được coi là thành công nếu ChatGPT tạo ra nó—bởi vì, với ý nghĩa thông thường của những từ trong đó, nó về cơ bản là vô nghĩa.
Nhưng có một cách chung để nói nếu một câu có ý nghĩa? Không có lý thuyết tổng thể truyền thống cho điều đó. Nhưng đó là điều mà người ta có thể nghĩ ChatGPT đã ngầm “phát triển một lý thuyết cho” sau khi được đào tạo với hàng tỷ câu (có lẽ là có ý nghĩa) từ web, v.v.
Lý thuyết này có thể như thế nào? Chà, có một góc nhỏ về cơ bản đã được biết đến trong hai thiên niên kỷ, và đó là logic. Và chắc chắn là ở dạng tam đoạn luận mà Aristotle đã khám phá ra, logic về cơ bản là một cách nói rằng những câu tuân theo những mẫu nhất định là hợp lý, trong khi những câu khác thì không. Vì vậy, chẳng hạn, thật hợp lý khi nói “Tất cả X là Y. Đây không phải là Y, vì vậy nó không phải là X” (như trong “Tất cả các loài cá đều có màu xanh lam. Đây không phải là màu xanh lam, vì vậy nó không phải là cá.”). Và giống như người ta có thể tưởng tượng một cách kỳ lạ rằng Aristotle đã khám phá ra logic tam đoạn luận bằng cách đi (“kiểu học máy”) qua rất nhiều ví dụ về thuật hùng biện, vì vậy người ta cũng có thể tưởng tượng rằng trong quá trình đào tạo ChatGPT, nó sẽ có thể “khám phá logic tam đoạn luận” bằng cách xem nhiều văn bản trên web, v.v. (Và, vâng, do đó, người ta có thể mong đợi ChatGPT tạo ra văn bản chứa “suy luận chính xác” dựa trên những thứ như logic tam đoạn luận,
Nhưng ngoài ví dụ hẹp về logic, có thể nói gì về cách xây dựng (hoặc nhận ra) một cách có hệ thống văn bản thậm chí có ý nghĩa hợp lý? Vâng, có những thứ như Mad Libs sử dụng “mẫu cụm từ” rất cụ thể. Nhưng bằng cách nào đó, ChatGPT hoàn toàn có một cách tổng quát hơn nhiều để thực hiện điều đó. Và có lẽ không có gì để nói về cách nó có thể được thực hiện ngoài “bằng cách nào đó nó xảy ra khi bạn có 175 tỷ trọng lượng mạng thần kinh”. Nhưng tôi thực sự nghi ngờ rằng có một câu chuyện đơn giản và mạnh mẽ hơn nhiều.
Ý nghĩa không gian và luật ngữ nghĩa của chuyển động
Chúng tôi đã thảo luận ở trên rằng bên trong ChatGPT, bất kỳ đoạn văn bản nào cũng được biểu thị hiệu quả bằng một dãy số mà chúng tôi có thể coi là tọa độ của một điểm trong một số loại “không gian đặc trưng ngôn ngữ”. Vì vậy, khi ChatGPT tiếp tục một đoạn văn bản, điều này tương ứng với việc tìm ra quỹ đạo trong không gian đặc trưng ngôn ngữ. Nhưng bây giờ chúng ta có thể hỏi điều gì làm cho quỹ đạo này tương ứng với văn bản mà chúng ta cho là có ý nghĩa. Và liệu có lẽ có một loại “quy luật chuyển động ngữ nghĩa” nào đó xác định—hoặc ít nhất là hạn chế—làm thế nào các điểm trong không gian đặc trưng ngôn ngữ có thể di chuyển xung quanh mà vẫn giữ được “ý nghĩa”?
Vậy không gian đặc trưng ngôn ngữ này như thế nào? Đây là một ví dụ về cách các từ đơn lẻ (ở đây, danh từ chung) có thể được trình bày nếu chúng ta chiếu một không gian đặc trưng như vậy xuống 2D:
Chúng ta đã thấy một ví dụ khác ở trên dựa trên các từ đại diện cho thực vật và động vật. Nhưng vấn đề trong cả hai trường hợp là “các từ giống nhau về mặt ngữ nghĩa” được đặt gần đó.
Một ví dụ khác, đây là cách các từ tương ứng với các phần khác nhau của bài phát biểu được trình bày:
Tất nhiên, một từ nhất định nói chung không chỉ có “một nghĩa” (hoặc nhất thiết phải tương ứng với chỉ một phần của bài phát biểu). Và bằng cách xem cách các câu chứa một từ được sắp xếp trong không gian đặc trưng, người ta thường có thể “phân biệt” các nghĩa khác nhau—như trong ví dụ ở đây cho từ “cần cẩu” (chim hay máy?):
OK, vì vậy ít nhất cũng hợp lý khi chúng ta có thể coi không gian đặc trưng này giống như việc đặt “các từ gần nghĩa” gần trong không gian này. Nhưng chúng ta có thể xác định loại cấu trúc bổ sung nào trong không gian này? Ví dụ, có một số loại khái niệm về “vận chuyển song song” sẽ phản ánh “độ phẳng” trong không gian không? Một cách để giải quyết vấn đề đó là xem xét các phép loại suy:
Và, vâng, ngay cả khi chúng tôi chiếu xuống 2D, thường có ít nhất một “gợi ý về độ phẳng”, mặc dù nó chắc chắn không được nhìn thấy phổ biến.
Vậy còn quỹ đạo thì sao? Chúng ta có thể xem quỹ đạo mà lời nhắc cho ChatGPT tuân theo trong không gian tính năng—và sau đó chúng ta có thể thấy ChatGPT tiếp tục điều đó như thế nào:
Chắc chắn không có định luật chuyển động “hiển nhiên về mặt hình học” ở đây. Và điều đó không có gì đáng ngạc nhiên; chúng tôi hoàn toàn mong đợi đây là một câu chuyện phức tạp hơn đáng kể . Và, ví dụ, không rõ ràng là ngay cả khi có một “quy luật ngữ nghĩa của chuyển động” được tìm thấy, thì kiểu nhúng nào (hoặc, trên thực tế, “biến” nào) sẽ được nêu ra một cách tự nhiên nhất.
Trong hình trên, chúng tôi đang hiển thị một số bước trong “quỹ đạo”—ở mỗi bước, chúng tôi sẽ chọn từ mà ChatGPT cho là có khả năng xảy ra nhất (trường hợp “nhiệt độ bằng không”). Nhưng chúng ta cũng có thể hỏi những từ nào có thể “xuất hiện tiếp theo” với xác suất như thế nào tại một thời điểm nhất định:
Và những gì chúng ta thấy trong trường hợp này là có một “người hâm mộ” các từ có xác suất cao dường như đi theo một hướng ít nhiều xác định trong không gian đặc trưng. Điều gì xảy ra nếu chúng ta đi xa hơn? Đây là những “người hâm mộ” liên tiếp xuất hiện khi chúng ta “di chuyển” theo quỹ đạo:
Đây là hình đại diện 3D, có tổng cộng 40 bước:
Và, vâng, điều này có vẻ như là một mớ hỗn độn—và không có tác dụng gì đặc biệt khuyến khích ý tưởng rằng người ta có thể mong đợi xác định được “các định luật chuyển động giống như toán học-vật lý” bằng cách nghiên cứu thực nghiệm “những gì ChatGPT đang làm bên trong” . Nhưng có lẽ chúng ta chỉ đang nhìn “sai biến” (hoặc sai hệ tọa độ) và giá như chúng ta nhìn đúng, chúng ta sẽ thấy ngay ChatGPT đang làm một cái gì đó “đơn giản là toán học-vật lý” như theo dõi trắc địa. Nhưng hiện tại, chúng tôi vẫn chưa sẵn sàng để “giải mã theo kinh nghiệm” từ “hành vi bên trong” của nó mà ChatGPT đã “khám phá” về cách ngôn ngữ con người được “kết hợp với nhau”.
Ngữ pháp ngữ nghĩa và sức mạnh của ngôn ngữ máy tính
Cần gì để tạo ra “ngôn ngữ có ý nghĩa của con người”? Trước đây, chúng ta có thể cho rằng nó không thể thiếu bộ não con người. Nhưng bây giờ chúng tôi biết rằng nó có thể được thực hiện khá tốt bởi mạng lưới thần kinh của ChatGPT. Tuy nhiên, có lẽ đó là tất cả những gì chúng ta có thể làm, và sẽ không có gì đơn giản hơn—hoặc dễ hiểu hơn đối với con người—sẽ hiệu quả. Nhưng sự nghi ngờ mạnh mẽ của tôi là sự thành công của ChatGPT ngầm tiết lộ một sự thật “khoa học” quan trọng: rằng thực sự có nhiều cấu trúc và đơn giản hơn đối với ngôn ngữ có ý nghĩa của con người mà chúng ta từng biết—và cuối cùng có thể có những quy tắc khá đơn giản mà mô tả làm thế nào ngôn ngữ như vậy có thể được đặt lại với nhau.
Như chúng tôi đã đề cập ở trên, ngữ pháp cú pháp đưa ra các quy tắc về cách các từ tương ứng với những thứ như các phần khác nhau của lời nói có thể được kết hợp với nhau trong ngôn ngữ của con người. Nhưng để giải quyết ý nghĩa, chúng ta cần phải đi xa hơn. Và một cách để làm điều này là nghĩ về không chỉ ngữ pháp cú pháp cho ngôn ngữ, mà còn về ngữ nghĩa.
Đối với mục đích của cú pháp, chúng tôi xác định những thứ như danh từ và động từ. Nhưng vì mục đích ngữ nghĩa, chúng ta cần “phân cấp tốt hơn”. Vì vậy, ví dụ, chúng ta có thể xác định khái niệm “di chuyển” và khái niệm “đối tượng” “duy trì danh tính của nó độc lập với vị trí”. Có vô số ví dụ cụ thể về từng “khái niệm ngữ nghĩa” này. Nhưng với mục đích ngữ pháp ngữ nghĩa của chúng ta, chúng ta sẽ chỉ có một số loại quy tắc chung về cơ bản nói rằng “các đối tượng” có thể “di chuyển”. Có rất nhiều điều để nói về cách tất cả những thứ này có thể hoạt động ( một số điều tôi đã nói trước đây ). Nhưng tôi sẽ bằng lòng ở đây chỉ với một vài nhận xét chỉ ra một số con đường tiềm năng phía trước.
Điều đáng nói là ngay cả khi một câu hoàn toàn ổn theo ngữ pháp ngữ nghĩa, điều đó không có nghĩa là nó đã được hiện thực hóa (hoặc thậm chí có thể được hiện thực hóa) trong thực tế. “Con voi du hành tới Mặt trăng” chắc chắn sẽ “vượt qua” ngữ pháp ngữ nghĩa của chúng ta, nhưng nó chắc chắn chưa được thực hiện (ít nhất là) trong thế giới thực của chúng ta—mặc dù đó là một trò chơi hoàn toàn công bằng cho một thế giới hư cấu.
Khi chúng ta bắt đầu nói về “ngữ pháp ngữ nghĩa”, chúng ta sẽ nhanh chóng đặt câu hỏi “Có gì bên dưới nó?” Nó đang giả định “mô hình thế giới” nào? Một ngữ pháp cú pháp thực sự chỉ là về việc xây dựng ngôn ngữ từ các từ. Nhưng một ngữ pháp ngữ nghĩa nhất thiết phải tương tác với một số loại “mô hình thế giới”—thứ đóng vai trò như một “bộ xương” trên đó ngôn ngữ được tạo ra từ các từ thực tế có thể được xếp lớp.
Cho đến thời gian gần đây, chúng ta có thể tưởng tượng rằng ngôn ngữ (con người) sẽ là cách chung duy nhất để mô tả “mô hình thế giới” của chúng ta. Cách đây vài thế kỷ, đã bắt đầu có sự hình thức hóa các loại sự vật cụ thể, đặc biệt dựa trên toán học. Nhưng bây giờ có một cách tiếp cận chính thức hóa tổng quát hơn nhiều: ngôn ngữ tính toán .
Và, vâng, đó là dự án lớn của tôi trong suốt hơn bốn thập kỷ (hiện được thể hiện trong Ngôn ngữ Wolfram ): phát triển một biểu tượng tượng trưng chính xác có thể nói rộng nhất có thể về mọi thứ trên thế giới, cũng như trừu tượng. những thứ mà chúng tôi quan tâm. Và vì vậy, ví dụ, chúng ta có các biểu tượng tượng trưng cho thành phố , phân tử , hình ảnh và mạng lưới thần kinh , và chúng ta có kiến thức tích hợp về cách tính toán những thứ đó.
Và, sau nhiều thập kỷ làm việc, chúng tôi đã bao phủ rất nhiều lĩnh vực theo cách này. Nhưng trong quá khứ, chúng ta chưa xử lý cụ thể “ diễn ngôn hàng ngày ”. Trong câu “Tôi đã mua hai cân táo”, chúng ta có thể dễ dàng biểu diễn (và thực hiện dinh dưỡng cũng như các tính toán khác trên) “hai cân táo”. Nhưng chúng tôi chưa (hoàn toàn) có biểu tượng tượng trưng cho “Tôi đã mua”.
Tất cả đều liên quan đến ý tưởng về ngữ pháp ngữ nghĩa—và mục tiêu có một “bộ công cụ xây dựng” mang tính biểu tượng chung cho các khái niệm, thứ sẽ cung cấp cho chúng ta các quy tắc về cái gì có thể phù hợp với cái gì, và do đó, cho “dòng chảy” của những gì chúng ta có thể chuyển đổi. sang tiếng người.
Nhưng giả sử chúng ta có “ngôn ngữ diễn ngôn tượng trưng” này. Chúng ta sẽ làm gì với nó? Chúng ta có thể bắt đầu làm những việc như tạo “văn bản có ý nghĩa cục bộ”. Nhưng cuối cùng, chúng ta có thể muốn có nhiều kết quả “có ý nghĩa toàn cầu” hơn—có nghĩa là “tính toán” nhiều hơn về những gì thực sự có thể tồn tại hoặc xảy ra trên thế giới (hoặc có lẽ trong một thế giới hư cấu nhất quán nào đó).
Ngay bây giờ trong Ngôn ngữ Wolfram, chúng tôi có một lượng lớn kiến thức tính toán được tích hợp sẵn về rất nhiều thứ. Nhưng để có một ngôn ngữ diễn ngôn tượng trưng hoàn chỉnh, chúng ta phải xây dựng thêm các “phép tính” về những sự vật chung trên thế giới: nếu một đối tượng di chuyển từ A đến B và từ B đến C, thì nó cũng di chuyển từ A đến C, v.v.
Với một ngôn ngữ diễn ngôn tượng trưng, chúng ta có thể sử dụng nó để tạo ra “các tuyên bố độc lập”. Nhưng chúng ta cũng có thể sử dụng nó để đặt câu hỏi về thế giới, “Wolfram|Alpha style”. Hoặc chúng ta có thể sử dụng nó để nói những thứ mà chúng ta “muốn làm như vậy”, có lẽ là bằng một số cơ chế tác động bên ngoài. Hoặc chúng ta có thể sử dụng nó để đưa ra các khẳng định—có lẽ về thế giới thực, hoặc có lẽ về một thế giới cụ thể nào đó mà chúng ta đang xem xét, hư cấu hoặc thế giới khác.
Ngôn ngữ của con người về cơ bản là không chính xác, đặc biệt là vì nó không được “gắn kết” với một triển khai tính toán cụ thể và ý nghĩa của nó về cơ bản chỉ được xác định bởi một “hợp đồng xã hội” giữa những người dùng. Nhưng ngôn ngữ máy tính, về bản chất, có một độ chính xác cơ bản nhất định—bởi vì cuối cùng những gì nó chỉ định luôn có thể được “thực thi một cách rõ ràng trên máy tính”. Ngôn ngữ của con người thường có thể thoát khỏi sự mơ hồ nhất định. (Khi chúng ta nói “hành tinh”, nó có bao gồm các ngoại hành tinh hay không, v.v.?) Nhưng trong ngôn ngữ máy tính, chúng ta phải chính xác và rõ ràng về tất cả những điểm khác biệt mà chúng ta đang tạo ra.
Việc tận dụng ngôn ngữ thông thường của con người để tạo nên những cái tên bằng ngôn ngữ máy tính thường rất thuận tiện. Nhưng ý nghĩa mà chúng có trong ngôn ngữ máy tính nhất thiết phải chính xác—và có thể hoặc không thể bao hàm một số hàm ý cụ thể trong cách sử dụng ngôn ngữ thông thường của con người.
Làm thế nào để tìm ra “bản thể luận” cơ bản phù hợp cho một ngôn ngữ diễn ngôn tượng trưng chung? Vâng, nó không phải là dễ dàng. Đó có lẽ là lý do tại sao những điều này đã được thực hiện rất ít kể từ những khởi đầu nguyên thủy mà Aristotle đã thực hiện hơn hai thiên niên kỷ trước. Nhưng điều thực sự hữu ích là ngày nay chúng ta đã biết rất nhiều về cách suy nghĩ về thế giới một cách tính toán (và sẽ không hại gì nếu có một “siêu hình học cơ bản” từ Dự án Vật lý của chúng ta và ý tưởng về ruliad ).
Nhưng tất cả những điều này có ý nghĩa gì trong bối cảnh ChatGPT? Từ quá trình đào tạo của mình, ChatGPT đã “ghép lại” một cách hiệu quả một số lượng nhất định (khá ấn tượng) về ngữ pháp ngữ nghĩa. Nhưng chính sự thành công của nó cho chúng ta lý do để nghĩ rằng việc xây dựng một thứ gì đó hoàn thiện hơn ở dạng ngôn ngữ tính toán là khả thi. Và, không giống như những gì chúng ta đã tìm ra cho đến nay về các bộ phận bên trong của ChatGPT, chúng ta có thể mong đợi thiết kế ngôn ngữ máy tính sao cho con người có thể dễ dàng hiểu được ngôn ngữ đó.
Khi chúng ta nói về ngữ pháp ngữ nghĩa, chúng ta có thể rút ra một phép loại suy với logic tam đoạn luận. Lúc đầu, logic tam đoạn luận về cơ bản là một tập hợp các quy tắc về các phát biểu được diễn đạt bằng ngôn ngữ của con người. Nhưng (vâng, hai thiên niên kỷ sau) khi logic hình thức được phát triển, các cấu trúc cơ bản ban đầu của logic tam đoạn luận giờ đây có thể được sử dụng để xây dựng các “tháp hình thức” khổng lồ bao gồm, ví dụ, hoạt động của mạch kỹ thuật số hiện đại. Và vì vậy, chúng ta có thể mong đợi, nó sẽ xảy ra với ngữ pháp ngữ nghĩa tổng quát hơn. Lúc đầu, nó chỉ có thể xử lý các mẫu đơn giản, được thể hiện dưới dạng văn bản. Nhưng một khi toàn bộ khung ngôn ngữ tính toán của nó được xây dựng, chúng ta có thể mong đợi rằng nó sẽ có thể được sử dụng để dựng lên những tòa tháp cao “logic ngữ nghĩa tổng quát”, cho phép chúng ta làm việc một cách chính xác và chính thức với tất cả những thứ có chúng tôi chưa bao giờ có thể truy cập được trước đây, ngoại trừ chỉ ở “tầng trệt” thông qua ngôn ngữ của con người, với tất cả sự mơ hồ của nó.
Chúng ta có thể coi việc xây dựng ngôn ngữ máy tính—và ngữ pháp ngữ nghĩa—như thể hiện một kiểu nén cuối cùng trong việc biểu diễn các sự vật. Bởi vì nó cho phép chúng ta nói về bản chất của những gì có thể, chẳng hạn như không cần xử lý tất cả “các lượt diễn đạt của cụm từ” tồn tại trong ngôn ngữ thông thường của con người. Và chúng ta có thể coi sức mạnh tuyệt vời của ChatGPT là một thứ gì đó hơi giống nhau: bởi vì theo một nghĩa nào đó, nó cũng đã “đào sâu” đến mức có thể “kết hợp ngôn ngữ lại với nhau theo một cách có ý nghĩa về mặt ngữ nghĩa” mà không cần quan tâm đến các lượt khác nhau có thể có của cụm từ.
Vậy điều gì sẽ xảy ra nếu chúng tôi áp dụng ChatGPT cho ngôn ngữ tính toán cơ bản? Ngôn ngữ tính toán có thể mô tả những gì có thể. Nhưng những gì vẫn có thể được thêm vào là cảm giác về “những gì phổ biến”—ví dụ như dựa trên việc đọc tất cả nội dung đó trên web. Nhưng sau đó—bên dưới—hoạt động bằng ngôn ngữ điện toán có nghĩa là thứ gì đó như ChatGPT có quyền truy cập cơ bản và ngay lập tức vào số lượng công cụ cuối cùng để sử dụng các tính toán có khả năng không thể rút gọn. Và điều đó làm cho nó trở thành một hệ thống không chỉ có thể “tạo ra văn bản hợp lý”, mà còn có thể mong đợi tìm ra bất cứ điều gì có thể giải quyết được về việc liệu văn bản đó có thực sự đưa ra những tuyên bố “đúng” về thế giới hay bất cứ điều gì nó được cho là đang nói về.
Vậy… ChatGPT đang làm gì và tại sao nó hoạt động?
Khái niệm cơ bản về ChatGPT ở một mức độ nào đó khá đơn giản. Bắt đầu từ một mẫu văn bản khổng lồ do con người tạo ra từ web, sách, v.v. Sau đó huấn luyện một mạng thần kinh để tạo văn bản “như thế này”. Và đặc biệt, làm cho nó có thể bắt đầu từ một “dấu nhắc” và sau đó tiếp tục với văn bản “giống như những gì nó đã được đào tạo”.
Như chúng ta đã thấy, mạng nơ-ron thực tế trong ChatGPT được tạo thành từ các phần tử rất đơn giản—mặc dù có hàng tỷ phần tử trong số đó. Và hoạt động cơ bản của mạng nơ-ron cũng rất đơn giản, về cơ bản bao gồm việc truyền đầu vào bắt nguồn từ văn bản mà nó được tạo ra cho đến nay “một lần qua các phần tử của nó” (không có bất kỳ vòng lặp nào, v.v.) cho mỗi từ mới (hoặc một phần của từ đó) ) mà nó tạo ra.
Nhưng điều đáng chú ý—và bất ngờ—là quá trình này có thể tạo ra văn bản thành công “giống như” những gì có trên web, trong sách, v.v. Và nó không chỉ là ngôn ngữ con người mạch lạc, nó còn “nói những điều” “làm theo lời nhắc của nó” bằng cách sử dụng nội dung mà nó “đã đọc”. Không phải lúc nào nó cũng nói những điều “có nghĩa trên toàn cầu” (hoặc tương ứng với các tính toán chính xác)— bởi vì (chẳng hạn như không truy cập vào “siêu năng lực tính toán” của Wolfram|Alpha ), nó chỉ nói những điều “nghe có vẻ đúng” dựa trên những thứ “nghe giống như” trong tài liệu đào tạo của nó.
Kỹ thuật cụ thể của ChatGPT đã làm cho nó trở nên khá hấp dẫn. Nhưng cuối cùng (ít nhất là cho đến khi nó có thể sử dụng các công cụ bên ngoài) ChatGPT “chỉ đơn thuần” rút ra một số “chuỗi văn bản mạch lạc” từ “số liệu thống kê của trí tuệ thông thường” mà nó đã tích lũy được. Nhưng thật đáng kinh ngạc khi kết quả giống như con người. Và như tôi đã thảo luận, điều này gợi ý một điều ít nhất là rất quan trọng về mặt khoa học: rằng ngôn ngữ của con người (và các kiểu suy nghĩ đằng sau nó) bằng cách nào đó đơn giản hơn và có cấu trúc giống “luật” hơn chúng ta nghĩ. ChatGPT đã ngầm phát hiện ra nó. Nhưng chúng ta có khả năng phơi bày nó một cách rõ ràng, với ngữ pháp ngữ nghĩa, ngôn ngữ tính toán, v.v.
Những gì ChatGPT thực hiện trong việc tạo văn bản rất ấn tượng—và kết quả thường rất giống với những gì con người chúng ta sẽ tạo ra. Vậy điều này có nghĩa là ChatGPT đang hoạt động như một bộ não? Cấu trúc mạng lưới thần kinh nhân tạo cơ bản của nó cuối cùng được mô hình hóa dựa trên sự lý tưởng hóa của bộ não. Và có vẻ như khi con người chúng ta tạo ra ngôn ngữ, nhiều khía cạnh của những gì đang diễn ra khá giống nhau.
Khi nói đến đào tạo (học AKA), “phần cứng” khác nhau của bộ não và của các máy tính hiện tại (cũng như, có lẽ, một số ý tưởng thuật toán chưa được phát triển) buộc ChatGPT phải sử dụng một chiến lược có thể khá khác biệt (và theo một số cách ít hơn nhiều hiệu quả) hơn bộ não. Và còn một điều nữa: không giống như ngay cả trong tính toán theo thuật toán điển hình, ChatGPT bên trong không “có vòng lặp” hoặc “tính toán lại dữ liệu”. Và điều đó chắc chắn sẽ hạn chế khả năng tính toán của nó – ngay cả đối với các máy tính hiện tại, nhưng chắc chắn là đối với bộ não.
Không rõ làm thế nào để “khắc phục điều đó” mà vẫn duy trì khả năng đào tạo hệ thống với hiệu quả hợp lý. Nhưng làm như vậy có lẽ sẽ cho phép ChatGPT trong tương lai làm được nhiều “việc giống như bộ não” hơn nữa. Tất nhiên, có rất nhiều thứ mà bộ não không làm tốt lắm – đặc biệt liên quan đến số lượng tính toán không thể rút gọn. Và đối với những thứ này, cả bộ não và những thứ như ChatGPT đều phải tìm kiếm “công cụ bên ngoài”—như Ngôn ngữ Wolfram .
Nhưng hiện tại, thật thú vị khi thấy ChatGPT đã có thể làm được những gì. Ở một mức độ nào đó, đây là một ví dụ tuyệt vời về thực tế khoa học cơ bản rằng một số lượng lớn các yếu tố tính toán đơn giản có thể làm những điều phi thường và bất ngờ. Nhưng có lẽ nó cũng cung cấp động lực tốt nhất mà chúng ta đã có trong hai nghìn năm để hiểu rõ hơn đặc điểm và nguyên tắc cơ bản có thể là gì của đặc điểm trung tâm của tình trạng con người đó là ngôn ngữ của con người và các quá trình tư duy đằng sau nó.