HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG
--------------------------------
LƢƠNG CÔNG DUẨN
NGHIÊN CỨU ỨNG DỤNG THƢ VIỆN TENSORFLOW TRONG
MACHINE LEARNING
Chuyên ngành: Kỹ thuật Viễn thông
Mã số: 85.20.208
TÓM TẮT LUẬN VĂN THẠC SĨ KỸ THUẬT
HÀ NỘI – 2018
Luận văn được hoàn thành tại:
HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG
Người hướng dẫn khoa học: TS. NGUYỄN NGỌC MINH
Phản biện 1:
Phản biện 2:
Luận văn đã được bảo vệ trước Hội đồng chấm luận văn thạc sĩ tại Học viện
Công nghệ Bưu chính Viễn thông
Vào lục:
.......... giờ .......... ngày tháng năm 2018
Có thể tìm hiểu luận văn tại:
‐ Thư viện của Học viện Công nghệ Bưu chính Viễn Thông
2
CHƢƠNG I:
GIỚI THIỆU VỀ MACHINE LEARNING
1.1. Khái quát lịch sử phát triển và những thành tựu đạt đƣợc của Machine
Learning
Machine Learning (Học máy hoặc Máy học) là một lĩnh vực của trí tuệ nhân tạo
liên quan đến việc nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống "học" tự
động từ dữ liệu để giải quyết những vấn đề cụ thể. Trong machine learning, các máy
tính không cần phải được lập trình một cách rõ ràng nhưng có thể tự thay đổi và cải
thiện các thuật toán của chúng.
Hình 1. 1: Biểu đồ thời gian quá trình phát triển của trí tuệ nhân tạo
Trí tuệ nhân tạo được coi là một nhân tố lớn trong cách mạng công nghiệp lần thứ
4 của thế giới. Nó đang được áp dụng rộng rãi trong rất nhiều các lĩnh vực như: Nông
nghiệp, công nghiệp, y tế, xã hội,…. và không chỉ dành cho các nhà khoa học, tổ chức
hay công ty lớn mà mọi người đều có thể áp dụng trong các bài toán có thể gặp trong
cuộc sống.
1.2. Một số mô hình thƣờng dùng trong Machine Learning và Deep Learning
1.2.1.
Học có giám sát (Supervised Learning)
Supervised learning là khi chúng ra có một tập hợp biến đầu vào
X {x1 , x2 ,..., xN } và một tập nhãn tương ứng Y { y1 , y2 ,..., yN } trong đó xi , yi là
1.2.2.
Học không giám sát (Unsupervised Learning)
Không phải tất cả dữ liệu thu thập được trong thực tế đều có giá trị nhãn được
xác định mà chúng ta chỉ có tập dữ liệu đầu vào. Thuật toán học không giám sát lúc
này chủ yếu dựa vào cấu trúc của tập dữ liệu để thực hiện công việc nào đó như
phân nhóm hoặc giảm chiều dữ liệu để làm gọn tập dữ liệu thuận tiện cho việc lưu
trữ và tính toán sau này. Các bài toán Unsupervised learning được tiếp tục chia nhỏ
thành hai loại là: Phân nhóm và giảm chiều dữ liệu.
4
1.2.2.1.
Phân nhóm (Clustering)
Bài toán phân nhóm là bài toán phân nhóm toàn bộ dữ liệu từ tập đầu vào X
thành các nhóm nhỏ dựa vào sự liên quan giữa các dữ liệu trong mỗi nhóm. Bài
toán này tương tự như bài toán phân loại ở mục học có giám sát bị bỏ đi tập nhãn
đầu ra tuy nhiên việc phân nhóm như thế nào kết quả đầu ra là hoàn toàn không
thể xác định cho đến khi thuật toán được thực hiện.
1.2.2.2.
Giảm chiều dữ liệu (Dimensionality reduction)
Trên thực tế có một số thông số của dữ liệu đầu vào không ảnh hưởng hoặc
ảnh hưởng không nhiều đến các kết quả đầu ra thực tế vì thế chúng ta có thể loại
bỏ các thông số này để tiết kiệm tài nguyên lưu trữ và làm gia tăng tốc độ tính
toán của các hệ thống học. Điều này có thể được thực hiện bởi các thuật toán
1.3.1.
Gradient Descent
Thuật toán được coi là thuật toán huấn luyện cơ bản nhất trong Machine
Learning. Giả sử chúng ta bắt đầu ở một điểm w0 sau đó tiến hành lặp để tìm điểm
wi khi các thông số mà chúng ta mong muốn đều đã được đáp ứng. Mỗi bước di
chuyển từ wi đến wi 1 theo chiều di gi . Vì vậy, để tiến hành chúng ta tiến hành lặp
theo chuỗi công thức sau:
wi 1 wi gii
Hệ số được coi là tỉ lệ học.
Việc tối ưu vector tham số được chia làm 2 bước sau:
Tính toán giá trị và chiều sai số của thông số hiện tại.
Hiệu chỉnh các thông số của phương trình
1.3.2.
Phương pháp Newton
Phương pháp Newton là thuật toán tối ưu hóa thứ hai và nó sử dụng phương
pháp trên nền tảng ma trận Hessian. Mục tiêu của thuật toán này là tìm hướng huấn
luyện tốt hơn bằng cách sử dụng đạo hàm bậc hai của hàm mất mát.
Thuật toán Newton cho thấy hiệu quả cao trong việc tìm giá trị tối thiểu của
hàm mất mát. Tuy nhiên, thuật toán này có một vấn đề khó khăn trong triển khai
thực tế đó là vấn đề tốn tài nguyên hệ thống trong việc tính toán ma trận đảo của ma
trận Hessian ( H 1 ).
1.3.3.
Gradient kết hợp
tính xấp xỉ cả ma trận Hessian và nghịch đảo của nó.
Ý tưởng của phương án này là tính xấp ma trận Hessian và nghịch đảo của nó
bằng một ma trận khác có tên là G.
Thuật toán này được sử dụng trong rất nhiều trường hợp vì khả năng tính toán
đã được cả thiện so với phương pháp Newton và về tốc độ hội tụ thì nhanh hơn rất
nhiều so với Gradient Desent và Gradient kết hợp.
1.3.5.
Thuật toán Levenberg-Marquardt
Thuật toán Levenberg-Marquardt là thuật toán được thiết kế hoạt động dành
riêng cho hàm mất mát được xây dựng trên nền tảng tổng bình phương của các sai
số. Thuật toán này hoạt động dựa trên nền tảng vector gradient và ma trận Jacobian
Thuật toán trên có ưu điểm tích hợp được ưu điểm của cả 2 phương pháp
Gradient Desent và Newton tại các thời điểm phù hợp khác nhau và đặc biệt nó được
thiết kế để huấn luyện rất nhanh. Tuy nhiên, phương pháp này cũng có nhược điểm
là khi tập mẫu lớn thuật toán sẽ chiếm tài nguyên rất lớn vì vậy thuật toán này không
được ưu tiên sử dụng đối với các bài toán huấn luyện với lượng dữ liệu cũng như
kiến trúc mạng lớn.
7
1.3.6.
So sánh các thuật toán về tốc độ và bộ nhớ
Hình 1. 2: So sánh về tốc độ xử lý và bộ nhớ của các thuật toán
Dựa vào hình cho thấy thuật toán có tốc độ nhanh nhất và cũng chiếm nhiều bộ
nhớ nhất là thuật toán Levenberg-Marquardt và thuật toán cơ bản nhất có tốc độ
1.4.2.2. Tensor
Tensorflow cung cấp một loại dữ liệu mới được gọi là Tensor trong thế giới
của Tensorflow, mọi kiểu dữ liệu đều được quy về một mối được gọi là Tensor
hay trong Tensorflow.
1.4.2.3. Rank
Rank là bậc hay độ sâu của một Tensor. Ví dụ như Tensor = [1] sẽ có rank
là 1, Tensor = [[[1,1,1], [178,62,74]]] sẽ có rank bằng 3, Tensor = [[1,1,1],
[178,62,74]] sẽ có rank bằng 2. Cách nhanh nhất để xác định rank của một Tensor
là đếm số lần mở ngoặc vuông cho đến giá trị khác ngoặc vuông đầu tiên. Việc
phân rank này khá quan trọng vì nó đồng thời cũng giúp phân loại dữ liệu của
Tensor.
1.4.2.4. Shape
Shape là một tuple có số chiều bằng với rank của Tensor tương ứng dùng để
mô tả lại cấu trúc của Tensor đó.
1.4.2.5. Toán tử - Operator
Được viết tắt là op, khái niệm Operator là toán tử được dùng để thực thi
Tensor tại node đó. Các toán tử này có thể là Hằng số, Biến số, Phép cộng, Phép
nhân.
1.4.2.6. DType
Đây là kiểu dữ liệu của các phần tử trong Tensor. Vì một Tensor chỉ có duy
nhất một thuộc tính DType nên từ đó cũng suy ra là chỉ có duy nhất một kiểu
DType duy nhất cho toàn bộ các phần tử có trong Tensor hiện tại.
1.5. Kết luận
Chương này đã trình bày sơ lược được về quá trình hình thành và phát triển của
trí tuệ nhân tạo, học máy, học sâu và giới thiệu được các mô hình mạng, các thuật toán
thông dụng trong các chương trình về học máy. Ngoài ra, chương này cũng đã giới
9
Giới thiệu mạng Neural truyền thống (MLP – Multilayer Perceptron)
2.2.1.1. Vấn đề đặt ra
2.2.1.2. Các ký hiệu và khái niệm
a. Lớp mạng
11
Hình 2. 1: Ví dụ về một mạng MLP gồm 2 lớp ẩn
b. Nút mạng
Một hình tròn trong 1 lớp như ở hình trên được gọi là một nút mạng. Tên của
các nút mạng ở các lớp có tên theo tên lớp như sau: nút vào, nút ẩn, nút ra. Tại mỗi
nút mạng sẽ có một giá trị z là giá trị đầu vào và một giá trị đầu ra a sau khi chịu
sự tác của hàm kích hoạt.
c. Trọng số và số gia
Một mạng MLP có L lớp sẽ có L ma trận trọng số. Các ma trận này được ký
hiệu là W (l ) ¡
d ( l 1)d ( l )
, l 1, 2,..., L . Ma trận W (l ) thể hiện cho toàn bộ kết nối giữa
lớp l 1 đến lớp thứ l . Trong đó cách thức tính của liên kết của các lớp được thể
hiện ở công thức của hình trên. Tập hợp các trọng số đó lần lượt được ký hiệu là W
và b .
d. Hàm kích hoạt
Ở hàm sigmoid hoặc tanh với giá trị đầu vào lớn hàm sẽ cho giá trị đầu ra gần
với 1, với đầu vào giá trị nhỏ hàm sẽ có giá trị đầu ra gần với 0. Đây là hàm được sử
Hợp nhất (Pooling)
Hợp nhất là công cụ hỗ trợ làm co các hình ảnh lại nhỏ hơn mà vẫn giữ nguyên
các thông tin quan trọng trong bức ảnh đó. Hợp nhất sử dụng một mặt nạ ma trận
vuông có kích thước là n*n duyệt qua tất cả các ô của ma trận ảnh từ đó tìm ra điểm có
giá trị lớn nhất hoặc lấy giá trị trung bình tất cả các điểm và thay thế cho cả cụm ma
trận có kích thước n*n đó của bức ảnh. Trong hai hình thức lấy trung bình và lấy giá
trị lớn nhất của cả mặt nạ thì phương pháp lấy giá trị lớn nhất (Gọi là Max pooling)
hiện đang cho thấy tính hiệu quả tốt hơn.
13
Tinh chỉnh tuyến tính (ReLU)
Công việc của ReLU rất đơn giản trong tính toán nhưng đóng vai trò quan trọng
trong hoạt động của mạng CNN. Công việc thực hiện của nó tiến hành thay các số âm
bằng các số 0. Điều này giúp cho CNN giữ được độ tin cậy toán học nhờ việc giữ các
giá trị không bị mắc kẹt gần 0 hoặc bị trôi về vô cực. Đầu ra của ReLU là một ma trận
có kích thước giống với ma trận đầu vào.
Lớp kết nối đầy đủ (Fully connected layers)
Lớp kết nối đầy đủ là một công cụ quan trọng nữa của CNN thực hiện lấy các
hình ảnh được lọc ở các cấp trước đó và tiến hành chuyển nó thành các phiếu bầu.
Trong trường hợp của ví dụ này là phiếu bầu dành cho “X” hay “O”. Thay vì coi đầu
vào như một mảng hai chiều, lớp này coi bức ảnh như một danh sách đơn và tất cả đều
được xử lý giống nhau. Mỗi giá trị bỏ phiếu riêng bầu cho hình ảnh hiện tại là “X” hay
“O”. Loại nào thu được nhiều phiếu chọn nhất kết quả đầu ra tương ứng sẽ được chọn
là loại đó.
2.3. Lựa chọn thuật toán huấn luyện
2.3.1.
Giới thiệu về thuật toán Gradient Descent
thuận với f '( xt )
Từ những nhận xét trên, có một cách tiếp cận đơn giản là cập nhật giá trị xt qua
các vòng lặp theo công thức sau:
xt 1 x t f '( xt )
Trong đó hệ số được gọi là tốc độ học (Learning rate).
2.3.3.
Ví dụ về Gradient Descent trên ngôn ngữ Python và nhận xét
Ở đây, em trình bày ví dụ trên một hàm 1 biến đơn giản để kiểm tra khả năng
hoạt động của thuật toán Gradient Descent.
2.3.4.
Một số biến thể của Gradient Descent
a. Gradient Descent với Momentum
b. Nesterov accelerated gradient
2.3.5.
Điều kiện dừng
Theo lý thuyết chương trình tối ưu chỉ dừng cho đến khi tìm được điểm toàn cục
thực sự của phương trình, tuy nhiên như đã nói ở trên trong thực tế việc này là gần như
15
không thể do việc chọn các hệ số không thể quá nhỏ và thời gian chấp nhận được để
thực hiện tối ưu một chương trình là có hạn. Có một số phương pháp như sau:
Giới hạn số vòng lặp
tiến hành xử lý mô hình trên tập dữ liệu thực tế em dự kiến sử dụng thư viện vào các
bộ lọc tiền xử lý thực hiện chuẩn đầu vào dữ liệu phù hợp với mô hình huấn luyện.
2.5. Xây dựng mô hình và cấu trúc của chƣơng trình
Ban đầu, em thử nghiệm ở mức độ đơn giản nhất vao gồm kiến trúc của mạng như
sau:
16
Hình 2. 5: Kiến trúc mạng thiết kế ban đầu
Sau khi tiến hành thử nghiệm và huấn luyện, mạng đã học cho độ chính xác là
46.14%. Mạng đã cho thấy sự hoạt động của mạng CNN tuy nhiên khả năng trích chọn
đặc trưng hạn chế. Ngoài ra, mức độ học sâu của mạng còn đơn giản. Từ đánh giá này em
tiến hành cải tiến thêm mạng và thêm vào một số khối nhất định. Sau khi trải qua quá
trình nâng cấp và thử nghiệm, em đã tiến hành thiết kế được kiến trúc mạng cho độ chính
xác là 92,6% như sau:
Hình 2. 6: Kiến trúc mạng đƣợc thiết kế trong luận văn
Ở mạng này, mức độ sâu của mạng đã tăng thêm 1 lớp trích chọn đặc trưng nữa
(Gồm 3 lớp: Tích chập, tinh chỉnh tuyến tính, hợp nhất đặc trưng), ngoài ra em tiến hành
bổ sung thêm một lớp kết nối đầy đủ để tăng mức độ phức tạp của khối bầu chọn của các
thông số do đó khả năng mở rộng thông tin học của mạng được cải thiện thêm rất nhiều.
Mạng CNN được xây dựng bao gồm 4 lớp được trình bày chi tiết như sau:
1
Tên lớp
Đầu vào dữ liệu
Đầu ra = “FC”
Đầu vào = “FC”
Đầu ra: 43 bit (43 loại biển báo)
Bảng 2. 1: Chi tiết về cấu trúc mạng CNN sử dụng
17
2.6. Kết luận
Chương hai này đã trình bày được chi tiết về mô hình mạng neural cơ bản từ đó giới
thiệu về cấu trúc, cách thức của một mạng neural tích chập - CNN, thuật toán huấn luyện
Gradient Descent và các biến thể của nó. Từ hai lựa chọn này kết hợp với các công cụ hỗ
trợ khác một mô hình mạng học máy đã được xây dựng để tiến hành huấn luyện và thử
nghiệm. Chương sau sẽ trình bày chi tiết về quá trình huấn luyện và đánh giá hoạt động
của mạng từ đó đưa ra kết luận và các định hướng nghiên cứu.
2
CHƢƠNG III:
XÂY DỰNG PHẦN MỀM, TRIỂN KHAI HUẤN LUYỆN VÀ ĐÁNH
GIÁ HIỆU NĂNG CỦA MÔ HÌNH
3.1. Lựa chọn nền tảng và xây dựng chƣơng trình
3.1.1.
Ngôn ngữ Python
Ở luận văn này em đã lựa chọn ngôn ngữ Python làm công cụ chính để thiết kế
phần mềm thực hiện mô phỏng, huấn luyện và thử nghiệm các mô hình mạng đã được
xây dựng. Ngôn ngữ này cho phép người lập trình thay đổi các phiên bản kiến trúc
3
nhiều hình ảnh về nhiều loại biển báo phổ biến khác nhau tại Đức. Một số thông tin về
tập dữ liệu này như sau:
Mỗi bức ảnh chỉ chứa một loại biển báo
Chứa 43 loại biển báo phổ biến nhất tại Đức
Chứa tổng số hơn 50.000 bức ảnh về biển báo giao thông.
Ảnh được lưu trữ dưới nhiều kích thước khác nhau.
Dưới đây là đồ thị về sự phân bố hình ảnh trên mỗi loại biển báo:
Hình 3. 1: Sự phân bố số lƣợng ảnh trên mỗi loại trong tập dữ liệu
Có thể thấy có sự khác biệt rất lớn về số lượng mẫu trên mỗi loại. Các loại biển báo
ở nửa đầu của tập mẫu có số lượng lớn tuy nhiên ở nửa sau có sự sụt giảm rất lớn về số
lượng. Điều này có thể khiến cho độ chính xác của mô hình mạng đối với các loại biển
báo ở nửa sau của tập mẫu thấp hơn nhiều so với các biển báo ở nửa đầu của biển báo.
Để giải quyết bài toán trên cần tiến hành tạo thêm các ảnh mẫu cho các loại biển
báo có số lượng nhỏ. Em sử dụng thư viện OpenCV tiến hành xoay một góc lệch trong
khoảng 0-10o, làm mờ hoặc gây một vài nhiễu nhỏ đối với các ảnh gốc để thu được thêm
các dữ liệu mới làm tăng sự đa dạng và làm cân bằng các mẫu trong một loại của tập dữ
liệu. Sau khi tiến hành thực hiện tạo ra các dữ liệu mới bằng phương pháp trên, tập mẫu
mới có phân bố như sau:
4
Hình 3. 2: Phân bố số mẫu trên mỗi loại sau khi cân bằng
được dự đoán đầu ra là 0.252 giây.
5
Hình 3. 3: Đồ thị quá trình huấn luyện mạng
Đồ thị trên cho thấy độ hội tụ của mạng và quá trình thay đổi sai số cũng như độ
chính xác của mạng trong suốt quá trình huấn luyện. Ở đây, mạng được tiến hành huấn
luyện trong khoảng gần 40.000 bước (sau 50 lần lặp huấn luyện) cho kết quả độ chính
xác là 92,6% nhưng ở giai đoạn từ bước thứ 10.000 giá trị sai số cũng như độ chính xác
của mạng thay đổi rất chậm cho thấy sau khoảng 13 lần lặp mạng đã đạt được các con số
gần như hội tụ.
3.4. Đánh giá và định hƣớng phát triển
Mạng được xây dựng có kiến trúc tương đối đơn giản nhưng đã cho kết quả đáp ứng
tương đối tốt trên tập dữ liệu GTSRB. Đây là kết quả chưa thực cao so với các nghiên
cứu khác về mạng CNN đối với bài toán nhận diện hình ảnh trên thế giới (Hiện tại là
99,46%) nhưng đã chứng tỏ được sự hoạt động tốt của mô hình. Kết quả này tạo tiền đề
tốt cho những nghiên cứu tiếp theo của em về Machine Learning nói chung và về xây
dựng mô hình xe tự lái nói riêng.
Độ chính xác của mạng đạt được con số 92,6% trên tập dữ liệu thử nghiệm. Hiện
nay, đây mới là con số được thử nghiệm trên tập dữ liệu thử nghiệm chưa phải trên dữ
liệu thực tế. Trong định hướng nghiên cứu và phát triển tiếp theo, em định hướng tiến
hành thử nghiệm mạng trên một số hình ảnh ở môi trường thực tế từ đó đưa ra đánh giá
6
về khả năng hoạt động của mạng đối với môi trường thực tế từ đó rút ra điều chỉnh cần
Tìm hiểu các phương pháp huấn luyện cơ bản, thông dụng hiện nay trong đó tập
trung vào phương pháp cơ bản nhất là: Gradient Descent.
Tìm hiểu về cấu trúc và cách thức sử dụng của ngôn ngữ lập trình Python, thư viện
Tensorflow, OpenCV và một số công cụ khác.
Xây dựng được một mô hình mạng CNN cho bài toán nhận diện biển báo giao
thông sử dụng ngôn ngữ Python và thư viện Tensorflow. Kết quả mạng cho thấy độ
chính xác tương đối cao (92,6%) và thời gian đáp ứng cho một dữ liệu đầu vào là
0.253s.
Về định hướng nghiên cứu tiếp theo, học viên dự kiến sẽ thực hiện các công việc sau:
Hoàn thiện kiến trúc mạng CNN cho bài toán nhận diện biển báo giao thông để đạt
kết quả chính xác cao hơn (Dự kiến khoảng 95%)
Cải thiện tốc độ xử lý bằng cách sử dụng GPU có hỗ trợ CUDA bằng các tính toán
song song