(Part 1 is here)

Vào một ngày đẹp trời người tình cũ của một đứa bạn thân cưới một cha ở giáp tỉnh Nghệ An học cùng lớp với nó và cũng là bạn cấp 3 của tôi (đố các bạn biết đứa người tình cũ hay thằng cha giáp tỉnh Nghệ An học cùng lớp cấp 3 với tôi :]]) mời cưới, thôi thì đành viết nốt part 2, lỡ năm sáu năm nựa cưới vợ lại không viết được.


Đầu ra của một neural network là cái chi?

Đầu tiên bạn cần hình dung được đầu ra của một neural network (hay machine learning nói chung) cho một vấn đề là gì. Một ví dụ ngớ ngẩn "Sử dụng neural network tìm x biết x=2" . Bạn có thể chửi tôi "Mày đùa bố à", nhưng như đã đề cập trong part 1 neural network là một cỗ máy xấp xỉ, nó không thể có đầu ra chính xác như yêu cầu bài toán. Nói cách khác kết quả bài toán có thể là 1.99999 hoặc 2.000001, gần như không có thể cho một kết qủa tuyệt đối là 2. Bây giờ lại một ví dụ khác "Sử dụng neural network tìm x biết x=2 và x=3". Tất nhiên bài toán là vô nghiệm nếu xét về mặt toán học, nhưng trong neural network nó sẽ đưa ra một kết quả thỏa mãn "nhất" cho cả 2 giá trị 2, 3, bạn có thể đoán là 2.5 nếu như bạn muốn kết quả cách đều 2 số. Bạn có thể nghĩ nó tương đương với tình huống thực tế sau, chiều cao từ cẳng đến rốn của bạn là 3cm, và là giá trị của phép đo bởi thước của bạn, vì thước của bạn không chuẩn nên sau 2 phép đo bạn có 2 giá trị là 2cm và 3cm, và bạn lấy trung bình của 2 giá trị để xấp xỉ giá trị chính xác là 3. Bây giờ bạn liên tưởng tới vấn đề thực tế "Sử dụng neural network để phân biệt ảnh chó, mèo". Rõ ràng ảnh chó mèo là vô hạn, nhưng bạn chỉ có trong tay một khối lượng nhỏ ảnh chó mèo, cái neural network bạn dựng lên đầu ra của nó phải thõa mãn được dữ liệu có trong tay bạn và thỏa mãn tương đối dữ liệu ngoài vòng tay. Nghe có vẻ khó, tôi sẽ đề cập tới vấn đề này chi tiết hơn ở trong part 3 - "nói về cách sử dụng neural network trong các ứng dụng" và bạn sẽ thấy nó cũng không phải quá khó hiểu. Và tôi cũng sẽ nói thêm một chút một vấn đề khó của neural network bởi tính xấp xỉ của nó trong phần ứng dụng, còn lúc này bạn có thể hình dung bởi vì tính xấp xỉ nên các mô hình neural network hiện tại rất khó thực hiện chính xác các phép toán tưởng chừng cơ bản như cộng trừ nhân chia...


Túm lại, bạn cần nhớ một neural network cho ra các giá trị khá thõa mản với vấn đề nào đó.


Neural Network học như nào?

Nói về mặt kỹ thuật là một tá các công thức đạo hàm, còn về mặt trực giác té ra nó lại cực kỹ dễ hiểu. Tôi sẽ trình bày cho neural network 1 lớp, và sau đó nhiều lớp ẩn. 

Nhà bạn ắt hẳn có một cài vòi rửa tay nóng lạnh, bây giờ bạn có thể ra vặn vòi và bạn sẽ nắm được cách thức vận hành của nó. Khi vặn vòi bạn tưởng tượng rằng, bạn là cách học của neural network, cái vòi là neural network, và mục tiêu đầu ra của bạn là nhiệt độ nước phù hợp nhất. Bước đầu tiên của việc học bạn có thể hình dung như sau: bạn cảm nhận nhiệt độ ngoài trời như đầu vào, đoạn đầu bạn chưa biết vị trí đúng nên bạn vặn bừa một vị trí, lúc này nước trong vòi chảy ra. Bước thứ hai: bạn cảm nhận nước trong vòi (giả sử cái vòi bên trái là lạnh, bên phải là nóng), nếu lạnh quá bạn sẽ vặn về hướng nóng (bên phải), nếu nóng quá bạn lại vặn về hướng lạnh (bên trái). Cứ lặp lại bước 2 như này đến cuối cùng bạn sẽ nhích cái vòi từng tý (khác với những bước đầu là bạn phải vặn cái vòi cả cục) cho tới khi bạn thấy thõa mãn và bạn dừng lại. Hình dung một cách khoa học hơn, chúng ta trở lại vấn đề ngớ ngẩn ban đầu - "Tìm x biết x=2". Đoạn đầu bạn sẽ cho x là giá trị bất kỳ ví dụ x=0, tương tự với cài vòi nó ở bên lạnh. Bạn vặn cho nó nóng lên hay x=3. Tại x=3, bạn cảm thấy hơi nóng, bạn vặn nó xuống x=2.5, vẫn hơi nóng bạn lại cho nó xuống x=1.9, bây giờ nó hơi lạnh và bạn cho nó lên x=1.99.... Cứ tiếp tục như vậy bạn sẽ có một giá trị x gần với 2, và bạn dừng lại sau một tá bước. Cách học cho neural network 1 lớp về cơ bản chỉ có vậy thôi :]].


Nhiều lớp thì sao? Nó có thêm vài bước thôi, cái vòi của bạn đằng trong có các bộ phận răng cưa nối liền nhau. Các bộ phận răng cưa ẩn này sẽ đại diện cho các lớp ẩn trong neural network, khi bạn tác động vào nút vặn làm cho các răng cưa này dịch chuyển và khi bạn dừng lại thì nó sẽ nằm tại ví trị cố định nào đó. Nhưng với cách học như này sẽ có vài vấn đề trồi lên, buộc các nhà AI học phải nghiên cứu nó nếu muốn gia tăng sức mạnh cho Deep Learning. Tôi lại sẽ mô tả một cách trực giác cho các bạn.

(Chú ý: Về không cơ bản tồn tại một vài mô hình không dựa vào cách học này)


Một số vấn đề  nổi cộm trong neural network?

1. Bạn học rất giỏi toán, nhưng chẳng biết quái gì văn, và bạn trượt tốt nghiệp.

Hay bạn rất phù hợp với phong cách làm việc ở Hà Nội, nhưng khi làm ở Sài Gòn bạn bị đuổi thẳng cổ... Nó minh họa cho vấn đề quá phù hợp (kỹ thuật gọi là overfitting) trong neural network. Có nghĩa là neural network của bạn cho kết quả đúng 100% trong việc phân loại ảnh mèo chó trong dữ liệu bạn có, nhưng nó cho kết quả rất tệ ngoài đám dữ liệu này, và tất nhiên neural network của bạn toàn cục không xử lý được vấn đề. Nói chung, neural network (hay các giải thuật machine learning nói chung) của bạn phải tránh được việc không phù hợp trên dữ liệu bạn không có (gọi cái này là A), và phải khá phù hợp trên dữ liệu bạn có (gọi cái này là B). Để làm thõa mãn cả A và B luôn luôn có một sự đánh đổi như cuộc đời vậy. Bạn lái xe từ nhà tới trường, bạn đi nhanh thì thời gian sẽ tốn ít hơn nhưng độ an toàn lại thấp hơn, bạn đi chậm thì thời gian sẽ dài hơn nhưng độ an toàn lại cao hơn.... Bạn sẽ chọn như thế nào ?


2. Bạn rất khó để đạt được một neural network tối ưu cho một vấn đề trong thực tế.

Bạn đang ở trên một vùng đất đầy các giếng nước, tất cả mực nước trong giếng là ngang nhau, bạn không có một công cụ nào cả. Làm sao bạn biết được cái giếng nào sâu nhất?. Chỉ có một cách là bạn nhảy xuống từng cái giếng và xem nó sâu thế nào. Nhưng mỗi khi nhảy xuống, bạn rất khó để thoát ra, bạn ẳng và chiếc giếng bạn nhảy xuống chưa phải là sâu nhất. Nó minh họa tương tự cho neural network thực tế, neurat network cũng có hàng tá các giếng như vậy. Lời giải cho vấn đề là một trong các giếng phụ thuộc vào vị trí bạn chọn ban đầu, bạn sẽ bị tắc trong đó mỗi khi đầu ra dừng thay đổi.


3. Bạn sẽ gặp hiệu ứng cánh bướm trong deep neural network.

Bạn đã từng nghe qua về hiệu ứng cánh bướm?. Về cơ bản nó đề cập tới việc thay đổi nhỏ có thể tạo ra thay đổi lớn và nó là một phần của Chaos theory trong toán học. Deep network là một ví dụ tốt cho hiệu ứng này và nó cũng là vấn đề khó nhất trong việc luyện một deep network. Để dễ hình dung, deep network như các bộ răng cưa có thể tổ chức như các hình sau:


Nếu trạng thái deep neural network bạn ở hình A, thì việc văn bánh răng ngoài cùng đi một tý sẽ làm thay đổi khá nhiều ví trí ở các bánh răng sau cùng. Điều này làm cho tính ổn định của deep neural network của bạn là thấp và bạn khó có thể luyện được nó nếu tồn tại sự bất ổn này. Còn nếu nếu nó ở hình B, khi bạn vặn cái bánh răng nhỏ ngoài cùng thì bánh to trong cùng sẽ không thay đổi nhiều mấy. Nó có nghĩa là việc học của bạn sẽ rất chậm, bạn có thể phải đợi cả tháng, hoặc cả năm trời để luyện nó được như ý.


Kết part 2:

Có rất nhiều cái thú vị về kỹ thuật trên neural network, vì nó liên quan đến thực tế cuộc sống khá nhiều. Ban đầu, tôi tưởng deep network chỉ là một mô hình toán học thuần túy, nhưng không phải vậy. Bạn có thể bất ngờ như tôi khi biết rằng một cơ số các mô hình neural network hiện đại lại xuất phát từ nhà vật lý, một số hiện tượng trong neural network lại không thể giải thích được bằng toán mà phải mướn tới lý thuyết về giấc mơ... thậm chí vài cái còn liên quan tới vật lý lượng tử :]].


(To be continued, pls wait for a miracle)