Một số bài toán để ôn luyện tư duy khi ôn đội tuyển Olympic

– Bài toán hình xoắn ốc: Bài này dạng cơ bản là cho bình phương của một số nguyên n, tìm cách in ra màn hình vị trí các số bắt đầu từ 1 đến chính nó vào ma trận vuông n*n. Bài toán này luyện cho mình cách điều khiển vòng lặp for và while cho hợp lý và tối ưu. Có nhiều biến thế của bài này để ta có thể ôn luyện.

– Bài toán dò mìn, tìm miền liên thông…: một số bài toán cần sử dụng thuật toán loang để xử lý. Những bài toán như này liên quan đến việc xử lý các điểm lân cận nhau, cần lưu ý việc đánh dấu các điểm đã duyệt tránh bị lặp vô tận dẫn đến tràn bộ nhớ.

– Cộng, trừ, nhân số lớn: Với kiểu dữ liệu của ngôn ngữ lập trình thường bị giới hạn ở mức độ nhất định, để xử lý cộng, trừ, nhân với các con số có từ 10 chữ số trở lên là những số siêu siêu lớn thì kiểu dữ liệu của ngôn ngữ không thế xử lý được. Việc này buộc phải xử lý thủ công, chia để trị. Thực hiện phép tính như cách mà ta được học từ nhỏ. Đối với cộng-trừ ta dùng mảng để lưu từng chữ số sau đó xử lý cộng trừ từng số 1 theo đúng nguyên tắc từ hàng nhỏ hơn đến hàng lớn (từ hàng đơn vị, từ phải sang trái) và tuân thủ nguyên tắc cộng dồn (chính là nhớ). Đối với phép nhân thì tương tự nhưng lưu ý phép nhân chính là phép cộng nhiều số lại với nhau mà thôi.

– Số nguyên tố: Với số nguyên tố thì có muôn vàn kiểu bài toán liên quan, vì số nguyên tố có nhiều tính chất rất “đẹp”. Các bài toán đa phần là tìm số nguyên tố, check xem có phải số nguyên tố hay không, tìm số nguyên tố cùng nhau… Các bài toán này sẽ có 1 số thuật toán kinh điển để tìm, các bạn có thể tìm hiểu.

– Đệ quy: Bài toán kinh điển của đệ quy chính là bài toán Tháp Hà Nội. Cũng là một cách chia để trị, các bài toán đều quy về cùng 1 dạng, và chỉ cần xử lý được bài toán ở nhân thì sẽ giải được. Với đệ quy thường tốn bộ nhớ đệm để chờ từng lần lượt kết quả của từng lượt đệ quy nến có trường hợp tràn bộ nhớ đệm. Bài toán đệ quy thì có đệ quy quay lui nổi tiếng với bài toán 8 con hậu.

– Một số bài toán khác: tìm đường đi ngắn nhất, quy hoạch động… một số bài thuần toán như: số fibonaci, tính tích phân, tìm căn, tìm nghiệm gần đúng…

Cài đặt Anaconda trên window và ví dụ Machine Learning

Hôm nay được một đồng chí cùng công ty cũ giới thiệu về Anaconda để code python. Theo mình hiểu Anaconda đơn giản là một IDE giúp ta có thể code python đơn giản hơn, đặc biệt việc cài đặt Anaconda trên window rất đơn giản. Anaconda còn tích hợp rất nhiều thư viện cơ bản, đặc biệt là các thư viện về Machine Learning với giao diện sử dụng và thêm thư viện rất đơn giản.

Công cụ này trước đây mình đã từng nghe nhưng chưa tiến hành sử dụng bao giờ. Trong quá trình học tập và làm việc, mình đã sử dụng nhiều IDE nhưng đều chưa thấy hài lòng. Sau đây mình sẽ hướng dẫn từng bước để cài đặt Anaconda trên window và sử dụng Anaconda để viết một chương trình Machine Learning đơn giản.

Ví dụ:
– Pycharm: cũng khá nổi tiếng nhưng khi cài 1 số thư viện mở rộng vào thì không hiểu sao lại lỗi và bị conflict

– IntellJI: nặng, chậm và cũng conflict (có thể quá phức tạp với mình)

– Cuối cùng thì đành quay về với IDE của chính Python cung cấp, nhưng cũng khá khó chịu với cái khoản cài đặt thêm các thư viện bổ sung.

Nghe đồng chí đó nói với IDE này đã tích hợp sẵn nhiều thư viện về Machine nên cũng vọc thử xem sao, có mất gì đâu.

Tải và cài đặt:

Tài liệu trên mạng có nhiều, mình cài đặt theo trang chủ của nó:
https://www.anaconda.com/download/

Bạn có thể tham khảo thêm:
https://medium.com/@GalarnykMichael/install-python-on-windows-anaconda-c63c7c3d1444

http://xperimentallearning.blogspot.com/2017/02/steps-to-install-anaconda.html

Lưu ý: mình khá nhọ khi cứ next mà không để ý phần tích chọn việc thêm biến môi trường hay là đường dẫn path để khi ở command line của window có thể gọi lệnh conda.
Nếu tích phần đó thì ok không sao, nếu không tích thì dùng lệnh sau để set path(trên command line của window):

set PATH=%PATH%;C:\ProgramData\Anaconda2;C:\ProgramData\Anaconda2\Scripts\

Đường dẫn này phụ thuộc vào nơi bạn cài đặt Anaconda nhé.

Test thử xem sao:

Sau khi cài đặt xong thì anaconda có giao diện như sau:

Có vài phần mặc định mà ta có thể dùng:

– Jupyterlab: nhấn vào đó nó nhảy lên web luôn, cái này code và biên dịch trên web localhost của mình luôn.

– Jupyternotebook: chưa rõ là gì luôn nhưng cũng chạy trên nền web.

– spyder: sẽ hiển thị lên IDE để ta có thể code vài chương trình đơn giản.

Mình làm theo link này để test trước: https://chieupham.github.io/2017/02/18/Python-Windows/

Trên đây là cách cài đặt Anaconda trên window, nếu xong bước này thì ta hoàn toàn có thể thử dùng nó để code một chương trình python đơn giản để test hoặc có thể thử một ví dụ về Machine Learning sau đây với thư viện chuyên về Machine Learning là sklearn.

Ví dụ Machine Learning với Anaconda

B1. Test 1 thư viện mặc định:

>>import numpy
>>umpy.__file__

B2. Test 1 thư viện cần cài thêm:

>import sklearn

Sẽ lỗi luôn

B3. Cài thêm thư viện sklearn

Sử dụng command line của window chạy: conda install scikit-learn
chọn y để đồng ý cài đặt sklearn (phần lưu ý phía trên sẽ có tác dụng cho phần này)
Thử lại xem thư viện có chưa nhé:

>import sklearn

B4. Chạy thử 1 chương trình theo hướng dẫn:
https://machinelearningcoban.com/2016/12/28/linearregression/
Ta có kết quả:

Hay đấy chứ, chúc các bạn thành công!

Tổng hợp về trí tuệ nhân tạo

  • Slide về trí tuệ nhân tạo:

– Bài giảng của thầy Phạm Trọng Hoàn: https://pdfs.semanticscholar.org/presentation/33e2/1d6243aa43da3426198243dc387dcc69bdf1.pdf

– Nhập môn trí tuệ nhân tạo: https://pdfs.semanticscholar.org/presentation/33e2/1d6243aa43da3426198243dc387dcc69bdf1.pdf

– Trí tuệ nhân tạo: http://thuvien.tvu.edu.vn/ebook/download/cntt/baigiangtrituenhantao.pdf

  • Bài báo về trí tuệ nhân tạo:

– Bài nghiên cứu về ứng dụng trí tuệ tạo: https://arxiv.org/ftp/arxiv/papers/1801/1801.03604.pdf

  • Cổng tìm kiếm bài báo nghiên cứu khoa học:

– Semantic Scholar: https://www.semanticscholar.org/

Kiến trúc top-down và bottom-up trong trí tuệ nhân tạo

Kiến trúc top-down và bottom-up trong trí tuệ nhân tạo

Nhân lục lọi đôi thứ trong archive tôi tìm lại bài tranh luận nhỏ cách đây đúng 5 năm trên VNAI mailing list (của những người bạn VN quan tâm đến AI). Bài này bắt nguồn từ email sau đây của bạn Đặng Việt Dũng về một bài giảng về reactive agent architecture của Rodney Brooks:

On Thu, 4 Jul 2002, Viet Dung Dang wrote:

Cách đây mấy tháng, em có dự 1 bài giảng của Rodney Brooks để quảng cáo cho quyển sách mới của ông tên là “Flesh and Machines”. Như nhiều anh chị đã biết, Rodney Brooks vào năm 1994 đã gây một cơn sốc lớn trong giới nghiên cứu agent, khi ông phủ nhận kiến thức truyền thống (logic-based với knowledge based inference rules) và khai sinh ra kiến trúc Subsumption, mà cốt lõi là purely reactive.

Trong bài giảng em đã được dự, Brooks tiếp tục promote kiến trúc subsumption và nói về việc xây dựng một con humanoid robot dựa trên kiến trúc đó. Một câu hỏi mà chắc mọi người cùng thắc mắc, và em cũng vẫn thắc mắc sau khi dự là theo kiến trúc của Brook, agent hoàn toàn không có internalrepresentation of the world, mà hầu hết chỉ dựa trên các re-active rules. Trong buổi đó, khi trả lời câu hỏi, Brook có nói là nếu xây được một representation như thế thì sai lầm vì model đó sẽ không phản ánh đúng thực chất của thế giới outside.

Tuy nhiên, theo như em hiểu, thực chất con người chúng ta đều có một representation of the world ở trong đầu, và dựa vào đó để suy luận và hành động. Như thế, liệu kiến trúc của Brooks co’ phải là useless khi xây dựng humanoid robot không?

Em cũng nghĩ chắc là không, vì nếu thế thì làm sao Brooks lại đang làm director lab của MIT được ?

Bài bình luận của tôi không đi vào chi tiết về kiến trúc của Brooks, mà chủ yếu tóm tắt một số sự khác biệt giữa hai truờng phái kiến trúc khác nhau trong AI. Trường phái truyền thống có thể nói bắt nguồn từ John McCarthy ở Stanford, người mà chúng ta đã nói qua ở blog này về Common sense và AI.

On Thu, 4 Jul 2002, XuanLong Nguyen wrote:

This is an interesting question that every student of AI should ask himself at some point. It seems that most people would give up after a few thoughts. Those with whom the question stuck still would probably eventually end up in places such as the directorship of MIT AI lab :-). In the mean time, the rest of us are happily working on obscure problems of knowledge-based systems, Strips worlds, Bayesian nets that seem to be forever in the wrong side of the real world ? Still, I think it’s fun to talk about — and before the other more knowledgeable members of the list speak out, hopefully — I’d like to add my humble opinions.

Without getting into hairy discussion of intelligence, and AI and so on, lets call the Brooks approach the bottom-up (or the MIT school), while the traditional approach the top-down (or the Stanford school). Roughly speaking, the most distinctive constrast between the two is that the bottom-up approach is behavior-based, while the top-down is representation-based.

Both approaches bear merits as well as difficulties. For a researcher in AI, the comparison also depends on what your immediate objectives are. If the objective is to build an *autonomously* “intelligent” entity that appears to be interesting and capable of doing something deemed interesting, the answer is not clear. The problem with the traditional top-down approach is that in order to break down a system into modules such as knowledge representation, reasoning, planning, learning, multi-agent coordinating, etc one has to necessarily make a lot of simplifying assumptions. Therefore there is no guarantee that such simplification is harmless. Since we still don’t know what it takes build an intelligent entity, whatever that means, we don’t know if such simplifying assumptions help us reach the essence of intelligence faster, or they simply lead us astray to a dead-end path that would preclude the possibility of ever finding any solution.

So this has been one of the strongest criticism of the traditional top-down approach. And for good reasons. The clearest evidence is that after half a century of research in many areas and subareas and subsubareas and subsubsubareas of AI, the field as a whole hasn’t achieved much, and most of us seem to forget the grandiose objective of the field, i.e., to understand and create *autonomous* intelligent entities that can hold up themselves in the real world. One natural alternative is, since we don’t know what it takes to build intelligent entities, we need to imitate what are considered to be intelligent. There are plenty around, not just in humans, but also animals and insects. So it seems plausible to step back to square one and studied the most primitive mechanism there is in the nature. The good news is that by now many researchers are convinced that seemingly sophisticated behaviors can be built up by very simple (and possibly reactive) rules. It is also hoped that one is able to understand and build progressively more sophisticated and intelligent behavior-based entities in much the same way the evolution works.

Needless to say, the progress has been frustratingly slow, and our understanding of nature, including even some of the most primitive insects, remains very limited. It seems that the breakthrough in AI would probably come from this bottom-up approach, given its very interdisciplinary nature and possible contributions coming from computer science and statistics, as well as other computational sciences and experimental sciences (such as neuroscience, physics and biology).

There have been a very strong movement that is more or less advocating small autonomous robots equipped with limited sensory and actuating capabilities but which are nevertheless useful and can hold up in the real world environment. They go by names such as x-insects, smart dust, robotic fly, etc. One distinctive feature of the bottom-up approach is the emphasis on sensors and sensory data processing (interaction with outside world). By contrast, the top-down approach focuses on representing and manipulating abstract knowledge-base with a strong emphasis on methods for obtaining such knowledge in the first place.

Back to the traditional top-down school. It is not without success, though in a limited way. By abstracting away and breaking down the intelligency into many different disconnected parts such as knowledge representation, reasoning, planning, learning, etc these subfields have been reduced to subclasses of problems, whose techniques prove useful for problem-solving, usually with heavy intervention of humans. Within each of the modules, limited intelligent behavior can be achieved. As we all know, an AI search researcher can boast about Deep Blues, while machine learning and control theorist can talk about autonomous vehicles. Planning researchers talk about automatically controlling a spacecraft for a short period of time. More robust, user-friendly softwares in many applications have been incorporating latest AI research advances without notice.

While both aiming for intelligency, the traditional school has an objective very different from the new bottom-up approach. This is exemplified by a popular AI textbook (by Russell and Norvig) which simply proclaims in chapter 1 that it is more concerned about solving problems intelligently, but not to imitate human intelligence in the first place. Perhaps the most convincing argument of
the traditional school of AI is summed up by Drew McDermott (from Yale), who famously wrote that: To say the Deep Blues is not intelligent is to say that airplanes don’t fly because they don’t flip their wings. However, the price this approach has to pay is that by separating the subfields too far apart, it is very hard to glue them back together to build a coherent working autonomous system. In particular, such systems are hopeless in interacting with the outside world.

Nevertheless, the traditional school of AI will be here to stay, and so will the AI planning, knowledge-representation, machine learning, multi-agent researchers :-). Ultimately, in order to have a truly intelligent autonomous entity (whatever it means, again), one has to have knowledge-representation capability, as well as search, inference, extra/interpolation capability, and so on because the most sophisticated intelligent entity, i.e, human, surely have those. But it is not clear if the knowledge representation and reasoning mechanism of that dream intelligent entity is the same as what we know, or are heading for in our search. Neither do we know how they are glued together.

Ideally, one may hope that both approaches in AI will meet somewhere in the search graph, or they never will if the graph is infinite with loops. We can only wait for many years to come to know the answer. And in the mean time, it’s useful to prove the NP-hardness of whatever task there is in each of our favorite building blocks of what are known to us as AI ?

cheers,
Long [July 04, 2002]

Tóm lại của bài viết dài dòng trên, chúng ta có ba câu hỏi chính mà cả hai anh kiến trúc đều phải đối đầu:

  • Làm thế nào để thu nhập, cập nhật được kiến thức?
  • Làm thế nào để mã hóa chúng một cách gọn gàng để có thể truy cập và sử dụng một cách hiệu quả?
  • Và làm thế nào sử dụng được kiến thức một cách hữu hiệu nhất?

Đó là những câu hỏi lớn không chỉ trong trí tuệ nhân tạo, mà trong công việc và cuộc sống hàng ngày chúng ta luôn phải đối thoải, chẳng hạn như bài blog gần đây của anh Hưng. Trí tuệ nhân tạo là một ngành có tham vọng “nhân tạo” và tự động hóa những giải pháp cho các câu hỏi trên, qua công cụ thuật toán, và các kỹ thuật phần mềm và phần cứng.

5 năm sau, suy nghĩ chung của tôi về vấn đề kiến trúc topdown vs bottom up không thay đổi nhiều. Mặc dù tôi vẫn thiên về kiến trúc topdown hơn, nhưng sự nhận thưc về mặt mạnh và mắt yếu của cả hai kiến trúc đều không thay đổi. Có thể nói trường phái top-down phân tách cả ba câu hỏi một cách tách bạch, và từ đó AI bị chia ra làm nhiều ngả, mỗi ngả tìm cách giải quyết một câu, và tập trung chủ yếu vào câu thứ hai và thứ ba. Còn kiến trúc bottom-up thì tập trung vào câu thứ nhất. Cả hai loại kiến trúc đều rất có ích, nhưng có lẽ một kiến trúc thích hợp nhất sẽ không có sự chia rẽ ba vấn đề trên một cách tách bạch như thế.

Điều đáng nói là ba câu hỏi trên có tính phổ quát không chỉ trong TTNT mà rất nhiều lĩnh vực khác, đặc biệt trong thống kê hiện đại. Ngành thống kê hiện đại vật vã rất nhiều với câu hỏi: Làm thế nào make sense được với data. Data chính là giao diện của bạn, của tôi, của một chính thể trí tuệ nhân tạo trong tương lai, với thế giới bên ngoài. Ngành thống kê cũng phải đối đầu với những câu hỏi như: Khi phải xây dựng một mô hình về thế giới, chúng ta phải bắt đầu từ đâu, bao nhiều prior information thì đủ? Qua đó chúng ta đi đến sự đối đầu giữa Bayesian và frequentists. Hay, làm thế nào để tạo ra các mô hình phức tạp một cách hệ thống? Graphical models, một sự kết hợp của graph theory và probability theory, chính là một giải pháp hướng tới câu trả lời đó. V.v. và v.v. Sự hội tụ giữa TTNT và ngành thống kê góp phần làm ra đời và phát triển lĩnh vực machine learning, và theo chủ quan của tôi, rất có thể trong tương lai không xa machine learning sẽ trở thành một trong những lĩnh vực trung tâm của cả TTNT và thống kê.

Thay cho câu kết, tôi xin trích lại đoạn sau trong Common sense và AI.:

Câu hỏi quan trọng mà tôi quan tâm là: Common sense có phải là khái niệm hữu ích hay không trong việc xây dựng máy tính thông minh? Cụ thể hơn, đó có phải là một khái niệm constructive hay không. Khái niệm này có thể được mổ xẻ và tổng hợp một cách tự động từ giao tiếp của computers với thế giới bên ngoài? Khái niệm đó có thể dễ dàng transfer từ computers này sang computers khác, có thể được tổng quát hoá và suy diễn (inductive and deductive inference) để tạo ra những khái niệm mới có ích?
….

Tôi cho rằng, nhìn từ góc độ mô hình xác suất, rất có thể common sense là một dạng “emerging property/phenomenon”, song không nhất thiết là một khái niệm kiến trúc căn bản của intelligence. Nếu quả thật như thế, thì rất nguy hiểm khi bắt đầu xây dựng một intelligent system bằng cách xây dựng common sense storages. Những systems như vậy sẽ không robust.

Tôi cho rằng vấn đề top-down vs. bottom-up về cơ bản là một trade-off giữa scalability và convergence time, theo nghĩa sau đây.

1 Trong kinh tế: kinh tế tập trung (i.e. top-down) giải quyết được một vấn đề nhỏ và cụ thể trong thời gian ngắn (ví dụ như Castro phủ Cuba bằng các cánh đồng mía ? trong vài năm), nhưng kinh tế thị trường (i.e. bottom-up) mới có đủ scalability để giải quyết các bài toán kinh tế xã hội mà objective functions phức tạp, dễ bị curse of dimensionality. Nhưng để phát triển một nền kinh tế thị trường đến tuổi trưởng thành cần đầu tư thời gian lớn.

2 Trong networking (và distributed systems): hai trường phái thiết kế mạng cơ bản là “smart network” (top-down) và “dumb network” (bottom-up). Internet là một thực thể phức tạp được thiết kế với nguyên tắc end-to-end (dumb network). Sự thành công của Internet mấy mươi năm qua là minh chứng hùng hồn của tính scalability của giải pháp bottom-up. Ngược lại, còn rất nhiều vấn đề với design hiện tại, và còn rất lâu Internet mới tiến hóa đến mức làm chúng ta thỏa mãn.

3 Trong phát triển nhân lực: muốn đào tạo “con người mới XHCN” trong 5, 10 năm thì dùng top-down approach, muốn đào tạo các cá nhân sáng tạo đủ trình độ đáp ứng với thời đại thì phải cho tự do tí toáy mất nhiều thời gian hơn.

4 Ta có thể tìm ti tỉ các ví dụ tương tự khác với các scales khác nhau trong AI, chính trị, đời sống, yêu đương (các bác nghĩ một chốc sẽ ra analogy hay ? ).

Tóm lại: khi chưa có tenure thì bác Long cần theo top-down để xây dựng credential nhanh chóng, có tenure rồi thì sang làm bottom-up như Brooks để thành giám đốc MIT AI Lab :-).

Interesting examples! Nhưng có lẽ khác với các lĩnh vực cụ thể trên, trong AI thế nào là kiến trúc bottom-up còn rất mơ hồ. Sự khó khăn này chắc là do tính đòi hỏi sự khái quát trong set-up của AI. Kiến trúc của Brooks còn quá giản đơn và hình như mấy con humanoids vẫn chưa làm gì ngoài mấy cái xác như trong sci-fi. Có lẽ bức tranh về kiến trúc bottom-up mới chỉ dừng lại ở mức độ “a new kind of science” của Wolfram (dẫu cái này cũng chưa có gì lthật à new hay deep gi` cả).

 

Tất cả những gì phần lớn chúng ta làm vẫn là những hòn gạch nhỏ trên tường mà thôi. ?

http://www.procul.org/blog/2007/06/25/ki%e1%ba%bfn-truc-top-down-va-bottom-up-trong-tri-tu%e1%bb%87-nhan-t%e1%ba%a1o/

Machine learning hay statistics? P3

Machine learning hay statistics? P3

Có một bài blog gần đây khá thú vị so sánh về machine learning và statistics (của Brendan O’Connor). Những nhận xét về sự khác nhau về culture giữa hai cộng đồng nghiên cứu khá chính xác. Xem ở đây.

Tôi cũng có quan điểm khá rõ ràng về vị trí của hai chuyên ngành này, (xem: đây đây ).

Qua bài blog này thì tôi đọc được bài viết của Leo Breiman trên Statistical Science, viết năm 2001, cũng khá thú vị. Xem ở đây

Xem thêm phần discussions, có tranh luận sôi nổi của nhiều tên tuổi khác, như Brad Efron, Emmanuel Parzen và David Cox. (Tôi rất khoái đọc phần discussions của các các tạp chí thống kê, như trông Journal of Royal Statistical Society B, Stat. Science). Học được rất nhiều quan niện và ý tưởng trong đó, mà ta không dễ dàng thấy được trong một bài báo formal. Giá mà KHMT cũng có phần discussion như vậy trong các tạp chí của mình).

Nói thêm về Leo Breiman, GS ở Berkeley (đã mất vài năm trước). Leo Breiman là một nhà thống kê tên tuổi của thế kỷ 20, một renaissance man. Điều thú vị là Leo Breiman bắt đầu là một probabilist tầm cỡ , sau đó trở thành một applied statistician, sau đó trở thành một cổ động viên nhiệt tình cho machine learning. Sự ủng hộ của một tên tuổi như Breiman cho machine learning có phần thái quá, nhưng có ích cho nhữngn người xuất thân từ ML ?

Tôi đồng tình với Breiman về tầm quan trọng của algorithmic modeling (tất nhiên rồi!). Breiman nhấn mạnh quan trọng của sự hiệu quả của thuật toán, prediction accuracy. Điều này, nhìn lại, thường là do các model khá đơn giản, nhưng lại vẫn có hiệu quả thuật toán và hiệu quả thống kê cao trong một số ứng dụng. Do đó Breiman muốn vứt bỏ đi model-based approach. Tôi bất đồng với quan điểm này. (Xem thêm phản hồi của Brad Efron). Tầm quan trọng của models là điều tôi học được từ statistics. Trong research statement tôi mới viết gần đây có ý: Many challenging problems in signal processing and systems can be fruitfully formulated as statistical inference with respect to some underlying model. This view emphasizes the modeling aspect of the approach and focuses on the central role of algorithm as being driven by the model, instead of being the driver.

Tất nhiên mô hình quá phức tạp, không thể verify được thì cũng vô ích. Mô hình tốt mà cồng kềnh thì không chạy thuật toán nhanh được thì cũng vô dụng. Nhưng xây dựng mô hình chính là nền tản của khoa học nói chung. Hiện tượng càng phức tạp buộc phải đòi hỏi các mô hình cũng phức tạp. Để có mô hình hữu ích và hữu dụng, ta cần nhiều công cụ toán học và xác suất, để xây dựng các mô hình mạnh, mà lại có nhiều structure cụ thể để ta có thể suy xét sử dụng (hay không). Ví dụ, ta thường nghĩ về model thông kê như là một hàm xác suất cho một nhóm các biến ngẫu nhiên. Nhưng một mô hình phức tạp hơn có thể là một hàm xác suất cho các objects phức tạp hơn, như các đồ thị, các hàm số. Thậm chí, ta còn có hàm xác suất cho tập các hàm xác suất ngẫu nhiên. Công cụ toán học cần là ở chỗ cho các stochastic processes, tuy có hành vi phức tạp, nhưng vẫn computationally manageable. Các stochastic processes này cho ta những viên gạch để xây các mô hình cho dữ liệu của các hành vi phức tạp.

Hãy hiểu rằng chúng ta đang ngày càng được bao phủ bởi các luồng dữ liệu, từ thế giới thực quanh ta thông quá các giác quan, cũng như từ các phương tiện thông tin đại chúng, từ Internet, từ laptop của bạn. Những gì ta cho là predictable được đều có thể hiểu là tuân thử theo một stochastic process nào đấy gắn kết tất cả mọi thứ với nhau.

Công cụ KHMT luôn luôn cần thiết trong modeling. Làm thế nào để diễn tả các mô hình một cách hiệu quả (data structure). Làm thế nào để inference với các mô hình đó cho tốt? Ta sẽ cần những nguyên tắc căn bản của algorithm design, như divide and conquer, modularity, recursion, memoization, v.v. Gần đây tôi có đối mặt với một số ví dụ cụ thể có liên quan đến vai trò của computation đối với sự đối chọi của frequentist và bayesian. Tôi nghĩ là computational complexity của nhiều vấn đề (và mô hình) làm cho sự đối chọi này không có nhiều ý nghĩa. Bayesians và frequentists đều có vai trò trong đó. Thông thường thì computer scientists (và machine learning researchers) rất thực dụng và không quan tâm đến mèo đen hay mèo trắng. Nhưng điều đáng nói là, computation làm cho môt số quan điểm của từng trường phái trở nên không vững vàng. Computation complexity không chỉ đơn thuần là một khái niệm về hiệu quả về thời gian hay không gian của một algorithm, mà nó gắn liền với khái niệm về độ phức tạp về information, mà qua đó sẽ chi phối quyết định của một người modeler (statisticians) cho dù anh ta khách quan hay chủ quan hay không. Sẽ quay lại cái này khi có dịp.

Quay lại với ML vs statistics. Thực ra sự phân chia giữa các chuyên ngành chỉ mang tính tương đối, và có ý nghĩa hành chính chủ yếu mà thôi. Có lẽ nên để hai ngành tiếp tục đứng riêng biệt, vì điều đó sẽ tạo ra nhiều ví trí trong job market :-). Với tôi thì statistics, KHMT, và machine learning có một tương lai rất sáng, trong một thế kỷ mà càng ngày access của chúng ta với data càng nhiều, càng nhanh, càng dễ dàng, và không thể tránh được.