Điểm sách học sâu Phần I -- deep learning book review Part I

Nhóm DLBookVN gần như đã hoàn thành xong hoàn chỉnh phần I (từ chương 1 đến chương 5) của cuốn sách. Là một người tham gia hiệu chỉnh bản dịch từng câu chữ từ đầu tới cuối, mình thấy có trách nhiệm viết bài điểm sách này để các bạn, trước hết là các bạn trong nhóm DLBookVN, những người chưa có điều kiện tham gia vào cả quá trình, có thể nắm được phần nào nội dung chính, trước khi đi sang những phần sâu hơn. Mình sẽ điểm theo từng chương.

Tất cả thuật ngữ trong bài này không phải do mình nghĩ ra, mà là do cả nhóm DLBookVN thống nhất qua rất nhiều vòng tranh luận.

Chương 1: giới thiệu

Trong chương này tác giả nói tới hai vấn đề chính: độc giả và lịch sử của học sâu.

Những ai là độc giả của cuốn sách: gần như tất cả những người quan tâm đến học sâu, bao gồm cả những người có và không có kiến thức nền tảng về học máy nói riêng và học sâu nói chung. Trong sách tác giả cũng trình bày những loại đối tượng nào thì nên đọc cuốn sách như thế nào. Ví dụ, những người chưa có hoặc có ít nền tảng về các vấn đề của học máy nói chung thì có thể bắt đầu từ phần I (chương 1-5), và sau đó đọc tiếp đến Phần II (chương 6-12). Phần III (chương 13-20) là không bắt buộc với các bạn không quan tâm nhiều đến các vấn đề mang tính chất nghiên cứu. Những người đã có nền tảng về học máy, và muốn tìm hiểu thêm học sâu thì có thể bỏ qua Phần I mà tập trung luôn vào Phần II. Còn những nhà nghiên cứu thì có thể bắt đầu luồn từ Phần III. Chính vì hướng tới đa dạng độc giả, nhưng dung lượng của cuốn sách chỉ có hạn, nên một số chương cuốn sách này không thể viết đầy đủ được. Một số nhà phê bình cho rằng cuốn sách này khá "nông" ở một số phần quan trọng, nhưng bản thân mình nghĩ "it's a feature, not a bug".

Trọng tâm thứ hai của chương này là điểm qua một số động lực và lịch sử của sự phát triển của học sâu. Điều làm học sâu khác biệt so với học máy truyền thống là khả năng tự động học được biểu diễn (representation) của dữ liệu, thay vì sử dụng các biểu diễn thủ công chỉ phù hợp cho từng loại tác vụ cụ thể. Chính khả năng tự học biểu diễn này khiến học sâu có thể tự điều chỉnh khi gặp các tác vụ mới, và cũng chính khả năng này khiến các tác giả dám khẳng định rằng đây là một phương pháp tiếp cận khả thi duy nhất để xây dựng hệ thống AI. Về mặt lịch sử, trái lại những gì ta thường nghe trên báo chí, học sâu được bắt đầu phát triển từ đầu những năm 1940 (hơn 70 năm trước) và đã trả qua ba giai đoạn hưng thịnh chính: điều khiển học (từ 1940-1960), thuyết kết nối (từ 1980-1990) và học sâu (từ 2006 - nay). Có 3 yếu tố chính làm tạo nên sự hưng thình của học sâu trở ngày nay: dữ liệu ngày càng lớn, mô hình ngày càng phức tạp, và độ chính xác của học sâu trên các tác vụ AI ngày càng tăng.

Ngoài ra chương này tác giả cũng bàn luận ngắn gọn một mô hình như thế nào được gọi là "sâu". Ở đây tác giả không cố gắng định nghĩa hình thức thế nào là sâu, mà chỉ nhấn mạnh đến đặc điểm của các mạng sâu là có nhiều tầng.

Bản thân mình cảm nhận đây là một chương thú vị. Các góc nhìn lịch sử của học sâu này rất khó có thể tìm thấy ở những nguồn khác.

Chương 2: đại số tuyến tính

Chương này điểm qua một số vấn đề đại số tuyến tính quan trọng dùng trong học sâu. Điều đó có nghĩa là bạn có thể sẽ không thấy nhiều vấn đề thú vị của đại số tuyến tính ở đây, mà chỉ gặp những vấn đề trọng yếu liên quan đến thực hành học sâu. Vì dung lượng có hạn nên cách các cuốn sách này tiếp cận đại số tuyến tính là nêu khái niệm, một số lý giải khái niệm mang tính trực quan và có thể có ví dụ minh họa đi kèm. Bạn sẽ không tìm thấy định lý, bổ đề hay chứng minh cho một số phát biển quan trọng.

Các tác giả lượt qua các khái niệm như: đại lượng vô hướng, vector, ma trận và tensor. Trọng tâm của chương này là các phép phân tích và xử lí ma trận. Trong số đó, đương nhiên không thể thiếu phân tích ma trận thành các trị riêng và các vector riêng (cho ma trận vuông). Nếu ma trận không vuông, ta có thể thực hiện phân tích các giá trị suy biến. Theo nghĩa nào đó, các giá trị suy biến sẽ tương ứng với các trị riêng, và cho phép ta mở rộng một số thao tác thường áp dụng cho ma trận vuông để áp dụng cho ma trận không vuông. Phân tích giá trị suy biến cho phép tác giả định nghĩa ma trận giả nghịch đảo Moore-Penrose, dùng để "giải" các hệ phương trình tuyến tính có số phương trình nhiều hơn số biến hoặc số biến nhiều hơn số phương trình. Từ "giải" trong ngoặc kép phải được hiểu theo nghĩa đặc biệt, vì các hệ này có thể có vô nghiệm hoặc vô số nghiệm, và các nghiệm tìm được thông qua giải nghịch đảo Moore-Penrose thươngf có tính chất chuẩn của một đại lượng nào đó nhỏ nhất.

Một toán tử của ma trận đặc biệt quan trọng xuất hiện nhiều lần trong chương này là toán tử vết (trace). Vết của một ma trận (vuông) chỉ đơn giản là tổng các phần tử trên đường chéo chính. Mặc dù định nghĩa thì đơn giản vây, nhưng toán tử này cho phép ta thực hiện các phép biến đổi liên quan tới ma trận ngắn gọn hơn và đơn giản hơn, thông qua các hằng đẳng thức của vết.

Cuối cùng tác giả minh họa kiếm thức đề cập đến chương này thông qua phép phân tích thành phần chính (PCA) của ma trận. Tác giả tiếp cận PCA thông qua một pha mã hóa và một pha giải mã. Cả hai thao tác giải mã và mã hóa đều là các hàm tuyến tính. Thành phần chính của ma trận tìm được sau đó chính là thành phần mà quá trình mã hóa và giải mã bị tổn hao thông tin ít nhất (theo chuẩn Frobenius). Bản thân mình cho rằng nhìn PCA qua góc độ mã hóa - giải mã tuyến tính là khá thú vị.

Chương 3: xác suất và lý thuyết thông tin

Chương này chủ yếu nói về xác suất hơn là lý thuyết thông tin, một mảng rất rộng, nhưng có nền tảng dựa nhiều trên xác suất. Tác giả bắt đầu bằng câu hỏi: tại sao học máy nói chung và học sâu nói riêng cần xác suất? Câu trả lời khá đơn giản: xác suất cho phép ta biểu diễn các sự kiện bất đinh, và trong một số trường hợp, cho phép ta biểu diễn các sự kiện tất định một cách đơn giản hơn (ví dụ "chim bay").

Tác giả lượt qua một số khái niệm phổ biến trong lý thuyết xác suất như: biến ngẫu nhiên, biến liên tục và biến rời rạc, hàm khối xác suất và hàm mật độ xác suất, xác suất biên, xác suất có điều kiện, quy tắc Bayes, độc lập và độc lập có điều kiện, kì vọng, phương sai. Ở đây có một điểm mà rất nhiều người mới học hay nhầm lẫn giữa biến liên tục và rời rạc: hàm khối xác suất (cho biến rời rạc) và hàm mật độ xác suất (cho biến liên tục) bản chất hoàn toàn khác nhau. Mật độ xác suất tại một số điểm có thể lớn hơn 1, thậm chí là bằng dương vô cùng (đối với mật độ định nghĩa thông qua hàm delta Dirac), trong khi khối xác suất tại tại mọi điểm (rời rạc) luôn thuộc [0,1].

Tác giả cũng lượt qua mốt số phân bố xác suất phổ biến thường gặp trong học máy như Bernoulli, phạm trù, chuẩn, mũ, Laplace, và hỗn hợp các phân phối.

Cuối cùng tác giả dành một số rất ít dung lượng để nói về lý thuyết thông tin, mà trọng tâm là độ phân kỳ Kullback-Leibler (KL). Một điểm yếu nối tiểng nhất của độ phần kỳ KL là nó không đối xứng (nên người ta gọi nó là độ phân kỳ KL thay vì khoảng cách KL). Bài toán thường thấy trong học máy là: tìm một xác suất phân phối $P(x)$ gần với phân phối $Q(x)$. Tất nhiên để giải bài toán này ta phải có một độ đó để đo xem $P(x)$ gần $Q(x)$ thế nào. Độ phân kỳ KL là một độ đo như vậy. Nhưng $ KL(P||Q)$ khác với $KL(Q,P)$ do tính bất đối xứng. Vậy sự khác nhau giữa $ KL(P||Q)$ và $ KL(Q||P)$ là gì? Hình 3.6 minh họa điều này một cách rất đẹp. Mình thực sự ấn tượng với minh họa này, và không nhiều nguồn nhắc tới sự khác nhau này. Tất cả những gì bạn cần phải nhớ về lý thuyết thông tin trong chương này chính là hình 3.6.

Chương 4: tính toán số

Trong chương này tác giả nêu ra một số vấn đề chú ý khi thực hiện tính toán với các con số trên máy tính. Như đã biết, máy tính biểu diễn các số liên tục bằng các bít rời rạc, do đó nó chỉ có thể biểu diễn tập số thực một cách xấp xỉ. Cụ thể là chỉ có một số hữu hạn các con số trong một tập vô hạn (không đếm được) là được biểu diễn. Các con số không thể biểu diễn được, bằng cách này hay cách khác, ta sẽ phải làm tròn nó về một số được biểu diễn. Chính điều này gây ra rất nhiều vấn đề thực thi, mà dễ thấy nhất là hiện tượng tràn luồng và thấp luồng. Sau này bạn đọc sẽ thấy các hàm như mũ và logarit rất hay được sử dụng trong sách. Các hàm như vậy rất dễ bị tràn luồng hay thấp luồng khi thực thi.

Một vấn đề khác do làm tròn gây ra là lỗi tính toán xảy ra đối với các ma trận có hệ số điều hòa (condition number) lớn. Xét hàm $f(x) = A^{-1}x$, ở đây $A$ là một ma trận và $x$ là một vector. Nếu $A$ có hệ số điều hòa lớn, thì chỉ một thay đổi rất nhỏ của $x$ (do làm tròn chẳng hạn), cũng làm cho $f(.)$ thay đổi một lượng rất lớn.

Chương này cũng nói qua về tối ưu hóa, mà thuật toán phổ biến là trượt gradient. Trượt gradient là một thuật toán rất đơn giản: để tìm giá trị nhỏ nhất của một hàm $f(x)$ đa biến, ta chỉ cần tính gradient của $f(x)$, gọi là $g(x)$, và thay đổi $x$ một lượng $\epsilon g(x)$ ngược theo hướng của gradient. Trượt gradient chính là chìa khóa cho sự thành công của học sâu hiện đại. Các tác giả sau đó cũng nói sơ qua về phương pháp bậc hai sử dụng ma trận Hesse. Bản thân mình thì thấy phương pháp này mang tính chất tham khảo là chính, vì tính ma trận Hesse rất tốn thời gian và bộ nhớ, không phù hợp với dữ liệu lớn.

Cuối cùng, chương này minh họa bài toán bình phương cực tiểu tuyến tính: tìm một vector $x$ sao cho $||Ax-b||_2$ là nhỏ nhất, ở đây $A$ là một ma trận và $b$ là một vector. Cuốn sách đưa ra hai hướng tiếp cận: (1) sử dụng trượt gradient và (2) giải hệ phương trình tuyến tính, tìm $x$ để gradient bằng 0.

Chương 5: học máy cơ bản

Chương này là chương dài nhất trong Phần I, những cùng là chương mình cảm thấy có mức độ nén kiến thức cao nhất. Tác giả cố gắng lượt lại các vấn đề nổi cộm của học máy truyến thống chỉ vẻn vẹn trong 60 trang. Nhưng đó cũng là điểm mạnh trong chương này: các vấn đề nêu ra thực sự là trọng tâm cần chú ý. Kể cả khi bạn có kiến thức học máy vững chắc, đọc chương này có lẽ bạn cũng sẽ học được điều gì đó.

Chương này bắt đầu bằng một định nghĩa thế nào là một thuật toán học máy thông qua 3 thành phần chính: một tác vụ T, một độ đo hiệu năng P, và kinh nghiệm E. Khác với thuật toán thông thường, chỉ đơn giản có đầu vào và đầu ra và một chương trình biến đổi từ đầu vào đến đầu ra, thuật toán học máy khi thực hiện tác vụ T, được đo bằng phương pháp P, thì hiệu năng phải được cải thiện với kinh nghiệm được rút ra từ E. Điều này ngụ ý, trong thực hành học máy, trước khi thực hiện tìm hiểu cụ thể thuật toán học máy ta phải làm rõ 3 điều: tác vụ ta đang thực hiện là gì (thường điều này không khó), phương pháp ta sẽ dùng để đo hiệu năng là gì (trong rất nhiều trường hợp đây là bài toán không tầm thường), và kinh nghiệm, hay dữ liệu ta dùng để học là gì (đây có thể coi là vấn đề khó nhất, không có dữ liệu thì không có học máy). Các tác giả minh họa cà 3 thành phần này thông qua một thuật toán khá đơn giản: hồi quy tuyến tính.

Tiếp theo chương này bàn về 3 vấn đề trọng tâm của một thuật toán học: dung lượng (capacity), quá khớp (overfitting) và vị khớp (underfitting). Để học một hàm phức tạp từ dữ liệu, ta cần một mô hình có dung lượng đủ lớn. Tuy nhiên, nếu dung lượng lớn quá thì mô hình thu được lại dễ bị quá khớp, có nghĩa là sai số huấn luyện sẽ nhỏ, nhưng sai số kiểm tra sẽ lớn. Ngược lại, nếu mô hình có dung lượng quá nhỏ, thì khả năng nó sẽ không khớp được dữ liệu và do đó, không chỉ sai số kiểm tra lớn mà sai số huấn luyện cũng sẽ lớn. Làm sao để điều hòa được dung lượng, quá khớp và vị khớp là một vấn đề làm đau đầu các nhà nghiên cứu học máy nhiều năm nay, không chỉ là vấn đề của học sâu. Một phương pháp thường được áp dụng để giải quyết vấn đề này là: chọn một mô hình có dung lượng lớn, và sử dụng các cơ chế kiểm soát (regularization) để mô hình đầu ra không quá phức tạp, mà vẫn khớp được dữ liệu. Kiểm soát chính là chìa khóa để giải quyết vấn đề quá khớp, đặc biệt là trong huấn luyện các mạng neuron ngày nay.

Một vấn đề cần phải chú ý trong thực hành học sâu là cách thức ta chọn siêu tham số. Siêu tham số gần như xuất hiện trong mọi mô hình, và nó là tham số mà ta không thể học được từ dữ liệu. Thường ta tách dữ liệu thành một tập huấn luyện và một tập kiểm tra, nhưng tập kiểm tra không được phép liên quan đến chọn bất kì tham số nào của mô hình, kể cả siêu tham số. Do đó ta cần phải phân tập huấn luyện ra thành một tập khác nữa, gọi là tập xác thực, chỉ dùng để chọn siêu tham số. Trong thực tế, nếu dữ liệu quá nhỏ thì ta không thể chia dữ liệu thành các phần như thế được. Khi đó ta sẽ dùng kĩ thuật kiểm chứng chéo (cross validation).

Nói đến học máy không thể không nói đến vai trò của thống kê. Về cơ bản, để một thuật toán có thể dự đoán tốt trên dữ liệu mà nó chưa bao giờ "nhìn" thấy, ta cần phải giả sử dữ liệu đó được sinh ra cùng một phân phối xác suất của dữ liệu huấn luyện. Nếu không thì không có một thuật toán nào có thể học được. Hai khái niệm: độ chệch (bias) và phương sai (variance) được nhắc đến như là hai khá niệm trung tâm. Điều thú vị là, sai số bình phương trung bình (MSE) lại có thể được phân tách thành hai số hạng: một liên quan đến độ chệch và một liên quan tới phương sai. Tối thiểu hóa MSE cuốn cùng lại thành ra tối thiểu độ chệch và phương sai.

Tất nhiên, đã nói đến ược lượng thống kê thì lại không thể bỏ qua phương pháp ước lượng hợp lý tối đa (maximum likelihood estimation). Nguyên lý này, nói một cách nôm na, là tìm một tham số sao cho xác suất dữ liệu ta quan sát được sinh ra là lớn nhất. Phương pháp này có thể nói là thấy ở mọi nơi, bất kì chỗ nào có ước lượng thống kê liên quan. Phần này tác giả cũng đưa ra một mối liên hệ thú vị: tiêu chuẩn MSE nhỏ nhất trong bài toán hồi quy tuyến tính tương đương với ước lượng hợp lý tối đa, khi ta giả sử dữ liệu được sinh ra từ một phân phối Gauss.

Chương này cũng lượt qua một số thuật toán cơ bản trong học có giám sát (supervised learning) và học không giám sát (unsupervised learning). Đại diện cho học có giám sát là máy vector hõ trợ (SVM), học xác suất, và cây quyết đinh. Đại diên cho học không giám sát là phân tích thành phần chính và phân cụm $k$-means.

Tác giả cũng thảo luận ngắn gọn công thức chung cho một thuật toán học máy: tập dữ liệu, hàm mất mát, thuật toán tối ưu hóa và một mô hình. Chỉ bằng cách thay đổi một trong 4 thành phần trên, ta sẽ thu được một thuật toán học máy khác.

Cuối cùng chương này thảo luận các thách thức đã thúc đẩy sự phát triển của học sâu: (1) hiểm họa số chiều lớn (the curse of dimentionality), (2) tính bất biến cục bộ và cơ chế kiểm soát độ trơn và (3) học đa tạp. Học đa tạp là một phương pháp rất tiềm năng để giải quyết hiểm họa số chiều lớn, và học sâu ít nhiều có thể coi là thuật toán giải quyết bài toán học đa tạp khá thành công.

Facebook Comments
  1. Manh Nguyen’s avatar

    cảm ơn anh và nhóm.

    Reply

Reply

Your email address will not be published. Required fields are marked *