第 2 页
Copyright © 2019 Nguyễn Thanh Tuấn NTTUAN8.COM The Legrand Orange Book Template by Mathias Legrand is used The book cover is designed by Nguyễn Thanh Tú Version 2, last update, August 2020
正在生成预览...
Copyright © 2019 Nguyễn Thanh Tuấn NTTUAN8.COM The Legrand Orange Book Template by Mathias Legrand is used The book cover is designed by Nguyễn Thanh Tú Version 2, last update, August 2020
3 Lời mở đầu Giới thiệu về Deep Learning Những năm gần đây, AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cụ thể hơn là Machine Learning (Máy Học) nổi lên như một minh chứng của cuộc cách mạng công nghiệp lần thứ tư (1 - động cơ hơi nước, 2 - năng lượng điện, 3 - công nghệ thông tin). AI hiện diện trong mọi lĩnh vực của đời sống con người, từ kinh tế, giáo dục, y khoa cho đến những công việc nhà, giải trí hay thậm chí là trong quân sự. Những ứng dụng nổi bật trong việc phát triển AI đến từ nhiều lĩnh vực để giải quyết nhiều vấn đề khác nhau. Nhưng những đột phá phần nhiều đến từ Deep Learning (học sâu) - một mảng nhỏ đang mở rộng dần đến từng loại công việc, từ đơn giản đến phức tạp. Deep Learning đã giúp máy tính thực thi những việc tưởng chừng như không thể vào 15 năm trước: phân loại cả ngàn vật thể khác nhau trong các bức ảnh, tự tạo chú thích cho ảnh, bắt chước giọng nói và chữ viết của con người, giao tiếp với con người, hay thậm chí cả sáng tác văn, phim, ảnh, âm nhạc. Hình 1: Mối quan hệ AI, ML và DL [3] Chúng ta có thể thấy Deep learning chỉ là một nhánh nhỏ của Machine Learning. Tuy nhiên trong khoảng 5 năm trở lại đây thì Deep Learning được nhắc đến rất nhiều như một xu hướng mới của cuộc cách mạng AI. Có một số lý do như sau: • Bùng nổ dữ liệu: Deep learning khai thác được Big Data (dữ liệu lớn) cùng với độ chính xác cao hơn hẳn so với các phương pháp Machine Learning khác trên tập dữ liệu đặc biệt là đối với ảnh. Cụ thể là năm 2012, Alex Krizhevsky, Ilya Sutskever, và người hướng dẫn là Hinton, submit một model làm bất ngờ những người làm việc trong ngành AI, và sau này là cả thế giới khi đạt top-5 error là 16% trong cuộc thi ILSVRC2012. Đây là lần đầu tiên một model Artificial Neural Network (ANN) đạt kết quả state-of-the-art (SOTA).
4 • Phần cứng phát triển: Sự xuất hiện của GPU GTX 10 series của NVIDIA ra mắt năm 2014 với hiệu năng tính toán cao cũng như giá thành rẻ có thể tiếp cận với hầu hết với mọi người dẫn đến việc nghiên cứu Deep Learning không còn là những bài toán chỉ được nghiên cứu trong các phòng lab đắt tiền của các trường Đại học danh giá và các công ty lớn. Theo thống kê trên trang paperswithcode hiện có 16 tasks lớn mà Machine Learning có thể thực hiện trong đó có tới trên 8 tasks Deep learning đạt kết quả SOTA phải kể đến như: • Computer Vision • Natural Language Processing • Medical • Methodology • Speech • Time Series • Audio • Music Ý tưởng và mục đích của cuốn sách Hồi đầu năm 2019, khi nghiên cứu ứng dụng về Deep Learning trong ngành Y, tôi nhận ra là mặc dù bản thân mình là kỹ sư có khả năng lập trình Deep Learning nhưng lại thiếu kiến thức chuyên môn ngành Y để phát triển ứng dụng chuyên sâu. Ngược lại, các bác sĩ hiểu được các vấn đề chuyên môn thì lại thiếu các kỹ năng lập trình cần thiết. Thế nên tôi quyết định viết loạt bài viết này để giới thiệu các kiến thức cơ bản về Deep Learning cũng như các ứng dụng của nó để mọi người có kiến thức chuyên môn, có dữ liệu trong các ngành khác như y tế, ngân hàng, nông nghiệp,. . . có thể tự áp dụng được Deep Learning trong lĩnh vực của họ. Thêm vào đó tôi muốn cung cấp một nền tảng về toán và Deep Learning cơ bản cho các bạn học sinh, sinh viên có thể làm được ứng dụng và đào sâu nghiên cứu về deep learning trong môi trường học thuật. Vì hướng tới nhiều độc giả với các background khác nhau nên khi viết tôi giải thích toán chi tiết nhưng đơn giản và dễ hiểu. Bên cạnh đó tôi cũng có các bài ứng dụng Deep Learning trong thực tế xen kẽ giữa các nội dung lý thuyết để bạn đọc dễ tiếp thu hơn. Cuối cùng, hy vọng qua cuốn sách, bạn đọc có được những kiến thức cơ bản về Deep Learn- ing và thấy được các ứng dụng của nó. Để rồi áp dụng các ý tưởng vào start-up, công ty để có các ứng dụng hay, thiết thực cho xã hội. Bên cạnh đó mong rằng cuốn sách là bệ phóng cho các bạn sinh viên Việt Nam nghiên cứu thêm về Deep Learning để có các nghiên cứu, thuật toán mới. Yêu cầu Vì cuốn sách này tôi muốn viết cho tất cả mọi người nên tôi sẽ giải thích tất cả mọi thứ chi tiết nhất có thể. Một số yêu cầu để có thể theo nội dung sách: • Kiến thức về toán cơ bản cấp ba: hàm số, đạo hàm. • Kiến thức cơ bản về lập trình Python: biến, vòng lặp (tôi có giới thiệu ở phần dưới) • Ý thức tự học hỏi kiến thức mới. Nội dung Chương I, tôi giới thiệu về cách cài đặt môi trường với Anaconda để chạy code Python cơ bản. Ngoài ra tôi cũng hướng dẫn sử dụng Google Colab, với GPU Tesla K80 được Google cung cấp
5 miễn phí. Nên bạn đọc có thể train model online thay vì sử dụng máy tính cá nhân. Chương II, tôi đề cập đến Machine Learning cơ bản với hai thuật toán Linear Regerssion và Logistic Regression. Đồng thời tôi giới thiệu về thuật toán Gradient descent, rất quan trọng trong Deep Learning. Bên cạnh đó tôi giới thiệu các kiến thức Toán cơ bản như: phép toán với ma trận, biểu diễn bài toán dạng ma trận,... Chương III, tôi giới thiệu về bài toán Neural Network cũng chính là xương sống của Deep Learning và thuật toán Backpropagation để giải bài toán này. Ngoài ra, để hiểu rõ bản chất của Neural Network nên tôi cũng hướng dẫn mọi người code từ đầu Neural Network và Backpropagation bằng Python trong chương này. Chương IV, tôi đề cập tới Convolutional Neural Network (CNN) cho bài toán có xử lý ảnh. Sau đó giới thiệu về thư viện Keras và ứng dụng CNN cho bài toán phân loại ảnh với bộ dữ liệu chữ số viết tay (MNIST). Cuối chương tôi giới thiệu về ứng dụng thực tế của CNN cho bài toán ô tô tự lái. Chương V, tôi giới thiệu một số tips trong Deep Learning như transfer learning, data augmenta- tion, mini-batch gradient descent, dropout, non-linear activation, ... để tăng độ hiệu quả của mô hình. Chương VI, tiếp nối ý tưởng từ chương IV , tôi đề cập đến hai bài toán lớn của Deep Learn- ing trong Computer Vision. Đó là bài toán về Object Detection và Image Segmentation. Bên cạnh đó tôi có hướng dẫn các bước làm bài toán detect biển số xe máy. Chương VII, tôi giới thiệu về thuật toán Recurrent Neural Network (RNN) cho bài toán dữ liệu dạng chuỗi và mô hình cải tiến của nó là Long Short Term Memory (LSTM). Sau đó tôi hướng dẫn mọi người áp dụng mô hình LSTM cho bài toán thêm mô tả cho ảnh. Cuối cùng tôi giới thiệu mạng sequence to sequence (seq2seq) cho bài toán dịch cùng cơ chế attention. Chương cuối tôi giới thiệu về mạng generative adversarial networks (GAN) với một số mô hình GAN như deep convolutional GAN (DCGAN), conditional GAN (cGAN). Ngoài ra trong cuối mỗi chương tôi đều đưa ra bài tập về thực hành code với Python và đặt ra những câu hỏi để mọi người hiểu rõ thêm về lý thuyết mà tôi đã giới thiệu. Thông tin liên lạc Website của tôi. Facebook cá nhân của tôi. Group để hỏi đáp tại đây. Page cập nhật tin tức mới về AI tại đây. Tất cả code trên sách ở trên github. Vì đây là bản đầu tiên của cuốn sách nên mọi người có nhận xét, góp ý, phản ánh xin gửi về mail nttuan8.com@gmail.com Xin cảm ơn mọi người rất nhiều!
6 Lời cảm ơn Trước hết tôi xin cảm ơn bạn bè trên Facebook đã nhiệt tình ủng hộ và đóng góp cho các bài viết trong series Deep Learning cơ bản từ những ngày đầu tiên. Các bạn là động lực lớn nhất cho tôi để hoàn thành series và xuất bản sách này. Xin cảm ơn bạn Lê Vũ Hoàng (Nghiên cứu sinh ngành thống kê, ĐH Trinity College Dublin) đã giúp tôi đọc và chỉnh sửa các bài viết trên blog trước khi đến tay bạn đọc cũng như giúp tôi chỉnh sửa nội dung khi soạn sách. Xin cảm ơn bạn Nguyễn Thế Hùng (Toán tin - K59 - ĐHBKHN), Nguyễn Thị Xuân Huyền (Điện tử Viễn thông - K60 - ĐHBKHN) đã giúp tôi đọc và chỉnh sửa nội dung sách. Cuối cùng và quan trọng nhất, tôi xin cảm ơn gia đình, người thân những người luôn động viên và ủng hộ tôi trong dự án này.
7 Sách tái bản lần thứ hai Trong quá trình đi dạy và đi làm tôi thấy rất nhiều câu hỏi hay về machine learning, deep learning như: L1 và L2 loss khác nhau thế nào, tại sao L1 tốt cho outliers?,... Nên tôi cập nhật sách để cập nhật các kiến thức cho bạn đọc. Thêm vào đó, qua quá trình dạy tôi sẽ sửa sách theo hướng giải thích các kiến thức đơn giản, dễ hiểu hơn cho bạn đọc. Bên cạnh đó, sách vẫn còn những lỗi nhỏ nên tôi muốn sửa và cập nhật. Các thay đổi trong lần tái bản thứ hai: • Thêm chương GAN. • Viết bài sequence to sequence và attention. • Viết bài hướng dẫn dùng yolo để detect biển số xe. • Thêm phần visualize CNN. • So sánh các loss function cho linear regression. • Giải linear regression bằng đại số tuyến tính. • Viết lại phần python cơ bản. • Thêm phần word embedding. • Thêm phần batch normalization. • Hướng dẫn lưu model trong machine learning dùng numpy. • Đọc soát lại và sửa nội dung các phần trong sách. Tôi xin cảm ơn bạn đọc đã nhiệt tình ủng hộ và đóng góp cho sách Deep Learning cơ bản từ những ngày đầu tiên xuất bản. Các bạn là động lực lớn nhất cho tôi để tái bản cuốn sách này. Xin cảm ơn bạn Bùi Thị Liên ( Công nghệ thông tin - K61 - ĐHBKHN), Trần Bảo Hiếu (Công nghệ thông tin Việt Nhật Hedspi - K61 - ĐHBKHN), Hoàng Đức Việt (Khoa Học Máy Tính - K63 - ĐHBKHN), Trần Hữu Huy (Khoa Học Máy Tính - K63 - ĐHBKHN), Phạm Văn Hạnh (Khoa Học Máy Tính - K63 - ĐHBKHN), Nguyễn Duy Đạt (Nghiên cứu sinh ngành khoa học máy tính, Đại học Taiwan Tech), Nguyễn Hoàng Minh ( K34 Chuyên Lý - THPT KHTN) đã giúp tôi viết các phần mới cũng như đọc và chỉnh sửa sách trong lần tái bản này. Cuối cùng và quan trọng nhất, tôi xin cảm ơn gia đình, người thân, bạn bè những người luôn bên cạnh động viên và ủng hộ tôi.
Hình 2: Ảnh chụp ở Stonehenge "Người vá trời lấp bể Kẻ đắp luỹ xây thành Ta chỉ là chiếc lá Việc của mình là xanh" Nguồn: Trái tim người lính (thơ), Nguyễn Sĩ Đại, NXB Thanh niên. Từ những ngày đầu tiên viết blog tôi luôn quan niệm "chia sẻ là để học hỏi" thế nên "kiến thức là để cho đi". Cuốn sách này được chia sẻ miễn phí tới bạn đọc với thông điệp: "Vì một cộng đồng AI Việt Nam phát triển bền vững"
Mục lục I Giới thiệu 1 Cài đặt môi trường . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.1 Giới thiệu 19 1.2 Google Colab 19 1.2.1 Tạo file trên google colab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.2.2 Chọn GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.2.3 Các thành phần nhỏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.2.4 Link với google drive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.2.5 Cài thêm thư viện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.3 Hướng dẫn cài đặt anaconda 24 1.3.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.3.2 Yêu cầu phần cứng và phần mềm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.3.3 Cài đặt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.3.4 Hướng dẫn sử dụng Jupyter notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2 Python cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.1 Kiểu dữ liệu cơ bản 33 2.1.1 Số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.1.2 Phép tính logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.1.3 Chuỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.2 Containers 35 2.2.1 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.2.2 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3 Function 36 2.4 Thư viện trong python 37 2.5 Thư viện Numpy 37 2.5.1 Array indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.5.2 Các phép tính trên array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.5.3 Broadcasting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.6 Matplotlib 40 II Machine learning cơ bản 3 Linear regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1 Bài toán 47 3.2 Thiết lập công thức 48 3.2.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2.2 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.3 Thuật toán gradient descent 50 3.3.1 Đạo hàm là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.3.2 Gradient descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.3.3 Áp dụng vào bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.4 Ma trận 55 3.4.1 Ma trận là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4.2 Phép nhân ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.4.3 Element-wise multiplication matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.4.4 Biểu diễn bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.5 So sánh các loss function 57 3.5.1 Mean Absolute Error, L1 Loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.5.2 Mean Square Error, L2 Loss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.5.3 So sánh MAE và MSE (L1 Loss và L2 Loss) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.6 Giải bằng đại số tuyến tính 59 3.7 Python code 61 3.8 Bài tập 63 4 Logistic regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.1 Bài toán 65 4.2 Xác suất 66 4.3 Hàm sigmoid 67 4.4 Thiết lập bài toán 68 4.4.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.4.2 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.5 Chain rule 70 4.5.1 Áp dụng gradient descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.5.2 Biểu diễn bài toán dưới ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.5.3 Hàm sigmoid được chọn để đạo hàm đẹp . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.6 Quan hệ giữa phần trăm và đường thẳng 76 4.7 Ứng dụng 78 4.8 Python code 78 4.9 Bài tập 80 III Neural Network 5 Neural network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.1 Neural network là gì 83 5.1.1 Hoạt động của các nơ-ron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.2 Mô hình neural network 84 5.2.1 Logistic regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2.2 Mô hình tổng quát . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.2.3 Kí hiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.3 Feedforward 87 5.3.1 Biểu diễn dưới dạng ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.4 Logistic regression với toán tử XOR 89 5.4.1 NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.4.2 AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.4.3 OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.4.4 XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.5 Bài tập 94 6 Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1 Bài toán XOR với neural network 97 6.1.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1.2 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 6.1.3 Gradient descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2 Mô hình tổng quát 103 6.3 Python code 104 6.4 Bài tập 106 IV Convolutional Neural Network 7 Giới thiệu về xử lý ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.1 Ảnh trong máy tính 109 7.1.1 Hệ màu RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.1.2 Ảnh màu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 7.1.3 Tensor là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 7.1.4 Ảnh xám . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.1.5 Chuyển hệ màu của ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.2 Phép tính convolution 115 7.2.1 Convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 7.2.2 Padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.2.3 Stride . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 7.2.4 Ý nghĩa của phép tính convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.3 Bài tập 120 8 Convolutional neural network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 8.1 Thiết lập bài toán 123 8.2 Convolutional neural network 124 8.2.1 Convolutional layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 8.2.2 Pooling layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 8.2.3 Fully connected layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 8.3 Mạng VGG 16 131 8.4 Visualizing Convolutional Neural Network 132 8.4.1 Visualizing Feature Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 8.4.2 Visualizing Convolutional Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 8.4.3 Visualizing Class Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 8.4.4 Visualizing Attention Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 8.5 Bài tập 137 9 Giới thiệu keras và bài toán phân loại ảnh . . . . . . . . . . . . . . . . . . . . 139 9.1 Giới thiệu về keras 139 9.2 MNIST Dataset 140 9.2.1 Xây dựng bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 9.2.2 Chuẩn bị dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 9.2.3 Xây dựng model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 9.2.4 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 9.3 Python code 145 9.4 Ứng dụng của việc phân loại ảnh 147 9.5 Bài tập 147 10 Ứng dụng CNN cho ô tô tự lái . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 10.1 Giới thiệu mô phỏng ô tô tự lái 149 10.2 Bài toán ô tô tự lái 152 10.2.1 Xây dựng bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.2.2 Chuẩn bị dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.2.3 Tiền xử lý dữ liệu (Preprocessing) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.2.4 Xây dựng model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.2.5 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 10.3 Python code 155 10.4 Áp dụng model cho ô tô tự lái 157 10.5 Bài tập 157
V Deep Learning Tips 11 Transfer learning và data augmentation . . . . . . . . . . . . . . . . . . . . . . 161 11.1 Transfer learning 161 11.1.1 Feature extractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 11.1.2 Fine tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 11.1.3 Khi nào nên dùng transfer learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 11.2 Data augmentation 170 11.3 Bài tập 174 12 Các kỹ thuật cơ bản trong deep learning . . . . . . . . . . . . . . . . . . . . . 177 12.1 Vectorization 177 12.2 Mini-batch gradient descent 178 12.2.1 Mini-batch gradient descent là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 12.2.2 Các thông số trong mini-batch gradient descent . . . . . . . . . . . . . . . . . . . . . 180 12.3 Bias và variance 181 12.3.1 Bias, variance là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 12.3.2 Bias, variance tradeoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 12.3.3 Đánh giá bias and variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 12.4 Dropout 183 12.4.1 Dropout là gì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 12.4.2 Dropout hạn chế việc overfitting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 12.4.3 Lời khuyên khi dùng dropout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 12.5 Activation function 184 12.5.1 Non-linear activation function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 12.5.2 Vanishing và exploding gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 12.5.3 Một số activation thông dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 12.6 Batch Normalize 188 12.6.1 Phân tích nguyên nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 12.6.2 Batch Normalization ra đời . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 12.6.3 Hiệu quả của batch normalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 12.7 Bài tập 190 VI Computer Vision Task 13 Object detection với Faster R-CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 13.1 Bài toán object detection 193 13.2 Faster R-CNN 194 13.2.1 R-CNN (Region with CNN feature) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 13.2.2 Fast R-CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 13.2.3 Faster R-CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 13.3 Ứng dụng object detection 203 13.4 Bài tập 203
14 Bài toán phát hiện biển số xe máy Việt Nam . . . . . . . . . . . . . . . . . . 205 14.1 Lời mở đầu 205 14.2 Chuẩn bị dữ liệu 205 14.2.1 Đánh giá bộ dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 14.2.2 Các phương pháp tăng sự đa dạng của bộ dữ liệu . . . . . . . . . . . . . . . . . . . 206 14.2.3 Gán nhãn dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 14.3 Huấn luyện mô hình 209 14.3.1 Giới thiệu về YOLO-Tinyv4 và darknet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 14.3.2 Cấu hình darknet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 14.3.3 Huấn luyện model trên colab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 14.4 Dự đoán 215 15 Image segmentation với U-Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 15.1 Bài toán image segmentation 217 15.1.1 Phân loại bài toán image segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 15.1.2 Ứng dụng bài toán segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 15.2 Mạng U-Net với bài toán semantic segmentation 220 15.2.1 Kiến trúc mạng U-Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 15.2.2 Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 15.3 Bài tập 224 VII Recurrent Neural Network 16 Recurrent neural network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 16.1 Recurrent Neural Network là gì? 227 16.1.1 Dữ liệu dạng sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 16.1.2 Phân loại bài toán RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 16.1.3 Ứng dụng bài toán RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 16.2 Mô hình bài toán RNN 229 16.2.1 Mô hình RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 16.2.2 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 16.2.3 Backpropagation Through Time (BPTT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 16.3 Bài tập 232 17 Long short term memory (LSTM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 17.1 Giới thiệu về LSTM 233 17.2 Mô hình LSTM 234 17.3 LSTM chống vanishing gradient 235 17.4 Bài tập 236 18 Ứng dụng thêm mô tả cho ảnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 18.1 Ứng dụng 237
18.2 Dataset 238 18.3 Phân tích bài toán 238 18.4 Các bước chi tiết 239 18.4.1 Image embedding với Inception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 18.4.2 Text preprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 18.4.3 Word embedding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 18.4.4 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 18.4.5 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 18.5 Python code 247 19 Seq2seq và attention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 19.1 Giới thiệu 257 19.2 Mô hình seq2seq 258 19.3 Cơ chế attention 260 19.3.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 19.3.2 Cách hoạt động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 VIII Generative Adversarial Networks (GAN) 20 Giới thiệu về GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 20.1 Ứng dụng của GAN 265 20.1.1 Generate Photographs of Human Faces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 20.1.2 Image editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 20.1.3 Generate Anime characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 20.1.4 Generate Realistic Photographs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 20.1.5 Image-to-Image Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 20.1.6 Unsupervised Image-to-image translation . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 20.1.7 Super-resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 20.1.8 Text to image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 20.1.9 Generate new human pose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 20.1.10 Music generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 20.2 GAN là gì? 270 20.3 Cấu trúc mạng GAN 271 20.3.1 Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 20.3.2 Discriminator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 20.3.3 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 20.4 Code 276 20.5 Bài tập 279 21 Deep Convolutional GAN (DCGAN) . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 21.1 Cấu trúc mạng 281 21.1.1 Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 21.1.2 Discriminator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
21.2 Tips 285 21.3 Code 286 21.4 Bài tập 290 22 Conditional GAN (cGAN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 22.1 Fashion-MNIST 291 22.2 Cấu trúc mạng 292 22.2.1 Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 22.2.2 Discriminator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 22.2.3 Loss function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 22.3 Code 294 22.4 Bài tập 298 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Articles 299 online 299 Books 301
I Giới thiệu 1 Cài đặt môi trường . . . . . . . . . . . . . . . . . . 19 1.1 Giới thiệu 1.2 Google Colab 1.3 Hướng dẫn cài đặt anaconda 2 Python cơ bản . . . . . . . . . . . . . . . . . . . . . . 33 2.1 Kiểu dữ liệu cơ bản 2.2 Containers 2.3 Function 2.4 Thư viện trong python 2.5 Thư viện Numpy 2.6 Matplotlib
1. Cài đặt môi trường 1.1 Giới thiệu Python là ngôn ngữ được sử dụng phổ biến nhất trong Deep Learning, vậy nên tất cả code trong sách sẽ được viết bằng python và thư viện Deep Learning được chọn để sử dụng là Keras. Trong phần này tôi sẽ hướng dẫn cài đặt môi trường. Có 2 dạng là chạy online dùng google colab và cài trên local dùng anaconda và IDE là spyder, VS Code hoặc jupyter notebook. Hiểu đơn giản thì nếu dùng google colab bạn sẽ viết code python và chạy online, không cần cài gì trên máy cả nên sẽ đơn giản hơn và máy cấu hình yếu vẫn chạy được. 1.2 Google Colab Huấn luyện (hay còn gọi là train) một mô hình Deep Learning, cần xử lý lượng phép tính lớn hơn nhiều so với các mô hình Machine Learning khác. Để cải thiện tốc độ tính toán, người ta dùng GPU (Graphics Processing Unit) thay cho CPU (Central Processing Unit) vì với 1 GPU cho phép xử lý nhiều phép tính song song với rất nhiều core sẽ nhanh hơn nhiều so với CPU. Tuy nhiên giá của GPU thì khá đắt đỏ để mua hoặc thuê server có GPU. Thế nên Google đã cung cấp Google Colab miễn phí có GPU để chạy code python (deep learning) cho mục đích nghiên cứu. Ở trên môi trường Colab có cài sẵn các thư viện Deep Learning phổ biến như PyTorch, Ten- sorFlow, Keras,.. Ngoài ra bạn cũng có thể cài thêm thư viện để chạy nếu cần. Thêm vào đó thì bạn cũng có thể liên kết Colab với google drive và đọc, lưu dữ liệu lên google drive nên rất tiện để sử dụng. Mặc dù Ở trên Colab chỉ hỗ trợ 2 version Python là 2.7 và 3.6, chưa hỗ trợ ngôn ngữ R và Scala, thì Google Colab vẫn là môi trường tuyệt vời để học và thực hành với deep learning. 1.2.1 Tạo file trên google colab Đầu tiên bạn vào google drive, tạo folder mà bạn muốn lưu các file colab, rồi chọn nút New
20 Chương 1. Cài đặt môi trường Sau đó kéo xuống chọn Google Colaboratory hoặc bạn có thể truy cập trực tiếp vào đây. Trong trường hợp bạn không tìm thấy Google Colaboratory, hãy chọn "Connect more apps" ở phía bên dưới, sau đó search Google Colaboratory trên thanh tìm kiếm và cài đặt. Tiếp đó, bạn click vào phần tên trên cùng của file để đổi tên file cho phù hợp 1.2.2 Chọn GPU Bước này để chọn GPU chạy, bạn chọn Runtime -> Change runtime type
显示前 20 页。下载资料查看完整内容。
暂无评论。快来抢沙发吧!
评论 (0)
暂无评论。快来抢沙发吧!