Jewel Nguyen
Active Member
- 3,977
- 3,988
Giới thiệu từ nhóm dịch
Mục tiêu của dự án
Trong những năm gần đây, học sâu là một trong các lĩnh vực được quan tâm nhiều nhất trong các trường Đại học cũng như các Công ty Công nghệ. Ngày càng nhiều các diễn đàn liên quan đến học máy và học sâu với lượng thành viên và chủ đề trao đổi ngày một tăng. Một trong các diễn đàn tiếng Việt nổi bật nhất là Forum Machine Learning cơ bản và Diễn đàn Machine Learning cơ bản với hơn 43.800 thành viên và hàng chục chủ đề mới mỗi ngày.
Qua các diễn đàn đó, chúng tôi nhận ra rằng nhu cầu tìm hiểu lĩnh vực này ngày một tăng trong khi lượng tài liệu tiếng Việt còn rất hạn chế. Đặc biệt, các tài liệu tiếng Việt còn chưa nhất quán trong cách dịch, khiến độc giả bối rối trước quá nhiều thông tin nhưng lại quá ít thông tin đầy đủ. Việc này thúc đẩy chúng tôi tìm và dịch những cuốn sách được quan tâm nhiều về lĩnh vực này.
Nhóm dịch đã bước đầu thành công khi dịch cuốn Machine Learning Yearning của tác giả Andrew Ng. Cuốn sách này đề cập đến các vấn đề cần lưu ý khi xây dựng các hệ thống học máy, trong đó đề cập đến nhiều kiến thức thực tế khi thực hiện dự án. Tuy nhiên, cuốn sách này phần nào hướng tới những người đã có những kinh nghiệm nhất định đã đang tham gia các dự án học máy. Chúng tôi vẫn khao khát được mang một tài liệu đầy đủ hơn với đủ kiến thức toán nền tảng, cách triển khai các công thức toán bằng mã nguồn, cùng với cách triển khai một hệ thống thực tế trên một nền tảng học sâu được nhiều người sử dụng. Và quan trọng hơn, các kiến thức này phải cập nhật các xu hướng học máy mới nhất.
Sau nhiều ngày tìm kiếm các cuốn sách về học máy/học sâu được các trường đại học lớn trên thế giới sử dụng trong quá trình giảng dạy, chúng tôi quyết định dịch cuốn Dive into Deep Learning của nhóm tác giả từ công ty Amazon. Cuốn này hội tụ đủ các yếu tố: có giải thích toán dễ hiểu, có code đi kèm cho những bạn muốn thực hành ngay khi học xong lý thuyết, cập nhật đầy đủ những khía cạnh của học sâu, và quan trọng nhất là không đòi hỏi bản quyền để dịch. Chúng tôi đã liên hệ với nhóm tác giả và họ rất vui mừng khi cuốn sách sắp được phổ biến rộng rãi hơn nữa.
Hiện cuốn sách vẫn đang được thực hiện và cập nhật nội dụng dựa trên phiên bản 0.14.0 mới nhất. Chúng tôi cũng chọn bản này vì nó sử dụng thư viện chính là numpy (tích hợp trong MXNet), một thư viện xử lý mảng nhiều chiều phổ biến mà theo chúng tôi, người làm về học máy, học sâu và khoa học dữ liệu cần biết. Và chúng tôi cũng đang cập nhật dần những thư viện khác như Pytorch và TensorFlow vào nhằm đa dạng hóa lựa chọn hơn cho độc giả.
Để có thể thực hiện dự án dịch cuốn sách gần 1.000 trang này, chúng tôi rất cần sự chung tay từ cộng đồng. Mọi sự đóng góp đều đáng trân quý và được ghi nhận. Chúng tôi hy vọng cuốn sách sẽ được hoàn thành trong năm 2020. Và sau đó nó có thể trở thành giáo trình trong các trường đại học.
Lời nói đầu
Chỉ một vài năm trước, không có nhiều nhà khoa học học sâu (deep learning) phát triển các sản phẩm và dịch vụ thông minh tại các công ty lớn cũng như các công ty khởi nghiệp. Khi người trẻ nhất trong nhóm tác giả chúng tôi tiến vào lĩnh vực này, học máy (machine learning) còn chưa xuất hiện thường xuyên trên truyền thông. Cha mẹ chúng tôi còn không có ý niệm gì về học máy chứ chưa nói đến việc hiểu tại sao chúng tôi theo đuổi lĩnh vực này thay vì y khoa hay luật khoa. Học máy từng là một lĩnh vực nghiên cứu tiên phong với chỉ một số lượng nhỏ các ứng dụng thực tế. Những ứng dụng như nhận dạng giọng nói (speech recognition) hay thị giác máy tính (computer vision), đòi hỏi quá nhiều kiến thức chuyên biệt khiến chúng thường được phân thành các lĩnh vực hoàn toàn riêng mà trong đó học máy chỉ là một thành phần nhỏ. Các mạng nơ-ron (neural network), tiền đề của các mô hình học sâu mà chúng ta tập trung vào trong cuốn sách này, đã từng bị coi là các công cụ lỗi thời.
Chỉ trong khoảng năm năm gần đây, học sâu đã mang đến nhiều bất ngờ trên quy mô toàn cầu và dẫn đường cho những tiến triển nhanh chóng trong nhiều lĩnh vực khác nhau như thị giác máy tính, xử lý ngôn ngữ tự nhiên (natural language processing), nhận dạng giọng nói tự động (automatic speech recognition), học tăng cường (reinforcement learning), và mô hình hoá thống kê (statistical modeling). Với những tiến bộ này, chúng ta bây giờ có thể xây dựng xe tự lái với mức độ tự động ngày càng cao (nhưng chưa nhiều tới mức như vài công ty đang tuyên bố), xây dựng các hệ thống giúp trả lời thư tự động khi con người ngập trong núi email, hay lập trình phần mềm chơi cờ vây có thể thắng cả nhà vô địch thế giới, một kỳ tích từng được xem là không thể đạt được trong nhiều thập kỷ tới. Những công cụ này đã và đang gây ảnh hưởng rộng rãi tới các ngành công nghiệp và đời sống xã hội, thay đổi cách tạo ra các bộ phim, cách chẩn đoán bệnh và đóng một vài trò ngày càng tăng trong các ngành khoa học cơ bản – từ vật lý thiên văn tới sinh học.
Về cuốn sách này
Cuốn sách này được viết với mong muốn làm cho học sâu dễ tiếp cận hơn. Nó sẽ dạy bạn từ khái niệm, bối cảnh, cho tới cách lập trình.
Một phương tiện truyền tải kết hợp Mã nguồn, Toán, và HTML
Để một công nghệ điện toán đạt được tầm ảnh hưởng sâu rộng, nó phải dễ hiểu, có tài liệu đầy đủ, và được hỗ trợ bởi nhưng công cụ cấp tiến được “bảo trì” thường xuyên. Các ý tưởng chính cần được chắt lọc rõ ràng, tối thiểu thời gian chuẩn bị cần thiết cho người mới bắt đầu để họ có thể trang bị các kiến thức đương thời. Các thư viện cấp tiến nên tự động hoá các tác vụ đơn giản, và các đoạn mã nguồn được lấy làm ví dụ cần phải đơn giản với những người mới bắt đầu sao cho họ có thể dễ dàng chỉnh sửa, áp dụng, và mở rộng những ứng dụng thông thường thành các ứng dụng họ cần. Lấy ứng dụng các trang web động làm ví dụ. Mặc dù các công ty công nghệ lớn như Amazon phát triển thành công các ứng dụng web định hướng bởi cơ sở dữ liệu từ những năm 1990, tiềm năng của công nghệ này để hỗ trợ các doanh nghiệp sáng tạo chỉ được nhân rộng lên ở một tầm cao mới từ khoảng mười năm nay, nhờ vào sự phát triển của các nền tảng mạnh mẽ và với tài liệu đầy đủ.
Kiểm định tiềm năng của học sâu có những thách thức riêng biệt vì bất kỳ ứng dụng riêng lẻ nào cũng bao gồm nhiều lĩnh vực khác nhau. Ứng dụng học sâu đòi hỏi những hiểu biết đồng thời về (i) động lực để mô hình hoá một bài toán theo một hướng cụ thể; (ii) kiến thức toán học của một phương pháp mô hình hoá; (iii) những thuật toán tối ưu để khớp mô hình với dữ liệu; và (iv) phần kỹ thuật yêu cầu để huấn luyện mô hình một cách hiệu quả, xử lý những khó khăn trong tính toán và tận dụng thật tốt phần cứng hiện có. Việc đào tạo kỹ năng suy nghĩ thấu đáo cần thiết để định hình bài toán, cung cấp kiến thức toán để giải chúng, và hướng dẫn cách dùng các công cụ phần mềm để triển khai những giải pháp đó, tất cả trong một nơi, hàm chứa nhiều thách thức lớn. Mục tiêu của chúng tôi trong cuốn sách này là trình bày một nguồn tài liệu tổng hợp giúp những học viên nhanh chóng bắt kịp.
Chúng tôi bắt đầu dự án sách này từ tháng 7/2017 khi cần trình bày giao diện MXNet Gluon (khi đó còn mới) tới người dùng. Tại thời điểm đó, không có một nguồn tài liệu nào vừa đồng thời (i) cập nhật; (ii) bao gồm đầy đủ các khía cạnh của học máy hiện đại với đầy đủ chiều sâu kỹ thuật; và (iii) xem kẽ các giải trình mà người ta mong đợi từ một cuốn sách giáo trình với mã nguồn có thể thực thi, điều thường được tìm thấy trong các bài hướng dẫn thực hành. Chúng tôi tìm thấy một lượng lớn các đoạn mã ví dụ về việc sử dụng một nền tảng học sâu (ví dụ làm thế nào để thực hiện các phép toán cơ bản với ma trận trên TensorFlow) hoặc để triển khai những kỹ thuật cụ thể (ví dụ các đoạn mã cho LeNet, AlexNet, ResNet,…) trong các bài blog hoặc là trên GitHub. Tuy nhiên, những ví dụ này thường tập trung vào khía cạnh làm thế nào để triển khai một hướng tiếp cận cho trước, mà bỏ qua việc thảo luận tại sao một thuật toán được tạo như thế. Nhiều chủ đề đã được đề cập đến trong các bài blog, ví dụ như trang Distill hoặc các trang cá nhân, chúng thường chỉ đề cập đến một vài chủ đề được chọn về học sâu và thường thiếu mã nguồn đi kèm. Một mặt khác, trong khi nhiều sách giáo trình đã ra đời, đáng chú ý nhất là [Goodfellow et al., 2016] (cuốn này cung cấp một bản khảo sát xuất sắc về các khái niệm phía sau học sâu), những nguồn tài liệu này lại không đi kèm với việc diễn giải dưới dạng mã nguồn để làm rõ hơn các khái niệm. Điều này khiến người đọc đôi khi mơ hồ về cách thực thi chúng. Bên cạnh đó, rất nhiều tài liệu lại được cung cấp dưới dạng các khoá học có phí.
Chúng tôi đặt mục tiêu tạo ra một tài liệu mà có thể (1) miễn phí cho mọi người; (2) cung cấp chiều sâu kỹ thuật đầy đủ, là điểm khởi đầu trên con đường trở thành một nhà khoa học học máy ứng dụng; (3) bao gồm mã nguồn thực thi được, trình bày cho người đọc làm thế nào giải quyết các bài toán trên thực tế; (4) tài liệu này có thể cập nhật một cách nhanh chóng bởi các tác giả cũng như cộng động ở quy mô lớn; và (5) được bổ sung bởi một diễn đàn (và diễn đàn tiếng Việt của nhóm dịch) để nhanh chóng thảo luận và hỏi đáp về các chi tiết kỹ thuật.
Các mục tiêu này thường không tương thích với nhau. Các công thức, định lý, và các trích dẫn được quản lý tốt nhất trên LaTex. Mã được giải thích tốt nhất bằng Python. Và trang web phù hợp với HTML và JavaScript. Hơn nữa, chúng tôi muốn nội dung của nó vừa có thể được truy cập dưới dạng mã nguồn có thể thực thi, vừa có thể tải về như một cuốn sách dưới định dạng PDF, và lại ở trên internet như một trang web. Hiện tại không có một công cụ nào là hoàn hảo cho những nhu cầu này, bởi vậy chúng tôi phải tự tạo công cụ cho riêng mình. Chúng tôi mô tả hướng tiếp cận một cách chi tiết trong chapter_contribute. Chúng tôi tổ chức dự án trên GitHub để chia sẻ mã nguồn và cho phép sửa đổi, Jupyter notebook để kết hợp đoạn mã, phương trình toán và nội dung chữ, sử dụng Sphinx như một bộ máy tạo nhiều tập tin đầu ra, và Discourse để tạo diễn đàn. Trong khi hệ thống này còn chưa hoàn hảo, những lựa chọn này cung cấp một giải pháp chấp nhận được trong số các giải pháp tương tự. Chúng tôi tin rằng đây có thể là cuốn sách đầu tiên được xuất bản dưới dạng kết hợp này.
Học thông qua thực hành
Có nhiều cuốn sách dạy rất chi tiết về một chuỗi các chủ đề khác nhau. Ví dụ như trong cuốn sách tuyệt vời [Bishop, 2006] này của Bishop, mỗi chủ đề được dạy rất kỹ lưỡng tới nỗi để đến được chương hồi quy tuyến tính cũng đòi hỏi không ít công sức phải bỏ ra. Các chuyên gia yêu thích quyển sách này chính vì sự kỹ lưỡng mà nó mang lại, nhưng với những người mới bắt đầu thì đây là điểm hạn chế việc sử dụng cuốn sách này như một tài liệu nhập môn.
Trong cuốn sách này, chúng tôi sẽ dạy hầu hết các khái niệm ở mức vừa đủ. Hay nói cách khác, bạn sẽ chỉ học và hiểu các khái niệm cần thiết đủ để bạn hoàn tất phần thực hành. Trong khi chúng tôi sẽ dành một chút thời gian để dạy kiến thức căn bản sơ bộ như đại số tuyến tính và xác suất, chúng tôi muốn các bạn được tận hưởng cảm giác mãn nguyện của việc huấn luyện được mô hình đầu tiên trước khi bận tâm tới các lý thuyết phân phối xác suất.
Bên cạnh một vài notebook cơ bản cung cấp một khoá học cấp tốc về nền tảng toán học, mỗi chương tiếp theo sẽ giới thiệu một lượng hợp lý các khái niệm mới và đồng thời cung cấp các ví dụ đơn hoàn chỉnh—sử dụng các tập dữ liệu thực tế. Và đây là cả thách thức về cách tổ chức nội dung. Một vài mô hình có thể được nhóm lại một cách có logic trong một notebook riêng lẻ. Và một vài ý tưởng có thể được dạy tốt nhất bằng cách thực thi một số mô hình kế tiếp nhau. Mặt khác, có một lợi thế lớn về việc tuân thủ theo chính sách mỗi notebook là một ví dụ hoàn chỉnh: Điều này giúp bạn bắt đầu các dự án nghiên cứu của mình một cách dễ dàng nhất có thể bằng cách tận dụng mã nguồn của chúng tôi. Bạn chỉ cần sao chép một notebook và bắt đầu sửa đổi ở trên đó.
Chúng tôi sẽ xen kẽ mã nguồn có thể thực thi với kiến thức nền tảng khi cần thiết. Thông thường, chúng tôi sẽ tập trung vào việc tạo ra những công cụ trước khi giải thích chúng đầy đủ (và chúng tôi sẽ theo sát bằng cách giải thích phần kiến thức nền tảng sau). Ví dụ, chúng tôi có thể sử dụng hạ gradient ngẫu nhiên trước khi giải thích đầy đủ tại sao nó lại hữu ích hoặc tại sao nó lại hoạt động. Điều này giúp cung cấp cho người thực hành những phương tiện cần thiết để giải quyết vấn đề nhanh chóng và đòi hỏi người đọc phải tin tưởng vào một số quyết định triển khai của chúng tôi.
Xuyên suốt cuốn sách, chúng ta sẽ làm việc với thư viện MXNet; đây là một thư viện với một đặc tính hiếm có, đó là vừa đủ linh hoạt để nghiên cứu và đủ nhanh để tạo ra sản phẩm. Cuốn sách này sẽ dạy về khái niệm học sâu từ đầu. Thỉnh thoảng, chúng tôi sẽ muốn đào sâu hơn vào những chi tiết về mô hình mà thông thường sẽ được che giấu khỏi người dùng bởi những lớp trừu tượng bậc cao Gluon. Điều này đặc biệt hay xuất hiện trong các hướng dẫn cơ bản, nơi chúng tôi muốn bạn hiểu về tất cả mọi thứ đang diễn ra trong một tầng hoặc bộ tối ưu nào đó. Trong những trường hợp này, chúng tôi sẽ thường trình bày hai phiên bản của một ví dụ: một phiên bản trong đó chúng tôi hiện thực mọi thứ từ đầu, chỉ dựa vào giao diện Numpy và việc tính đạo hàm tự động; và một phiên bản khác thực tế hơn, khi chúng tôi viết mã ngắn gọn sử dụng Gluon. Một khi chúng tôi đã dạy bạn cách một số thành phần hoạt động cụ thể như thế nào, chúng tôi có thể chỉ sử dụng phiên bản Gluon trong những hướng dẫn tiếp theo.
Nội dung và Bố cục
Cuốn sách này có thể được chia thành ba phần, với các phần được thể hiện bởi những màu khác nhau trong Fig. 2:
Fig. 2 Bố cục cuốn sách
Mục tiêu của dự án
Trong những năm gần đây, học sâu là một trong các lĩnh vực được quan tâm nhiều nhất trong các trường Đại học cũng như các Công ty Công nghệ. Ngày càng nhiều các diễn đàn liên quan đến học máy và học sâu với lượng thành viên và chủ đề trao đổi ngày một tăng. Một trong các diễn đàn tiếng Việt nổi bật nhất là Forum Machine Learning cơ bản và Diễn đàn Machine Learning cơ bản với hơn 43.800 thành viên và hàng chục chủ đề mới mỗi ngày.
Qua các diễn đàn đó, chúng tôi nhận ra rằng nhu cầu tìm hiểu lĩnh vực này ngày một tăng trong khi lượng tài liệu tiếng Việt còn rất hạn chế. Đặc biệt, các tài liệu tiếng Việt còn chưa nhất quán trong cách dịch, khiến độc giả bối rối trước quá nhiều thông tin nhưng lại quá ít thông tin đầy đủ. Việc này thúc đẩy chúng tôi tìm và dịch những cuốn sách được quan tâm nhiều về lĩnh vực này.
Nhóm dịch đã bước đầu thành công khi dịch cuốn Machine Learning Yearning của tác giả Andrew Ng. Cuốn sách này đề cập đến các vấn đề cần lưu ý khi xây dựng các hệ thống học máy, trong đó đề cập đến nhiều kiến thức thực tế khi thực hiện dự án. Tuy nhiên, cuốn sách này phần nào hướng tới những người đã có những kinh nghiệm nhất định đã đang tham gia các dự án học máy. Chúng tôi vẫn khao khát được mang một tài liệu đầy đủ hơn với đủ kiến thức toán nền tảng, cách triển khai các công thức toán bằng mã nguồn, cùng với cách triển khai một hệ thống thực tế trên một nền tảng học sâu được nhiều người sử dụng. Và quan trọng hơn, các kiến thức này phải cập nhật các xu hướng học máy mới nhất.
Sau nhiều ngày tìm kiếm các cuốn sách về học máy/học sâu được các trường đại học lớn trên thế giới sử dụng trong quá trình giảng dạy, chúng tôi quyết định dịch cuốn Dive into Deep Learning của nhóm tác giả từ công ty Amazon. Cuốn này hội tụ đủ các yếu tố: có giải thích toán dễ hiểu, có code đi kèm cho những bạn muốn thực hành ngay khi học xong lý thuyết, cập nhật đầy đủ những khía cạnh của học sâu, và quan trọng nhất là không đòi hỏi bản quyền để dịch. Chúng tôi đã liên hệ với nhóm tác giả và họ rất vui mừng khi cuốn sách sắp được phổ biến rộng rãi hơn nữa.
Hiện cuốn sách vẫn đang được thực hiện và cập nhật nội dụng dựa trên phiên bản 0.14.0 mới nhất. Chúng tôi cũng chọn bản này vì nó sử dụng thư viện chính là numpy (tích hợp trong MXNet), một thư viện xử lý mảng nhiều chiều phổ biến mà theo chúng tôi, người làm về học máy, học sâu và khoa học dữ liệu cần biết. Và chúng tôi cũng đang cập nhật dần những thư viện khác như Pytorch và TensorFlow vào nhằm đa dạng hóa lựa chọn hơn cho độc giả.
Để có thể thực hiện dự án dịch cuốn sách gần 1.000 trang này, chúng tôi rất cần sự chung tay từ cộng đồng. Mọi sự đóng góp đều đáng trân quý và được ghi nhận. Chúng tôi hy vọng cuốn sách sẽ được hoàn thành trong năm 2020. Và sau đó nó có thể trở thành giáo trình trong các trường đại học.
Lời nói đầu
Chỉ một vài năm trước, không có nhiều nhà khoa học học sâu (deep learning) phát triển các sản phẩm và dịch vụ thông minh tại các công ty lớn cũng như các công ty khởi nghiệp. Khi người trẻ nhất trong nhóm tác giả chúng tôi tiến vào lĩnh vực này, học máy (machine learning) còn chưa xuất hiện thường xuyên trên truyền thông. Cha mẹ chúng tôi còn không có ý niệm gì về học máy chứ chưa nói đến việc hiểu tại sao chúng tôi theo đuổi lĩnh vực này thay vì y khoa hay luật khoa. Học máy từng là một lĩnh vực nghiên cứu tiên phong với chỉ một số lượng nhỏ các ứng dụng thực tế. Những ứng dụng như nhận dạng giọng nói (speech recognition) hay thị giác máy tính (computer vision), đòi hỏi quá nhiều kiến thức chuyên biệt khiến chúng thường được phân thành các lĩnh vực hoàn toàn riêng mà trong đó học máy chỉ là một thành phần nhỏ. Các mạng nơ-ron (neural network), tiền đề của các mô hình học sâu mà chúng ta tập trung vào trong cuốn sách này, đã từng bị coi là các công cụ lỗi thời.
Chỉ trong khoảng năm năm gần đây, học sâu đã mang đến nhiều bất ngờ trên quy mô toàn cầu và dẫn đường cho những tiến triển nhanh chóng trong nhiều lĩnh vực khác nhau như thị giác máy tính, xử lý ngôn ngữ tự nhiên (natural language processing), nhận dạng giọng nói tự động (automatic speech recognition), học tăng cường (reinforcement learning), và mô hình hoá thống kê (statistical modeling). Với những tiến bộ này, chúng ta bây giờ có thể xây dựng xe tự lái với mức độ tự động ngày càng cao (nhưng chưa nhiều tới mức như vài công ty đang tuyên bố), xây dựng các hệ thống giúp trả lời thư tự động khi con người ngập trong núi email, hay lập trình phần mềm chơi cờ vây có thể thắng cả nhà vô địch thế giới, một kỳ tích từng được xem là không thể đạt được trong nhiều thập kỷ tới. Những công cụ này đã và đang gây ảnh hưởng rộng rãi tới các ngành công nghiệp và đời sống xã hội, thay đổi cách tạo ra các bộ phim, cách chẩn đoán bệnh và đóng một vài trò ngày càng tăng trong các ngành khoa học cơ bản – từ vật lý thiên văn tới sinh học.
Về cuốn sách này
Cuốn sách này được viết với mong muốn làm cho học sâu dễ tiếp cận hơn. Nó sẽ dạy bạn từ khái niệm, bối cảnh, cho tới cách lập trình.
Một phương tiện truyền tải kết hợp Mã nguồn, Toán, và HTML
Để một công nghệ điện toán đạt được tầm ảnh hưởng sâu rộng, nó phải dễ hiểu, có tài liệu đầy đủ, và được hỗ trợ bởi nhưng công cụ cấp tiến được “bảo trì” thường xuyên. Các ý tưởng chính cần được chắt lọc rõ ràng, tối thiểu thời gian chuẩn bị cần thiết cho người mới bắt đầu để họ có thể trang bị các kiến thức đương thời. Các thư viện cấp tiến nên tự động hoá các tác vụ đơn giản, và các đoạn mã nguồn được lấy làm ví dụ cần phải đơn giản với những người mới bắt đầu sao cho họ có thể dễ dàng chỉnh sửa, áp dụng, và mở rộng những ứng dụng thông thường thành các ứng dụng họ cần. Lấy ứng dụng các trang web động làm ví dụ. Mặc dù các công ty công nghệ lớn như Amazon phát triển thành công các ứng dụng web định hướng bởi cơ sở dữ liệu từ những năm 1990, tiềm năng của công nghệ này để hỗ trợ các doanh nghiệp sáng tạo chỉ được nhân rộng lên ở một tầm cao mới từ khoảng mười năm nay, nhờ vào sự phát triển của các nền tảng mạnh mẽ và với tài liệu đầy đủ.
Kiểm định tiềm năng của học sâu có những thách thức riêng biệt vì bất kỳ ứng dụng riêng lẻ nào cũng bao gồm nhiều lĩnh vực khác nhau. Ứng dụng học sâu đòi hỏi những hiểu biết đồng thời về (i) động lực để mô hình hoá một bài toán theo một hướng cụ thể; (ii) kiến thức toán học của một phương pháp mô hình hoá; (iii) những thuật toán tối ưu để khớp mô hình với dữ liệu; và (iv) phần kỹ thuật yêu cầu để huấn luyện mô hình một cách hiệu quả, xử lý những khó khăn trong tính toán và tận dụng thật tốt phần cứng hiện có. Việc đào tạo kỹ năng suy nghĩ thấu đáo cần thiết để định hình bài toán, cung cấp kiến thức toán để giải chúng, và hướng dẫn cách dùng các công cụ phần mềm để triển khai những giải pháp đó, tất cả trong một nơi, hàm chứa nhiều thách thức lớn. Mục tiêu của chúng tôi trong cuốn sách này là trình bày một nguồn tài liệu tổng hợp giúp những học viên nhanh chóng bắt kịp.
Chúng tôi bắt đầu dự án sách này từ tháng 7/2017 khi cần trình bày giao diện MXNet Gluon (khi đó còn mới) tới người dùng. Tại thời điểm đó, không có một nguồn tài liệu nào vừa đồng thời (i) cập nhật; (ii) bao gồm đầy đủ các khía cạnh của học máy hiện đại với đầy đủ chiều sâu kỹ thuật; và (iii) xem kẽ các giải trình mà người ta mong đợi từ một cuốn sách giáo trình với mã nguồn có thể thực thi, điều thường được tìm thấy trong các bài hướng dẫn thực hành. Chúng tôi tìm thấy một lượng lớn các đoạn mã ví dụ về việc sử dụng một nền tảng học sâu (ví dụ làm thế nào để thực hiện các phép toán cơ bản với ma trận trên TensorFlow) hoặc để triển khai những kỹ thuật cụ thể (ví dụ các đoạn mã cho LeNet, AlexNet, ResNet,…) trong các bài blog hoặc là trên GitHub. Tuy nhiên, những ví dụ này thường tập trung vào khía cạnh làm thế nào để triển khai một hướng tiếp cận cho trước, mà bỏ qua việc thảo luận tại sao một thuật toán được tạo như thế. Nhiều chủ đề đã được đề cập đến trong các bài blog, ví dụ như trang Distill hoặc các trang cá nhân, chúng thường chỉ đề cập đến một vài chủ đề được chọn về học sâu và thường thiếu mã nguồn đi kèm. Một mặt khác, trong khi nhiều sách giáo trình đã ra đời, đáng chú ý nhất là [Goodfellow et al., 2016] (cuốn này cung cấp một bản khảo sát xuất sắc về các khái niệm phía sau học sâu), những nguồn tài liệu này lại không đi kèm với việc diễn giải dưới dạng mã nguồn để làm rõ hơn các khái niệm. Điều này khiến người đọc đôi khi mơ hồ về cách thực thi chúng. Bên cạnh đó, rất nhiều tài liệu lại được cung cấp dưới dạng các khoá học có phí.
Chúng tôi đặt mục tiêu tạo ra một tài liệu mà có thể (1) miễn phí cho mọi người; (2) cung cấp chiều sâu kỹ thuật đầy đủ, là điểm khởi đầu trên con đường trở thành một nhà khoa học học máy ứng dụng; (3) bao gồm mã nguồn thực thi được, trình bày cho người đọc làm thế nào giải quyết các bài toán trên thực tế; (4) tài liệu này có thể cập nhật một cách nhanh chóng bởi các tác giả cũng như cộng động ở quy mô lớn; và (5) được bổ sung bởi một diễn đàn (và diễn đàn tiếng Việt của nhóm dịch) để nhanh chóng thảo luận và hỏi đáp về các chi tiết kỹ thuật.
Các mục tiêu này thường không tương thích với nhau. Các công thức, định lý, và các trích dẫn được quản lý tốt nhất trên LaTex. Mã được giải thích tốt nhất bằng Python. Và trang web phù hợp với HTML và JavaScript. Hơn nữa, chúng tôi muốn nội dung của nó vừa có thể được truy cập dưới dạng mã nguồn có thể thực thi, vừa có thể tải về như một cuốn sách dưới định dạng PDF, và lại ở trên internet như một trang web. Hiện tại không có một công cụ nào là hoàn hảo cho những nhu cầu này, bởi vậy chúng tôi phải tự tạo công cụ cho riêng mình. Chúng tôi mô tả hướng tiếp cận một cách chi tiết trong chapter_contribute. Chúng tôi tổ chức dự án trên GitHub để chia sẻ mã nguồn và cho phép sửa đổi, Jupyter notebook để kết hợp đoạn mã, phương trình toán và nội dung chữ, sử dụng Sphinx như một bộ máy tạo nhiều tập tin đầu ra, và Discourse để tạo diễn đàn. Trong khi hệ thống này còn chưa hoàn hảo, những lựa chọn này cung cấp một giải pháp chấp nhận được trong số các giải pháp tương tự. Chúng tôi tin rằng đây có thể là cuốn sách đầu tiên được xuất bản dưới dạng kết hợp này.
Học thông qua thực hành
Có nhiều cuốn sách dạy rất chi tiết về một chuỗi các chủ đề khác nhau. Ví dụ như trong cuốn sách tuyệt vời [Bishop, 2006] này của Bishop, mỗi chủ đề được dạy rất kỹ lưỡng tới nỗi để đến được chương hồi quy tuyến tính cũng đòi hỏi không ít công sức phải bỏ ra. Các chuyên gia yêu thích quyển sách này chính vì sự kỹ lưỡng mà nó mang lại, nhưng với những người mới bắt đầu thì đây là điểm hạn chế việc sử dụng cuốn sách này như một tài liệu nhập môn.
Trong cuốn sách này, chúng tôi sẽ dạy hầu hết các khái niệm ở mức vừa đủ. Hay nói cách khác, bạn sẽ chỉ học và hiểu các khái niệm cần thiết đủ để bạn hoàn tất phần thực hành. Trong khi chúng tôi sẽ dành một chút thời gian để dạy kiến thức căn bản sơ bộ như đại số tuyến tính và xác suất, chúng tôi muốn các bạn được tận hưởng cảm giác mãn nguyện của việc huấn luyện được mô hình đầu tiên trước khi bận tâm tới các lý thuyết phân phối xác suất.
Bên cạnh một vài notebook cơ bản cung cấp một khoá học cấp tốc về nền tảng toán học, mỗi chương tiếp theo sẽ giới thiệu một lượng hợp lý các khái niệm mới và đồng thời cung cấp các ví dụ đơn hoàn chỉnh—sử dụng các tập dữ liệu thực tế. Và đây là cả thách thức về cách tổ chức nội dung. Một vài mô hình có thể được nhóm lại một cách có logic trong một notebook riêng lẻ. Và một vài ý tưởng có thể được dạy tốt nhất bằng cách thực thi một số mô hình kế tiếp nhau. Mặt khác, có một lợi thế lớn về việc tuân thủ theo chính sách mỗi notebook là một ví dụ hoàn chỉnh: Điều này giúp bạn bắt đầu các dự án nghiên cứu của mình một cách dễ dàng nhất có thể bằng cách tận dụng mã nguồn của chúng tôi. Bạn chỉ cần sao chép một notebook và bắt đầu sửa đổi ở trên đó.
Chúng tôi sẽ xen kẽ mã nguồn có thể thực thi với kiến thức nền tảng khi cần thiết. Thông thường, chúng tôi sẽ tập trung vào việc tạo ra những công cụ trước khi giải thích chúng đầy đủ (và chúng tôi sẽ theo sát bằng cách giải thích phần kiến thức nền tảng sau). Ví dụ, chúng tôi có thể sử dụng hạ gradient ngẫu nhiên trước khi giải thích đầy đủ tại sao nó lại hữu ích hoặc tại sao nó lại hoạt động. Điều này giúp cung cấp cho người thực hành những phương tiện cần thiết để giải quyết vấn đề nhanh chóng và đòi hỏi người đọc phải tin tưởng vào một số quyết định triển khai của chúng tôi.
Xuyên suốt cuốn sách, chúng ta sẽ làm việc với thư viện MXNet; đây là một thư viện với một đặc tính hiếm có, đó là vừa đủ linh hoạt để nghiên cứu và đủ nhanh để tạo ra sản phẩm. Cuốn sách này sẽ dạy về khái niệm học sâu từ đầu. Thỉnh thoảng, chúng tôi sẽ muốn đào sâu hơn vào những chi tiết về mô hình mà thông thường sẽ được che giấu khỏi người dùng bởi những lớp trừu tượng bậc cao Gluon. Điều này đặc biệt hay xuất hiện trong các hướng dẫn cơ bản, nơi chúng tôi muốn bạn hiểu về tất cả mọi thứ đang diễn ra trong một tầng hoặc bộ tối ưu nào đó. Trong những trường hợp này, chúng tôi sẽ thường trình bày hai phiên bản của một ví dụ: một phiên bản trong đó chúng tôi hiện thực mọi thứ từ đầu, chỉ dựa vào giao diện Numpy và việc tính đạo hàm tự động; và một phiên bản khác thực tế hơn, khi chúng tôi viết mã ngắn gọn sử dụng Gluon. Một khi chúng tôi đã dạy bạn cách một số thành phần hoạt động cụ thể như thế nào, chúng tôi có thể chỉ sử dụng phiên bản Gluon trong những hướng dẫn tiếp theo.
Nội dung và Bố cục
Cuốn sách này có thể được chia thành ba phần, với các phần được thể hiện bởi những màu khác nhau trong Fig. 2:
Fig. 2 Bố cục cuốn sách
- Phần đầu cuốn sách trình bày các kiến thức cơ bản và những việc cần chuẩn bị sơ bộ. Section 1 giới thiệu về học sâu. Sau đó, qua Section 2, chúng tôi nhanh chóng trang bị cho bạn những kiến thức nền cần thiết để thực hành học sâu như cách lưu trữ, thao tác dữ liệu và cách áp dụng những phép tính dựa trên những khái niệm cơ bản trong đại số tuyến tính, giải tích và xác suất. Section 3 và Section 4 giới thiệu những khái niệm và kỹ thuật cơ bản của học sâu, ví dụ như hồi quy tuyến tính, mạng perceptron đa lớp và điều chuẩn.
- Năm chương tiếp theo tập trung vào những kỹ thuật học sâu hiện đại. Section 5 miêu tả những thành phần thiết yếu của các phép tính trong học sâu và tạo nền tảng để chúng tôi triển khai những mô hình phức tạp hơn. Sau đó, chúng tôi sẽ giới thiệu mạng nơ-ron tích chập (Convolutional Neural Networks/CNNs), một công cụ mạnh mẽ đang là nền tảng của hầu hết các hệ thống thị giác máy tính hiện đại. Tiếp đến, trong Section 8 và Section 9, chúng tôi giới thiệu mạng nơ-ron hồi tiếp (Recurrent Neural Networks/RNNs), một loại mô hình khai thác cấu trúc tạm thời hoặc tuần tự trong dữ liệu và thường được sử dụng để xử lý ngôn ngữ tự nhiên và dự đoán chuỗi thời gian. Trong Section 10, chúng tôi giới thiệu một lớp mô hình mới sử dụng kỹ thuật cơ chế chú ý (attention mechanisms), một kỹ thuật gần đây đã thay thế RNNs trong xử lý ngôn ngữ tự nhiên. Những phần này sẽ giúp bạn nhanh chóng nắm được những công cụ cơ bản đứng sau hầu hết các ứng dụng hiện đại của học sâu.
- Phần ba thảo luận quy mô mở rộng, hiệu quả và ứng dụng. Đầu tiên, trong Section 11, chúng tôi bàn luận một số thuật toán tối ưu phổ biến được sử dụng để huấn luyện các mô hình học sâu. Chương tiếp theo, Section 12 khảo sát những yếu tố chính ảnh hưởng đến chất lượng tính toán của mã nguồn học sâu. Trong Section 13 và chap_nlp, chúng tôi minh họa lần lượt những ứng dụng chính của học sâu trong thị giác máy tính và xử lý ngôn ngữ tự nhiên
Giới thiệu sách Trading hay
Bộ sách Giao Dịch Thực Chiến của Trader Chuyên Nghiệp
Bộ sách tổng hợp những phương pháp giao dịch hiệu quả cao của những Trader chuyên nghiệp
Bài viết liên quan