Cuộc cách mạng khoa học công nghiệp lần thứ 4

Chúng ta không thể biết trước điều gì sẽ xảy ra trong thế giới này, ngoại trừ: Máy học đang dần thống trị!

Tổng số lượt xem trang

Thứ Ba, 30 tháng 5, 2017

Python – tóm tắt


Python là ngôn ngữ thông dịch (interpreted language). Mỗi câu lệnh được dịch trực tiếp, thay vì dịch cả chương trình. Trong Python, chúng ta không cần khai báo kiểu cho biến, tham số, hàm và các phương thức. Điều này làm cho Python ngắn gọn và linh hoạt, và không tốn thời gian kiểm tra kiểu trong thời gian biên dịch. Python sẽ kiểm tra kiểu giá trị tại thời gian chạy. 
      
      Không giống với C++ và Java, Python không yêu cầu dấu kết thúc mỗi câu lệnh ở cuối câu lệnh. Tuy nhiên, nó cũng phân biệt chữ cái hoa/thường khi đặt tên biến. Python được lưu trữ trong tệp có phần mở rộng “.py”. 

      Python được xem là ngôn ngữ dễ học, dễ đọc và dễ bảo trì. Là ngôn ngữ hỗ trợ phương thức lập trình có cấu trúc, lập trình hướng đối tượng, và có bộ thu gom rác tự động. Python cũng dễ dàng tích hợp với nhiều ngôn ngữ khác (C, C++, Java).



Variables – Biến
Biến là các tên để lưu trữ dữ liệu hay đối tượng.

a_string = "hello, world"
an_integer = 12
a_float = 3.14
a_boolean = True

Print – In dữ liệu
Để in ra hằng hay biến

print ('hello, world')
print (12)
print ((5+3)/2)
------
hello, world
12
4

Khi in nhiều biến thì dùng dấu phẩy giữa các biến:

print ('abc', 12, a_float)
------
('abc', 12, 3.14)

In một xâu dài thì dùng thêm kí hiệu ‘\’

print 'The only thing to do with good advice is',\
        'to pass it on. It is never of',\
        'any use to oneself.'
------
The only thing to do with good advice is to pass it on. It is never of any use to oneself.

Comment – chú thích 
# khi muốn chú thích một câu lệnh (một dòng)

‘‘‘ Còn với chương trình có nhiều dòng, 
ta cho đoạn chương trình muốn 
chú thích vào giữa ’’’

Numbers - Kiểu số
Python hỗ trợ kiểu dữ liệu số: int (số nguyên); float (số có dấu phẩy thập phân); complex (số phức)

print (17 / 3) # phép chia
print (17 // 3)  # phép chia lấy phần nguyên
print (17 % 3)   # phép chia lấy phần dư
print (5 * 3 + 2)# phép nhân cộng phần dư
------
5
5
2
17

Strings - Kiểu chuỗi
Có ba chú pháp dùng cho hằng chuỗi:

string_single_quotes = 'This'
string_double_quotes = "is"
string_triple_quotes = """a Python program."""

Chúng ta có thể dùng chú thích trong chuỗi, nhờ kết hợp các cú pháp trên:

string1 = 'hello "world"'
string2 = "don't"
print string1
print string2
------
hello "world"
don't

Chúng ta cũng có những thao tác trên chuỗi:

strings = string1 + " : " + string2
strings_uppercase = strings.upper()
beginning = strings[0:4] # kĩ thuật slicing chỉ số
print (strings)
print (strings_uppercase)
print (beginning)
------
hello "world" : don't
HELLO "WORLD" : DON'T
hell

Chúng ta có thể chuyển đổi qua lại giữa số và chuỗi:

i = 12
s = str(i)
s = '17'
i = int(s)

Chúng ta có thể thay thế một xâu con trong xâu lớn:

a_string = 'This is a string. A string consists of many characters'
newstring = a_string.replace('string', 'hahiho')
print (newstring)
------
This is a hahiho. A hahiho consists of many characters

Chú ý: một chuỗi (string) trong Python là một hằng số (immutable), tức là nó không thay đổi được giá trị. Tất cả các thao tác trên string đều tạo ra một string mới.

List – danh sách
Danh sách là một mảng các phần tử. Điều chú ý là các phần tử này không cần cùng kiểu, nó có thể là một đối tượng bất kì.

a_list = [1, 2, 3, 'abc']
another_list = [a_list, 'ef', ['This', 10, 'is', a_list ]]
print (a_list)
print (another_list)
------
[1, 2, 3, 'abc']
[[1, 2, 3, 'abc'], 'ef', ['This', 10, 'is', [1, 2, 3, 'abc']]]

Chúng ta có thể truy xuất trực tiếp vào phần tử của danh sách:

elem = a_list[2]
elem2 = another_list[2][0]
print (elem)
print (elem2)
list2 = a_list[2:4] # kĩ thuật slicing chỉ số trong danh sách
print (list2)
------
3
This
[3, 'abc']

Chúng ta có thể thêm phần tử vào danh sách:

list2.append('olala')
list2.append(66)
print (list2)
------
[3, 'abc', 'olala', 66]

Chúng ta có thể kiểm tra một phần tử có trong danh sách hay không:
if 'olala' in list2:
    print ('obama')
------
obama

Chú ý: một danh sách (list) trong Python có thể thay đổi được giá trị (mutable). Tất cả các thao tác trên list đều tác động nên chính đối tượng đó (ví dụ append).

Tuples 
Tuple tương tự như list, nhưng kích cỡ của nó cố định. Tuple là một mảng không thay đổi được. Một khi một tuple được khởi tạo, các phần tử của nó không thể thay đổi, bị xóa đi hay được chèn thêm vào.

a_tuple = (1, 2, 3, 'abc')
another_tuple = 'This', 10, 'is', a_tuple
print (a_tuple)
print (another_tuple)
------
(1, 2, 3, 'abc')
('This', 10, 'is', (1, 2, 3, 'abc'))

Giả sử chúng ta cố thêm một phần tử vào tuple
a_tuple.append(100)
    a_tuple.append(100)
------
AttributeError: 'tuple' object has no attribute 'append'

Dictionary
Mỗi phần tử trong dictionary gồm có 2 thành phần: key và value được tách biệt bởi dấu (:). Mỗi dictionary được khai báo trong ngoặc nhọn {}. Yêu cầu key trong các phần tử của dictionay phải khác nhau, trong khi value có thể không cần. Trong dictionary, value có thể có bất kì kiểu dữ liệu nào, nhưng key phải là kiểu không thay đổi được như string, number hay tuple.

stuff = {'name': 'Zed', 'age': 39, 'height': 6 * 12 + 2}
print stuff
print stuff['name']
print stuff['age']
print stuff['height']
------
{'age': 39, 'name': 'Zed', 'height': 74}
Zed
39
74

Chúng ta có thể thêm phần tử dễ dàng

stuff['city'] = "San Francisco"
print stuff
------
{'city': 'San Francisco', 'age': 39, 'name': 'Zed', 'height': 74}

Chúng ta cũng có thể duyệt để lấy key và value của mỗi phần tử trong dictionary:

data = {"a": 1, "b": 2, "c": 3}
for k, v in data.items():
    print(k, v)
------
('a', 1)
('c', 3)
('b', 2)

Câu lệnh điều khiển
Khối cấu lệnh được phân định bằng khoảng trống (spaces hay tabs) ở đầu các dòng lệnh. Đây chính là sự khác biệt của Python với các ngôn ngữ khác. Vì vậy, đừng bao giờ quên tab hay space nhé!
if/elseif/else:

var1 = 10
var2 = 20
if var1 != var2:
    print("var1 is not equal to var2")
elif var1 > var2:
    print("var1 is greater than var2")
elif var2 > var1:
    print("var2 is greater than var1")
else:
    print("var1 is equal to var2")
------
var1 is not equal to var2

while

count = 0
fruits = ['banana', 'apple',  'mango', 'melon', 'orange', 'pear', 'pineapple']
while count < len(fruits):
   print 'Current fruit:',fruits[count]
   count += 1
------
Current fruit : banana
Current fruit : apple
Current fruit : mango
Current fruit : melon
Current fruit : orange
Current fruit : pear
Current fruit : pineapple

for

fruits = ['banana', 'apple',  'mango', 'melon', 'orange', 'pear', 'pineapple']
for index in range(len(fruits)):
   print 'Current fruit :', fruits[index]
------
Current fruit : banana
Current fruit : apple
Current fruit : mango
Current fruit : melon
Current fruit : orange
Current fruit : pear
Current fruit : pineapple

Tệp – file 
File là nơi lưu trữ dữ liệu mà chúng ta cần làm việc nhiều. Khi làm việc với file, chúng ta cần mở (phương thức open()) và sau khi xong, chúng ta cần đóng lại (close()).

tep = open('my_file.txt')
for dong in tep:
    print (dong)
tep.close()
------
Machine learning is the subfield of computer science that 
gives computers the ability to learn 
without being explicitly programmed (Arthur Samuel, 1959).


Chúng ta cũng có thể ghi các dữ liệu ra một file:

fw = open('out_file.txt', 'w')
fw.write('Machine learning \n') # note '\n' is necessary here
fw.write('Evolved from the study of pattern recognition and'\
'computational learning theory in artificial intelligence')
fw.close()

Tham số thứ hai trong lệnh open(): ‘w’, ‘r’, ‘a’, để chỉ các chế độ làm việc với file: r – reading only (chỉ đọc), w- writing only (chỉ ghi), a – appending (nối vào cuối file).


Hàm – function 
Hàm là một khối các câu lệnh được tổ chức nhằm thực hiện một tác vụ nào đó. Chúng ta xây dựng hàm nhằm sử dụng lại tác vụ, đồng thời tạo cho chương trình dễ theo dõi và sử dụng lại. Chúng ta có thể sử dụng các hàm sẵn có cũng như tự xây dựng trên Python.

def printinfo(ten, tuoi):
   print "Ten : ", ten
   print "Tuoi: ", tuoi
   return;
printinfo('Hau', '66')
------
Ten :  Hau
Tuoi:  66

Các lời gọi hàm và dữ liệu truyền vào rất mềm dẻo trong Python:

printinfo(tuoi = '80', ten = 'nvhau')
------
Ten :  nvhau
Tuoi:  80

Hoặc thậm chí chúng ta có thể gán giá trị mặc định trong quá trình xây dựng hàm:

def printinfo(ten = 'hau', tuoi = 68):
   print "Ten : ", ten
   print "Tuoi: ", tuoi
   return;

Nếu chúng ta không truyền giá trị cho tham số, hàm sẽ in ra giá trị mặc định:

printinfo()
------
Ten :  hau
Tuoi:  68

Python là ngôn ngữ hỗ trợ nhiều thư viện, môi trường và công cụ để xây dựng các ứng dụng khác nhau: lập trình mạng, lập trình web, lập trình cơ sở dữ liệu. Người học nên tham khảo thêm tại các tài liệu [1-4]. 
Những lưu ý quan trọng cho Python:
zip() – là hàm trả ra một danh sách các tuples.

a = range(0,5)
b = range(-2,3)
c = range(1,6)
print (a)
print (b)
print (c)
z = zip(a,b,c)
print (z)
------
[0, 1, 2, 3, 4]
[-2, -1, 0, 1, 2]
[1, 2, 3, 4, 5]
[(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]

Giả sử chúng ta có một danh sách các tuple và muốn tính tổng của các phần tử thứ nhất, thứ hai, thứ ba, v.v... tương ứng với nhau. Chúng ta cũng có thể dùng zip() để quá trình tính toán thuận tiện hơn:
l1 = [(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]
l2=[]
for a in zip(*l1):
    l2.append(sum(a))
print(l2)
------
[10, 0, 15]

Trong Python, viết chương trình trên gọn hơn với kết quả không thay đổi:
l1 = [(0, -2, 1), (1, -1, 2), (2, 0, 3), (3, 1, 4), (4, 2, 5)]
l2 =[sum(a) for a in zip(*l1)]
print (l2)

Đây là một kĩ thuật được sử dụng rất nhiều trong Python. 
lambda – là hàm nặc danh trong Python. Nó rất hữu ích khi thực thi một công việc đơn giản nhằm làm đầu vào cho một hàm khác. Cú pháp được viết theo:
lambda tham-số : biểu-thức
Ví dụ:

tong = lambda x,y: x+y
print (tong(12)) # kết quả sẽ in ra 3

Hoặc một chương trình kiểm tra số tự nhiên xem có là số chẵn không:

ktChan = lambda x: (x%2 == 0)
print (ktChan(4)) # True
print (ktChan(5)) # False

Dùng hàm lambda làm đầu vào cho hàm filter(hàm-số, đối–số), hàm filter sẽ trả ra danh sách các phần tử nào trong đối-số mà hàm-số cho giá trị True ứng với phần tử đó.

ds = [5, 2, 7, 10, 9, 11, 0, 1]
sochan = filter(lambda x: (x%2 == 0) , ds)
print (sochan)      # kết quả sẽ trả ra [2, 10, 0]


Người học cần đọc và hiểu tường tận hàm zip và lambda để quá trình cài đặt các thuật toán Máy học dễ dàng hơn. Với những người chưa có nhiều kiến thức và kĩ năng Python, hãy tham khảo thêm tài liệu [1-4]. Người học cũng đừng quá lo lắng khi chưa hiểu kĩ. Python cần thời gian để chúng ta có thể ‘tiêu hóa’ được!

Tài liệu tham khảo:
1. https://wiki.python.org/moin/BeginnersGuide/Programmers
2. https://developers.google.com/edu/python/introduction
3. https://docs.python.org/3/tutorial/
4. https://www.tutorialspoint.com/python/index.htm

Thứ Hai, 29 tháng 5, 2017

Python – Cài đặt



Có thể ngắn gọn rằng: học Máy học rất khó có thể "cưỡng" sự hấp dẫn của Python. Đơn giản là vì hiện nay có rất nhiều thư viện cho Máy học được xây dựng/sử dụng Python (Tensorflow, Theano, hay scikit-learn).

      Trong bài này chúng ta sẽ cùng nhau cài đặt Python và những thư viện quan trọng để có được môi trường lập trình thuật tiện nhất. Python là ngôn ngữ lập trình mã nguồn mở, miễn phí, và có sẵn cho các hệ điều hành. Chúng tôi sẽ hướng dẫn mọi người trên môi trường Windows, với môi trường khác, việc cài đặt cũng không có nhiều khác biệt.

Chú ý: Python và các thư viện thường có các phiên bản khác nhau, cho  Windows 32-bit hay 64-bit.

Cài đặt Python trên Windows
Chúng ta vào [1] để lựa chọn phiên bản Python (Hình 1):

 Hình 1. Màn hình tải tệp cài đặt Python.

      Tại thời điểm cuốn sách này đang được viết thì Python 3.6.0 là phiên bản mới nhất. Khi bạn chọn tải về, chúng ta sẽ có tệp .exe và cài đặt bình thường. Nếu chúng ta không thay đổi, nó sẽ ở thư mục trong ổ chứa hệ điều hành (C:\). Để kiểm tra xem Python đã cài đặt và chạy được hay chưa, chúng ta tạo ra một file có tên là hello.py (dùng Notepad hay bất kì trình soạn thảo nào) với nội dung như sau:
print ('Hello. This is the first Python program!')
      Và lưu tệp hello.py vào một thư mục, trên máy của chúng tôi sẽ là thư mục D:\HocMayHoc. Bây giờ chúng ta hãy mở terminal ( Start>cmd) và đơn giản chỉ cần gõ (Hình 2):
D:\HocMayHoc>python hello.py
      Chương trình sẽ hiện như sau:
Hello. This is the first Python program!
Hình 2. Minh họa cho chương trình Python đầu tiên.

      Chúng ta thấy đấy, để viết một chương trình Python thật đơn giản! Chúng ta cũng có thể tương tác trực tiếp trên terminal bằng cách gọi trình biên dịch Python, sau đó gõ các dòng lệnh trên đó (Hình 3):
Hình 3. Lập trình trực tiếp Python trên terminal.

      Mặc dù chúng ta có thể lập trình trực tiếp trên terminal như vậy, nhưng để công việc dễ dàng hơn, đặc biệt khi chúng ta xây dựng những chương trình phức tạp, chúng ta cần một môi trường phát triển tương tác trực quan hơn. Đó chính là PyCharm.

Cài đặt PyCharm cho Python
Để cài đặt PyCharm, chúng ta vào [2] để tải tệp cài đặt. Lựa chọn hệ điều hành phù hợp (chúng tôi dùng Windows). PyCharm có 2 phiên bản: Professional là phiên bản đủ (có phí), và Community (miễn phí). Chúng ta sẽ tải phiên bản Community, vì nó cũng có đầy đủ những tính năng mà chúng ta cần cho cuốn sách này (Hình 4). 
Hình 4. Trang web download PyCharm.

      Nếu việc cài đặt PyCharm ổn thỏa, chúng ta sẽ thấy như Hình 5:

Hình 5. Màn hình mở PyCharm


      Chúng ta chọn tạo dự án mới (Create New Project), sau đó gõ tên dự án vào (Hình 6):

Hình 6. Tạo dự án trên PyCharm.

      Chúng ta lấy tên dự án là: HocMayHoc. Sau đó để tạo ra tệp chưa chương trình Python, nhấn chuột phải vào dự án, chọn New, rồi chọn Python File (xem Hình 7). Gõ tên file (ví dụ hello.py), và chúng ta sẽ có được Hình 8:

Hình 7. Tạo chương trình Python.


Hình 8. Tệp Python đã sẵn sàng để chúng ta lập trình.


      Sau khi hoàn tất một chương trình, chúng ta nhấn Ctr+Shift+F10 để chạy chương trình. Hoặc có thể dùng nút (Run).
      PyCharm tạo môi trường làm việc rất dễ dàng cho người lập trình. Người đọc có thể tham khảo thêm [3, 4] để tham khảo thêm.

Cài đặt các thư việncho Python

Nhằm giúp cho quá trình xây dựng một chương trình Máy học đơn giản, chúng ta cần nhiều thư viện. Có thể có nhiều cách cài đặt các thư viên,  nhưng khi chúng ta có PyCharm, dùng PyCharm là đơn giản nhất. Từ PyCharm chúng ta vào File/Default Settings, chọn Default Project/ Project Interpreter, chọn tiếp vào dấu (+) màu xanh như hình dưới:


Hình 9. Chọn (+) để cài đặt thư viện.

      Muốn cài đặt thư viện nào, chúng ta chỉ cần gõ tên thư viện đó. Ví dụ matplotlib như hình dưới hiển thị phiên bản cập nhật và thông tin tác giả của thư viện:



Hình 10. Hình ảnh sau khi vào File/Default Settings/ Default Project/ Project Interpreter
và chọn (+).
      Thao tác sau cùng là nhấn nút: Install Package ở phía dưới và đợi PyCharm tự cài đặt phần còn lại. Quá trình cài đặt hoàn tất sẽ được PyCharm cập nhật vào danh sách thư viện, hiển thị như hình.
      Quá trình cài đặt các thư viện khác cũng tiến hành tương tự. Trong cuốn sách này ngoài matplotlib, chúng ta cần thêm numpy, pandas, và scikit-learn.


Thứ Sáu, 26 tháng 5, 2017

Tại sao cuốn Học Máy Học ra đời?

Mục tiêu của ngành Trí tuệ Nhân tạo (Artificial Intelligence – AI) là tạo ra những máy tính để có thể thay thế (thậm chí tốt hơn) công việc con người. Mặc dù “đường xa vạn dặm”, những nhà khoa học máy tính đã có những bước tiến đáng kinh ngạc. Hiện tại, có thể kể ra rất nhiều ứng dụng đa dạng: Nhận dạng chữ viết, nhận dạng âm thanh, xe tự hành, dịch máy (từ một ngôn ngữ sang nhiều ngôn ngữ), khả năng dự đoán và gợi ý sản phẩm cho người dùng, nhận dạng hình ảnh (mặt người, vân tay, hay nhiều đồ vật khác), lọc thư rác (spam filtering). Ngoài ra có rất nhiều lĩnh vực mà chúng tôi không thể kể hết ở đây như: y học (IBM Watson), bảo mật thông tin, dự đoán thị trường chứng khoán, v.v… Năm 2016 tổng thống Obama đã tổ chức một cuộc trao đổi với các chuyên gia đầu ngành về AI về việc chuẩn bị cho tương lai của AI [17]. Xe không người lái (driverless cars) đã trở thành sự thực với Uber ở Pittsburgh [18]. Điều đáng nói là một số lĩnh vực, khả năng nhận dạng đã bằng hoặc vượt con người (ví dụ nhận dạng chữ viết, tiếng nói [20]).
Những ứng dụng thông minh trên tuy ở nhiều lĩnh vực và hoàn cảnh khác nhau, nhưng đều có chung một nguồn gốc: Máy học (Machine Learning). Lịch sử Máy học có từ lâu, nhưng nó thực sự có nhiều đột phá cho tới khi các nhà khoa học máy tính áp dụng kỹ thuật Deep Learning (học nhiều tầng) để cho ra nhiều sản phẩm có tính ứng dụng hiệu quả trong thương mại và công nghiệp.  Hiện nay, những công ty hàng đầu về công nghệ đều có những đội ngũ nghiên cứu và phát triển các sản phẩm Máy học. Những nhà nghiên cứu AI hàng đầu thế giới như Geoff Hintonm, Sebastian Thrun, Peter Novig, Yann LeCun, Andrew Ng, v.v… đềuthuộc nhóm phát triển trong các dự án quan trọng bậc nhất của Google, Facebook, IBM, Intel, Amazon, Microsoft, Apple, v.v...

AlphaGo đánh Lee Sedol,  người từng 18 lần vô địch thế giới môn cờ vây, 
là bước tiến vượt bậc của AI.

Demis Hassabis, người sáng lập DeepMind – thuộc Google, lấy cảm hứng từ bộ não con người đã xây dựng một chương trình “Máy học vạn năng”: một tập các lệnh cho thuật toán tự học – giống như là một hệ sinh học – để tìm cách giải quyết một nhiệm vụ từ ban đầu mà chỉ cần dùng dữ liệu thô. AlphaGo là chương trình Máy học của DeepMind đã chiến thắng nhà vô địch thế giới cờ vây Lee Se-dol tháng 3.2016. Độ phức tạp của cờ vây từ lâu đã được xem như là bất khả xâm phạm cho máy tính, nhưng DeepMind đã dùng kĩ thuật tiên tiến nhất của Máy học (Deep Learning) để tự học và biến AlphaGo thành nhà vô địch cờ vây.  Nhiều chuyên gia trong lĩnh vực trí tuệ nhân tạo cho rằng cờ vây đòi hỏi nhiều yếu tố bắt chước suy nghĩ của con người hơn cờ vua [21]. Chiến thắng này sớm 10 năm so với dự đoán của các chuyên gia.  Đây được coi là một bước tiến vượt bậc của ngành AI và nó sẽ là cảm hứng cho bất kì lĩnh vực nào muốn ứng dụng AI. Demis Hassabis có nói “…nhưng điều thú vị bậc nhất cho chúng ta là đây không phải là một hệ chuyên gia dùng các luật được lập trình rõ ràng. Mà nó là chương trình tự học để trở thành nhà vô địch của môn cờ vây bằng nhờ các kĩ thuật Máy học. Sau cùng thì chúng ta có thể áp dụng những kĩ thuật này vào nhiều vấn đề trong cuộc sống, như mô hình dự báo thời tiết hay phân tích các dịch bệnh phức tạp. Vì vậy, nó thực sự thú vị để khởi động sự đương đầu tiếp theo”. Để biết thêm sự ảnh hưởng của Máy học, người đọc có thể tìm hiểu bài viết của Tom Mitchell [2]. Ông đã dùng nó để thuyết phục chủ tịch hội đồng trường CMU mở ra ngành Máy học đầu tiên trên thế giới, giáo sư Tom Mitchell có khẳng định rằng Máy học sẽ còn là chủ đề phát triển nóng trong 100 năm tới.

Chúng ta đã trải qua ba cuộc cách mạng công nghiệp. Lần thứ nhất là cuối thế kỉ 18, khi máy hơi nước và kĩ thuật cơ khí bắt đầu ra đời. Lần thứ hai là cuối thế kỉ 19 với việc xuất hiện của điện. Lần thứ ba là cuối thế kỉ 20 với sự xuất hiện của Internet, máy tính cá nhân, và công nghệ truyền thông. Hiện nay, ngày càng nhiều các nhà khoa học và các nhà kinh tế đều cho rằng chúng ta đang đứng trước thời gian đầu của cuộc cách mạng lần thứ bốn trong công nghiệp. Cuộc cách mạng của trí tuệ nhân tạo (Artificial Intelligence) và cụ thể hơn là Máy học (Machine Learning). Nó sẽ là nhân tố tiền đề cho một xã hội kết nối mọi vật (Internet of Thing – IoT). Nếu người ta coi dầu lửa là nguồn tài nguyên cho phát triển công nghiệp cho thế kỉ 20, thì dữ liệu chính là nguồn tài nguyên cho phát triển công nghệ thế kỉ 21. Do vậy, chúng ta có thể khẳng định rằng đây là thời điểm không thể tốt hơn để tìm hiểu, nghiên cứu và ứng dụng Máy học vào trong rất nhiều lĩnh vực của cuộc sống.

Hiện nay có rất nhiều sách và khóa học online cho Máy học với nhiều chủ để chuyên sâu. Khóa học được nhiều người biết đến: của giáo sư Andrew Ng và giáo sư Sebastian Thrun đều rất thú vị và hữu ích. Có thể đếm được rất nhiều khóa học xoay quanh chủ đề Machine Learning trên Coursera và Udacity. Số cuốn sách hay đã được viết về Máy học cũng nhiều không kém.
Vậy tại sao cuốn sách này lại ra đời? Thứ nhất, cuốn sách này viết bằng tiếng Việt. Nó sẽ là tài liệu tham khảo cho nhiều người đam mê Khoa học Máy tính gặp khó khăn trong việc đọc tài liệu chuyên ngành bằng tiếng Anh, đặc biệt là người mới tiếp cận. Cuốn sách ra đời nhằm cung cấp những kiến thức cơ bản và quan trọng nhất về Máy học cho những người muốn tìm hiểu. Chúng tôi cho rằng vì chỉ có những hiểu biết nhất định, người học mới có niềm yêu thích, rồi tiếp đến có thể thúc đẩy chúng ta khám phá thêm. Tất nhiên, cuốn sách cũng là tài liệu tham khảo cho những ai quan tâm tới Máy học.
Thứ hai, chúng tôi sẽ cố gắng trả lời các câu hỏi hỏi cơ bản nhưng rất nhiều khi lại khó khăn với người tìm hiểu Máy học. Việc hiểu rõ các câu hỏi này là quan trọng, vì nó giúp cho người học hiểu đúng, từ đó tạo niềm say mê với Máy học.
-          Máy học là gì? (What?)
-          Tại sao chúng ta cần Máy học? (Why?)
-          Khi nào nên/buộc phải dùng Máy học? (When?)
Thứ ba, chúng tôi tiếp cận Máy học theo hướng ứng dụng để không làm những kiến thức lý thuyết gây khó khăn cho người chưa có nền tảng kiến thức tốt. Có nghĩa là cuốn sách sẽ tập trung vào ý tưởng ở mức cảm nhận thuật toán, cách thức nó hoạt động ra sao và cung cấp những kiến thức căn bản nhất để cài đặt nó. Người học không phải lo lắng khi chưa thể hiểu hết ngay được bài toán; đơn giản là hãy thử và xem thuật toán hoạt động thế nào thông qua các chương trình nhỏ được cài đặt từng bước một. Người học có thể thay đổi chương trình ở một vài điểm để cảm nhận rõ hơn về thuật toán. Mỗi bài chúng tôi đều có lời khuyên cho người đọc cách tiếp cận phù hợp.  Bằng cách này, chúng tôi tin rằng những người mới tìm hiểu Máy học sẽ có cảm hứng và nhanh hiểu thuật toán ở mức cơ bản mà không mất đi tính chính xác. 
Thứ tư, chúng tôi muốn góp phần thay đổi cách nhìn nhận về việc học Máy học. Rất nhiều người cho rằng, muốn tiếp cận Máy học, chúng ta cần phải biết về Thống kê (statistics), biết về đại số (Linear Algebra), biết về xác suất (probability theory), v.v... Tuy nhiên, chúng tôi cho rằng người học có thể tiếp cận Máy học, đặc biệt cho người bắt đầu và không/chưa cần nền tảng lý thuyết toán học nhiều, bằng cách tiếp cận Máy học như tiếp cận một công cụ đề tìm tòi, rèn luyện, và khám phá. Hiện nay, lĩnh vực Máy học ngày càng phát triển rộng và áp dụng vào rất nhiều lĩnh vực khác nhau. Thực tế, trong Máy học có hai hướng chính: i) ứng dụng và ii) nghiên cứu lý thuyết. Việc tiếp cận theo hướng ứng dụng giúp những người chưa có nền tảng lý thuyết (toán học, trí tuệ nhân tạo) và kĩ năng lập trình có thể dễ hơn trong tiếp cận, trước khi họ có thể hiểu những kiến thức phức tạp hơn. Đây là một lý do quan trọng thôi thúc chúng tôi viết cuốn sách này.
Thứ năm, rất quan trọng rằng, chúng tôi muốn cài đặt thuật toán Máy học từ đầu (scratch). Bởi chúng tôi tin vào những lợi ích sau đây: i) Thực sự thấu hiểu rõ cách thức hoạt động của thuật toán.; ii) Chúng ta có thể hiểu các tham số trong thuật toán, từ đó có thể cải tiến thuật toán hiệu quả hơn khi gặp bài toán thực tế; iii) Có thể đề xuất thuật toán mới nhờ hiểu những thuật toán đã có. Chỉ có hiểu và cài đặt thuật toán từ đầu, chúng ta mới tự tin sử dụng thuật toán và coi nó là một công cụ quen thuộc mỗi khi gặp bài toán thực tế.
Trong cuốn sách này, chúng tôi sử dụng ngôn ngữ Python. Tại sao là Python? Có nhiều lý do. Đầu tiên và vô cùng quan trọng, Python là một ngôn ngữ rất dễ học cho người mới bắt đầu. Python có cú pháp, cấu trúc cực kì đơn giản và dễ đọc. Một học sinh phổ thông chăm chỉ cũng có thể tự học được Python. Thứ hai, Python là ngôn ngữ ngày càng phổ dụng (rất nhiều sản phẩm đang được phát triển ở Google dùng Python). Thứ ba, Python có rất nhiều thư viện cho Máy học (scikit-learn, pandas, theano, tensorflow). Do vậy, Python là sự lựa chọn hàng đầu cho người mới học có thể dễ dàng hơn trong việc phát triển ứng dụng cho Máy học, khoa học dữ liệu (data science), và nhiều lĩnh vực khác trong khoa học máy tính.
Như vậy, cuốn sách này phù hợp với những người chưa có nhiều kiến thức về Máy học muốn khám phá một lĩnh vực đang có những bước đột phá trong ngành Trí tuệ Nhân tạo (AI). Chúng tôi mong rằng, cuốn sách này sẽ ươm mầm cho bất kì ai, dù là học sinh, sinh viên, và ngay cả những người ở lĩnh vực khác có khả năng xây dựng các chương trình ‘thông minh’ áp dụng vào trong lĩnh vực họ quan tâm.
Mặc dù chúng tôi rất mong muốn chuyển thể tất cả các thuật ngữ tiếng Anh sang tiếng Việt, tuy nhiên khi những thuật ngữ tiếng Anh nào thực sự thông dụng, chúng tôi sẽ để nguyên (hoặc chỉ dịch tạm thời) vì ba lý do: 1. Dịch sang tiếng Việt có khi không đúng với nghĩa và nhiều khi gây hiểu nhầm sang thuật ngữ vốn đã được dùng ở hoàn cảnh khác; 2. Các thuật ngữ này là những khái niệm cần biết và hiểu với người học Máy học; 3. Số lượng thuật ngữ này không nhiều, nên chúng tôi tin rằng người học (dù không thạo ngoại ngữ) vẫn có thể thoải mái theo dõi và làm chủ bài học.

Tham khảo:

1. https://vi.wikipedia.org/wiki/AlphaGo_đấu_với_Lee_Sedol
2. http://www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf.



Thứ Tư, 24 tháng 5, 2017

Hiện tại và tương lai của Trí tuệ Nhân tạo!


Chúng ta đang nghe rất nhiều tới cuộc cách mạng công nghiệp lần thứ 4. Nó sẽ thay đổi toàn bộ cuộc sống của con người, trong mọi lĩnh vực. Rồi đây, xã hội có thể đạt tới nền sản xuất tăng gấp 10, 100, hay 1000 lần hiện tại. Một trong những đóng góp quan trọng chắc chắn sẽ có sự đóng góp rất lớn của Trí tuệ Nhân tạo (Artificial Intelligence - AI). 



Nguồn: http://www.canonandculture.com/merging-human-with-machine/

      Bài này giới thiệu cho một người không am hiểu AI có thể nhanh chóng nắm được những nét chính của AI hiện tại và tương lai, bằng cách  giới thiệu 1 video và 1 bài báo. :-)


      Một cuộc cách mạng trong AI đang xảy ra nhờ sự đột phá của kĩ thuật học nhiều tầng (deep learning). Vậy AI hiện nay có thể làm được những gì? Nó có hứa hẹn gì phía trước? Thách thức mà nó khó có thể vượt qua được là gì? 
      Những câu hỏi này đều có trong video của Yoshua Bengio : https://www.youtube.com/watch?v=uawLjkSI7Mo. Có thể ngắn gọn rằng: 3 cuộc cách mạng công nghiệp trong quá khứ nhằm giải phóng cơ bắp cho con người, thì trong cuộc cách mạng lần này, AI sẽ giải phóng trí óc cho con người. Nhiều ứng dụng thông minh của AI đã có thể đã đạt ngưỡng và vượt con người (AlphaGo, nhận dạng tiếng nói, nhận dạng hình ảnh); tuy nhiên, trong rất nhiều lĩnh vực, AI vẫn chưa đạt tới đẳng cấp của một đứa trẻ 2 tuổi (đứa trẻ khi tung quả bóng lên, nó sẽ biết quả bóng sẽ rơi xuống).  

      Nếu bạn muốn biết được "tuyệt đỉnh công phu" (state-of-the-art) của AI, deep learning, thì bạn chỉ cần đọc bài báo trên tạp chí Nature của 3 vị đầu ngành:

      Rất nhiều người lo rồi đây những robot (người máy) có thể vượt con người, khống chế lại con người. Điều đó có khả năng không? Andrew Ng, vị giáo sư đầu ngành AI, trả lời "Chúng ta lo việc đó giống như chúng ta lo sao Hỏa sẽ chật người vậy!" :-)

      Giá mà ai dịch sang tiếng Việt được cho video và bài báo trên thì thật tuyệt cho rất nhiều bạn trẻ Việt Nam. Điều ước này sẽ không còn khi kĩ thuật deep learning có thể đạt tới khả năng dịch của con người (trong lĩnh vực chuyên môn). :-]