Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
1,73 MB
Nội dung
MỤC LỤC DANH MỤC HÌNH ẢNH LỜI CẢM ƠN Trước hết, Em xin chân thành cảm ơn thầy giáo, cô giáo khoa Công Nghệ Thông Tin trường Đại học Trần Đại Nghĩa trang bị cho chúng em kiến thức cần thiết năm học vừa qua để chúng em thực tốt đồ án đủ tự tin để làm việc sau Em xin chân thành cảm ơn thầy Ngơ Thanh Tú tận tình hướng dẫn giúp đỡ em hoàn thành đồ án Ngoài ra, xin gởi lời cám ơn tới thầy cô khác khoa Công Nghệ Thông Tin tất bạn bè tạo điều kiện cho tơi hồn thành đồ án Mặc dù cố gắng, khoảng thời gian cho phép, hạn chế mặt kiến thức thân, đồ án tránh khỏi nhiều thiếu sót Chính vậy, tơi mong nhận góp ý thầy giáo, cô giáo bạn bè người có quan tâm đến lĩnh vực mà đồ án trình bày TP Hồ Chí Minh, 24 tháng 12 năm 2018 BẢNG PHÂN CÔNG CÔNG VIỆC Thi ết kế gia o diệ n Nguy ễn Tấn Tài X Tìm Là C T kiế m o e m W d s tài or e t liệu d X T ổ n g h ợ p X X Phạm Hồng Sơn Nguy ễn Việt Bình X X X X X X X CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Lịch sử phát triển mạng nơron Deeplearning 1.1.1 Giới thiệu: Ngày nay, Aritificial Intelligence (AI - trí tuệ nhân tạo) Machine Learning (ML máy học) diện lĩnh vực đời sống người, từ kinh tế, giáo dục, y khoa cơng việc nhà, giải trí chí quân Những ứng dụng bật việc phát triển AI đến từ nhiều lĩnh vực để giải nhiều vấn đề khác Nhưng đột phá phần nhiều đến từ Deep Learning (DL - học sâu) - mảng nhỏ mở rộng dần đến loại công việc, từ đơn giản đến phức tạp Tuy nhiên, biết nhà nghiên cứu ngành phải tốn công sức, trí lực để đưa khái niệm trừu tượng khỏi trang giấy, mơ hình hóa thành điều thú vị mà sử dụng ngày Công việc họ ngắn gọn đến thế, mà họ cần làm giải thích trừu tượng cách tường minh, dựa phân tích có để xây dựng model tốt quan trọng hết thực hóa ngơn ngữ lập trình Ngày nay, cơng việc code model hỗ trợ kỹ sư phần mềm, bạn có biết, thời kỳ mà DL từ ngữ xa lạ, nhà nghiên cứu phải tự làm hết, code from scratch từ ngôn ngữ C/C++ khơng? 1.1.2 Lịch sử phát triển Deep Learning Hình 1.1:Hình Lịch1.sử phát sử triển Lịch phát triển I Khởi nguồn từ toán học … (1763 - 1949) Năm 1763, luận xác suất Thomas Bayes xuất năm sau ông qua đời, lúc í tai quan tâm đến Gần nửa kỷ sau, vào năm 1812 nhà tốn học Laplace hợp thức hóa thành lý thuyết xác suất mà ngày gọi Định lý Bayes, cốt lõi mạng Bayes hay Belief Network, cấu trúc đóng góp lớn đến thành công DL ngày (Deep Belief Network) Năm 1770, máy mô AI giới thiệu, người Thổ Nhĩ Kỳ lừa Napoleon máy họ chơi cờ vua Năm 1857, họ tiết lộ máy đơn giản có người ngồi bên Lúc đó, chả biết 140 năm sau, AI thực đánh bại đại kiện tướng Kasparov nước mà tạo Năm 1805, lý thuyết Least Squares đời, thời sử dụng thiên văn trắc địa, khơng biết ngày hàm loss Artificial Neural Network (ANN) II Đến với ý tưởng khoa học cho máy “giống người” (1936 - 1973) Năm 1936, lấy cảm hứng từ việc người thực công việc bình thường nào, Alan Turing định hình nên ý niệm ông Universal Machine (máy tồn năng) Sau nhiều năm nghiên cứu, ơng cơng bố báo dạng luận với ý tưởng kiểm tra cho máy mơ người: Turing Test Có lẽ, ông rằng, 60 năm sau ông mất, AI bắt đầu passed qua Test Năm 1957, ý tưởng Perceptron, dựa cấu trúc tế bào thần kinh não người, lần cơng bố, bao trùm truyền thông tương lai tươi sáng tới gần AI Cùng với đó, 13 năm sau, khái niệm bổ sung phát minh Seppo Linnainmaa, gọi Auto Differentation (đạo hàm tự động), hình thái lý thuyết mà gọi Backpropagation ngày Các thuật toán khác phát minh Nearest Neighbor năm 1967 hay TFIDF năm 1972 chủ yếu liên quan đến xác suất thống kê, thuật toán quan trọng nhất, tạo nên nhánh lớn DL nay: Computer Vision (CV) & Pattern Recognition Natural Language Processing (NLP) & Speech Recognition III Phản biện hoài nghi (1974 - 1981) Năm 1969, sách Perceptrons xuất bản, giới thiệu cho độc giả giới hạn Perceptron, mạnh việc Perceptron khơng thể học cách biểu diễn hàm XOR (ngày biết trở nên đơn giản) Hơn nữa, họ cịn chứng minh Perceptron khơng thể học hàm phi tuyến giá trị dựa liệu tuyến tính Năm 1973, Perceptron/ANNs nhường chỗ cho thuật tốn tiến hóa (Genetic Algorithm), cộng đồng phát triển AI rơi vào mùa đông IV Trở nên thực tế Backpropagation tái sinh (1982 - 1988) 10 năm sau TF-IDF đời, cấu trúc phát triển báo hiệu trở lại ANN sau mùa đông dài lạnh giá, Recurrent Neural Network (RNN) công cụ đa để xử lý dãy/chuỗi mà dùng rộng rãi tận ngày Ngày hiểu rằng, multilayer-perceptron (MLP – mạng Perceptron đa lớp), chí cần hidden layer (lớp ẩn) đủ để xấp xỉ hàm số Lý thuyết gọi Universal approximation theorem (UAT) Đó vào năm 1986, sinh viên postdoc ngành khoa học nhận thức UC San Diego, Geoff Hinton, cháu đời George Boole (người sáng tạo nên lý thuyết logic ngày nay, kiểu liệu bool/boolean để tưởng nhớ ông), Hinton bất chấp trích Perceptron tác giả đương thời, với người bạn cơng bố báo mà làm hồi sinh Perceptrons Bằng việc tổng quát hóa AutoDiff Seppo thành thuật toán ngày biết đến: Backpropagation Việc chồng nhiều lớp Perceptrons giúp ANN vượt qua khuyết điểm Perceptrons, điều mà trước chưa thực Khơng vậy, thời điểm đó, UAT đời, thúc đẩy bùng nổ nghiên cứu ANN Nổi trội việc phát minh Convolutional Neural Nets (CNN): học trò Hinton, nhân vật quan trọng phát triển DL, Yann LeCun tạo LeNet5, xem CNN thực hóa Để làm điều đó, LeCun tạo datasets riêng mà dùng đến ngày nay, số viết tay MNIST, năm 2017 mở rộng thành EMNIST Học với người (1989 - 1994) Con người học theo cách ANN, người vừa học vừa làm, có cịn tự học AI mô lại khả người, chúng không làm vậy? Và Reinforcement Learning (RL – học tăng cường) phát minh năm 1989 Thực tế, mơ hóa tốn học q trình học tập người, điều không đơn giản Q-learning kết nhiều năm nghiên cứu để đưa RL trở nên thực tế hơn, đơn giản Christopher Watkins Đó cịn dấu hiệu cho tương lai AI chơi game đến gần Giới hạn đình trệ (1995 - 2001) Tuy phát triển vũ bão thế, cuối cùng, đầu tư không nhận thành đáng tin cậy, đơn giản mơ hình tạo mức cục bộ, áp dụng cho tốn lớn Do cộng đồng phát triển AI quay trở lại với phương pháp nhanh chóng, xác hơn, chẳng hạn Support Vector Machine (SVM) Và ANN lại rời bỏ sàn đấu, lần DL rơi vào mùa đơng thứ hai Trong suốt qng thời gian đó, công cụ AI khác dần phát triển, bật Monte Carlo Tree Search (MCTS), cốt lõi DeepBlue, AI đánh bại đại kiện tướng Garray Kasparov năm 1997 Tuy gọi DeepBlue thực để thể khả tìm kiếm nhanh chóng, độ sâu cao MCTS không liên quan đến DL Với đời Long-Short Term Memory (LSTM) năm 1997, tảng lý thuyết gần đạt đến mức đầy đủ thấy ngày nay, để tạo nên ứng dụng lớn lao ANN Tuy nhiên, vài thứ vơ quan trọng khác cịn thiếu khiến cho khả ANN bị giới hạn Có thể nói lý thuyết trước thời đại V Khoảng lặng Củng cố tảng (2002 - 2006) Cịn nhiều việc khác ngồi phát triển lý thuyết để tạo nên phát triển DL mà thấy ngày Đây quãng thời gian mà thứ bắt đầu chuẩn bị Bây giờ, biết, để xử lý vấn đề lớn cách nhanh chóng hiển nhiên phải sử dụng công cụ chất lượng cao, phải chứ? Không thể vẽ xác đồ Trái Đất với bút chì giấy bình thường Điều tương tự với DL Trước hết, cần framework để nhà nghiên cứu nhanh chóng thử nghiệm ý tưởng họ mà tập trung vào vấn đề liên quan đến kỹ thuật phần mềm (software engineering) Vậy framework ML đời: Torch Đây framework viết Lua interface với back-end C, vấn đề mà gặp phải trở thành học quý báu cho framework sau Tensorflow hay PyTorch Tuy nhiên, việc tạo model tốt việc model hoạt động tốt hai thứ hoàn toàn khác Những nhà nghiên cứu muốn nhanh chóng thử nghiệm model họ thực tế, họ cần phải có cơng cụ tính tốn hiệu quả, nhanh chóng Đó tăng tốc đến từ phần cứng, suốt trình phát triển thầm lặng DL, hiểu rõ tầm quan trọng phần cứng hiệu thực tế model Bước ngoặt tạo NVidia thiết kế thành cơng kiến trúc CUDA năm 2006, lúc họ chưa biết hiệu từ kiến trúc to lớn 10 năm sau, dòng GPU chuyên biệt hỗ trợ DL NVidia thức mắt – Volta Cùng năm đó, giải thưởng Netflix cơng bố cho thiết kế Recommendation System (hệ thống đề xuất cho người dùng) với độ xác cao họ 10% Tuy thi kết thúc giải thưởng trao năm 2009 làm tiền đề cho thi AI quan trọng sau này, có Kaggle, nơi mà team phát triển AI tranh đấu với Âm thầm tái xuất (2006 - 2008) Trong suốt năm đó, Hinton dày cơng tìm cách đưa ANN đến với giới thực Với thành mình, bao gồm xuất lần đầu khái niệm Unsupervised Pretraining (tiền huấn luyện không giám sát) giới thiệu đến giới khoa học Deep Belief Networks dựa mạng Bayes, ông tuyên bố hiểu cách mà não hoạt động Với kết nghiên cứu ông, người ta train ANN sâu hơn, rộng Vậy kể từ năm đó, DL trở thành nhánh riêng biệt, tách khỏi ANN ML: Deep Learning… (deeplearning.net) moving beyond shallow machine learning since 2006! Chìa khóa cuối (2009 - 2011) Tuy Hinton nghiên cứu cách sâu sắc, chi tiết cuối cùng, thành thực tế thu chưa đáng kể bao Lúc đó, khơng biết Đấy lúc mà người ta ln cho cần có model tốt dù dataset có đến đâu tạo kết thực tế thật tốt Chỉ có vài người vượt qua định kiến đó, số có Fei Fei Li học trị Trải qua khó khăn, chịu đựng trích suốt năm rưỡi, họ tạo nên dataset to lớn với hàng triệu ảnh 1000 nhãn vào năm 2009, vượt xa dataset tiếng đương thời PASCAL VOC Lúc đầu, ImageNet dataset dùng cho training, năm 2010, họ biến thành thi: ILSVRC Điều mà sau nhiều người cho tiên phong cho khởi đầu kỷ nguyên mới, không ngành AI mà định nghĩa xã hội đại Vậy cuối cùng, cơng cụ chuẩn bị hồn tất Những dấu mốc tới bắt đầu thời đại mà ngày gọi Cách mạng 4.0 VI Cuộc cách mạng Sửng sốt (2012 - 2013) Trong suốt năm thi ILSVRC tổ chức, hàng trăm AI submit, tất kết hợp công cụ trích lọc features thực tay (e.g SIFT, SURF, FAST, BRISK, AKAZE, …) SVM để classify (phân loại) ảnh Năm 2011, AI tốt có top-5 error 25.77%, cho thấy khả AI chưa đáng tin cậy để ứng dụng thực tế Năm 2012, Alex Krizhevsky, Ilya Sutskever, người hướng dẫn họ lại Hinton, submit model làm bất ngờ không giới nghiên cứu ML mà người làm việc ngành AI, sau giới đạt top-5 error 16% Đây lần model ANN đạt kết state-of-the-art Họ tiết lộ model CNN, Deep CNN mà ngày biết đến AlexNet Trong model này, họ giới thiệu đến công chúng kỹ thuật mà chưa nghĩ đến mà ngày thấy quen thuộc: ReLU activation DropConnect/Dropout Hơn nữa, model train dataset ImageNet năm 2011, với tăng tốc GPU hỗ trợ CUDA Đây kết hợp chưa trực tiếp thử nghiệm Sau kết ILSVRC công bố, nhà nghiên cứu ANN bắt đầu cân nhắc DL lựa chọn thay cho phương thức truyền thống Sự lan tỏa bắt đầu trở nên phổ biến DL model khác Clarifai đạt 11.2% ILSVRC 2013 Điều thúc đẩy nhiều nhà nghiên cứu chuyển hẳn sang DL Từ đó, model state-of-the-art năm ImageNet DL model, với độ sâu ngày tăng Hình Độ sâu state-of-the-art ANN qua năm 2012 năm mà quan tâm chuyển sang cho DL, cho thấy khởi đầu để DL bao trùm mặt sống người Mặc dù năm 2017 năm cuối ILSVRC di sản mà thi để lại bác bỏ Thành tựu (2014 - Nay Kể từ năm 2013, không nhà nghiên cứu mà công ty công nghệ bắt đầu ý đến DL Trước năm 2009, Google phát triển tảng DL (mặc dù lúc chưa ý nhiều) gọi DistBelief, dẫn đầu Hinton, đóng vai trị quan trọng việc giảm thiểu lỗi hệ thống ML Kể từ sau kiện 2012, Google đẩy mạnh đầu tư vào mảng này, định thêm nhà khoa học máy tính để cải tiến tảng, lý thuyết lẫn cấu trúc source code Cuối cùng, trở nên mạnh mẽ, nhanh chóng gọn gàng trước đổi tên thành Tensorflow vào ngày 9/11/2015 dạng open-source Tiếp theo sau đó, DL framework khác đời, phát triển, chí chấm dứt cạnh tranh khốc liệt Năm 2014, Facebook cơng bố DeepFace họ, công cụ mà tận dùng để tag lên hình ảnh Với 97.35% độ xác, DeepFace vượt mặt đối thủ Thực tế gần đạt độ xác người dù số 2.65% error nhỏ Tuy vậy, dấu hiệu báo trước ngày mà hệ thống DL vượt qua khả người khơng cịn xa: AlphaGo (Lee ver.) đánh bại đại kiện tướng cờ vây Lee Sedol 4-1 vào năm 2016, cho thấy bước tiến to lớn gần 20 năm từ DeepBlue đánh bại Kasparov (không gian tìm kiếm luật chơi cờ vây khó cờ vua nhiều) 10 w3 = Variable(torch.FloatTensor([0.5]), size: w4 = Variable(torch.FloatTensor([0.5]), size: w5 = Variable(torch.FloatTensor([0.5]), size: k = xy*w12 o1 = k[0]*k[1] o2 = o1*w4 + z*w3 result = o2*w5 print('result', result) requires_grad=True) # requires_grad=True) # requires_grad=True) # # 2.6875 result.backward() print('w12.grad', w12.grad) print('w3.grad', w3.grad) print('w4.grad', w4.grad) print('w5.grad', w5.grad) # 1.8750, 1.8750 # 3.5000 # 1.8750 # 5.3750 Forward o1 = x * w1 * y * w2 = * 0.5 * o2 = o1 * w4 + z * w3 = 3.75 * 0.5 + result = o2 * w5 = 5.375 * 0.5 = 2.6875 * 0.5 = 3.75 * 0.5 = 5.375 Backward Cần ý công thức đạo hàm hàm hợp: f'(u(x)) = f'(u) * u'(x) result = o2 * w5 Đạo hàm result theo w5 = (o2 * w5)' = o2 = 5.375 Đạo hàm result theo o2 = f'(o2) = w5 = 0.5 o2 = o1 * w4 + z * w3 Đạo hàm result theo w3 = f'(o2) * o2'(w3) = 0.5 * z = 3.5 47 Đạo hàm result theo w4 = f'(o2) * o2'(w4) = 0.5 * o1 = 1.875 Đạo hàm result theo o1 = g'(o1) = f'(o2) * o2'(o1) = 0.5 * w4 = 0.25 o1 = x * w1 * y * w2 Đạo hàm result theo w1 = g'(o1) * o1'(w1) = 0.25 * x * y * w2 = 1.875 Đạo hàm result theo w2 = g'(o1) * o1'(w2) = 0.25 * x * w1 * y = 1.875 48 CHƯƠNG 2: XÂY DỰNG ỨNG DỤNG 2.1 Bài toán phân lớp hình ảnh: Bài tốn phân lớp (classification) tốn gom cụm (cluster) hai toán lớn lĩnh vực Machine Learnig (ML) Bài toán phân lớp trình phân lớp đối tượng liệu vào hay nhiều lớp cho trước nhờ mơ hình phân lớp (model) Mơ hình xây dựng dựa tập liệu xây dựng trước có gán nhãn (hay cịn gọi tập huấn luyện) Quá trình phân lớp trình gán nhãn cho đối tượng liệu Như vậy, nhiệm vụ tốn phân lớp cần tìm mơ hình phần lớp để có liệu xác định liệu thuộc vào phân lớp Có nhiều tốn phân lớp liệu phân lớp nhị phân (binary), phân lớp đa lớp (multiclass), phân lớp đa trị Bài toán phân lớp nhị phân toán gắn nhãn liệu cho đối tượng vào hai lớp khác dựa vào việc liệu có hay khơng có đặc trưng (feature) phân lớp Bài toán phân lớp đa lớp trình phân lớp liệu với số lượng lớp lớn hai Như với liệu phải xem xét phân lớp chúng vào lớp khác hai lớp toán phân lớp nhị phân Và thực chất toán phân lớp nhị phân toán đặt biệt phân lớp đa lớp Ứng dụng toán sử dụng nhiều rộng rãi thực tế ví dụ tốn nhận dạng khn mặt, nhận diện phương tiện, chữ viết,… 2.2 Bộ sở liệu CIFAR10: Bộ sở liệu CIFAR10 gồm 51000 ảnh khác thuộc 10 classes: airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck Mỗi ảnh có kích thước 32 × 32 pixel 50000 ảnh sử dụng cho training, 1000 ảnh lại dùng cho test Trong số 50000 ảnh training, 1000 ảnh lấy ngẫu nghiên để làm validation set Đây sở liệu tương đối khó ảnh nhỏ object class biến đổi nhiều màu sắc, hình dáng, kích thước Thuật tốn tốt cho toán đạt độ xác 90%, sử dụng Convolutional Neural Network nhiều lớp kết hợp với Softmax regression layer cuối 2.3 Mạng nơ-ron tích chập – DCNN (Deep Convolution Neural Network): Với phát triển phần cứng mạnh mẽ cho phép tính tốn song song hàng tỉ phép tính, tạo tiền đề cho Mạng nơ-ron tích chập trở nên phổ biến đóng vai trị quan trọng phát triển trí tuệ nhân tạo nói chung xử lý ảnh nói riêng Một ứng dụng quan trọng mạng nơ-ron tích chập cho phép máy tính có khả “nhìn” “phân tích”, nói cách dễ hiểu, Convnets sử dụng để nhận dạng hình ảnh cách đưa qua nhiều layer với lọc tích chập để sau có điểm số nhận dạng đối tượng DCNN lấy cảm hứng từ vỏ não thị giác Mỗi nhìn thấy đó, loạt lớp tế bào thần kinh kích hoạt, lớp thần kinh phát tập hợp đặc trưng đường thẳng, 49 cạnh, màu sắc,v.v.v đối tượng lớp thần kinh cao phát đặc trưng phức tạp để nhận thấy ConvNet có 02 phần chính: Lớp trích lọc đặc trưng ảnh (Conv, Relu Pool) Lớp phân loại (FC softmax) Đầu vào (dữ liệu training): Input đầu vào ảnh biểu diển ma trận pixel với kích thước: [w x h x d] • W: chiều rộng • H: chiều cao • D: Là độ sâu, hay dễ hiểu số lớp màu ảnh Ví dụ ảnh RBG lớp ảnh Đỏ, Xanh Dương, Xanh - Conv Layer: Mục tiêu lớp tích chập trích chọn đặc trưng ảnh đầu vào Ảnh đầu vào cho qua lọc chạy dọc ảnh Bộ lọc có kích thước (3x3 5x5) áp dụng phép tích vơ hướng để tính tốn, cho giá trị Đầu phép tích chập tập giá trị ảnh gọi mạng đặc trưng (features map) Thực chất, layer đầu tiên, phép tích chập đơn giản phép tìm biên ảnh, bạn có kiến thức xử lý ảnh Cịn khơng bạn cần hiểu sau cho qua lọc làm lên đặc trưng đối tượng ảnh đường vẽ xung quanh đối tượng, góc cạnh,v.v , layer lại trích xuất tiếp đặc trưng đặc trưng đối tượng đó, việc có nhiều layer cho phép chia nhỏ đặc trưng ảnh tới mức nhỏ Vì gọi mạng đặc trưng - ReLU Layer: ReLU layer áp dụng kích hoạt (activation function) max(0,x) lên đầu Conv Layer, có tác dụng đưa giá trị âm thành Layer khơng thay đổi kích thước ảnh khơng có thêm tham số Mục đích lớp ReLu đưa ảnh mức ngưỡng, Để loại bỏ giá trị âm khơng cần thiết mà ảnh hưởng cho việc tính tốn layer sau - Pool Layer: Pool Layer thực chức làm giảm chiều không gian đầu giảm độ phức tạp tính tốn model ngồi Pool Layer cịn giúp kiểm sốt tượng overffiting Thơng thường, Pool layer có nhiều hình thức khác phù hợp cho nhiều toán, nhiên Max Pooling sử dụng nhiều vào phổ biến với ý tưởng sát với thực tế người là: Giữ lại chi tiết quan trọng hay hiểu tốn giữ lại pixel có giá trị lớn Thơng thường max pooling có kích thước stride=2 Nếu lấy giá trị lớn, thay giảm tính tốn lại làm phá vỡ cấu trúc ảnh mát thơng tin nghiêm trọng Vì mà số chun gia khơng thích sử dụng layer mà thay vào sử dụng thêm lớp Conv Layer tăng số stride lên lần - Fully_Connected Layer (FC): 50 Tên tiếng viết Mạng liên kết đầy đủ Tại lớp mạng này, nơ-ron layer liên kết tới nơ-ron lớp khác Để đưa ảnh từ layer trước vào mạng này, buộc phải dàn phẳng ảnh thành vector thay mảng nhiều chiều trước Tại layer cuối sử dụng hàm kinh điển học máy mà sử dụng softmax để phân loại đối tượng dựa vào vector đặc trưng tính tốn lớp trước 2.4 Một số lớp DCNN dử dụng ứng dụng (Deep Convolution Neural Network) 2.4.1 Lớp tích chập: class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True) Áp dụng tích chập chiều tín hiệu đầu vào bao gồm nhiều mặt phẳng đầu vào Trong trường hợp đơn giản nhất, giá trị đầu lớp có kích thước đầu vào ( N, Cin, H, W) đầu (N, Cout, Hout, Wout) mơ tả cụ thể sau: Trong ⋆ tốn tử tương quan chéo chiều có giá trị, N kích thước batch, C biểu thị số lượng kênh, H chiều cao mặt phẳng đầu vào tính pixel W chiều rộng tính pixel • stride: kiểm soát bước nhảy cho tương quan chéo, số đơn cặp số • padding: kiểm soát số lượng zero-paddings ẩn hai mặt với số điểm padding cho kích thước • dilation: kiểm sốt khoảng cách điểm kernel • group: kiểm soát kết nối đầu vào đầu in_channels out_channels hai phải chia bới group Ví dụ: o Khi group = 1, tất đầu vào kết hợp với tất đầu o Khi group = 2, trình hoạt động trở nên tương đương với việc có hai lớp đối diện cạnh nhau, lớp nhìn thấy nửa kênh đầu vào tạo nửa kênh đầu hai sau ghép nối lại với o Khi groups= in_channels kênh đầu vào kết hợp với lọc riêng (với ) Các thơng số kernel_size, stride, padding, dilation là: • số đơn int – sử dụng trường hợp có giá trị sử dụng cho chiều cao chiều rộng • cặp hai số int - trường hợp này, int sử dụng cho chiều cao int thứ hai cho chiều rộng *Chú ý: Tùy thuộc vào kích thước kernel, số cột (cuối cùng) đầu vào bị mất, tương quan chéo hợp lệ, tương quan chéo hồn tồn Điều dẫn đến người dùng thêm phần đệm (padding) thích hợp 51 *Chú ý: Cấu hình groups == in_channels out_channels == K * in_channels K số nguyên dương theo văn chương gọi tích chập theo chiều sâu Nói cách khác, đầu vào có kích thước (N, Cin, Hiin, Win), bạn muốn tích chập theo chiều sâu với số K theo chiều sâu, bạn sử dụng đối số hàm tạo (in_channels=Cin, out_channels=Cin∗K, , groups=Cin) Các thơng số: • in_channels (int) - Số kênh ảnh đầu vào • out_channels (int) - Số kênh tạo tích chập • kernel_size (int tuple) - Kích thước kernel tích chập • stride (int tuple, tùy chọn) – bước nhảy tích chập Mặc định: • padding (int tuple, tùy chọn) - Zero-padding thêm vào hai bên đầu vào Mặc định: • dilation (int tuple, tùy chọn) - Khoảng cách phần tử kernel Mặc định: • groups (int, tùy chọn) - Số lượng kết nối bị chặn từ kênh đầu vào đến kênh đầu Mặc định: • bias (bool, tùy chọn) - Nếu True, thêm bias học vào đầu Mặc định: True Cơng thức: • Đầu vào: (N, Cin, Hiin, Win) • Đầu ra: (N, Cout, Hout, Wout) đó: Biến: • weight (Tensor) - trọng số học mơ-đun hình dạng (out_channels, in_channels, kernel_size [0], kernel_size [1]) • bias (Tensor) - bias học mơ-đun hình dạng (out_channels) 2.4.2 Lớp pooling: class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False) Áp dụng pooling tối đa chiều tín hiệu đầu vào bao gồm nhiều mặt phẳng đầu vào Trong trường hợp đơn giản nhất, giá trị đầu lớp có kích thước đầu vào ( N, C, H, W), đầu (N, C, Hout, Wout) kernel_size (kH, kW) mơ tả cụ thể sau: 52 Nếu padding khác 0, đầu vào chèn hoàn toàn hai bên cho số điểm padding dilation kiểm soát khoảng cách điểm kernel Các tham số kernel_size, stride, padding, dilation là: • số đơn int – sử dụng trường hợp có giá trị sử dụng cho chiều cao chiều rộng • cặp hai số int - trường hợp này, int sử dụng cho chiều cao int thứ hai cho chiều rộng Các thơng số: • kernel_size - kích thước cửa sổ để lấy tối đa • stride – bước nhảy cửa sổ Giá trị mặc định kernel_size • padding - chèn ẩn để thêm vào hai bên • dilation - tham số kiểm soát bước nhảy phần tử cửa sổ • return_indices - True, trả mục tối đa với kết đầu Hữu ích Unpooling sau • ceil_mode - True, sử dụng ceil thay cho floor để tính tốn hình dạng đầu Cơng thức: • Đầu vào: (N, C, Hiin, Win) • Đầu ra: (N, C, Hout, Wout) đó: 2.4.3 Hàm truyền (activation function): torch.nn.functional.relu(input, inplace=False) → Tensor Áp dụng hàm ReLU (x) = max (0, x) 53 Hình Hàm truyền Tham số: inplace - tùy chọn thực thao tác chỗ Mặc định: False Công thức: • Đầu vào: (N, *), * có nghĩa số • Đầu ra: (N, *), * giống với đầu vào 2.4.4 Lớp dropout: class torch.nn.Dropout2d(p=0.5, inplace=False) Tự động toàn kênh tensor đầu vào Các kênh thành ngẫu nhiên lần gọi chuyển tiếp Thông thường đầu vào đến từ mô-đun nn.Conv2d Như mô tả báo Efficient Object Localization Using Convolutional Networks, điểm ảnh lân cận đồ tính có tương quan chặt chẽ (như trường hợp bình thường lớp tích chập sớm) sau i.i.d dropout khơng thường xun có kích hoạt không dẫn đến kết giảm tỷ lệ học hiệu Trong trường hợp này, nn.Dropout2d () giúp thúc đẩy tính độc lập đồ tính nên sử dụng thay Các thơng số: 54 • • p (float, optional) - xác suất phần tử đổi thành inplace (bool, tùy chọn) - Nếu đặt thành True, thực thao tác inplace Cơng thức: • Đầu vào: (N, C, Hi, W) • Đầu ra: (N, C, H, W) 2.4.5 Lớp liên kết đầy đủ (fully connected layer): class torch.nn.Linear(in_features, out_features, bias=True) Áp dụng phép chuyển đổi tuyến tính cho liệu đến: y = xAT + b Các thơng số: • in_features - kích thước mẫu đầu vào • out_features - kích thước mẫu đầu • bias - Nếu đặt thành False, lớp học bias thêm vào Mặc định: True Cơng thức: • Đầu vào: (N, ∗,in_features), ∗ có nghĩa • Đầu ra: (N, ∗,out_features), tất kích thước trừ kích thước cuối có dạng với đầu vào 2.5 Kết xây dựng ứng dụng: Giao diện bước trình xây dựng phân lớp hình ảnh (image classifier): • Bước 1: Load chuẩn hóa tập liệu huấn luyện Hình 2 Load chuẩn hóa tập liệu huấn luyện 55 • Bước 3: Hiển thị mơ hình mạng hàm mát Hình Mơ hình mạng hàm mát 56 • Bước 4: Huấn luyện tập liệu Hình Huấn luyện tập liệu 57 • Bước 5: Kiểm tra mạng tập liệu kiểm tra Hình Kiểm tra mạng tập liệu kiểm tra 58 2.6 Hướng dẫn sử dụng: • Bước 1:Click vào nút Open Dataset để chọn Dataset huấn luyện, sau load thành cơng Dataset hình hiển thị: Số lớp Dataset, tên lớp, số mẫu tập hiển thị hình ảnh minh họa cho tập • Bước & 3: Sau load Dataset thành công bước 1, click vào nút Continue để chuyển sang Bước & 3, tiếp tục click vào nút Kiểm tra model, hình hiển thị mơ hình mạng nơron • hàm mát Sau kiểm tra, click vào nút Continue để chuyển sang bước Bước 4: Tại bước này, click vào nút Thông số huấn luyện để kiểm tra thay đổi số • thông số huấn luyện theo ý muốn Sau kiểm tra click vào nút Train, nhập tên để lưu lại mơ hình mạng sau huấn luyện, sau trình huấn luyện bắt đầu Khi trình huấn luyện hồn tất có thơng báo đường dẫn chứa file lưu lại ứng dụng hiển thị đồ thị huấn luyện • Bước 5: Click vào nút Test model chọn file mơ hình mạng lưu trước đó, sau test hồn tất ứng dụng hiển thị kết kiểm tra đồ thị test 59 KẾT LUẬN Những đóng góp tập lớn: Qua nghiên cứu thực nghiệm, tập lớn đạt kết sau: • Nghiên cứu tông quan mạng nơron, deep learning số ứng dụng deep learning • Nghiên cứu chi tiết mơ hình học sâu tiêu biểu DCNN • Ứng dụng kĩ thuật tìm hiểu để giải tốn phân lớp hình ảnh thơng qua mơ hình huấn luyện DCNN • Đã tiến hành thiết kế ứng dụng để huấn luyện kiểm tra tập liệu Hướng phát triển: Việc cải tiến mơ hình DCNN ứng dụng mơ hình vào thực tế nhà nghiên cứu quan tâm xây dựng Bài tập lớn đạt số kết nhiều hạn chế điều kiện mặt thời gian phạm vi nghiên cứu đề tài Vì vậy, hướng nghiên cứu ứng dụng là: • Nghiên cứu thêm mơ hình DCNN để tăng độ xác cho việc huấn luyện, nhận dạng hình ảnh từ ứng dụng thực tế • Có thể phát triển ứng dụng liệu đầy đủ chi tiết nhiều lĩnh vực 60 TÀI LIỆU THAM KHẢO [1] Chia sẻ Mạng nơ-ron tích chập (Convolutional Neural Networks or ConvNEts), Nguyễn Hoàng Nam, https://ereka.vn/post/chia-se-ve-mang-noron-tich-chap- convolutional-neural-networks-or-convnets-52790224348847566 [2] Convolutional Neural Networks (CNN) for CIFAR-10 Dataset, Parneet Kaur, http://parneetk.github.io/blog/cnn-cifar10/ [3] PyTorch - Data loading, preprocess, display and torchvision, Jonathan Hui, https://jhui.github.io/2018/02/09/PyTorch-Data-loading-preprocess_torchvision/ [4] Pytorch Documentation, https://pytorch.org/docs/stable/index.html [5] Python torchvision.datasets.ImageFolder() Examples, nhiều tác giá, https://www.programcreek.com/python/example/105102/torchvision.datasets.Imag eFolder 61 ... torch.FloatTensor torch.DoubleTensor torch.HalfTensor torch.ByteTensor torch.CharTensor torch.ShortTensor torch.IntTensor torch.LongTensor GPU Tensor torch.cuda.FloatTensor torch.cuda.DoubleTensor torch.cuda.HalfTensor... torch.cuda.HalfTensor torch.cuda.ByteTensor torch.cuda.CharTensor torch.cuda.ShortTensor torch.cuda.IntTensor torch.cuda.LongTensor Kết quả: [torch.FloatTensor of size 5] import torch x1= torch.FloatTensor(range(5))... 5 [torch.FloatTensor of size 3x2] -2 -2 [torch.FloatTensor of size 3x2] 20 -8 -10 [torch.FloatTensor of size 3x2] 43 • Tốn tử bình phương: ** / torch.pow() import torch x = torch.FloatTensor([1,2,3])