Deep learning, cơ sở để hoàn thiện trí tuệ nhân tạo
Các hệ thống phần mềm đang ngày càng hiểu con người, thói quen và đã…
Mục lục nội dung
- AI => Machine Learning => Deep Learning
- AI ⊃ Machine Learning ⊃ Deep Learning
- Deep Learning networks
- Deep Learning Breakthroughs
- CNN (ConvNet)
- RNN
- Deepfake (giả mạo chuyên sâu)
Các hệ thống phần mềm đang ngày càng hiểu con người, thói quen và đã bắt đầu đưa ra những quyết định mà chúng cho rằng đó là đúng đắn. Vậy những công nghệ nào đang đứng sau các hệ thống phần mềm trong đó có timtho.vn mà các bạn đang sử dụng hàng ngày này? Hãy cùng tìm hiểu chia sẻ của Tiến sĩ Lê Văn Lợi, Viện trưởng viện Tin học Doanh nghiệp thuộc VCCI với cộng đồng ICT dưới đây các bạn nhé.
Từ “Deep Learning” cách đây 3, 4 năm thì quả là “hot” trên tất cả các phương tiện truyền thông đại chúng. Thời điểm cuối năm 2019 này mà còn đề cập đến từ này thì hơi bị “lạc hậu”. Nhưng thôi, coi như chúng ta dành chút thời gian nhàn rỗi nhâm nhi cà phê để “ôn lại” một cụm từ mà cộng đồng ICT trên toàn thế giới “ồn ào” trong thập kỷ qua.
AI => Machine Learning => Deep LearningTrí tuệ nhân tạo (Artificial Intelligence – AI) đã trải qua nhiều cách tiếp cận. Một trong những cách tiếp cận đó là xây dựng cơ sở dữ liệu tri thức (Knowledge Base). Tuy nhiên, các dự án theo hướng này đã không thành công. Cái khó của cách tiếp cận này là tri thức bị “cứng hóa” (hard-coded) và bản thân hệ thống đó không “tự tiếp nhận tri thức mới” từ dữ liệu.
Trích xuất tri thức từ dữ liệu là cách tiếp cận của Machine Learning. Khác với cách tiếp cận Knowledge Base, Machine Learning đã rất thành công.
Trong Machine Learning, lập trình không phải là chìa khóa của vấn đề. Trên thực tế, lập trình cho Machine Learning là làm theo “framework”: TensorFlow, Caffe, Microsoft Cognitive Toolkit/CNTK, Torch/PyTorch, MXNet, Chainer, Keras, Deeplearning4j, … Theo quan điểm của Google thì trong một hệ thống tổng thể của Machine Learning, phần lập trình chỉ chiếm khoảng 5%. 95% còn lại là thu thập dữ liệu, kiểm tra dữ liệu, quản trị nguồn lực hệ thống, cấu hình hệ thống, phân tích hệ thống, giám sát, … và đặc biệt là trích xuất các đặc tính của dữ liệu (feature extraction). Có thể nói trích xuất được đặc tính dữ liệu “đúng” thì việc huấn luyện hệ thống gần như đảm bảo thành công.
Như vậy, then chốt là xác định được đặc tính (feature) của dữ liệu. Tuy nhiên, trong nhiều trường hợp, việc xác định được đặc tính là không hề dễ dàng. Đặc biệt, đối với trường hợp huấn luyện không giám sát (unsupervised learning), tự quá trình huấn luyện sẽ trích xuất các đặc tính.
Deep Learning cho phép máy tính xây dựng các khái niệm phức tạp từ các khái niệm đơn giản hơn. Nguyên tắc này được lặp đi lặp lại nhiều lần. Nghĩa là: Một vấn đề phức tạp C được xây dựng từ các vấn đề đơn giản hơn là D1, D2, …, Dn. Kế tiếp, vấn đề Di lại được xây dựng từ các vấn đề đơn giản hơn nữa là E1, E2, … Em, v.v.
Để có một cách nhìn tổng quan về mối quan hệ giữa AI, Machine Learning và Deep Learning, tôi xin phép được vẽ biểu đồ Venn như sau:
AI ⊃ Machine Learning ⊃ Deep LearningNghĩa là: Machine Learning là tập con của Trí tuệ nhân tạo (AI); Deep Learning lại là tập con của Machine Learning.
Một trong những điểm hấp dẫn của Deep Learning là nó “mô phỏng” quy trình hoạt động của bộ não người. Khi tư duy hay nhận dạng vấn đề, thường chúng ta học qua các trải nghiệm trước đó (learning). Khi gặp một vấn đề phức tạp, thông thường chúng ta phân tích vấn đề phức tạp đó thành tổ hợp các vấn đề đơn giản hơn.
Deep Learning không đơn thuần là lập trình máy tính. Deep Learning lấy ý tưởng từ các nghiên cứu sinh học, nghiên cứu quy trình hoạt động của bộ não. Huấn luyện Deep Learning thường liên quan đến toán học ứng dụng như đại số tuyến tính, xác suất, thống kê, lý thuyết thông tin, tối ưu hóa. Nếu người Việt Nam có thế mạnh về tư duy toán học (đấy là tôi nghe người Việt chúng ta tự khen nhau như thế) thì chúng ta kỳ vọng sẽ tiếp cận Deep Learning tốt hơn chăng!?
Để đơn giản hóa vấn đề, tôi mạnh dạn đưa ra một khái niệm về Deep Learning. Deep Learning (DL) sử dụng các lớp thuật toán để xử lý dữ liệu (ví dụ: hiểu lời nói của con người hoặc nhận dạng trực quan các đối tượng). Dữ liệu được truyền qua từng lớp, với đầu ra của lớp trước cung cấp đầu vào cho lớp tiếp theo. Lớp đầu tiên trong mạng được gọi là lớp đầu vào, còn lớp cuối cùng được gọi là lớp đầu ra. Tất cả các lớp giữa hai lớp đầu vào và đầu ra được gọi là các lớp ẩn. Mỗi lớp thường áp một thuật toán thống nhất, được gọi hàm kích hoạt. Đây là mô hình chung của mạng nơ ron nhân tạo (Artificial Neural Network – ANN).
Deep Learning networksAi được coi là ông “trùm” về AI (Trí tuệ nhân tạo)? Tất nhiên, quan điểm này còn tùy thuộc vào từng người. Tuy nhiên, nếu chúng ta lấy sự kiện trao giải Turing Award năm 2018 làm điểm “chuẩn” thì có thể coi các ông Yoshua Bengio, Geoffrey Hinton, Yann LeCun là “Godfathers of AI” (ông trùm về trí tuệ nhân tạo). Thật ra, từ Godfather thường được dịch là “Bố già” nhưng từ này nghe hơi găng-xì-tơ nên tôi tạm dịch là “ông trùm” nghe cho dịu hơn. Trong các ông này, Geoffrey Hinton được coi là ông trùm của Deep Learning.
Deep Learning BreakthroughsÝ tưởng về mạng nơ ron (neural network) được phôi thai khá sớm, nhưng đã phải trải qua một số giai đoạn trầm lắng.
Chúng ta biết rằng khi huấn luyện mô hình tuyến tính, người ta tìm ra điểm cực tiểu của sai số bằng phương pháp Gradient Descent (lấy đạo hàm của biến thiên sai số, từ đó xác định được hướng tiệm cận đến điểm cực tiểu). Thế còn huấn luyện mạng nơ ron đa lớp thì dùng phương pháp nào? Vấn đề này là một ẩn số và cũng là một nút thắt cho đến năm 1986. Khi đó, Geoffrey Hinton cùng với các đồng tác giả David Rumelhart và Ronald Williams xuất bản bài báo: “Learning representations by back-propagating errors” (tạm dịch: huấn luyện bằng phương pháp điều chỉnh sai số lan tỏa ngược). Đây được gọi là thuật toán backpropagation (lan tỏa ngược). Đại ý của thuật toán này là khi tính lớp đầu ra thì thuật toán lan tỏa xuôi: lớp đầu vào => các lớp ẩn => lớp đầu ra. Khi điều chỉnh các hệ số để tìm điểm cực tiểu của sai số (đạo hàm của hàm kích hoạt) thì thuật toán lan tỏa ngược: lớp đầu ra => các lớp ẩn => lớp đầu vào. Khi điều chỉnh các hệ số thì vẫn dùng phương pháp “cổ điển” là lấy đạo hàm các sai số giống như khi huấn luyện mạng tuyến tính.
Thuật toán backpropagation cởi được nút thắt về thuật toán huấn luyện. Tuy nhiên, lúc đó mạng nơ ron lại gặp một rào cản khác: khi số lớp tăng, số nút tăng, khối lượng tính toán trở nên khổng lồ và mô hình này trở nên không thực tế vào thời điểm những năm 80, 90 của thế kỷ trước.
Từ sau năm 2000, đặc biệt là sau thời điểm bùng nổ điện thoại thông minh (smartphone), GPU (Graphics Processing Unit) của NVIDIA và điện toán đám mây (Cloud Computing) đi kèm với dữ liệu lớn (Big Data) thì Deep Learning tăng tốc và trở thành phổ biến.
Trong các loại hình mạng nơ ron thì loại nào đáng chú ý nhất? Theo quan điểm cá nhân của tôi, đến thời điểm hiện nay thì chúng ta chỉ cần nhớ 2 từ khóa “hot” là CNN và RNN là đủ.
CNN (ConvNet)CNN là viết tắt của Convolutional Neural Network – tạm dịch là mạng nơ ron tích chập. CNN còn có một cách viết tắt khác là ConvNet. CNN có nhiều ứng dụng trong nhận dạng hình ảnh và video, hệ thống tư vấn khuyến nghị (recommendation system), phân loại hình ảnh, phân tích hình ảnh y tế, đọc tài liệu giấy,… Để cho dễ nhớ, CNN là nền tảng cho lĩnh vực thị giác máy tính (computer vision). Một vấn đề lớn như thị giác máy tính, lại chủ yếu chỉ dựa vào một cấu trúc đặc biệt của mạng nơ ron như CNN – đủ để thấy CNN “vĩ đại” như thế nào.
Người đầu tiên đưa ra ý tưởng CNN là ông Kunihiko Fukushima, người Nhật Bản vào năm 1980. Đến năm 1989, Yann LeCun tổ hợp ý tưởng CNN với thuật toán Backpropagation để nhận dạng chữ số viết tay. Hệ thống này của Yann LeCun được ứng dụng để đọc chữ số viết tay trên các tờ séc trong thời gian từ những năm 1990 đến đầu những năm 2000.
Ngoài ra, có một số cột mốc đáng kể khác:
- Tăng tốc độ xử lý phải kể đến việc triển khai CNN trên các bộ xử lý GPU vào năm 2004 (tăng tốc độ xử lý lên gấp 20 lần).
- Giảm sai số nhận dạng mang tính đột phá phải kể đến sự ra đời của mạng AlexNet (Alex Krizhevsky và các đồng tác giả) vào năm 2012. Các sai số trước AlexNet thấp nhất là 26%, còn AlexNet giảm sai số xuống còn 16%. Sau này, người ta cải tiến dần các CNN để đạt đến sai số chỉ còn là 2.25%.
- Năm 2014, Facebook cho ra đời mạng DeepFace nhằm nhận dạng khuôn mặt. Mạng này có 9 lớp (layers) và có 120 triệu kết nối. DeepFace có thể nhận dạng đạt độ chính xác lên đến 97.35%, gần tương đương với chính chúng ta đấy (mắt người có thể nhận dạng chính xác đến 97.5%).
RNN là viết tắt của Recurrent Neural Network – tạm dịch là mạng nơ ron tái phát. RNN có nhiều ứng dụng: Dịch máy, Điều khiển robot, Dự đoán chuỗi thời gian, Nhận dạng giọng nói, Tổng hợp lời nói, Phát hiện dị thường chuỗi thời gian, Nhịp điệu học, sáng tác âm nhạc, Học ngữ pháp, Nhận dạng chữ viết tay, …
Năm 1982, ông John Hopfield đề xuất mạng Hopfield, là một dạng đặc biệt của RNN. Tuy nhiên, theo Wikipedia thì ý tưởng đầu tiên về RNN lại dựa vào công trình của ông David Rumelhart vào năm 1986. Có lẽ độc đáo nhất về một dạng của RNN là Long Short-Term Memory (LSTM) do các ông Jürgen Schmidhuber và Sepp Hochreiter đề xướng vào năm 1997. (<Ngoài lề>: cụm từ “Short-Term Memory” thì có thể dịch là bộ nhớ ngắn hạn nhưng cả cụm từ “Long Short-Term Memory” thì dịch sang tiếng Việt rất khó. Vì vậy, chúng ta cứ giữ nguyên từ LSTM, khỏi phải dịch. </Hết ngoài lề>) Có khá nhiều bài báo nói rằng khi huấn luyện mạng LSTM, người ta đạt được kết quả tốt hơn mong đợi. Còn vì sao lại đạt được kết quả tốt như vậy, thì chính tác giả bài báo đó nói là phải đợi các nghiên cứu tiếp theo!
Ý tưởng đằng sau RNN là sử dụng thông tin tuần tự, một chuỗi các dữ liệu. Nếu chúng ta muốn dự đoán từ tiếp theo trong một câu, chúng ta cần biết những từ nào đã xuất hiện trước đó. RNN được gọi là xử lý lặp (tái phát) vì chúng thực hiện cùng một “phép toán” cho mọi phần tử của chuỗi, với đầu ra phụ thuộc vào các tính toán trước đó. Nói một cách khác, RNN có bộ nhớ có thể nắm bắt thông tin về những gì đã được xử lý.
Có lẽ một ví dụ về ứng dụng của RNN mà chúng ta hay bắt gặp hàng ngày là tìm kiếm trên Google. Nếu anh/chị lười gõ từ khóa thì có thể bật chế độ tìm kiếm bằng giọng nói (Search by voice). Sau đó, anh/chị chỉ việc đọc các từ khóa để Google chuyển giọng nói thành văn bản và tìm kiếm. Nếu anh/chị tìm kiếm bằng giọng nói thì sau khi tìm xong, Google còn phát ra bằng giọng nói phần tóm tắt kết quả đầu tiên tìm được! Rất ấn tượng, đúng không ạ.
Deepfake (giả mạo chuyên sâu)Từ Deepfake là ghép của Deep Learning và Fake. Deepfake thường làm giả các video hoặc ảnh bằng cách cách áp dụng autoencoder (bộ mã hóa tự động) hoặc mạng GAN (Generative Adversarial Network – tạm dịch là mạng lưới nghịch cảnh).
Một ví dụ của Deepfake là “lồng” ảnh của 2 người khác nhau thành một và ảnh mới trông hơi giống với cả 2 ảnh gốc. Một ví dụ khác là lấy một đoạn video, cắt tiếng và lồng lời thoại. Một ví dụ khác nữa là lấy một đoạn video và thay gương mặt của nhân vật chính trong video bằng một gương mặt khác. Ngoài ra Deepfake còn có thể tạo ra các nhân vật “số hóa” trong phim, không giống với bất cứ diễn viên nào ngoài đời thực.
Sử dụng công nghệ Deepfake người ta có thể làm các phim khiêu dâm giả mạo nhân vật, làm các đoạn video giả và phát tán trong các cuộc vận động tranh cử, hoặc làm giả các video trên các mạng xã hội – như thật.
Như vậy, Deep Learning, cũng giống như nhiều phát minh khác của loài người, gây phấn khích, hào hứng nhưng đồng thời cũng gây lo ngại.
Anh/chị nào không quan tâm xin vui lòng bỏ qua.
Hà Nội, 30/12/2019