Máy học so với người học
- Thứ bảy - 02/02/2019 09:32
- |In ra
- |Đóng cửa sổ này
Một phần fresco của Mantegna tại nhà thờ Emeritani.
Máy thông minh hơn người?
Nhà thờ “Eremitani” (“Các thầy tu khổ hạnh”) ở thành phố Padova, xây từ thời Trung cổ, từng được trang trí bằng những bức tranh trên tường (fresco) rất lớn do họa sĩ Andrea Mantegna vẽ từ thời Phục Hưng, làm cho rất nhiều người ngưỡng mộ, trong đó có đại thi hào Goethe. Vào năm 1944, trong một trận ném bom của Mỹ vào Phát xít Đức, nhà thờ bị trúng bom, và các bức tranh trên tường bị phá tan tành. Người ta tìm lại được 88 ngàn mảnh nhỏ của các bức tranh, phủ được một diện tích 77 mét vuông, chỉ bằng một phần mười so với ban đầu, những chỗ còn lại thì bị mất hoàn toàn. Và trong vòng mấy thập kỷ, các mảnh vụn này được cất giữ trong các kho bảo tàng. Đến năm 1992, nhờ có kỹ thuật ảnh số, chúng mới được lau chùi, chụp ảnh, phân loại, rồi được đưa cho các nhà toán học nghiên cứu.
Đến năm 2000, nhóm nghiên cứu của giáo sư Massimo Fornasier phát triển được một phần mềm máy tính, dựa trên một phương pháp toán học gọi là “circular harmonic decomposition” (“phân tách điều hòa vòng quanh”), để ghép các mảnh vụn của bức tranh. Sau đó phải mất 6 năm trời chạy máy tính, từ 2000 đến 2006, nhóm của Fornasier mới hoàn thành công việc.
Năm 2006 là mới cách đây có 13 năm thôi, nhưng đó là thời mà còn chưa ai biết đến khái niệm “học sâu” (deep learning), và muốn xử lý ghép ảnh người ta phải tự tìm tòi ra thuật toán sắc sảo đưa vào máy tính, chứ máy chưa tự nghĩ ra được thuật toán.
Mười hai năm sau, vào cuối năm 2018, nhóm AI (artificial intelligence - trí tuệ nhân tạo) của tôi ở Toulouse gặp phải một “trò chơi ghép hình” tương tự, tuy chỉ là một vấn đề có tính chất học thuật chứ không có ý nghĩa thiết thực như vấn đề mà Fornasier đã giải quyết, nhưng về độ phức tạp không kém nhiều: Làm sao ghép 22 ngàn bức ảnh nhỏ lại với nhau cho khớp để tạo thành những bức ảnh khổ lớn, mỗi bức gộp lại của hàng trăm mẩu ảnh nhỏ? Điều duy nhất chúng tôi biết là những bức ảnh nhỏ mà chúng tôi có là những mảnh nhỏ của những bức ảnh lớn hơn nhiều đã bị cắt vụn ra, và nếu ghép lại được thì sẽ khôi phục được nhiều thông tin giá trị mà nếu chỉ nhìn các bức ảnh nhỏ riêng biệt thì không thấy được. Nhưng phải ghép như thế nào thì chúng tôi không biết. Và chúng tôi phải tìm cách giải nó, không phải là trong 6 năm, mà là trong 1-2 tuần.
Ban đầu, chúng tôi thử dùng các phương pháp toán học khác nhau, từ khai triển Taylor cho đến xác định hướng của các “đường mức” ở gần mép ảnh, v.v. để so sánh giữa các ảnh với nhau xem ảnh nào có vẻ khớp với ảnh nào. Các kết quả thu được đều khá tồi: với mỗi ảnh nhỏ thì thuật toán cho ra rất nhiều các ảnh nhỏ “ứng cử viên” của việc ghép vào bên cạnh, tất nhiên hầu hết sẽ là sai, nhưng dùng máy để phân biệt cái nào đúng cái nào sai vẫn rất khó (còn nếu làm “thủ công” dùng mắt người để phân biệt thì có khi làm trong 10 năm cũng chưa xong). Sau nhiều lần thử không ra được thuật toán như ý, chúng tôi đành “đầu hàng”, thôi không cố tự viết ra thuật toán nữa. Thay vào đó, chúng tôi muốn thử “bắt” máy tự tìm ra thuật toán ghép hình. Chúng tôi bèn viết một chương trình cho máy “học sâu”, một mô hình mạng thần kinh (neuron network) đi kèm với một “ống bơm dữ liệu” (data generator pipeline) gồm hàng triệu cặp ảnh ghép được và cặp ảnh không ghép được.
Những cặp ảnh ghép được là chính do máy tạo ra từ các ảnh đã có bằng cách cắt chúng ra rồi ghép lại, chứ với các ảnh ban đầu thì tất nhiên máy và người đều không biết ảnh nào ghép được với ảnh nào.
Kết quả đạt được tốt một cách bất ngờ: chỉ sau 4 tiếng học như vậy, máy đã tự tạo ra được thuật toán và chương trình ghép ảnh chạy trên PC, có khả năng tìm nhanh và khá chính xác xem ảnh nào có thể ghép được vào ảnh nào trong số 22 nghìn ảnh ban đầu. Kết quả này khiến cho cả nhóm chúng tôi phải thừa nhận rằng trí tuệ nhân tạo, do chúng tôi tạo ra cho máy, đã thật sự giỏi hơn chúng tôi về khả năng nghĩ ra thuật toán đề giải quyết một vấn đề cụ thể, ở đây là vấn đề ghép ảnh. Chúng tôi chỉ “chỉ đạo chung chung” cho máy là cần phải “học theo những bước nào”, còn máy “tự học là chính” để tự tạo ra phần mềm ghép ảnh.
Việc AI đánh thắng được cả những người vô địch quốc tế về cờ vua hay cờ vây thì chắc nhiều người đã nghe nói. Một ví dụ “nhỏ” khác nhưng có ý nghĩa thực tiễn quan trọng: Các bác sĩ da liễu đều biết rằng việc chẩn đoán các bệnh da là việc khó khăn, tỷ lệ chẩn đoán sai lên đến 50%, không phải là vì các bác sĩ không tận tâm hay kém trình độ, mà vì bệnh da có nhiều và rất phức tạp, dễ lẫn kiểu bệnh này sang kiểu bệnh khác. Tuy nhiên AI đang làm thay đổi tình hình: với sự trợ giúp của AI thì tỷ lệ chẩn đoán sai của các bác sĩ sẽ giảm từ 50% xuống chỉ còn 10-20% hoặc thấp hơn nữa, và đó là điều vô cùng đáng mừng cho các bác sĩ, và đặc biệt là cho các bệnh nhân.
Nhóm AI của tôi cũng có tham gia vào một chương trình hợp tác “Deep Clinics” về bệnh da, cùng với một số bác sĩ da hàng đầu ở Việt Nam như GS. Phạm Hoàng Khâm và PGS. Đinh Văn Hân và những người khác. Một kết quả về bệnh acne (trứng cá) cho thấy, ngay từ khi mới chỉ được học chưa thật nhiều trường hợp, máy đã có khả năng khoanh vùng và phân loại các mụn acne rất nhanh nhạy, có thể tin tưởng là sẽ giúp ích nhiều cho các bác sĩ và bệnh nhân.
Nhìn một cách lạc quan, AI càng ngày càng trở thành đầy tớ trung thành tài giỏi giúp ích cho cuộc sống của con người. Ngay những con sư tử dữ tợn còn tuyệt đối trung thành với người chăm sóc nó từ bé. AI không có bản năng tấn công tự vệ để sinh tồn như sư tử, nên lại càng dễ trung thành với con người, vì con người “tạo ra và chăm sóc” nó. Và tuy chúng ta sẽ “không thông minh bằng” AI trong phần lớn các lĩnh vực, nhưng AI sẽ giúp chúng ta ngày càng thông minh và văn minh lên.
“Mạng thần kinh” của máy
Năm 1959, một trong những nhà tiên phong khác trong lĩnh vực AI tên là Arthur Samuel đưa ra cụm từ “machine learning” (“học máy”) để chỉ việc cho máy học đó. Ý tưởng chính của các nhà tiên phong và những người kế tục là thiết kết “máy biết học” dựa trên mô phỏng bộ não và quá trình suy nghĩ và học tập của con người và động vật. Đặc biệt là, máy cũng có các “neuron” (tế bào thần kinh) như người!
Một ví dụ sơ đồ đơn giản hóa về “neural network”: các nút tròn là “neuron” (mỗi nút ứng với một tham số), các mũi tên là các “axon”.
“Mạng thần kinh” trong một chương trình máy tính là cái gì đó nghe có vẻ rất thần bí khó hiểu, nhưng thực ra có thể hình dung nó rất đơn giản như sau. Một chương trình máy tính “cố điển” (chưa có học máy) là một cái “hộp” H có khả năng nhận các thông tin ở “đầu vào” và cho ra thông tin ở “đầu ra”. Về mặt toán học, có thể biểu diễn nó như là một ánh xạ H: V → R từ tập “đầu vào” V đến tập “đầu ra” R. Ví dụ như, đầu vào v ∈ V là một văn bản, đầu ra r = H(v) ∈ R là các lỗi chính tả được chương trình phát hiện trong văn bản đó. Một chương trình “học máy” cũng là một cái “hộp” H, nhưng ngoài tập “đầu vào” V và tập “đầu ra” R, còn có một tập khác liên quan, là tập các tham số T: H : T x V → R.
Với mỗi tham số θ ∈ T cố định thì ta được một chương trình “cổ điển” Hθ tương ứng: Hθ (v) = H(θ, v). Quá trình học của “máy H” chính là quá trình thay đổi dần và chọn lựa các tham số θ ∈ T sao cho Hθ “thông minh nhất” có thể, làm được công việc yêu cầu một cách tốt nhất có thể. Trái với các đầu vào được nhận từ phía bên ngoài của cái máy “biết học” H, các tham số nằm trong bản thân máy, và mỗi một chỗ trong máy dùng để chứa tham số nào đó được gọi là một neuron thần kinh của máy.
Như vậy, nói một cách đơn giản, ở trong máy, các neuron chẳng qua là... các số có thể điều chỉnh. Người ta hình dung là tín hiệu từ đầu vào phải đi qua các neuron (để thu thập các tham số) bằng các “đường truyền tín hiệu” (các công thức) trước khi ra đến đầu ra. Người ta hình dung các “đường truyền tín hiệu” đó như là các cái “râu” (axon) nối từ tế bào thần kinh này đến tế bào thần kinh khác trong một bộ não, và thế là các “neuron” cùng với các “axon” đó tạo thành “neuron network” (mạng thần kinh) của máy. Để thay đổi trị số ở các neuron (tức là để cho máy học, thay đổi các tham số), cần phải dùng các công thức nhận biến số là giá trị hiện tại của các tham số, và cả các giá trị tại đầu vào và đầu ra. Người ta hình dung nó nôm na như là một quá trình lan tỏa ngược lại (back propagation) từ đầu ra qua các axon đến các neuron. Cơ chế “lan tỏa ngược lại” để học này tương tự như là cơ chế tạo phản xạ có điều kiện trong các thí nghiệm của Pavlov vậy.
Thực ra thì, cho đến cách đây một thập kỷ, những thuật toán phổ biến nhất cho máy học, ví dụ như thuật toán gọi là SVM (support vector machine), còn chưa dùng đến khái niệm “mạng thần kinh”, tuy rằng khái niệm này có từ những năm 1960. Khái niệm “mạng thần kinh” chỉ trở nên thật sự phổ biến khi người ta thiết kế được các mạng thần kinh có nhiều “lớp” (chính vì thế mà gọi là “học sâu” - “deep learning” - sâu ở đây có nghĩa là có nhiều lớp) với khả năng học vượt trội hơn hẳn so với các thuật toán trước đó, đồng thời với việc xuất hiện các bộ vi xử lý GPU (graphic processing units) mạnh, có khả năng tính toán song song hàng nghìn phép tính đồng thời, thích hợp cho việc học của các mạng thần kinh này. Các “deep neural network” mới bắt đầu thật sự vượt lên trên các phương pháp học máy khác trong thập kỷ 2010. Đến ngày hôm nay, hầu hết các chương trình học máy quan trọng nhất và hiệu quả nhất đều dựa trên “deep learning”, cũng tương tự như là TV kỹ thuật số đã thay thế hoàn toàn TV có ống cathode vậy.
Máy học so với người học
Một phần chính vì các máy AI được “thiết kế theo hình ảnh bộ não con người”, nên tuy máy là “cục sắt” nhưng nó học rất giống người học! Dưới đây là một danh sách nhỏ không đầy đủ các điểm giống nhau đó.
Máy học bằng cách ghi nhớ và bắt chước, thậm chí có thể đến mức “như con vẹt, thuộc lòng” một số thứ hay gặp nhất. Người học nhiều khi cũng phải bắt chước, ghi nhớ những thứ cơ bản quen thuộc nhất, để “có gì đó trong đầu” rồi mới lấy đó làm cơ sở để mà hiểu và vận dụng.
Thậm chí, để kiểm tra xem một mô hình học máy có thích hợp cho một vấn đề nào đó hay không, người ta cho nó học trên một lượng nhỏ các đầu vào (input) xem nó có thể học thuộc được các ví dụ đó hay không, tức là khi đầu vào là các ví dụ đó thì đầu ra có chính xác gần 100% hay không? (Kiểu kiểm tra này gọi là overfit, máy muốn học tốt được thì cũng phải overfit được).
Máy học bằng các ví dụ, cũng giống như người. Các ví dụ chính là các “tấm gương” để bắt chước theo. Dù cho cấu trúc mô hình của máy có tốt đến mấy (hay là đứa trẻ có nhiều tài năng bẩm sinh đến mấy), nhưng các “tấm gương” mà tồi, sai lệch nhiều, thì kết quả của việc học tất nhiên cũng tồi theo.
Càng nhiều ví dụ (data) chất lượng cao thì máy càng dễ học giỏi, và đó chính là một điểm mấu chốt trong lĩnh vực AI: data đủ tốt và đủ nhiều là tối quan trọng.
Nếu so giữa máy và người, thì khả năng “tiêu thụ data” của người chậm hơn máy nhiều. Một máy AI có thể xem hàng triệu ca bệnh để học trong một buổi trong khi một bác sĩ cả năm may ra xem được vài nghìn ca bệnh. Bù lại, người có thể học được kể cả khi chỉ có rất ít data vì có khả năng “tổng quát hóa” cao, còn máy thường “tiêu tốn” nhiều data hơn (tuy nhiên, các nhà nghiên cứu cũng quan tâm đến chuyện thiết kế máy có khả năng học với rất ít data).
Máy học có bài kiểm tra (vaditation/test), cũng như người khi học phải làm bài kiểm tra. Phải có kiểm tra thì qua đó bản thân máy mới “biết được” là nó đã học được đúng sai hay dở ra sao, rồi tìm cách củng cố cái đúng, sửa cái sai, tăng cái hay, giảm cái dở.
Máy có thể học có hướng dẫn (supervised learning) hoặc tự học (unsupervised learning). Cũng tương tự như với người, nếu có được hướng dẫn tốt, thì sử dụng hướng dẫn chắc sẽ học nhanh hơn, nhưng khi khó tìm được hướng dẫn (mà càng “lên cao, đi xa” càng khó tìm hướng dẫn), thì phải mày mò tự học là chính.
Máy học có thưởng có phạt (gain/loss function), cũng tương tự như người và động vật. Thưởng phạt tạo ra động lực để thay đổi hành vi nhằm tăng được thưởng, giảm bị phạt. Hệ thống thưởng phạt (hay là có thể gọi là hàm số thưởng phạt đối với máy) đóng vai trò rất quan trọng trong việc học. Nếu hàm này mà bị thiết kế tồi, việc thưởng phạt sẽ không khuyến khích được học cho đúng, và kết quả cuối cùng sẽ tồi. Máy có thể học theo kiểu tiến hóa, tức là “biến đổi gene, di truyền và chọn lọc tự nhiên”, tương tự như quá trình tiến hóa của động vật theo học thuyết Darwin. Chỉ khác là, quá trình tiến hoá trong một một chương trình học máy có thể diễn ra nhanh hơn rất nhiều so với ở động vật: chỉ mất vài ngày chạy máy thay vì hàng trăm nghìn năm.
Máy có thể học để sáng tạo. Sáng tạo chẳng qua là kết quả của việc áp dụng nền tảng trí tuệ (đã có bên trong) vào những kích thích gây cảm hứng (từ bên ngoài). Khả năng sáng tạo không chỉ con người mới có, mà máy cũng có thể học làm việc đó.
Máy có thể sử dụng trí tuệ tập thể, hay nói cách khác, nhiều máy khác nhau có thể học kết hợp lại với nhau để cho ra kết quả tốt hơn, tương tự như là một hội đồng chuyên gia sẽ cho ra được ý kiến đáng tin cậy hơn là chỉ một chuyên gia.
Những bài học từ học máy?
Nếu như trong giai đoạn đầu của sự phát triển AI, người ta chỉ mong tạo được máy mô phỏng trí tuệ của người cho tốt, đuổi kịp được người, thì ngày nay người ta đã nói đến chuyện máy đạt tới “siêu trí tuệ”, vượt xa người. Sự học của máy không nhất thiết phải tương tự như của người mà có thể có những phương pháp khác, hoàn toàn lạ lẫm, miễn sao có được trí tuệ.
Tuy nhiên, dù là người học, hay chim chóc học, hay máy học, thì cũng đều có thể mô hình hóa bằng các mô hình toán học, và để học cho hiệu quả thì cũng đều phải tuân theo một số nguyên tắc chung nào đó. Bởi vậy mà, ta có thể tin tưởng rằng, dù máy có không cần bắt chước cách học của người nữa, thì người học vẫn giống máy học về rất nhiều điểm, và việc nghiên cứu sự học máy cho các hệ quả quan trọng cho bản thân việc học của con người: những nguyên tắc gì làm tăng hiệu quả của máy học, thì cũng có nhiều khả năng làm tăng hiệu quả của người học, tăng trí tuệ của loài người! Các nhà giáo dục cần chú ý đến điều này.
Ví dụ, nếu có một lý thuyết nào đó về giáo dục, nếu áp dụng các ý tưởng đó vào máy học mà thấy sai lè lè, thì rất nhiều khả năng đó cũng là một lý thuyết lang băm đối với con người. Thay vì thử nghiệm trên người (và làm hại hàng triệu học sinh nếu là lang băm), ta có thể thử áp dụng lý thuyết vào máy học trước đã. Những ví dụ về lý thuyết lang băm nhưng khoác vỏ “công nghệ” hay “khoa học” trong giáo dục có lẽ không thiếu (về điều này tôi đã có nhiều lần viết trong các bài báo khác).
Một ví dụ có tính chất tích cực hơn: đó là việc nghiên cứu các hàm thưởng/phạt trong học máy cũng cho chúng ta các hệ quả về tính hiệu quả của thưởng phạt trong học tập của trẻ em, học phải có thưởng có phạt hợp lý, và “thi sao học vậy”. Chương trình thi cử mà không thích hợp với mục đích của chương trình học thì ắt dẫn đến học sai lệch, học đối phó, học tủ, học vẹt, học để không hiểu gì mà thi vẫn đạt điểm cao, làm hại học sinh. Trong lúc máy học thì thỉnh thoảng cần kiểm tra, nhưng kiểm tra quá nhiều thì cũng không cần thiết và lãng phí thời gian. Bài kiểm tra mà thiết kế tồi thì điểm làm bài có thể rất cao nhưng mang ra dùng trong thực tế lại thành kết quả rất tồi. Máy hay là người cũng vậy. Thiết kế “bài kiểm tra” sao cho phản ánh đúng nhu cầu của thực tế là điều rất quan trọng, đối với cả máy lẫn người.