About Aida Nana

Nghề chính là chém gió, quăng bom và ném lựu đạn.
Nghề phụ là cắt cỏ, chém chuối, cưa cây......

Hướng dẫn sử dụng IntelliJ

Phần 1: Mở project, Viết chương trình và chạy.

Bước 1.

Chọn mở Project mới

Bước 2.

Tạo project kiểu Maven cho Java 1.8. Chú ý có 03 nơi cần chọn đúng trong như hình vẽ. (1) Maven, (2) KHÔNG tick ‘Create from archetype’, (3) chọn Project SDK 1.8.

Bước 3. Đặt tên project Maven (HelloWorld) và nhóm của project (ví dụ oop, bạn có thể lấy tên khác, chẳng hạn nick của bạn)

Bước 4.

Đặt tên project IntelliJ, tên này sẽ trùng với tên thư mục. Có thể trùng với tên project Maven. Bạn chỉ cần gõ vào ô Project name, phần còn lại sẽ được tự điền.

Bấm Finish, ta có khung project đã được tạo sẵn, nó được quản lý theo hai kiểu: (1) project kiểu IntelliJ do IntelliJ điều khiển, và (2) project kiểu Maven mà khi ra ngoài môi trường IntelliJ ta vẫn sử dụng được, chẳng hạn chạy bằng dòng lệnh hoặc mở tại Eclipse, NetBean…..

Trong đó,

  1. src/main/java: nơi chứa mã nguồn chương trình
  2. src/test/java: nơi chứa mã nguồn của test
  3. pom.xml tại thư mục gốc của project là file cấu hình của project maven, khi cần chỉnh cấu hình project thì sẽ sửa nội dung của những file này. Nội dung file pom.xml đó đang được hiển thị tại tab ‘mHelloWorld’ với ý nghĩa m là Maven, HelloWorld là tên của Maven project.
  4. Bạn cần click vào link Enable Auto-Import, để từ nay, mỗi khi bạn sửa nội dung của file pom.xml thì cấu hình project IntelliJ (nằm trong thư mục .idea) sẽ tự thay đổi theo.
  5. Để cấu hình maven chạy cho Java 1.8, quy định mã nguồn dạng UTF-8, và khai báo sử dụng thư viện JUnit để viết test, bạn copy đoạn sau vào vị trí số 5 tại hình trên.

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>

 

Bước 5. Tạo class đầu tiên: Dùng chuột phải tại thư mục main/java, chọn New / Java Class từ popup.

 

  1. Nhập tên class Hello.
  2. Viết chương trình Hello
  3. Chạy chương trình. Click chuột phải vào tên hàm main, chọn Run “Hello.main()…”. Có thể dùng tổ hợp phím Ctrl+Shift+F10.

Chương trình sẽ được dịch, đóng gói…. Và chạy ra kết quả:

Từ đây, nếu muốn chạy lại, có thể dùng phím tắt, chuột phải như trước, hoặc click vào hình tam giác màu lục bên phải ô Hello.

Phần II: Viết test và chạy test.

  1. Tạo một class nằm trong thư mục test/java (click chuột phải để mở pop up), với tên HelloTest
  2. Viết test. Viết code. Sinh mã.

Mỗi test được viết trong 1 hàm, mỗi hàm đó cần được bắt đầu bằng annotation @Test. Gõ vào trong class HelloTest nội dung @Test, IntelliJ sẽ gợi ý các thư viện cần sử dụng.

Chọn (org.junit) Dòng sau sẽ được điền tự động vào file HelloTest.java

import org.junit.Test;

Dòng đó có nghĩa file này sẽ dùng đến class Test trong gói thư viện org.junit. Đây cũng là ví dụ về việc IntelliJ gợi ý người dùng và hỗ trợ điền code.

Viết nốt phần còn lại của test, test này ta muốn định nghĩa yêu cầu về một hàm add của lớp Hello có nhiệm vụ tính tổng hai số. Dòng duy nhất trong hàm testAdd có tác dụng gọi hàm Hello.add(1,2), lấy kết quả trả về và so sánh với 3. Ở đây, 3 là kết quả trông đợi (expected) vì 1+2=3. Giá trị trả về của hàm Hello.add(1,2) là kết quả thực tế. Hàm assertEquals (của lớp Assert trong thư viện org.junit) so sánh kết quả trông đợi với kết quả thực tế, nếu bằng nhau thì test đó đạt, nếu không bằng nhau thì test đó không đạt.

Chú ý các phần màu đỏ, đó là báo hiệu về các lỗi biên dịch. assertEquals là một hàm của lớp Assert trong thư viện org.unit, ta chưa khai báo import nên bị báo đỏ. Hàm add của Hello chưa được viết, nên cũng bị báo lỗi.

Tại mỗi điểm có lỗi, đưa con trỏ vào đó, bấm tổ hợp Alt-Enter sẽ có gợi ý sửa lỗi hoặc sinh mã.

Ví dụ với assertEquals, hãy chọn Static Import….. để IntelliJ thêm lệnh import.

Vì có nhiều thư viện cung cấp hàm assertEquals, ta có vài lựa chọn. Hãy chọn import Assert.assertEquals cho Maven

Kết quả là có thêm lệnh import được thêm vào code:

import static junit.framework.Assert.assertEquals;

 

Lỗi còn lại là hàm add chưa có. Hãy đưa con trỏ vào từ add màu đỏ, bấm Alt-Enter. IntelliJ sẽ gợi ý tạo phương thức add.

Hãy nhấn tiếp Enter để đồng ý. Bạn sẽ thấy hàm add rỗng được tạo ra tại class Hello. Hãy tiếp tục nhấn Enter theo từng bước để đồng ý với code gợi ý, trước khi Enter có thể gõ nội dung mới thay cho nội dung hiện đang được bôi đen.

Chẳng hạn cuối cùng code của hàm add như sau (ta tạm để nguyên nội dung return 0):

public static int add(int first, int second) {
return 0;
}

 

Để quay về HelloTest, bạn có thể tự chọn tab hoặc click mũi tên Back hoặc dùng tổ hợp phím Ctrl+Alt+Left.

  1. Chạy test.

Để chạy test trong HelloTest, click chuột phải vào tên class HelloTest, chọn Run HelloTest.

Kết quả: testAdd không đạt, đáng ra phải trả về 3 thì lại trả về 0

Bạn tự sửa nội dung hàm add cho đúng, rồi chạy lại test để có kết quả đạt như sau:

Đến đây, bạn đã có hai cấu hình chạy: Hello để chạy chương trình Hello (hàm main); HelloTest để chạy các test trong class HelloTest. Chọn cấu hình nào thì nút tam giác bên phải  sẽ có tác dụng chạy cấu hình đó.

Tiếng Anh chuyên ngành Công nghệ thông tin

Computer science: Khoa học máy tính

 

Graphs (Đồ thị)

 

Directed Graphs

Undirected Graphs

Shortest Paths

Spanning Trees: Cây khung

Deep Learning là gì?

Bốn năm qua, thế giới đã và đang được chứng kiến những bước tiến khổng lồ về chất lượng cùng “độ thần thánh” của các sản phẩm công nghệ chúng ta vẫn sử dụng hàng ngày. Bạn đã bao giờ đặt ra câu hỏi về những tiện ích đó chưa? 

Đầu tiên phải kể đến công nghệ nhận diện giọng nói được nâng cấp rất nhiều so với trước đây. Nhờ có nó mà người dùng hiện nay có thể sử dụng khẩu lệnh để tương tác nhiều hơn với các thiết bị thông minh.

Những trợ lý ảo giọng nói như Alexa của Amazon, Siri của Apple, Cortana của Microsoft cùng các hệ thống nhận diện giọng nói có mặt trên hầu như mọi sản phẩm của Google đang đồng loạt nở rộ trên nhiều nền tảng, giúp người dùng thực hiện nhiều tác vụ khác nhau. Ở phía bên kia địa cầu, gã khổng lồ tìm kiếm Baidu cũng tỏ ra không hề kém cạnh với thống kê cho thấy người dùng các sản phẩm của công ty đã sử dụng nhận diện giọng nói nhiều gấp ba lần chỉ trong vòng 18 tháng qua.

Ngoài nhận diện giọng nói, dịch tự động và các công nghệ xử lý ngôn ngữ tự nhiên khác cũng đang ngày càng ưu việt hơn với những ông lớn như Google, Microsoft, Facebook, Baidu,… liên tục tung ra những tính năng độc đáo. Google Translate hiện nay có khả năng xử lý câu văn nói từ một sang 32 ngôn ngữ khác, dịch văn viết qua lại giữa 103 ngôn ngữ, thậm chí có thể dịch (tức thời) real-time ngay khi bạn lia ống kính điện thoại qua một tấm biển quảng cáo tiếng nước ngoài, như hình ảnh dưới đây.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Tính năng dịch real-time của Google Translate

Và rồi chúng ta lại có công nghệ nhận diện hình ảnh – tính năng đã có mặt rộng rãi trên các sản phẩm của 4 gã khổng lồ nêu trên. Bạn có thể tìm kiếm và sắp xếp những bức ảnh của mình mà không cần phải gắn thẻ (tag) chúng, mà chỉ dựa cần trên những gì hiện diện trong hình, từ cụ thể như một chú chó, cảnh tuyết rơi cho đến trừu tượng như những cái ôm. Nhiều sản phẩm trong số này thậm chí còn có thể đọc mô tả lại các yếu tố trên bức ảnh cho người dùng khiếm thị.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Mỗi khi bạn yêu cầu sắp xếp một album ảnh chó từ kho ảnh của mình, ứng dụng lưu trữ ảnh phải xác định được mọi loại chó, từ giống Chihuahua cho đến giống chó chăn cừu Đức, trên bất cứ phông cảnh nào, đồng thời loại bỏ được những bức hình tương tự có sói hay mèo. Công nghệ này cũng không chỉ dừng lại ở chuyện sắp xếp ảnh hay gợi ý tag mặt bạn bè trên Facebook, mà còn lan sang cả các lĩnh vực như y tế, robot, drone và xe tự lái.

Trong khi nhiều startup về y sinh tung ra những sản phẩm điện toán có khả năng đọc X-quang, MRI và phim chụp CT nhanh chóng và xác định bệnh chuẩn xác hơn cả bác sỹ trị liệu, các công ty công nghệ lớn như Uber, Google, Baidu lại đang định nghĩa lại cách chúng ta di chuyển qua những chiếc xe không người lái vẫn đang ngày ngày lăn bánh thử nghiệm trên các cung đường Âu Mỹ. Những phần mềm, cỗ máy phi thường này đã làm được điều đó như thế nào?

Sự bùng nổ của Deep Learning

Điều mà nhiều người không nhận ra là tất cả các công nghệ này, về mặt bản chất đều xuất phát từ cùng một nguồn gốc. Chúng được phát triển từ “deep learning”, một nhánh đặc biệt trong trí tuệ nhân tạo (AI). Nhiều nhà khoa học vẫn thích gọi nó theo tên nguyên gốc là deep neural network (mạng neuron sâu).

Trên thực tế, chẳng kỹ sư nào có thể lập trình cho máy tính thực hiện được những tính năng đề cập ở trên. Thay vào đó, họ tạo ra một thuật toán giúp máy tính có khả năng tự học rồi cho nó tiếp xúc với hàng terabyte các dữ liệu liên quan – chẳng hạn như vài trăm ngàn bức ảnh các loại chó, hay những băng ghi giọng nói kéo dài hàng năm trời.

Sự tiếp xúc liên tục này sẽ dần dần “huấn luyện” máy tính và khiến nó tự nhận diện được những hình ảnh, giọng nói được yêu cầu. Cũng giống như cách một đứa trẻ học hỏi về thế giới xung quanh, sau một thời gian dài được xem những hình ảnh mặc định là chó hay nghe cách người ta phát âm từ gì đó, máy tính sẽ “nhìn” được đâu là chó và “nghe” được người ta đang nói gì.

Hình dưới đây mô tả cách các mạng Neuron hoạt động như thế nào

Tìm hiểu về công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy trong lịch sử loài người - Ảnh 6.

Mạng neuron sâu thực chất không phải một khái niệm mới, mà đã xuất hiện từ những năm 1950. Rất nhiều đột phá về các thuật toán trong đó diễn ra vào hai thập niên 1980 và 1990.

Lý do khiến chúng mãi đến giờ mới lại nổi lên, chính là vì các nhà khoa học cuối cùng cũng đã có thể tận dụng tất cả sức mạnh điện toán kết hợp với lượng dữ liệu khổng lồ các hình ảnh, video, âm thanh và file text trên Internet – những yếu tố quyết định giúp mạng neuron có thể hoạt động hiệu quả.

Frank Chen, đối tác điều phối của quỹ đầu tư công nghệ danh tiếng Andreesen Horowitz thậm chí còn so sánh những yếu tố trên với cuộc bùng nổ kỷ Cambria trong lĩnh vực deep learning.

Những bước tiến về phần cứng đã mở màn cho cơn địa chấn khổng lồ về deep learning. Sức mạnh điện toán leo thang vượt bậc trên các thiết bị không chỉ xuất phát từ định luật Moore, mà còn đến từ sự xuất hiện của vi xử lý đồ họa (GPU) của NVIDIA – thế hệ chip đầu tiên có khả năng mang lại những trải nghiệm thị giác tuyệt vời cho người dùng.

Ngày nay, ngoài việc cung cấp những trải nghiệm game 3D ấn tượng, GPU còn được sử dụng rộng rãi để tăng tốc độ tính toán trong các lĩnh vực như hình ảnh y khoa, điện từ, mô hình tài chính, nghiên cứu khoa học hiện đại, nhận diện hình ảnh,… Khi vận hành các thuật toán deep learning, so với việc chỉ sử dụng CPU truyền thống, GPU giúp máy tính hoạt động mượt mà hơn từ 20-50%.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Yếu tố thứ hai – lượng dữ liệu khổng lồ từ kho ảnh, video, âm thanh,… đồ sộ từ Internet và các thiết bị IoT hiện nay – đã nhen nhóm kể từ khi Internet mới ra đời, nhưng chỉ thực sự đạt độ chín trong 1-2 thập kỷ vừa qua – khi mà số cư dân mạng và tốc độ phủ sóng smartphone tăng nhanh đến chóng mặt.

Hai chất xúc tác nêu trên đã châm ngòi cho cuộc cách mạng mới về deep learning: Theo số liệu của CB Insights, các startup ứng dụng công nghệ AI được rót vốn quý vừa qua đã ở mức cao kỷ lục trong lịch sử, với con số tổng cộng lên đến hơn 1 tỷ USD. Chỉ tính riêng trong quý II năm 2016, những startup này đã tổ chức 121 vòng gọi vốn, một cú nhảy vọt so với mức 21 vòng cùng kỳ năm 2011.

➡️  Chuẩn bị việc làm trong kỉ nguyên trí thông minh nhân tạo

Năm 2012, Google mới chỉ tiến hành 2 dự án deep learning, nhưng hiện nay con số này đã lên tới hơn 1000, trên hầu hết các sản phẩm như Tìm kiếm, Android, Gmail, Translate, Youtube và xe tự lái.

Năm 2011, siêu máy tính Watson của IBM mới chỉ sử dụng AI để đánh bại những người chơi giỏi nhất trong gameshow Jeopardy! nhưng nay cũng đã được tích hợp thêm deep learning vào hơn 30 nhóm dịch vụ mà hệ thống này cung cấp.

Giới đầu tư, những người chỉ cách đây 5 năm thôi, thậm chí còn chẳng biết deep learning là gì, cũng bắt đầu phải dè chừng những startup ứng dụng deep learning vào công nghệ của họ. Giáo sư Andrew Ng., giám đốc trung tâm nghiên cứu của Baidu thì cho rằng “AI và deep learning chính là một thứ điện năng mới có khả năng cách mạng hàng loạt ngành công nghiệp tương tự như cách mà các mạng lưới điện đã làm hơn 100 năm về trước.”

Deep Learning có quan hệ thế nào với AI?

Cho tiện hình dung, hãy nhìn vào lược đồ dưới đây để thấy rõ mối quan hệ giữa AI, machine learning và deep learning.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Hãy tưởng tượng những gì deep learning có thể làm dưới dạng ghép nối đầu vào (input) với đầu ra (output). Bạn có thể đưa vào hệ thống một đoạn file âm thanh và có được một file phụ đề ghi lại nội dung trong đó ở đầu ra.

Trong một trường hợp khác, bạn có thể đưa vào hệ thống thật nhiều email, rồi yêu cầu đầu ra phân loại xem đâu là email spam. Hoặc bạn cũng có thể đưa vào hệ thống các hồ sơ xin vay tín dụng, rồi yêu cầu bản phân tích về khả năng hoàn trả của đối tượng ở đầu ra.

Tất cả những gì bạn cần làm là đưa vào hệ thống deep learning một lượng lớn dữ liệu và “lấy” những thứ mình cần ở đầu ra. Theo cách này, miễn là bạn có đủ dữ liệu để nạp vào hệ thống, tiềm năng ứng dụng và cách mạng hóa các ngành công nghiệp của deep learning là vô biên.

Deep Learning có thể làm những gì?

Nếu bạn thấy các tính năng như nhận diện giọng nói khi dùng voice search Google hay nhận diện hình ảnh bạn bè để gợi ý tag họ trên Facebook chưa có gì quá đột phá, thì hãy nhớ rằng đây mới đang là thời kỳ bình minh của kỷ nguyên deep learning và AI mà thôi. Deep learning còn rất nhiều tiềm năng to lớn mà trong khuôn khổ bài viết, chúng ta chỉ có thể điểm qua một số ví dụ nổi bật dưới đây.

Đôi mắt cho người mù

Deep learning trong tương lai chắc chắn sẽ không dừng lại ở việc nhận diện được các hình ảnh trên máy thông thường. Những chiếc máy tính sẽ sớm có thể nhận biết từng sự vật có mặt trong khung cảnh và mô tả lại chúng.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Một khi máy tính có thể nhận diện được mọi thứ với mức độ chi tiết không kém gì con người thì chẳng có lý do gì nó không thể nghe/nhìn thay những người dùng khiếm thính/khiếm thị. Trên thực tế, Baidu đã phát triển Baidu Light, một thiết bị đeo có thể chụp ảnh mọi thứ xung quanh và trình bày caption mô tả chúng cho người dùng.

Thay đổi cách thiết kế các sản phẩm Robot và IoT

Các nhà nghiên cứu hiện nay đã có thể nâng cấp độ chính xác trong nhận diện giọng nói từ 89% lên 99%. 10% nghe có vẻ ít ỏi này thực chất sẽ thay đổi toàn bộ cuộc chơi.

Chưa cần kể đến một lượng lớn dân số mù chữ trên thế giới có thể tiếp cận sớm với các thiết bị thông minh như smartphone, khả năng nhận diện này rõ ràng đang mở đường cho những nền tảng giao thức qua giọng nói giữa con người với máy tính, cho phép chúng ta trò chuyện và ra khẩu lệnh cho những chiếc smartphone, xe hơi, các món đồ gia dụng thông minh hay thậm chí là cả chính ngôi nhà mà chúng ta sống mà không còn cần đến những chiếc màn hình cồng kềnh.

Xa hơn nữa, các robot giúp việc trong tương lai có thể hoàn toàn “nghe hiểu” con người và “nhìn” được vạn vật xung quanh để thực hiện các tác vụ ở mức chính xác cao.

Hệ thống gợi ý trên các nền tảng

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Các nền tảng lớn hiện nay như Facebook, Amazon, Netflix, Youtube, Coursera,… đều có hệ thống gợi ý (recommend) rất mạnh, giúp gia tăng đáng kể độ tương tác của người dùng. Cụ thể, chúng dựa trên các dữ liệu người dùng phát sinh ra khi dùng để gợi ý thêm những sản phẩm họ sẽ thích (trên các nền tảng mua sắm), những thước phim họ sẽ muốn xem (trên Netflix, Youtube), các bài quảng cáo/được tài trợ phù hợp (trên Facebook) hay các khóa học người học quan tâm (trên các nền tảng học online như Coursera, edX,…).

“Oanh tạc” ngành tài chính

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Tài chính là một trong những lĩnh vực chủ chốt sẽ chứng kiến nhiều tác động của AI và deep learning. Các công ty trong ngành hiện đã và đang sử dụng các thuật toán dự đoán các xu hướng trên thị trường chứng khoán, chuyển đổi dữ liệu an toàn hơn cho đến ngăn chặn kịp thời các hành vi lừa đảo qua giao dịch.

Trong tương lai, nhiều ngân hàng và các tập đoàn tài chính có thể sẽ đồng bộ chatbot vào dịch vụ của họ để cung cấp cho khách hàng những tư vấn cần thiết ở mọi nơi, mọi lúc. Bằng khả năng xử lý ngôn ngữ tự nhiên ưu việt, các chatbot tư vấn tài chính sẽ phân tích để xác định thói quen tiêu dùng, đầu tư của họ để đưa ra những lời chỉ dẫn phù hợp và cá nhân hóa nhất có thể.

Cách mạng ngành y tế

Deep learning có thể tạo ra rất nhiều đột phá trong rất nhiều phân mảng y tế khác nhau. Có thể điểm qua:

Enlitic là một startup y tế đang sử dụng deep learning để phân tích, xác định bệnh lý từ các phim chụp CT và MRI. Trong một số thử nghiệm trước đây, tuy chưa chính thức được cấp phép hoạt động, nhưng các thuật toán học sâu của Enlitic đã thể hiện tốt hơn cả 4 bác sỹ X-quang tham gia khi xác định được chính xác các khối u lành tính và ác tính qua ảnh phim.

Trong khi đó, startup Merck và Atomwise lại đang ứng dụng deep learning vào việc đẩy nhanh tốc độ nghiên cứu các loại thuốc điều trị hiện nay. Thay vì phải thử nghiệm từng loại chất như trước đây, các nhà khoa học có thể sử dụng mạng thần kinh nhân tạo kiểm tra hình ảnh 3D của hàng ngàn phân tử chất có tiềm năng được đưa vào thành phần điều chế thuốc và dự đoán mức độ phù hợp trong việc khống chế mầm bệnh của chúng.

Một tiềm năng khác của deep learning trong lĩnh vực này là phát triển robot phẫu thuật với độ chính xác cao và có thể nhận khẩu lệnh thời gian thực (real-time) từ bác sỹ điều khiển.

➡️  Những công bố quan trọng tại hội nghị Qualcomm 4G/5G Summit – Hong Kong

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Tuy nhiên, trong khi các ứng dụng trên mới chỉ tập trung vào nâng cấp những gì con người đang làm thì startup non trẻ Freenome lại đang nghiên cứu những thứ con người chưa làm được: xác định ung thư qua mẫu máu của người bệnh. Với sức mạnh của deep learning, Freenome có thể yêu cầu máy tính tìm ra những điểm tương đồng giữa các DNA tự do trong mạch máu (cell-free DNA) và các tế bào ung thư. Công ty cho biết họ đã chứng kiến những dấu hiệu khả quan đầu tiên mà các nhà nghiên cứu ung thư hiện nay vẫn chưa nhìn ra.

Lý giải điều này, Vijay Pande, lãnh đạo mảng đầu tư công nghệ sinh học của Andreesen Horowitz, cho biết nếu như một bác sỹ X-quang có thể xem được hàng ngàn tấm phim chụp trong suốt sự nghiệp của mình, thì một chiếc máy tính có thể xem được hàng triệu tấm như vậy trong một thời gian ngắn.

Chúng vượt trội hơn đơn giản là vì được tiếp xúc với lượng dữ liệu lớn đến mức con người không thể “tiêu hóa” nổi. Kết quả cuối cùng là ngoài chất lượng tăng lên và giá thành giảm xuống, các dịch vụ y tế trong tương lai còn trở nên minh bạch và dễ tiếp cận hơn rất nhiều.

AI và Deep Learning có thực sự đáng sợ?

Trước những đột phá hàng loạt trong lĩnh vực deep learning nói riêng và AI nói chung, vấn đề gây tranh cãi muôn thuở vẫn là liệu máy tính và robot có khi nào sẽ xâm chiếm và kiểm soát loài người?

Dẫn đầu luồng quan điểm lạc quan về tương lai AI là hàng loạt nhân vật đầu ngành đến từ các tổ chức lớn như IBM, Google, ĐH Stanford, Baidu,… Theo Guru Banavar, giám đốc nghiên cứu của IBM thì về lâu dài, AI chủ yếu vẫn sẽ cùng con người giải quyết những vấn đề nhức nhối như dịch bệnh, đói nghèo… qua các đột phá về y sinh, giáo dục và ứng dụng trong nông nghiệp, tài chính, kinh doanh… Chúng ta cũng không cần phải quá lo lắng về khả năng xâm chiếm của AI vì có thông minh đến đâu thì các máy tính cũng sẽ không có tri giác như con người.

Geoffrey Hinton, một trong những nhà khoa học tiên phong trong lĩnh vực này cho biết: “Ngay cả những mạng neuron lớn nhất hiện nay cũng vẫn nhỏ hơn não người hàng trăm lần.”

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Về cơ bản, những cỗ máy AI hơn con người ở khả năng thu nạp và khai phá một lượng lớn dữ liệu cũng như ghi nhận được các xu hướng và các kiểu mẫu (pattern) đặc trưng trong thời gian ngắn, chứ không hề có tư duy độc lập như con người. Điều này có nghĩa là chúng không thể tự đặt câu hỏi về những gì chúng làm hay hiểu được tại sao chúng lại làm những việc đó.

Giáo sư Andrew Ng. của Baidu cũng có cùng nhận định khi cho rằng: “Có một sự khác biệt rất lớn giữa sự thông minh và cảm quan tri giác. Các phần mềm có thể trở nên thông minh hơn, nhưng sau cùng thì chúng vẫn không hề có tri giác.” Hơn thế nữa, như bất cứ cỗ máy nào, các robot cũng sẽ có lúc hết sạch năng lượng chứ không thể hoạt động mãi mãi. Chủ tịch điều hành Eric Schmidt của Google thậm chí còn phát biểu điều này một cách hài hước rằng nếu một ngày robot có nổi dậy thì “chẳng lẽ con người không nhận ra mà tắt chúng đi sao?”

Trong khi đó, những người không trực tiếp nghiên cứu trong ngành lại mang góc nhìn bất an hơn về công nghệ này. Elon Musk và nhà vật lý Stephen Hawking đều từng chia sẻ về lo ngại con người có thể tạo ra những cỗ máy AI khủng khiếp đến mức không thể kiểm soát nổi.

Tác giả người Mỹ James Barrat cũng chỉ ra trong cuốn sách nổi tiếng Our Final Invention của ông rằng AI, cũng như công nghệ phân hạch hạt nhân, có thể trở thành một con dao hai lưỡi khi bị sử dụng sai hướng. Ở mức độ cao cấp, AI thậm chí có thể nguy hiểm hơn cả hạt nhân vì chúng đã và đang được đưa vào các vũ khí quân sự như drone tự lái và robot chiến đấu.

Tại biên giới Hàn Quốc, người ta hiện đang sử dụng SGR-1, một robot canh gác với các cảm biến nhiệt và chuyển động có thể nhận diện mục tiêu tình nghi từ khoảng cách hơn 2 dặm. Hiện tại, SGR-1 vẫn phải chờ hiệu lệnh từ con người mới bắt đầu kích hoạt ngắm bắn, nhưng vấn đề ở đây là điều gì sẽ xảy ra nếu các robot như vậy có thể tự động bắn mà không cần sự thiệp của con người?

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Theo Noel Sharley, nhà hoạt động dẫn đầu chiến dịch Stop Killer Robots thì các lãnh đạo quân đội sẽ ngày càng gửi nhiều robot ra tiền tuyến để giảm thiểu tổn thất về binh lính và đây mới chính là mối nguy thực sự. Hầu hết các quốc gia, bao gồm cả Nga, Trung Quốc và Hàn Quốc, đều đang phát triển thứ công nghệ có khả năng phá vỡ an ninh toàn cầu này. “Tương lai sẽ ra sao nếu chúng ta cứ liên tục xây dựng những con robot chiến đấu và hủy diệt lẫn nhau?”, ông đặt câu hỏi.

Cuộc tranh luận gay gắt giữa hai quan điểm trên có lẽ sẽ còn rất lâu nữa mới đi đến hồi kết, nhưng dù thế nào thì ở thời điểm hiện tại, chúng ta cũng chỉ có thể căn cứ vào những gì đã biết để nhận định về lo ngại này. Những mối hoài nghi không phải là không có cơ sở và những người lạc quan về AI cũng không phải là hoàn toàn phớt lờ những phương án phòng trừ viễn cảnh đen tối đó.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Tiêu biểu trong số này là những dự án như OpenAI, startup phi lợi nhuận do Elon Musk và Sam Altman, chủ tịch vườn ươm khởi nghiệp Y Combinator, sáng lập với sứ mệnh nghiên cứu và cung cấp mã nguồn AI cho tất cả mọi người tiếp cận để “AI không rơi vào tay một nhóm độc quyền thiểu số nào”.

Thời gian gần đây, liên minh phát triển AI do Google, Facebook, Microsoft, IBM và Amazon đi đầu cũng đã chính thức được thành lập với mục tiêu cùng nhau hỗ trợ việc nghiên cứu các giải pháp về đạo đức, tính minh bạch và bảo mật cá nhân trong quá trình ứng dụng công nghệ này. Chúng ta cũng có quyền hy vọng vào những hiệp ước AI mà các nước trên thế giới có thể chung tay thiết lập trong một tương lai không xa.

Lo sợ về AI không có gì là vô lý, nhưng nếu nhìn nhận một cách công bằng thì hầu như chẳng công nghệ nào là không có hai mặt của nó. Việc một công nghệ trở nên ra sao, xét cho cùng, vẫn chủ yếu phụ thuộc vào cách con người kiểm soát cũng như sử dụng nó. Và AI hay deep learning – nguồn điện mới của nhân loại – chắc chắn cũng không phải là một ngoại lệ.

Deep Learning: công nghệ đang giúp cả thế giới phát triển với tốc độ chưa từng thấy

Không gian Metric và Topo đại cương

1. Định nghĩa Metric và không gian Metric

Cho $X\neq \varnothing $, d là ánh xạ từ:  $X^{2}\rightarrow R$
                                         $ \left ( x,y \right )\in X^{2}\rightarrow d\left ( x,y \right )\in R$
thỏa mãn 3 tiên đề sau :
   1/ $d\left ( x,y \right )\geq 0$ với mọi $x,y\in X$
        $d\left ( x,y \right )=0\Leftrightarrow x=y$
   2/ $d\left ( x,y \right )=d\left ( y,x \right )$ với mọi $x,y\in X$
   3/  $d\left ( x,y \right )\leq d\left ( x,z \right )+d\left (z,y  \right )$ với mọi  $x,y,z\in X$
 ánh xạ d được gọi là Metric trên X.
Một tập X được trang bị một Metric thì gọi là Không gian Metric $M=\left ( X,d \right )$, với $d\left ( x,y \right )$ được gọi là khoảng cách từ điểm x đến điểm y. Phần tử trong không gian Metric gọi là các điểm.

2. Một số tính chất đơn giản.

  Tính chất 1: Giả sử $\left ( X,d \right )$ là không gian Metric, $x_{1},x_{2},…,x_{n}\in X$ khi đó :
    $d\left ( x_{1},x_{n} \right )\leq d\left ( x_{1} ,x_{2}\right )+d\left ( x_{2},x_{3} \right )+…+d\left ( x_{n-1},x_{n} \right )$
  Tính chất 2: Với bốn điểm $x,y,u,v\in X$ khi đó :
        $ \left | d\left ( \left ( x,y \right ) \right ) -d\left ( u,v \right )\right |\leq d\left ( x,u \right )+d\left ( y,v \right )$
  Tính chất 3: Giả sử $x,y,u\in X$ khi đó:
       $ \left | d\left ( x,u \right )-d\left ( y,u \right ) \right |\leq d\left ( x,y \right )$

3. Một số ví dụ chứng minh Không gian Metric.

 Ví dụ 1: Cho $X=R$, với mọi $x,y\in R, d\left ( x,y \right )=\left | x-y \right |$. Kiểm tra xem $\left( X,d \right)$ là một không gian Metric.
 Bài giải :
 Ta đi kiểm tra 3 tiên đề
  1, Ta có $d\left ( x,y \right )= \left |x-y  \right |\geq 0$
       Giả sử $d\left ( x,y \right )=0 \Leftrightarrow \left |x-y  \right |= 0\Leftrightarrow x=y$
                      $ \Rightarrow d\left ( x,y \right )\Leftrightarrow x=y$
  2, Với mọi $x,y\in R, d\left ( x,y \right )=\left | x-y \right |=\left | \left ( -1 \right )\left ( y-x \right ) \right |=\left | \left ( -1 \right ) \right |\left | y-x \right |=d\left ( y,x \right )$
                       $\Rightarrow  d\left ( x,y \right )=d\left ( y,x \right )$
  3, Với mọi  $x,y,z\in R$ , ta có :
       $d\left ( x,y \right )=\left | x-y \right |=\left | x-z+z-y \right |\leq \left | x-z \right |+\left | z-y \right |=d\left ( x,z \right )+d\left ( z,y \right )$
                       $\Rightarrow d\left ( x,y \right )\leq d\left (x,z\right )+d\left ( z,y \right )$
 Vậy $\left ( R,d \right )$ là một không gian Metric.
Một số ví dụ tương tự ví dụ 1 
 Ví dụ 2: Cho $X=R^{n}$, với mọi  $x\in X, x=\left ( x_{1},x_{2},…,x_{n} \right )$
                                                            $y\in Y, y= \left ( y_{1},y_{2},…,y_{n} \right )$
               Đặt $d\left ( x,y \right )=\left ( \sum_{i=1}^{n}\left ( x_{i}-y_{j} \right )^{2} \right )^{\frac{1}{2}}$
          Chứng minh rằng: $\left ( X,d \right )$ là một không gian Metric.
Ví dụ 3: Cho $X\neq \varnothing $, ta định nghĩa: $d\left ( x,y \right )=\left\{\begin{matrix}
 1, x\neq y& \\0,x=y&
\end{matrix}\right.$
              Chứng minh rằng: $\left ( X,d \right )$ là một không gian Metric

Một số lưu ý khi viết bài trên YeuLapTrinh

1 – Sử dụng Latex

Website có hỗ trợ công cụ viết công thức toán học Latex. Mình xin được giới hiệu cách sử dụng ở dưới đây

  • Bài viết nào dùng đến Latex thì bắt buộc phải thêm một dòng ở trên cùng
    • Viết cùng trên một dòng thì dùng: $...$
    • Viết công thức trên cả một dòng thì dùng: $$...$$

Thí dụ:

[mathjax]

Bài viết này sử dụng Latex. Test...

$a^2 + b_i^3 \ge c_{i+1}^5 + d_{x+1}^{y+1}$

2 – Tránh lỗi khi chèn code

Hầu hết các bài viết các bạn đều chèn code vào, nhưng nhiều bạn chèn code vẫn chưa đúng cách, gây lỗi. Nên mình xin được hướng dẫn cách chèn code và chú ý khi chèn code để không bị lỗi.

viet-bai-yeulaptrinh

Tab “Trực quan” và Tab “Văn bản”

Khi soạn thảo, bạn có 2 tab là “Trực quan”” và “Văn bản”.

  • Tab “Trực quan” là soạn thảo văn bản tương tự như Word
  • Tab “Văn bản” là chỉnh sửa văn bản dạng HTML. Đây là tab mà bạn chèn code

Lỗi khi soạn thảo các bạn cần chú ý ở đây là:

  • Không viết chèn code ở tab “Trực quan”, phải chèn ở trong Tab “Văn bản”
    • Bươc 1: Mở tab “Văn bản”
    • Bước 2: Chèn đoạn HTML với mẫu: <pre lang=”ten_ngon_ngu_lap_trinh”>Viết code ở đây</pre>
      • ten_ngon_ngu_lap_trinh là c, cpp, python, php, java, … Xem thêm ở GeSHi

Vd:

<pre lang="cpp">
int a, b;
int c,d;
  • Chú ý 2: Sau khi chèn code, việc chuyển đổi giữa 2 tab “Trực quan” và “Văn bản” sẽ gây lỗi. Ví dụ:
    • < thành &lt;
    • > thành &gt;
  • Vì vậy nên soạn thảo trên tab “Trực quan” xong xuôi thì mới chuyển sang tab “Văn bản” để chèn code. Tránh hành động chuyển đổi giữa 2 tab sẽ gây lỗi cho code.

 

 

 

 

 

Danh sách liên kết

1. Giới thiệu

Cấu trúc danh sách liên kết

Danh sách liên kết (linked list) được dùng để lưu giữ các phân tử có cùng kiểu giá trị. Bên dưới là ví dụ minh họa sử dụng danh sách liên kết gồm 4 phần tử để lưu giữ dãy A, B, C, D. Phần tử đầu tiên của danh sách liên kết gọi là “head”.
Trong khi các phần tử trong mảng được lưu giữ liên tiếp trong bộ nhớ, thì các phần tử trong danh sách liên kết có thể nằm ở các vị trí khác nhau trong bộ nhớ. Mỗi phần tử (node) trong danh sách liên kết gồm hai thành phần:
• “data”: Lưu giữ dữ liệu.
• “next”: Con trỏ liên kết chỉ đến phần tử tiếp theo trong danh sách liên kết.

2. Duyệt trên danh sách liên kết

Bắt đầu từ phần tử đầu tiên ”head”, di chuyển đến các phần tử khác trên danh sách liên kết dựa vào biến con trỏ liên kết “next” như bên dưới.

3. Truy cập phần tử trong danh sách liên kết

Để truy cập phần tử thứ p trong danh sách liên kết, chúng ta phải di chuyển từ phần tử đầu tiên (head) cho đến phần tử thứ p như bên dưới.

4. Chèn một phần tử vào danh sách liên kết

Để chèn một phần tử có giá trị X vào vị trí p trong danh sách liên kết, chúng ta tiến hành hai bước cơ bản sau:
• Tạo một phần tử mới chứa giá trị X.
• Gán giá trị con trỏ liên kết “next” của phần tử thứ (p-1) và phần tử mới như bên dưới.

5. Xóa một phần tử khỏi danh sách liên kết

Để xóa phần tử tại vị trí p khỏi danh sách liên kết, chúng ta thay đổi giá trị con trỏ liên kết
“next” của phần tử thứ (p-1) như hình dưới. Sau đó xóa phần tử thứ p ra khỏi bộ nhớ!

6. Danh sách liên kết đôi

Danh sách liên kết được trình bày ở trên được gọi là danh sách liên kết đơn, bởi vì mỗi phần tử trong danh sách liên kết đơn có đúng một biến con trỏ liên kết “next” chỉ đến phần tử tiếp theo trong danh sách.Việc duyệt trên danh sách liên kết đơn chỉ thực hiện được theo một chiều từ đầu danh sách đến cuối danh sách và không thực hiện được theo chiều ngược lại.

Danh sách liên kết đôi là mở rộng của danh sách liên kết đơn, trong đó mỗi phần tử có hai con trỏ liên kết:
• “previous” trỏ đến phần tử phía trước trong danh sách.
• “next” trỏ đến phần tử tiếp theo trong danh sách.
Bên dưới là ví dụ minh họa sử dụng danh sách liên kết đôi để lưu giữ dãy A, B, C, D. Phần tử đầu tiên của danh sách liên kết đôi gọi là “head”, phần tử cuối cùng gọi là “tail”.

Danh sách liên kết đôi thường được dùng trong các bài toán cần duyệt trên danh sách theo cả hai chiều. Nó cũng hay được dùng trong các bài toán mà các phép toán chèn và xóa các phần tử trong danh sách thường diễn ra ở một trong hai đầu của danh sách bởi vì các phép toán này được thực hiện một cách nhanh chóng.

7. So sánh cấu trúc danh sách liên kết và cấu trúc mảng

• Các phần tử trong mảng được lưu giữ liên tục trong bộ nhớ, cho nên việc truy cập và thay đổi giá trị một phần tử bất kì trong mảng rất nhanh. Các phần tử trong danh sách liên kết được lưu giữ tại các vị trí khác nhau trong bộ nhớ máy tính, cho nên việc truy cập và thay đổi giá trị một phần tử bất kì tốn nhiều thời gian.
• Kích thước của mảng phải được xác định và khai báo trước khi sử dụng, điều này dẫn đến khó khăn và dư thừa bộ nhớ trong các bài toán mà số lượng các phần tử không được xác định trước. Khi sử dụng danh sách liên kết, chúng ta không phải khai báo trước kích thước của danh sách. Chúng ta chỉ xin cấp phát bộ nhớ khi thêm phần tử mới vào danh sách liên kết, và sẽ xóa phần tử đó khỏi bộ nhớ khi nó bị xóa khỏi danh sách liên kết.

Map (ánh xạ) trong C++

Map là một loại associative container. Mỗi phần tử của map là sự kết hợp của khóa (key value) và ánh xạ của nó (mapped value). Cũng giống như set, trong map không chứa các khóa mang giá trị giống nhau.

Trong map, các khóa được sử dụng để xác định giá trị các phần tử. Kiểu của khóa và ánh xạ có thể khác nhau.

Và cũng giống như set, các phần tử trong map được sắp xếp theo một trình tự nào đó theo cách so sánh.

Map được cài đặt bằng red-black tree (cây đỏ đen) – một loại cây tìm kiếm nhị phân tự cân bằng. Mỗi phần tử của map lại được cài đặt theo kiểu pair (xem thêm ở thư viện utility).

Khai báo: 

#include <map>

map <kiểu_dữ_liệu_1,kiểu_dữ_liệu_2>

// kiểu dữ liệu 1 là khóa, kiểu dữ liệu 2 là giá trị của khóa.

 

Sử dụng class so sánh:

Dạng 1:

struct cmp{

bool operator() (char a,char b) {return a<b;}

};

.....

map <char,int,cmp> m;
  • Truy cập đến giá trị của các phần tử trong map khi sử dụng iterator: Ví dụ ta đang có một iterator là it khai báo cho map thì:
  • (*it).first;   // Lấy giá trị của khóa, kiểu_dữ_liệu_1
    
    (*it).second;  // Lấy giá trị của giá trị của khóa, kiểu_dữ_liệu_2
    
    (*it)          // Lấy giá trị của phần tử mà iterator đang trỏ đến, kiểu pair
    
    it->first;  // giống như (*it).first
    
    it->second; // giống như (*it).second
    
    

    Capacity:

    • size : trả về kích thước hiện tại của map. ĐPT O(1)
    • empty : true nếu map rỗng, và ngược lại. ĐPT O(1).

     

    Truy cập tới phần tử:

    • operator [khóa]: Nếu khóa đã có trong map, thì hàm này sẽ trả về giá trị mà khóa ánh xạ đến. Ngược lại, nếu khóa chưa có trong map, thì khi gọi [] nó sẽ thêm vào map khóa đó. ĐPT O(logN)

    Chỉnh sửa

    • insert : Chèn phần tử vào map. Chú ý: phần tử chèn vào phải ở kiểu “pair”. ĐPT O(logN).
    • erase :

    o xóa theo iterator ĐPT O(logN)

      1. xóa theo khóa: xóa khóa trong map. ĐPT: O(logN).
    • clear : xóa tất cả set. ĐPT O(n).
    • swap : đổi 2 set cho nhau. ĐPT O(n).

    Operations:

    • find : trả về itarator trỏ đến phần tử cần tìm kiếm. Nếu không tìm thấy iterator trỏ về “end” của map. ĐPT O(logN).
    • lower_bound : trả về iterator đến vị trí phần tử bé nhất mà không bé hơn (lớn hơn hoặc bằng) khóa (dĩ nhiên là theo phép so sánh), nếu không tìm thấy trả về vị trí “end” của map. ĐPT O(logN).
    • upper_bound: trả về iterator đến vị trí phần tử bé nhất mà lớn hơn khóa, nếu không tìm thấy trả về vị trí “end” của map. ĐPT O(logN).
    • count : trả về số lần xuất hiện của khóa trong multiset. ĐPT O(logN)

    Chương trình demo:

    #include <iostream>
    
    #include <map>
    
    #include <vector>
    
    using namespace std;
    
    main() {
    
        map <char,int> m;
    
        map <char,int> :: iterator it;
    
        m['a']=1;
        m.insert(make_pair('b',2));
        m.insert(pair<char,int>('c',3) );
    
        // m={{'a',1}}
        // m={{'a',1};{'b',2}}
        // m={{'a',1};{'b',2};{'c',3}}
    
        cout << m['b'] << endl; m['b']++;     // In ra 2
    
        // m={{'a',1};{'b',3};{'c',3}}
    
        it=m.find('c');    // it trỏ tới phần tử khóa 'c'
    
        cout << it->first << endl; 
        cout << it->second << endl;
        // In ra 'c'
        // In ra 3
    
        m['e']=100;
        //m={{'a',1};{'b',3};{'c',3};{'e',100}}
    
        it=m.lower_bound('d'); 
        cout << it->first << endl; 
        cout << it->second << endl;
        // it tỏ tới phần tử khóa 'e'
        // In ra 'e'
        // In ra 100
        system("pause");
    }