Hướng dẫn lập trình Basic Authentication với PHP và JavaServlet

Trong bài hướng dẫn này, chúng ta sẽ tìm hiểu và lập trình cơ chế xác thực Basic Authentication dựa trên kiến trúc RESTful Web Services, trong đó, yêu cầu xác thực (Request) sẽ được gửi thông qua API-URI.

Công cụ

Để hiện thực được bài hướng dẫn này, chúng ta cần chuẩn bị (tối thiểu) những công cụ sau:

  • Eclipse IDE for Enterprise Java Developers
  • Apache Tomcat 8.5
  • JAX-RS RI 2.30
  • Postman
  • Java JDK 1.8
  • XAMPP 5.6.40

TL;DR

Các bước cấu hình môi trường lập trình, cấu hình Java Servlet, triển khai API theo kiến trúc RESTful Web Services, kiểm thử API, chúng ta có tham khảo trong video tại đây và tải về mã nguồn mẫu tại đây.

Basic HTTP authentication scheme

Tiêu chuẩn RFC-7235 định nghĩa cơ chế xác thực dựa trên giao thức HTTP, cơ chế này cho phép phía máy chủ yêu cầu phía máy khách cung cấp các thông tin xác thực (authentication information). Một cách vắn tắt, cơ chế hoạt động như sau:

  • Máy chủ phản hồi về máy khách mã lỗi 401 (Unauthorized), cùng với thông tin về cách xác thực dựa trên WWW-Authenticate header;
  • Tiếp theo, nếu máy khách muốn xác thực với máy chủ, máy khách cần phải thêm thông tin Authorization vào trường header của HTTP. Thông thường, thông tin dùng để xác thực là tên-truy-cập (Username) và mâ-khẩu (Password).

Trong phạm vi của bài viết, chúng ta sẽ xem cơ chế xác thực này (sau đây gọi tắt là Basic Auth) là một trong những giải pháp dùng để xác thực một người dùng (User/Client) khi gửi truy cập đến API, chúng ta sẽ không thảo luận nhiều về ưu-khuyết điểm của nó. Trong thực tế, bên cạnh cơ chế này, chúng ta còn có những cơ chế khác như (có thể dùng kết hợp với Basic Auth): API Key, Bearer Token, Digest Auth, OAuth 1.0, OAuth 2.0, Hawk Authentication, AWS Signature, NTLM Authentication, Akamai EdgeGrid.

Xét về độ bảo mật, cơ chế Basic Auth dùng mã Base64 để mã hóa và giải mã thông tin xác thực, do vậy, thường không được đánh giá cao về độ bảo mật. Trong thực tế, nếu dùng Basic Auth, chúng ta thường kết hợp với giao thức SSL (HTTPS) để có thêm một lớp mã hóa thông tin.

Xét về mặt kỹ thuật của Basic Auth, để gửi thông tin xác thực, phía máy khách cần phải “đính kèm” thông tin cần xác thực vào trường header của HTTP. Cấu trúc của Authorization header như sau:

  • Thông tin Username và Password được nối lại thành một chuỗi có định dạng username:password;
  • Tiếp theo, chuỗi này được mã hóa (encode) theo chuẩn Base64;
  • Sau cùng, nối thêm từ khóa Basic (cùng với 1 khoảng trắng) vào phía trước chuỗi “username:password” vừa được mã hóa.

Ví dụ, nếu username là newai và password là vietnam, thì giá trị Authorization header sẽ như sau:

Authorization: Basic bmV3YWk6dmlldG5hbQ==

Có một lưu ý với Base64 trong một số ngôn ngữ lập trình, thông thường sẽ bổ sung thêm (padding) ký tự = (dấu bằng) sau chuỗi mã hóa. Tùy thuộc vào ngôn ngữ lập trình, chúng ta cần lưu ý điểm này khi mã hóa một chuỗi. Chẳng hạn, trong Java, thư viện java.util.Base64.Encoder thông thường sẽ padding thêm ký tự = vào cuối chuỗi mã hóa, ngược lại, chúng ta có thể sử dụng phương thức withoutPadding().

Java Service sử dụng GET với Basic Auth

Trong đoạn chương trình bên dưới, chúng ta sẽ tiến hành hiện thực lớp Authentication, trong đó, bao gồm phương thức auth(...):boolean với tham số là chuỗi mã hóa Authorization header theo chuẩn Base64, kết quả trả về là true nếu thông tin xác thực đúng, và ngược lại.

package com.soa.auth;

import java.util.Base64;
import javax.ws.rs.*;
import javax.ws.rs.core.*;

@Path("/auth")
public class Authentication {
	
	@GET
	@Path("/v1")
	@Produces(MediaType.APPLICATION_JSON)
	public boolean auth(@HeaderParam("authorization") String authString)
	{
		// extract data before decoding
		String[] authParts = authString.split("\\s+");
		String authInfo = authParts[1];
		
		// decode the data back to original string
		byte[] bytes = null;
		bytes = Base64.getDecoder().decode(authInfo);
		String decodedAuth = new String(bytes);
		
		// extract username/password
		if(decodedAuth.contains(":"))
		{
			String username = decodedAuth.split(":")[0];
			String password = decodedAuth.split(":")[1];
			
			// change this line to your logic
			if(username.equals("admin") && password.equals("123456"))
				return true;
		}
    return false;
	}
}

Nếu chúng ta hiện thực các Services trong nhiều Package khác nhau, thì thẻ <param-value>...</param-value> trong tập tin web.xml cần phải ghi nhận tất cả những Package đó, mỗi tên Package cần phải đầy đủ và cách nhau bằng dấu ; (semi-colon).

Ví dụ Project có 2 Package (com.soa.democom.soa.auth), thì tập tin web.xml cần phải thể hiện rõ thông tin cả 2 Package này:

<servlet>
  <servlet-name>Jersey REST Service</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  
  <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.soa.demo;com.soa.auth</param-value>
  </init-param>
  
  <load-on-startup>1</load-on-startup>
</servlet>

Kiểm thử API bằng Postman

Trước khi kiểm thử API, chúng ta cần phải khởi động Servlet và triển khai (Deploy) dịch vụ lên Server (localhost:8080). [Xem video hướng dẫn]

Các bước thực hiện như sau:

  • Trong phần mềm Postman, chọn thẻ Authorization;
  • Chọn Basic Auth trong trường Type;
  • Nhập thông tin Username và Password;
  • Kiểm tra có phải giao thức GET và bấm Send.

Lập trình Web PHP gửi HTTP Authentication

Đến đây, chúng ta đã lập trình và kiểm thử API đã chạy đúng với logic đặt ra. Tại bước này, chúng ta sẽ lập trình một giao diện Web (HTML & PHP) để thể hiện giao diện đăng nhập (HTML) và gửi (PHP) gói tin chứa Authentication header đến máy chủ chứa API (localhost:8081) và nhận (PHP) kết quả xác nhận thông tin người dùng.

Chúng ta sẽ cần hiện thực tập tin login.php chứa phần mã HTML thể hiện giao diện đăng nhập, và mã PHP để gửi thông tin xác nhận đến API và nhận kết quả xác thực từ API.

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Log In</title>
</head>

<body style="font-size:125%;">
	<?php date_default_timezone_set('Asia/Ho_Chi_Minh'); ?>
	<h1>Log In</h1>
	<div id="InputForm">
		<form id="submitForm" method="POST">
			Username:<br>
			<input type="text" class="form-control" id="username" name="username" value="<?php echo isset($_POST['username']) ? $_POST['username'] : '' ?>" /><br><br>

			Password:<br>
			<input type="password" class="form-control" id="password" name="password" /><br><br>

			<button id="submitBtn" type="submit">Log In</button>
		</form>
	</div>

	<?php
		if (isset($_POST['username']) && isset($_POST['password']))
		{
			$url = "http://localhost:8080/SOA-2/soa/auth/v1/";

			//Initialize cURL.
			$ch = curl_init();

			//Prepare HTTP-HEADER
			$username = $_POST['username'];
			$password = $_POST['password'];
			$headers = array(
				'Content-Type:application/json',
				'Authorization: Basic '. base64_encode($username . ":" . $password)
			);
			curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

			//Set the URL that you want to GET by using the CURLOPT_URL option.
			curl_setopt($ch, CURLOPT_URL, $url);

			//Set CURLOPT_RETURNTRANSFER so that the content is returned as a variable.
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

			//Set CURLOPT_FOLLOWLOCATION to true to follow redirects.
			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

			//Execute the request.
			$data = curl_exec($ch);

			//Close the cURL handle.
			curl_close($ch);

			//Print the data out onto the page.
			echo "<p>Result: <strong>" . $data . "</strong></p>";
		}
	?>
</body>

Để thực thi được đoạn chương trình trên, chúng ta cần phải có một Web Engine trên máy tính. Bài viết này sử dụng XAMPP 5.6.40 trên hệ điều hành MacOS 10.15.3. Hình bên dưới là kết quả khi thực thi tập tin login.php trên trình duyệt Web.

Tổng kết

Trong bài hướng dẫn này, chúng ta đã hoàn thành được những việc sau:

  • Hiện thực được một Java Project dựa trên RESTful Web Services
  • Triển khai được một API xác thực dựa trên cơ chế HTTP Basic Authentication
  • Hiện thực giao diện Web (HTML & PHP) để gửi yêu cầu xác thực đến API và nhận kết quả xác thực từ API. Chúng ta có thể tiếp tục mở rộng phần giao diện Web theo hướng sau: nếu thông tin xác thực từ API gửi về là true, thì sẽ chuyển hướng (redirect) người dùng vào các giao diện Web/Services khác và quản lý bằng cơ chế Cookies hoặc Session-ID. Trong bài viết tiếp theo, chúng ta sẽ cùng tìm hiểu Cookies để lưu trữ Session của người dùng.

Tài nguyên tải về

  • Video hướng dẫn Sample Project [YouTube]
  • Mã nguồn chương trình trong bài hướng dẫn này [Download]

Bài giảng học sâu cơ bản

  1. Giới thiệu: slide
  2. Hồi qui tuyến tính (Linear Regression): slide
  3. Đạo hàm (Derivatives): slide
  4. Hồi qui logistic (Logistic Regression): slide
  5. Đồ thị tính toán (Computational Graph): slide
  6. Hàm kích hoạt (Activation Function): slide
  7. Véc-tơ hoá: slide
  8. Giới thiệu Jupyter Notebook và Python: slide
  9. Mạng nơ-ron nhân tạo (Neural Networks): slide
  10. Hồi qui softmax: slide
  11. Chuẩn hoá khối (Batch Normalization): slide
  12. Quá khớp và chỉnh hoá (Overfitting and Regularization): slide
  13. Các giải thuật huấn luyện (Các phương pháp tối ưu – Optimization Methods): slide
  14. Phân chia dữ liệu và đánh giá mô hình: slide
  15. Giới thiệu PyTorch: slide

Bài điểm tin AI số 1

Các nhà khoa học máy tính đã tạo ra hệ thống trí tuệ nhân tạo phỏng theo “Thuyết tâm trí”

Theo các nhà tâm lý học “Thuyết tâm trí” (Theory of Mind) là sự nhận thức về niềm tin và ước muốn của người khác. Các nhà khoa học của Google DeepMind đã tạo ra hệ thống Trí tuệ nhân tạo (Artificial Intelligence – AI) theo thuyết tâm trí – gọi là ToMnet – có khả năng quan sát các hệ thống AI khác và học cách chúng hoạt động. ToMnet gồm có ba mạng nơ-ron nhân tạo làm việc cùng nhau. Mạng thứ nhất học khuynh hướng của các mạng AI khác dựa vào các hành động của chúng trong qúa khứ, mạng thứ hai hình thành sự hiểu biết “niềm tin” hiện tại của chúng, mạng thứ ba thừa hưởng khả năng của hai mạng kia, tuỳ vào tình huống, sẽ dự đoán hành động tiếp theo. Theo sciencemag.

Hệ thống AI có khả năng tính toán với tốc độ ánh sáng

Các nhà khoa học từ UCLA vừa công bố mạng nơ-ron quang học được in 3D (3D-printed optical neural networks) có khả năng tính toán với tốc độ ánh sáng. Công nghệ tính toán này sẽ tác động lớn đến các giải thuật học máy (Machine Learning). Kết quả nghiên cứu được đăng trên tạp chí Science.  Theo Discover.

Các nhà khoa học của Đại học Melbourne đã phát triển một hệ thống trí tuệ nhân tạo có khả năng đo lường những đặc điểm tính cách của một người từ chỉ một bức ảnh

Sinh trắc học phản chiếu (Biometric Mirror) là một chương trình trí tuệ nhân tạo có khả năng đọc các đặc điểm khuôn mặt của một người và so sánh chúng với một cơ sở dữ liệu mở có hàng nghìn ảnh mặt người đã được đánh giá trắc lượng tâm lý (psychometrics) dựa trên đám đông. Chương trình sẽ phân hạng 14 đặc tính, ví dụ như giới tính, tuổi, tốt bụng, hạnh phúc, duyên dáng, kì lạ, hay ổn định cảm xúc. Theo Futurity.

Công cụ học trực quan của Google được công bố bản beta trên Google Cloud

Dự án triển khai học máy trên đám mây của Google gọi là AutoML bao gồm các công cụ học máy cho phép người dùng không phải chuyên gia cũng có thể triển khai huấn luyện các mô hình học cho riêng mình. Công cụ đầu tiên trong chương trình này là về nhận dạnh ảnh và đối tượng (AutoML Vision). Công cụ có giao diện, cho phép kéo thả, dễ hiểu đối với người dùng không chuyên trí tuệ nhân tạo và các kỹ sư phần mềm. Theo VERGE.

Nếu lo lắng về “các mẫu chống phá” (adversarial examples) đối với xe tự lái (self-driving) thì cũng nên thật sự lo lắng về ảnh bị làm mờ

Các mẫu chống phá được dùng để tấn công các mô hình học máy được phát hiện vào năm 2014 bởi các nhà khoa học của Google, Facebook, ĐH New York và ĐH Montreal.

Nguồn: Open AI

Hình trên là một ví dụ cho thấy ảnh về gấu trúc được một mô hình học nhận dạng và phân loại với mức độ tin cậy 57.7% sau khi được thêm một lượng nhiễu epsilon thì mô hình hiểu sai ảnh gấu trúc là vượn với độ tin cậy 99.3%. Các nhà khoa học của CMU vừa công bố kết quả nghiên cứu chứng minh rằng chỉ cần làm mờ ảnh hoặc thêm vào ít sương hoặc khói mù cũng đã tạo ra vấn đề lớn với các mô hình học máy. Theo CMU.

Amazon đáp trả kết luận chương trình nhận dạng khuôn mặt của Amazon gán các dân biểu của Mỹ là tội phạm

Đại diện của Amazon viết trên blog rằng các kết quả đã được hiểu sai. Và rằng Amazon khuyến nghị trong các trường hợp quan trọng thì độ tin cậy cần phải thiết lập ở mức 99%, nhưng ACLU đã sử dụng mức tin cậy mặc định 80% (theo Jack Clark thì sự thật là Amazon không khuyến cáo khách hàng dùng ngưỡng cao hơn). Đại diện này cũng cho rằng kết quả sai lệch phản ánh mức độ kì thị trong cơ sở dữ liệu Mugshot được sử dụng. Mugshot và các cơ sở dữ liệu về tội phạm khác đã được chỉ ra là phản ánh sự kỳ thị chủng tộc trong hệ thống tư pháp tội phạm của Mỹ và những phản hồi của Amazon là chính xác.

Công ty Trung Quốc xuất khẩu chương trình giám sát người dân

Công ty công nghệ CloudWalk của Trung Quốc đã ký kết với Zimbabwe hợp đồng cung cấp chương trình nhận dạng khuôn mặt, vốn dùng để giám sát công dân. Điểm đáng chú ý của hợp đồng này là CloudWalk được quyền truy cập cơ sở dữ liệu hàng triệu ảnh người Zimbabwe. Trong khi Zimbabwe không có luật bảo vệ dữ liệu sinh trắc học nên người dân khó tránh khỏi việc chấp nhận bị giám sát hoặc trao dữ liệu sinh trắc của họ giúp CloudWalk cải tiến công nghệ. Câu chuyện này hàm chứa hai vấn đề đạo đức liên quan đến giám sát (công dân) dựa trên AI: giám sát trái phép một người nào đó là vi phạm các quyền riêng tư cơ bản và một số chính quyền có thể mua công nghệ giám sát kèm theo là cung cấp dữ liệu nhân thân của công dân nước họ cho công ty bán công nghệ. Theo Foreign Policy.

Indonesia đang dẫn đầu khu vực ASEAN trong ứng dụng trí tuệ nhân tạo

Theo một khảo sát của IDC khu vực châu Á-Thái bình dương, 24,6% doanh nghiệp của Indonesia sử dụng AI, so với 17.1% ở Thái Lan và 9.9% ở Singapore. Theo ComputerWeekly.

Các nhà khoa học của Đại học Standford đã phát triển hệ thống trí tuệ nhân tạo dự đoán hiệu ứng phụ của việc kết hợp thuốc

Hệ thống học sâu (Deep Learning), gọi là Decagon, được huấn luận trên tập dữ liệu hơn 19.000 protein cùng thông tin chúng tương tác như thế nào. Decagon đã dự đoán được 10 hiệu ứng phụ chưa  được phát hiện. Theo NewAtlas.

Mỹ và Nga đang mở các trung tâm nghiên cứu trí tuệ nhân tạo cho quốc phòng, trong khi đó Trung Quốc đã thực hiện việc này năm ngoái

Mỹ mở Joint Artificial Intelligence Center (JAIC), Nga có “innovation technopolis,” gọi là Era. Trung Quốc đã mở trung tâm nghiên cứu trí tuệ nhân tạo cho People’s Liberation Army (PLA). Song song đó, quốc gia này cũng có Viện Trí tuệ nhân tạo tại PLA National National University of Defense Technology và Phòng thí nghiệm Trí tuệ nhân tạo dành cho quốc phòng tại Đại học Thanh Hoa. Theo Defense One.

Kỷ nguyên trí tuệ nhân tạo

Học sâu dựa trên mạng nơ-ron nhân tạo (Phần III)

“Hãy sống như thể ngày mai bạn sẽ chết. Hãy học như thể bạn sẽ sống mãi mãi.” 

― Mahatma Gandhi

Giới thiệu | Phần I | Phần II

Thời đại tứ tư (The Fourth Age)




Theo Byron Reese [1], loài người đã trải qua ba thời đại và đang tiến vào thời đại thứ 4. 
Thời đại thứ nhất (The First Age) bắt đầu cách đây 100.000 năm khi con người biết sử dụng lửa để nấu chín thức ăn.
Thời đại thứ hai (The Second Age) bắt đầu cách đây 10.000 năm khi chúng ta phát triển nông nghiệp, dẫn đến hình thành các đô thi.

Thời đại thứ ba (The Third Age) bắt đầu cách đây 5.000 năm khi chúng ta phát minh ra chữ viết.

Thời đại thứ tư (The Fourth Age) bắt đầu từ hiện tại dựa trên sự kết hợp hai công nghệ kỹ thuật số đột phá là AI và rô-bốt, trong đó AI là chủ đạo.

Như vậy, dựa trên quan điểm của Byron Reese, việc phát minh ra trí tuệ nhân tạo được đánh giá ngang với phát minh ra lửa, nông nghiệp và chữ viết trong lịch sử phát triển của loài người. Và đó cũng cho thấy một niềm tin rằng loài người sẽ tiến vào kỷ nguyên trí tuệ nhân tạo trong tương lai gần.


Kinh tế Trí tuệ nhân tạo



Trong cuốn sách “Máy dự đoán: Nguyên tắc kinh tế cơ bản của AI”, các giáo sư Avi Goldfarb, Joshua Gans và Ajay Agrawal của Đại học Harvard nhấn mạnh rằng một khi đầu vào cơ bản của nền kinh tế rớt giá đến mức rẻ và có ở mọi nơi thì sẽ dẫn đến thay đổi mọi thứ. Thật vậy, những thay đổi công nghệ sẽ dẫn đến những thứ trước đây đắt đỏ trở nên rẻ và làm thay đổi hành vi của con người – từ sự đắn đo trong việc sử dụng đến quyết định sử dụng mà không quá cân nhắc. Sự thay đổi về giá do công nghệ mang lại giúp chúng ta làm những việc trước đây chưa từng, biến cái không thể thành
có thể. Một ví dụ điển hình là ánh sáng nhân tạo. Ngày nay ánh sáng nhân tạo rẻ đến mức mà chúng ta sử dụng rất phóng túng, nhưng theo kinh tế gia William Nordhaus, giá của nó vào đầu thế kỷ thứ 19 gấp 400 lần ngày nay. Ánh sáng nhân tạo khiến đêm thành ngày; giúp cho chúng ta sống và làm việc trong những nơi không đủ ánh sáng tự nhiên, ví dụ như trong các nhà cao tầng; và làm thay đổi mọi thứ, từ kinh tế đến xã hội, như chúng ta chứng kiến từ khi khởi đầu cuộc cách mạng công nghiệp lần thứ 2 đến nay. Ví dụ thứ hai là tính toán số học. Máy tính không làm gì khác ngoài việc tính toán số học. Hơn 50 năm qua, các bộ vi xử lý đã phát triển khớp với Định luật More – phát biểu rằng hiệu suất của bộ xi xử lý sẽ tăng gấp đôi sau mỗi hai năm – và làm cho tính toán số học càng ngày càng rẻ đến mức mà chúng ta thấy ngày nay máy tính, điện thoại thông minh, các hệ thống nhúng có mặt ở mọi nơi, mọi nhà. Sự rớt giá của tính toán số học làm nên cuộc cách mạng công nghiệp lần thứ 3 và đưa loài người vào kỷ nguyên thông tin như chúng ta đã trải qua.

Cũng theo các tác giả, dự đoán (prediction) là đầu vào cơ bản cho việc ra quyết định (decision-making). Hầu hết chúng ta ai cũng thực hiện dự đoán trước khi ra quyết định, ví dụ như quyết định đầu tư tài chính vào một hàng hoá và dịch vụ nào đó thì dự đoán xem hàng hoá và dịch vụ đó biến động giá như thế nào trong ngắn và dài hạn, quyết định nộp đơn xét tuyển vào một đại học thì dự đoán khả năng đậu vào trường đó là bao nhiêu, quyết định tích trữ bia phục vụ cho các ngày tết thì dự đoán nhu cầu bia vào các ngày tết sẽ tăng bao nhiêu, . . . Dự đoán là quá trình điền khuyết các thông tin còn thiếu, bằng cách dựa vào các dữ liệu đã có để suy luận ra thông tin cần có. Trí tuệ nhân tạo đang nổi lên như là những công nghệ sẽ thay thế khâu dự đoán của con người trong quá trình ra quyết định và sẽ làm cho việc dự đoán trở nên rẻ hơn nhờ vào máy dự đoán (prediction machine). Được xây dựng dựa trên trí tuệ nhân tạo, máy dự đoán sẽ ngày càng trở nên rẻ và xuất hiện ở mọi nơi, sẽ tác động làm thay đổi chiến lược kinh doanh và ra quyết định. Khi ấy ta có nền kinh tế dựa trên trí tuệ nhân tạo; loài người sẽ tiến vào thời đại mới – thời đại diễn ra cách mạng công nghiệp 4.0 với máy dự đoán lấy trí tuệ nhân tạo làm đầu não là yếu tố nền tảng định hình lại nền sản xuất và xã hội của loài người.

Theo một báo cáo nghiên cứu của PwC [2], trí tuệ nhân tạo có tiềm năng chuyển đổi năng suất lao động và GDP toàn cầu. Dự báo đến năm 2030, các sản phẩm được tăng cường trí tuệ nhân tạo đóng góp 45% sản lượng, qui đổi tương đương 15.7 nghìn tỷ USD, kinh tế toàn cầu. Các công nghệ dựa trên trí tuệ nhân tạo sẽ thay thế nhiều công việc hiện nay đang được đảm nhiệm bởi con người, với dự báo là máy sẽ thay con người khoảng 700 triệu việc làm [2]. Tuy nhiên, trí tuệ nhân tạo cũng sẽ tạo ra nhiều việc làm mới. Thật khó dự đoán số lượng việc làm mới do các công nghệ dựa AI mang lại là bao nhiêu, nhưng khi chúng ta bước vào nền kinh tế AI, khả năng số lượng việc làm mới yêu cầu các kỹ năng AI là rất lớn.
Nhằm cạnh tranh trong nền kinh tế AI, chuyên gia Andrew McAfee khuyến cáo các nhà điều hành công nghiệp cần nhanh chóng thay đổi cách thức vận hành tổ chức của họ để bắt kịp sự phát triển nhanh chóng của trí tuệ nhân tạo, khi mà học máy đã đạt được hiệu suất phán đoán ngang hoặc tốt hơn khi cộng tác với con người [3]; và sự đột phá của học máy sẽ đến trong vòng 3-5 năm tới, nhanh chưa từng có trong lịch sử phát triển công nghiệp khi so với thời gian chuyển đổi nền kinh tế do tác động của công nghệ mới trước đây là từ một đến hai thập kỷ. Theo ông, những điều đó thực sự đe dọa sâu sắc đến mô hình vận hành tổ chức đã được xây dựng hơn hai thế kỷ qua. Thật vậy, trí tuệ nhân tạo đã tốt hơn con người ở một số việc khi hoạt động độc lập hoặc cộng tác với con người. Một báo cáo của Nhà trắng thời chính quyền Obama dẫn một ví vụ về mô hình học máy thực hiện chẩn đoán bệnh ung thư bằng hình ảnh đạt tỉ lệ lỗi 7.5%, trong khi đó tỉ lệ lỗi của bác sĩ (con người) là 3.5%, nhưng khi bác sĩ kết hợp với mô hình này thì tỉ lệ lỗi giảm còn 0.5% [4], tức là giảm 85.71% tỉ lệ lỗi và đạt độ chính xác 99.5%. Mô hình học máy của Google chẩn đoán ung thư vú tốt hơn bác sĩ 10% [5]. Công nghệ nhận dạng tiếng nói của Google và Baidu đều đạt mức của con người.


Công nghiệp 4.0

Như trên chúng ta đã thấy, chính trí tuệ nhân tạo sẽ làm thay đổi mọi mặt của đời sống kinh tế và xã hội của chúng ta. Trí tuệ nhân tạo cũng sẽ là công nghệ chủ đạo thúc đẩy Công nghiệp 4.0 (cách mạng khoa học công nghệ lần thứ 4). Hình 11 mô tả vắn tắt các cuộc cách mạng khoa học công nghệ từ lần thứ nhất đến lần thứ 4, kèm với các cột mốc thời gian. Nền sản xuất trong các cuộc cách mạng công nghiệp càng về sau càng phức tạp. Cách mạng công nghiệp lần thứ nhất bắt đầu từ cuối thế kỷ thứ 18 với nền sản xuất cơ khí dựa trên máy móc sử dụng động cơ hơi nước. Cách mạng công nghiệp lần thứ hai bắt đầu cuối thế kỷ thứ 19, đầu thế kỷ thứu 20 với nền sản xuất hàng loạt sử dụng năng lượng điện. Cách mạng công nghiệp lần thứ ba bắt đầu từ những năm 70 của thế kỷ 20 với nền sản xuất tự động hoá sử dụng điện tử và công nghệ thông tin.



Hình 11: Các cuộc cách mạng khoa học công nghệ

Công nghiệp 4.0 với nền sản xuất dựa trên các hệ thống kết nối thực-ảo (Cyber-Physical Systems – CPS) bắt đầu từ giai đoạn hiện nay. CPS là các hệ thống thông minh bao gồm các mạng lưới tương tác giữa các thành phần vật lý (thật) và tính toán (ảo), trong đó các thành phần tính toán được tăng cường trí tuệ nhân tạo, có khả năng tự nhận thức và tương tác trực tiếp với nhau (machine-to-machine – M2M) hoặc tương tác với con người (Human-Computer Interactiom- HCI) một cách tự động. Công nghiệp 4.0 dẫn đến vạn vật thông minh, từ đồ gia dụng thông minh, vận tải thông minh, dịch vụ thông minh, nhà máy thông minh, thành phố thông minh đến quốc gia thông minh. Chúng ta đang chứng kiến quá trình dịch chuyển môi trường kinh tế xã hội dần đến môi trường thông minh dựa trên Internet vạn vật (Internet of Things – IoT) và dịch vụ; trong môi trường thông minh đó, con người, máy móc và sản phẩm (hàng hoá và dịch vụ) có thể “nói chuyện” với nhau được.

Phần kết

“Trí tuệ nhân tạo là công nghệ quan trọng nhất trong một hoặc hai thập niên tới. Nó sẽ chuyển đổi hoàn toàn nền kinh tế và xã hội chúng ta theo nhiều cách. Sẽ là sai lầm lớn nếu lãnh đạo quốc gia không coi trọng nó.” 

― Erik Brynjolfsson

Mặc dù đã có một số ứng dụng cụ thể của AI, nhưng các ứng dụng này chỉ giới hạn trong sản phẩm của các tập đoàn công nghệ hàng đầu như Google, Facebook, Baidu hay Apple và vẫn còn nhiều hạn chế về khả năng thông minh. Nhiều ngân hàng và tổ chức kinh tế, xã hội khác cũng đã có kế hoạch đầu tư vào trí tuệ nhân tạo. Tuy vậy, ứng dụng AI rộng rãi trong tổng thể các nền kính tế, xã hội trên thế giới vẫn còn rất hạn chế và hiện tại chúng ta đang ở buổi bình mình của AI.

Trí tuệ nhân tạo được đánh giá cao là sẽ tạo ra sự chuyển đổi hoàn toàn nền kinh tế và xã hội của chúng ta. Giáo sư Erik Brynjolfsson, điều hành chương trình “Sáng kiến cho Nền kinh tế số” của MIT phát biểu rằng “AI là công nghệ quan trọng nhất trong một hoặc hai thập niên tới. Nó sẽ chuyển đổi hoàn toàn nền kinh tế và xã hội chúng ta theo nhiều cách. Sẽ là sai lầm lớn nếu lãnh đạo quốc gia không coi trọng nó.” Google đã thay đổi chiến lược từ “công nghệ di động trước tiên” (moble-first) sang “AI trước tiên” (AI-first). Các công ty công nghệ lớn đều đang đầu tư một lượng tài chính khổng lồ vào phát triển AI. Đầu tư mạo hiểm vào các công ty khởi nghiệp AI ước tính hơn 5.5 tỷ USD chỉ riêng năm 2017.

Ở bình diện quốc gia, nhiều nước công nghiệp phát triển cũng đã có các chính sách và kế hoạch có tầm nhìn dài hạn, đặc biệt là Trung Quốc. Quốc vụ viện nước này đã phê duyệt kế hoạch đưa Trung Quốc trở thành quốc gia dẫn đầu trong sản xuất và ứng dụng AI vào năm 2030. Tổng thống Putin cũng phát biểu rằng “Trí truệ nhân tạo là tương lai, không chỉ đối với nước Nga mà cả nhân loại. Nó mang đến các cơ hội khổng lồ, nhưng cũng mang đến các đe doạ khó dự đoán. Bất kì ai dẫn đầu lĩnh vực này đều sẽ thống lĩnh thế giới.” Thủ tướng Canada cũng nói rằng “Chúng tôi đang đầu tư rất lớn vào AI”. Trong diễn từ gần đây, Tổng thống Pháp cũng đã trình bày chiến lược quốc gia cho phát triển AI với gói ngân sách 1.85 tỉ USD trong năm năm. Liên minh Châu Âu ước tính chi ngân sách 34 tỉ USD, cả khu vực công lẫn tư, đầu tư vào AI giai đoạn 2014-2020

Dự đoán tổng sản lượng kinh tế dựa trên AI năm 2030 là 15.7 nghìn tỷ USD, trong đó Trung Quốc và Mỹ đóng góp 10 nghìn tỷ USD. Và khi đó chúng ta hoàn toàn sống trong nền kinh tế AI. Như vậy, việc AI sẽ thay đổi hoàn toàn nền kinh tế và xã hội chúng ta không phải là viễn tưởng, mà thực tiễn đã và đang chứng minh công nghệ dựa trên AI đang phát triển nhanh như vũ bão và đang bắt đầu thâm nhập vào hầu hết các “ngõ ngách” của các nền kinh tế và xã hội toàn cầu; nhiều chính phủ đã chuyển hướng chiến lược quốc gia vào AI với nguồn ngân sách đầu tư rất lớn; đầu tư tư nhân vào AI đang tăng trưởng với cấp số mũ.

NewAI tập hợp những chuyên gia có trình độ chuyên môn cao về AI. Chương trình giảng dạy của chúng tôi có nội dung hiện đại và được cập nhật song hành cùng với những phát minh mới nhất trong lĩnh vực AI. Tài liệu và học liệu học tập được chọn lọc kỹ, có tham khảo các trung tâm đào tạo AI uy tín nhất hiện nay trên thế giới. Với chương trình này, chúng tôi mong muốn góp phần vào việc kiến tạo một xã hội Việt Nam phồn thịnh với nền kinh tế có sức cạnh tranh cao trong thời đại trí tuệ nhân tạo.

Học liệu

Lý thuyết

  • Cơ bản về học sâu:
    • Mô hình tuyến tính: Hồi qui tuyến tính và Hồi qui logistic
    • Các giải thuật huấn luyện mạng nơ-ron
    • Hồi qui softmax
    • Đạo hàm và Đồ thị tính toán
    • Một số hàm kích hoạt
    • Mạng nơ-ron truyền thẳng (Feed-forward Neural Networks)
    • Giải thuật lan truyền ngược (Backpropagation)
    • Véc-tơ hóa và cơ chế broacasting
    • Jupyter Notebook
    • PyTorch và TensorFlow
    • Chuẩn hóa dữ liệu
    • Quá khớp (Overfitting) và chỉnh hoá
    • Khởi tạo tham số
  • Mạng Nơ-ron tích chập (Convolutional Neural Networks – CNN)
    • Giới thiệu CNN
    • Phép toán tích chập
    • Filter, trượt (stride) và đệm (padding)
    • Tích chập với đầu vào nhiều kênh
    • Tại sao cần tích chập
    • Tầng pooling
    • Các mạng CNN kinh điển
    • Mạng ResNet và Inception
    • Học chuyển giao (transfer learning)
    • Xây dựng tập huấn luyện
    • One-shot learning
    • Một số ví dụ: Phát hiện đối tượng, nhận dạng khuôn mặt, phân loại đối tượng
  • Mạng Nơ-ron hồi qui (Recurrent Neural Networks – RNN) 
    • Giới thiệu mạng RNN
    • Mô hình sequence-to-sequence
    • Backpropagation through time
    • Gated recurrent unit
    • Long-short term memory
    • Mạng RNN hai hướng
    • Mạng RNN sâu
    • Mô hình ngôn ngữ và tạo sinh chuỗi
    • Cơ chế chú ý
    • Một số ví dụ xử lý ngôn ngữ tự nhiên: POS tagging, NER, Speech Recognition, Machine Translation, Question Answering, Sentiment Analysis

Học bằng các dự án thực tế trong Xử lý ngôn ngữ tự nhiên, Thị giác máy tính, nhận dạng và tổng hợp tiếng nói.

Công cụ

Ngôn ngữ lập trình

  • Python

Sách

  • Kevin Murphy (2012), Machine Learning: a Probabilistic Perspective, MIT, Press.
  • Ian Goodfellow, Yoshua Bengio and Aaron Courville (2016), Deep Learning, MIT Press.
  • Trevor Hastie, Robert Tibshirani, and Jerome Friedman (2017), The Elements of Statistical Learning, Springer.
  • Yoav Goldberg (2018). Neural Network Methods for Natural Language Processing. MIT Press.
  • Khan, Salman, Hossein Rahmani, Syed Afaq Ali Shah, and Mohammed Bennamoun (2018). A Guide to Convolutional Neural Networks
    for Computer Vision
    . Synthesis Lectures on Computer Vision 8, no. 1 (2018): 1-207. 

Bài giảng tham khảo

  • http://cs231n.stanford.edu/
  • http://cs224d.stanford.edu/
  • http://cs229.stanford.edu/


Tài liệu tham khảo

[1Byron Reese. The Fourth Age: Smart Robots, Conscious Computers, and the Future of Humanity (2018).
[2Nghiên cứu Trí tuệ nhân tạo toàn cầu của PwC: Khai thác cách mạng Trí tuệ nhân tạo. https://www.pwc.com/gx/en/issues/analytics/assets/pwc-ai-analysis-sizing-the-prize-report.pdf, truy cập ngày 22 thàng 07 năm 2018.
[3Competing in the AI economy: An interview with MIT’s Andrew McAfee. McKinsey. https://www.mckinsey.com/business-functions/mckinsey-analytics/our-insights/competing-in-the-ai-economy-an-interview-with-mits-andrew-mcafee
[4]John P. Holdren và Megan Smith. Preparing For The Future Of Artificial Intelligence Of Artificial Intelligence. October 12, 2016
[5]Liu, Yun, Krishna Gadepalli, Mohammad Norouzi, George E. Dahl, Timo Kohlberger, Aleksey Boyko, Subhashini Venugopalan et al. Detecting cancer metastases on gigapixel pathology images. arXiv preprint arXiv:1703.02442 (2017).

Sơ lược về học sâu

Học sâu dựa trên mạng nơ-ron nhân tạo (Phần II)

“All the impressive achievements of deep learning amount to just curve fitting.” 
“Tất cả các thành tựu ấn tượng của học sâu thực chất chỉ là khớp đường cong.”

― Judea Pearl

Giới thiệu | Phần I | Phần III


Theo các giáo sư LeCun, Bengio và Hinton, “Học sâu (Deep learning) cho phép các mô hình tính toán gồm nhiều tầng xử lý để học biểu diễn dữ liệu với nhiều mức trừu tượng khác nhau” [9]. Chúng tôi chỉ tập trung vào học sâu dựa trên mạng nơ-ron nhân tạo (Artificial Neural Networks) – mô hình học lấy ý tưởng từ hệ thống kết nối các tế bào thần kinh trong bộ não người.


Thật vậy, trong bộ não người, tế bào thần kinh là đơn vị tính toán cơ bản. Phần bên trái của Hình 3 mô tả một tế bào thần kinh sinh học, bao gồm các thành phần chính là thân tế bào (cell body), trục (axon), sợ nhánh (dendrite) và khớp (synapse) hay “axon terminals” như trong hình. Bộ não người chứa khoảng 86 tỉ tế bào thần kinh [2], 10^14-10^15 khớp thần kinh. Các khớp có vai trò nối một tế bào thần kinh này với các tế bào thần kinh khác thông qua các sợi nhánh. Phần bên phải của Hình 3 mô tả một tế bào thần kinh nhân tạo. Thân tế bào thần kinh nhân tạo, từ đây sẽ gọi tắt là nơ-ron, gồm có phần tính tổng có trọng số (weighted sum) các đầu vào và hàm kích hoạt (activation function) f chuyển đổi kết quả tổng tính được thành đầu vào cho các nơ-ron khác.



Nguồn: Internet Nguồn: Luận án tiến sĩ của Andrej Karpathy
Hình 3: Tế bào thần kinh sinh học (trái) và nơ-ron trong mạng nơ-ron nhân tạo (phải)

Mô hình tính toán của mạng nơ-ron nhân tạo được phát minh vào năm 1943 bởi nhà vật lý sinh học thần kinh (neurophysiologist) Warren McCulloch và nhà logic học Walter Pitts [3]. Năm 1958, nhà tâm lý học Rosenblatt [4] tạo ra mô hình học nơ-ron nhân tạo đầu tiên, gọi là perceptron, chỉ có một nơ-ron. Năm 1986, Rumelhart, Hinton và Williams phát minh ra giải thuật lan truyền ngược dùng để tính toán đạo hàm dựa trên hàm mất mát (loss function) góp phần huấn luyện thành công mạng nơ-ron nhân tạo [5]. Năm 1989, Yann LeCun ứng dụng thành công giải thuật lan truyền ngược vào mạng nơ-ron tích chập (Convolutional Neural Networks – CNN) [6]. Năm 1997, mạng nhớ ngắn-dài hạn (Long Short-Term Memory -LSTM) được phát minh bởi Hochreiter và Schmidhuber [7] nhằm giải quyết vấn đề đạo hàm suy giảm về zê-rô (vanishing) của mạng nơ-ron hồi qui (Recurrent Neural Networks – RNN).

Hình 4: Một ví dụ về mạng nơ-ron nhân tạo nhiều tầng
Hình 5: Một ví dụ về mô hình học sâu dựa trên mạng nơ-ron[8]
Hình 6: Chia sẻ tham số của mạng nơ-ron tích chập, trong đó w1=w4=w7, w2=w5=w8, w3=w6=w9

Phần bên trái Hình 4 cho thấy một mạng nơ-ron gồm nhiều tầng, trong đó nơ-ron của tầng trước kết nối đầy đủ (fully-connected) với các nơ-ron của tầng sau. Mạng nơ-ron dạng này là mạng nơ-ron truyền thẳng (Feed-forward Neural Networks – FNN) hay mạng perceptron nhiều tầng (Multilayer Perceptron – MLP). Phần bên phải của Hình 4 mô tả cơ chế lan truyền ngược để tính đạo hàm của hàm chi phí (hàm J) theo tham số ở từng tầng của mô hình. Hình 5 mô tả một ví dụ về mạng nơ-ron tích chập. Mạng gồm hai phần: phần tích chập (convolutional layers) và truyền thẳng (fully-connected layers). Phần tích chập rút trích tự động đặc trưng của dữ liệu đầu vào, tầng càng nhỏ thì học các đặc trưng thô (mức thấp), tầng càng sâu thì học đặc trưng càng chi tiết (mức cao) của khái niệm cần học. Ví dụ trong Hình 5 cho thấy tầng đầu học các đặc trưng cạnh (edge), các tầng kế tiếp học được đặc trưng các thành phần, rồi đến đặc trưng chi tiết của đối tượng học. Hình 6 mô tả khả năng chia sẻ tham số của mạng CNN, góp phần giảm số lượng tham số cần phải học.
Hình 7: Mạng nơ-ron hồi qui
Hình 8: Các loại mạng nơ-ron hồi qui
Hình 9: Mạng LSTM

Hình 7 mô tả mô hình mạn nơ-ron hồi qui. Qua hình chúng ta thấy mỗi nơ-ron tại một tầng của mạng nơ-ron hồi qui (trừ tầng đầu) đều nhận vào hai loại đầu vào: dữ liệu nhập và đầu ra của tầng trước. Hình 8 mô tả các loại mạng nơ-ron hồi qui, trong đó (a) là mạng một đầu vào một đầu ra (ví dụ: phân loại ảnh, đầu vào là một tấm ảnh, đầu ra là một loại), (b) là mạng một đầu vào nhiều đầu ra (ví dụ: chú thích ảnh, đầu vào là một tấm ảnh, đầu ra là một dòng chú thích), (c) là mạng nhiều đầu vào một đầu ra (ví dụ: phân tích quan điểm, đầu vào là một dòng văn bản, đầu ra là quan điểm khen hay chê), (d) là loại mạng nhiều đầu vào nhiều đầu ra (ví dụ: dịch máy tự động, đầu vào là một câu của ngôn ngữ này, đầu ra là một câu của ngôn ngữ khác) và (e) cũng là loại mạng nhiều đầu vào nhiều đầu ra nhưng hình dạng khác (ví dụ: phân loại video, khi ta muốn gán nhãn cho mỗi frame của video đầu vào; hoặc gán nhãn từ loại). Hình 9 là mô hình mạng Long Short-Term Memory. Mỗi khối gồm có ba cổng, đánh dấu bằng kí hiệu ⊗, tính từ trái qua phải, kí hiệu ⊗ đầu tiên đại diện cho cổng quên (forget gate), kí hiệu ⊗ thứ hai đại diện cho cổng nhập (input gate) và kí hiệu ⊗ thứ ba đại diện cho cổng xuất (output gate). Vai trò chi tiết của mỗi cổng sẽ được nói trong bài giảng về LSTM.
Hình 10: Học sâu trong tương quan với các mô hình học khác

Hình 10 cho thấy sự tương quan giữa học sâu với các hệ thống học cổ điển và dựa trên luật. Với các hệ thống học dựa trên luật thì các luật và đặc trưng được rút trích thủ công. Với các hệ thống học cổ điển, ví dụ như học cây quyết định, các đặc trưng được trích thủ công, mô hình học là tự động. Học sâu được xem là một phần của học biểu diễn (representation learning) với đặc trưng và mô hình học đều tự động, nhưng các đặc trưng được học bằng nhiều tầng học khác nhau.

Tất cả các mô hình học nêu trên như FNN, CNN, RNN, LSTM đều là các thành phần cơ bản của các mô hình học sâu đột phá gần đây. Tuy vậy, học sâu tiêu tốn rất nhiều nguồn lực tính toán. Nhóm nghiên cứu của Facebook [9] huấn luyện mô hình với tập huấn luyện ImageNet-1k mất một giờ và sử dụng đến 256 GPU. Trong khi bộ não người có khoảng 86 tỉ tế bào thần kinh và thực hiện khoảng 10^16 phép tính trên một giây, GPU NVIDIA Tesla P100 giá 6 nghìn USD (tháng 7 năm 2018) thực hiện được 21×10^12 phép tính trên một giây. Trong gần 50 năm qua, năng lực tính toán của máy tính tuân theo định luật More – phát biểu rằng cứ sau mỗi hai năm thì năng lực tính toán của các bộ vi xử lý tăng gấp đôi và giá thành giảm một nữa – nhưng với quãng thời gian gần 50 năm một con GPU được xem là tương đối mạnh với giá thành 6 nghìn USD chỉ mới đạt khoảng 1/10.000 năng lực tính toán của bộ não người. Vì vậy các xu hương mới nhằm tạo đột phá trong trí tuệ nhân tạo là đầu tư nghiên cứu các nguyên tắc của việc học và trí tuệ của con người. Một xu hướng nữa là phát triển phần cứng có năng lực tính toán vượt trội, không tuân theo định luật More, với các hướng tìm năng là điện toán lượng tử (quantum computing) và điện toán mô phỏng não người (neuromorphic computing).

Tài liệu tham khảo

[1]Yann LeCun, Yoshua Bengio, Geoffrey Hinton. Deep Learning. Nature, Tập 521, trang 436–444 (2015).
[2]S. Herculano-Houzel. The Human Brain in Numbers: A Linearly Scaled-up Primate Brain. Frontiers in Human Neuroscience, 3:31 (2009).
[3]Warren McCulloch và Walter Pitts. A Logical Calculus of Ideas Immanent in Nervous Activity. Bulletin of Mathematical Biophysics. 5 (4): 115–133 (1943).
[4]F. Rosenblatt. The Perceptron: A Probabilistic Model For Information Storage And Organization In The Brain. Psychological Review. 65 (6): 386–408 (1958).
[5]David Rumelhart, Geoffrey Hinton, Ronald Williams. Learning representations by back-propagating errors. Nature, 323 (6088): 533–536 (1986).
[6]LeCun et al. Backpropagation Applied to Handwritten Zip Code Recognition. Neural Computation, 1, pp. 541–551 (1989).
[7]Sepp Hochreiter và Jürgen Schmidhuber. Long Short-Term Memory. Neural Computation, 9 (8): 1735–1780 (1997).
[8]Wei Yu, Kuiyuan Yang, Yalong Bai, Yong Rui.
Visualizing and comparing convolutional neural networks. ICRL (2015).
[9]Goyal, Priya, et al. “Accurate, large minibatch SGD: training imagenet in 1 hour.” arXiv preprint arXiv:1706.02677
(2017).