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à đã 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ó Rada 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 Learning
Trí 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 Learning
Nghĩ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 networks
Ai đượ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
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
Đặt dịch vụ như thế nào?
Đặt trực tiếp từ mẫu tìm dịch vụ tại trang web này
• Bước 1: Chọn nhóm dịch vụ mà bạn quan tâm
• Bước 2: Chọn loại dịch vụ bạn cần đặt (lưu ý, nếu hệ thống đã tự động chọn đúng dịch vụ bạn cần chuyển đến bước 3)
• Bước 3: Nhập vào số điện thoại để dịch vụ có thể liên hệ với bạn.
• Bước 4: Nhập vào khu vực mà bạn cần gọi dịch vụ, lưu ý bạn có thể lựa chọn địa chỉ tương đối mà hệ thống gợi ý ở gần điểm mà bạn muốn được cung cấp dịch vụ nhất. Trường hợp địa chỉ của bạn đã có trong danh sách gợi ý này thì rất tốt, bạn có thể chọn nó, tuy nhiên có nhiều địa chỉ quá chi tiết mà hệ thống không thể xác định được trên bản đồ như ngõ/ngách/hẻm hoặc tầng trong các khu nhà cao tầng. Với các địa chỉ chi tiết, bạn có thể ghi chú ở bước thứ 5 hoặc cung cấp cho dịch vụ biết khi họ gọi điện cho bạn.
• Bước 5: Nhập vào Ghi chú, vấn đề bạn gặp phải hoặc địa chỉ chi tiết để gửi đến dịch vụ...
• Bước 6: Bấm nút Gửi yêu cầu tìm dịch vụ gần bạn...
Tải ứng dụng Rada để đặt dịch vụ
• Bước 1: Bấm nút tải ứng dụng Rada theo điện thoại tương ứng mà bạn đang sử dụng dưới mẫu đặt dịch vụ; Trường hợp bạn truy cập bằng máy tính, hãy mở điện thoại để quét mã QR ở góc phải bên dưới màn hình để chuyển đến kho cài ứng dụng
• Bước 2: Khi chuyển đến kho ứng dụng, bạn bấm nút cài đặt để cài ứng dụng Rada vào máy điện thoại của mình. Tiến hành đăng ký để tạo tài khoản bằng cách nhập vào số điện thoại, chờ hệ thống gửi mã xác thực để hoàn thành đăng ký tài khoản
• Bước 3: Chọn nhóm dịch vụ mà bạn quan tâm, tiếp tục sau đó chọn dịch vụ mà mình cần rồi đọc kỹ thông tin giới thiệu về dịch vụ; xem kỹ bảng giá mà chúng tôi cung cấp sau đó bấm nút đặt dịch vụ phía dưới màn hình
• Bước 4: Nhập vào địa chỉ, hệ thống sẽ lấy số điện thoại mà bạn đã đăng ký làm số liên hệ, tiếp tục điền vào nội dung Ghi chú, vấn đề bạn gặp phải hoặc địa chỉ chi tiết để gửi đến dịch vụ... bạn cần yêu cầu dịch vụ, tiếp tục chọn thời gian bạn muốn cung cấp dịch vụ
• Bước 5: Khi hoàn thành, tiếp tục bấm nút gửi yêu cầu để bắt đầu tìm dịch vụ
Lợi ích khi đặt dịch vụ từ hệ thống Rada
• Mạng lưới dịch vụ liên kết với Rada có mặt rộng khắp trong cả nước vì vậy bạn có thể đặt ở bất cứ nơi nào dịch vụ cũng có thể đáp ứng
• Ngay sau khi kết nối thành công, dịch vụ sẽ gọi điện cho bạn trong vòng 1 phút để xác nhận dịch vụ và trao đổi chi tiết
• Ứng dụng Rada kiểm soát tất cả các ca cung cấp dịch vụ được dịch vụ cung cấp, vì vậy bạn có thể khiếu nại, đánh giá bất cứ khi nào bạn không thấy hài lòng
• Rada chỉ cung cấp dịch vụ thông qua ứng dụng và trang web vì vậy mọi thông tin sẽ được lưu trữ lại để đảm bảo có thể tra cứu và xử lý bất cứ khi nào bạn muốn
• Giá cả dịch vụ được công bố sẵn trên web và ứng dụng Rada để bạn tham khảo và trao đổi với dịch vụ
• Rada là ứng dụng kết nối dịch vụ đạt giải Nhân tài đất Việt 2017 với hơn 8 năm hoạt động, đến nay đã có 10,576 nhà cung cấp dịch vụ, 138,967 người sử dụng và 235,136 yêu cầu đã thực hiện thành công sẽ mang lại trải nghiệm tốt nhất khi bạn đặt dịch vụ từ mạng lưới dịch vụ của mình.