Top 10 ứng dụng thực tế của Machine Learning

Machine Learning là một sáng tạo hiện đại giúp con người không chỉ ở quy mô công nghiệp và các quy trình chuyên nghiệp mà còn thúc đẩy cuộc sống hàng ngày. Nhưng Machine Learning là gì? Nó là một phần của Trí tuệ nhân tạo, Machine Learning tập trung vào các kỹ thuật thống kê để xây dựng các hệ thông máy tính trông minh để học từ các cơ sở dữ liệu sẵn có cho nó. Hiện nay, Machine learning đã được sử dụng trong nhiều lĩnh vực và ngành công nghiệp. Ví dụ: chuẩn đoán trong y học, xử lý ảnh, dự đoán tài chính, phân loại, học kết hợp, hồi quy…
Các hệ thống thông minh được dây dựng dựa trên các thuật toán Machine Learning có khả năng học hỏi từ kinh nghiệm trước đó hoặc dữ liệu lịch sử. Các ứng dụng của Machine Learning cung cấp kết quả trên cơ sở dữ liệu hoặc kinh nghiệp từ quá khứ. Trong bài này, chúng ta sẽ thảo luận về 10 ví dụ thực tế về cách sử dụng Machine Learning đang giúp tạo ra các công nghệ mới mạnh mẽ hơn.

Nhận dạng hình ảnh (Image Recognition)

Nhận dạng hình ảnh là một trong những ứng dụng phổ biến nhất của Machine Learning. Có nhiều tình huống để phân loại đối tượng trong một hình ảnh kỹ thuật số. Ví dụ, trường hợp ảnh đen trắng thì sẽ sử dụng phép đo mức xám của từng pixel còn trong ảnh màu thì lại sử dụng phép đo cường độ của 3 màu khác nhau tạo nên 1 pixel (R-G-B).
Machine Learning cũng được ứng dụng để phát hiện khuôn mặt trong ảnh. Có một danh mục riêng cho mỗi người trong cơ sở dữ liệu hình ảnh của nhiều người. Machine Learning cũng được sử dụng trong nhận dạng chữ viết để phân biệt chữ viết tay hay chữ in. Chúng ta cần phân đoạn một đoạn văn bản thành các hình ảnh nhỏ hơn, mỗi hình ảnh chứa một ký tự.

Nhận dạng giọng nói (Speech Recognition)

Nhận dạng giọng nói là việc chuyển đổi giọng nói thành văn bản. Nó được biết đến với máy nhận dạng giọng nói hoặc nhận dạng giọng nói tự động. Ở đây, một phần mềm có thể nhận ra các từ được nói trong các clip hoặc audio và sau đó chuyển đổi thành file văn bản. Phép đo trong ứng dụng này có thể là một tập hợp các số đại diện cho tín hiệu giọng nói. Ta cũng có thể phân đoạn tín hiệu giọng nói theo cường độ trong các khung thời gian khác nhau.
Nhận dạng giọng nói được sử dụng trong các ứng dụng có giao diện tương tác qua giọng nói, tìm kiếm bằng giọng nói… Giao diện người dùng thông qua giọng nói bao gồm quay số bằng giọng nói, điều hướng cuộc gọi và điều khiển thiết bị. Nó cũng có thể được sử dụng như một công cụ nhập liệu đơn giản và chuẩn bị các tài liệu có cấu trúc.

Machine Learning là gì?
Machine Learning là gì?

Chuẩn đoán trong ý học (Medical diagnosis)

Machine Learning có thể sử dụng trong các kỹ thuật và công cụ chuẩn đoán bệnh. Nó được sử dụng để phân tích các biểu hiện lâm sàng và kết hợp chúng để tiên đoán về sự tiến triển của bệnh tật để thông tin tới bác sỹ để lập kế hoạch điều trị và theo dõi bệnh nhân. Đây là những ứng dụng thành công của các phương pháp Machine Learning. Nó có thể giúp tích hợp các hệ thống trong lĩnh vực chăm sóc sức khỏe.

Phân tích chứng khoán (Statistical Arbitrage)

Trong lĩnh vực tài chính, chứng khoán nhắm vào các giao dịch tự động ngắn hạn với số lượng giao dịch lớn. Trong các chiến lược này, người dùng sẽ tập trung vào việc thực hiện các thuật toán giao dịch cho một mã chứng khoán trên cơ sở số lượng cũng như tương quan lịch sử và các biến số kinh tế chung. Phương pháp Machine Learning được áp dụng để có thể có được các chiến lược chênh lệnh giá. Chúng ta có thể áp dụng hồi quy tuyến tính (linear regression) và Vecto hỗ trợ (Support Vector Machine – SVM) cho bài toán này.

Learning associations

Learning associations là quá trình phát triển những hiểu biết sâu sắc về các hiệp hội giữa các sản phẩm. Ví dụ điển hình là làm thể nào các sản phẩm không liên quan có thể liên kế được với nhau. Một trong những ứng dụng của Machine Learning nghiên cứu mối liên hệ giữa các sản mà người dùng mua. Nếu một người mua sản phẩm thì hệ thống sẽ gợi ý các sản phẩm tương tự vì chúng có mối liên quan với nhau. Khi bất kỳ một sản phẩm mới nào được tung ra thị trường thì chúng sẽ được liên kết với các sản phẩm cũ để tăng doanh số.

Phân loại (Classification)

Classification là quá trình đặt từng cá nhân vào một trong nhiều lớp. Classification giúp phân tích các phép đo của một đối tượng để xác định xem nó sẽ thuộc vào danh mục nào. Để thiết lập mối quan hệ hiệu quả, các nhà phân tích sử dụng dữ liệu. Ví dụ, trước khi ngân hàng quyết định cho khách hàng vay, ngân hàng sẽ đánh giá xem khách hàng có khả năng trả khoản vay đó hay không. Bằng cách xem xét các yếu tố như thu nhập, tiết kiệm, lịch sử tài chính… Thông tin này được lấy từ dữ liệu cũ trong khoản vay.

Dự đoán (Prediction)

Machine Learning cũng được sử dụng trong các hệ thống dự đoán. Vẫn xem xét ví dụ về việc cho vay của ngân hàng, để tính xác suất xảy ra lỗi, hệ thống cần phân loại dữ liệu có sẵn theo nhóm. Nó được xác định bởi một bộ quy tắc được quy định bởi các nhà phân tích. Sau khi được phân loại xong, ta có thể tính xác xuất về lỗi có thể xảy ra. Những tính toán này có thể áp dụng trên nhiều lĩnh vực và mục đích khác nhau. Tạo dự đoánh là một ứng dụng phổ biến của Machine Learning.

Khai thác (Extraction)

Khai thác thông tin là một ứng dụng tốt nhất của Machine Learning. Nó là quá trình trích xuất thông tin có cấu trúc từ dữ liệu phi cấu trúc. Ví dụ các trang web, bài viết, blog, báo cáo kinh doanh và email. Cơ sở dữ liệu quan hệ duy trì đầu ra sản phẩm bởi việc trích xuất thông tin. Quá trình trích xuất lấy một tập hợp các tài liệu làm đầu vào và đầu ra dữ liệu có cấu trúc.

Hồi quy (Regression)

Chúng ta có thể thực hiện Machine Learning bằng thuật toán hồi quy. Trong hồi quy, chúng ta sử dụng các nguyên tắc của Machine Learning để tối ưu hóa các tham số. Nó cũng được sử dụng để giảm sai số gần đúng và tính toán kết quả gần nhất có thể. Cjimgs ta cimxh cps thể sử dụng Machine Learning để tới ưu hóa các chức năng. Chúng ta có thể chọn thay đổi các đầu vào để có được các kết quả gần nhất có thể.

Dịch vụ tài chính (Financial Services)

Machine Learning có rất nhiều tiềm năng trong lĩnh vực tài chính ngân hàng. Nó là động lực đằng sau sự phổ biến các dịch vụ tài chính. Machine Learning có thể giúp các ngân hàng, tổ chức tài chính đóng các tài khoản trước khi nó xảy ra. Nó cũng có thể theo dõi các mô hình chi tiêu của khách hàng. Machine Learning cũng có thể phân tích thị trường. Máy thông minh có thể được đào tạo để theo dõi các môi hình chi tiêu. Thuật toán có thể xác định các xu hướng dễ dàng và phản ứng ngay trong thời gian thực.

Kết luận

Tóm lại, chúng ta có thể nói rằng Machine Learning là một bước đột phá đáng kinh ngạc trong lĩnh vực trí tuệ nhân tạo. Trong khi đó, hàng ngày Machine Learning thay đổi để cải thiện cuộc sống của chúng ta.

Có thể bạn quan tâm:

Phát hiện đối tượng real-time với YOLO

YOLO là một thư viện sử dụng trí tuệ nhân tạo để phát hiện đối tượng real-time trong ảnh và video. Ta có thể sử dụng YOLO với nhiều ngôn ngữ khác nhau như Python, Javascript, C++… YOLO xử lý ảnh có thể sử dụng GPU hoặc OPENCV
Trang chủ của YOLO: https://pjreddie.com/darknet/yolo/#demo

Phát hiện đối tượng với YOLO
Phát hiện đối tượng với YOLO

Cài đặt YOLO trên máy ảo

  • Thiết lập máy ảo CENTOS 7
  • Cài đặt git: sudo yum install git
  • cài đặt GCC: # yum group install “Development Tools”
  • Clone project darknet: git clone https://github.com/pjreddie/darknet
  • Cài đặt OPEN CV
    yum install cmake gcc gtk2-devel numpy pkconfig -y
    cd
    wget https://github.com/opencv/opencv/archive/3.4.2.zip
    unzip 3.4.2.zip
    https://www.vultr.com/docs/how-to-install-opencv-on-centos-7
  • Sửa file Makefile dòng OPENCE từ 0 thành 1
  • Biên dịch darknet:
    cd darknet
    make
  • Tải trọng số có sẵn đã được train: wget https://pjreddie.com/media/files/yolov3.weights
  • Test: ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Một số địa chỉ tham khảo:

https://www.blog.pythonlibrary.org/2018/06/05/creating-pdfs-with-pyfpdf-and-python/

https://pjreddie.com/darknet/yolo/#demo

https://www.vultr.com/docs/how-to-install-opencv-on-centos-7

Lộ trình học Machine Learning cho người mới

Giới thiệu với các bạn bài viết về 8 giải thuật Machine Learning do The Learning Machine cung cấp. Các giải thuật được liệt kê theo roadmap và phân thành 4 nhóm: Regression, classification, clustering và generation. Ngoài 8 giải thuật trên thì các giải thuật khác sẽ được hoàn thành trong tương lai. Ngoài ra, các bạn cũng có thể tìm hiểu các kiến thức về thông kê được cung cấp bởi trang này.

Lộ trình học Machine Learning
Lộ trình học Machine Learning

Nhóm Regression:

  1. Lasso, Ridge & Elastic Net
  2. Random Forest

Nhóm Classification:

3. Naive Bayes

4. Decision Trees (ID3)

5. Random Forest

6. Logistic Regression

Nhóm Clustering:

7. K-means

8. Hierarchical Clustering

Trên đây là 3 nhóm với 8 thuật toán chính của Machine Learning. Bạn có thể dùng nó làm lộ trình học Machine Learning cho bản thân mình.

Chi tiết bạn có thể xem thêm tại đây.

Sử dụng toán học trong Lập trình Trí Tuệ Nhân tạo

Trong Trí tuệ nhân tạo nói chung, Machine Leanrning và Deep Learning nói riêng thì toán học là một phần rất quan trọng không thể tách rời giúp ta có thể hiểu sâu và tiếp cận các nghiên cứu mới nhất. Sau đây là các nguồn tài liệu giúp ta củng cố các kiến thức về Toán học giúp ích rất nhiều khi nghiên cứu các giải thuật về Machine Learning và Deep Leanrning:

  1. https://mml-book.github.io/
    Chi tiết các kiến thức toán được sử dụng trong Machine Learning và Deep Leanrning cơ bản và nâng cao.
  2. http://cs229.stanford.edu/section/cs229-linalg.pdf http://cs229.stanford.edu/section/cs229-prob.pdf
    Bài giảng về Đại số tuyến tính và xác suất thống kê giúp bạn nắm bắt kiến thức bao quát và cần thiết khi học Machine Learning
    .
  3. https://www.deeplearningbook.org/conte…/linear_acheebra.html https://www.deeplearningbook.org/contents/prob.html
    Tương tự như mục 2
    .
  4. https://gwthomas.github.io/docs/math4ml.pdf
    Tổng quan các kiến thức toán cần thiết để có thể bắt đầu nghiên cứu Machine Learning.
  5. https://explained.ai/matrix-calculus/index.html
    Các kiến thức về ma trận, không thể thiếu trong việc xử lý dữ liệu trong Machine Learning.

Toán học và trí tuệ nhân tạo (AI)

Trong tất cả các ngành khoa học, toán học đóng vai trò quan trọng trong việc phát triển các ngành kho học đặc thù. Ví dụng toán học xác xuất thống kê trong sinh học, toán học trong vật lý, toán học trong hóa học…
Đặc biệt trong lĩnh vực công nghệ thông tin, toán học luôn đi trước mở đường cho ngành công nghệ thông tin. Một số lĩnh vực của toán học là tiền đề, xương sống trong sự phát triển của công nghệ thông tin. Ngược lại, công nghệ thông tin cũng tác động ngược trở lại toán học.
Trong thời gian học đại học, mình có tiếp xúc và nhận thấy bộ môn Toán rời rạc ứng dụng trong tin học là vô cùng quan trọng. Không chỉ thế còn có khoa riêng về Toán tin ứng dụng, các cuộc thi về thuật toán đều cần những hiểu biết nhất định về toán học…
Sau này đi làm, mặc dù không chuyên về nghiên cứu cũng như làm về thuật toán nhưng tôi vẫn luôn đi sâu thêm, tìm hiểu về các thuật toán thì càng thấy rằng ý nghĩa, tầm quan trọng của toán học với tin học rất lớn và ngày càng lớn. Gần đây ta nghe thấy nhiều về lĩnh vực Trí tuệ nhân tạo và từ ngữ này rất hot hiện nay nhưng thực tế Trí tuệ nhân tạo đã được nhắc đến và được các nhà nghiên cứu trên thế giới quan tâm rất nhiều năm về trước.
Nhưng đối với Trí tuệ nhân tạo thì toán học càng đóng vai trò quan trọng và không thể thiếu được. Các thuật toán, quy trình đưa ra ngày càng phức tạp. Việc ứng dụng các nghiên cứu tiên tiến trong toán học được ứng dụng trong trí tuệ nhân tạo cần nhiều hơn bao giờ hết và tiếp tục cần nhiều hơn nữa. Trí tuệ nhân tạo thường đi liền với dữ liệu lớn(big data) vì trí tuệ nhân tạo muốn việc máy tính suy nghĩ và ra quyết định càng giống với con người càng tốt vì hiện tại trí óc của con người vẫn chưa có cái gì vượt qua được.
Do vậy, để đi theo con đường trí tuệ nhân tạo để đào sâu cũng như ứng dụng một cách triệt để, tốt nhất có thể thì việc học tập và hiểu biết về toán học là bức thiết.
Đối với Việt Nam có nhiều thành tích trong việc đào tạo toán học cho lớp trẻ(bằng chứng là đạt nhiều thành tích trong các cuộc thi Olypic toán học quốc tế) sẽ là tiền đề và cơ hội quan trọng cho đất nước ta phát triển ngành công nghệ thông tin nói chung và trí tuệ nhân tạo nói riêng.

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:

cai-dat-anaconda-tren-window
cai-dat-anaconda-tren-window

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.

tính năng Jupyterlab trên Anaconda

– 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ả:

Một ví dụ về Machine Learning với Anaconda

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.