Tải bản đầy đủ (.pdf) (25 trang)

Nghiên cứu ứng dụng thư viện Tensorflow trong Machine Learning (Luận văn thạc sĩ)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (965.18 KB, 25 trang )

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




1

MỞ ĐẦU
Hiện nay, Machine learning đang trở thành một trong những thành phần dự kiến có
ảnh hưởng lớn đến cuộc cách mạng công nghiệp 4.0. Các chương trình về Data Meaning,
Machine learning, Deep learning, Big Data kết hợp với lượng dữ liệu khổng lồ do IoT
(Internet of Things) thu thập đang được tập trung phát triển mạnh mẽ trong một số năm
gần đây. Xu thế này đang ngày càng ảnh hưởng lớn tới cuộc sống thường ngày, sản xuất,
hoạt động xã hội và cả những phương thức quản lý và giám sát của chính phủ. Việc áp
dụng khả năng học máy trong khoa học công nghệ cũng như trong cuộc sống sẽ dần trở
nên phổ biến. Nắm bắt xu thế đó đồng thời theo định hướng nghiên cứu sau này của bản
thân em muốn được sử dụng thời gian nghiên cứu và xây dựng luận văn này để thực hiện
nghiên cứu về Machine learning nói chung và tập trung vào Deep learning từ đó phát triển
các ứng dụng cơ bản làm nền tảng để tiếp tục phát triển các ứng dụng về Machine
learning ở mức cao.
Trong rất nhiều các bộ thư viện hỗ trợ nghiên cứu và phát triển về Machine
learning nói chung và Deep learning nói riêng có bộ thư viện Tensorflow là một công cụ
có tuổi đời khá trẻ nhưng có năng lực rất tốt và được đánh giá cao trong lĩnh vực này. Ở
luận văn em định hướng nghiên cứu về các mô hình và các thuật toán cơ bản của Machine
learning nói chung và Deep learning nói riêng từ đó sử dụng Tensorflow để thử nghiệm
sử dụng thư viện này đồng thời phát triển một mô hình Deep learning cơ bản sử dụng bộ
thư viện này.
Sau quá trình tìm hiểu và nghiên cứu học viên đã xây dựng luận văn với cấu trúc
gồm 3 chương chính như sau:
 Chƣơng I: Giới thiệu về Machine Learning
 Chƣơng II: Xây dựng mô hình, lựa chọn thuật toán, tiến hành thử nghiệm
 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 huấn luyện của mô hình



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à


các vector.
yi  f ( xi ), i


3
Với mục tiêu tìm hàm xấy xỉ f tốt nhất có thể để khi có tập giá trị x mới
hàm f có thể tính toán được nhãn một cách tương ứng bằng hàm đã xây dựng
được từ tập mẫu ban đầu.

Hình 1. 1: Mô hình học máy có giám sát

Thuật toán học có giám sát được chia làm hai loại chính đó là: Phân loại
(Classification) và Hồi quy (Regression).
1.2.1.1.

Phân loại (Classification)

Một bài toán được gọi là phân loại nếu các nhãn của dữ liệu đầu vào được
chia thành một số hữu hạn các nhóm theo các nhãn. Công việc phân loại tiến hành
của mô hình học máy sẽ tiến hành học dựa vào tập dữ liệu có sẵn từ đó sau khi
chúng ta đưa dữ liệu mới, nó có thể chỉ ra cho chúng ta dữ liệu ấy có thể là một
trong các loại nhãn đã được khai báo trong tập dữ liệu mẫu.
1.2.1.2.

Hồi quy (Regression)

Đối với các bài toán mà tập đích trong tập dữ liệu huấn luyện có dạng liên
tục không thể hoặc rất khó để có thể phân nhóm thì bài toán được xếp vào dạng
bài toán hồi quy.


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

giảm chiều dữ liệu. Với đầu vào là tất cả các thông số chúng ta đã thu thập được
và đầu ra là tập dữ liệu đã được loại bỏ đi các thành phần dữ liệu không thực sự
cần thiết.
1.2.3.

Học bám giám sát (Semi-Supervised Learning)
Trong thực tế có những bài toán có tập dữ liệu mà chỉ một phần trong lượng

lớn dữ liệu được đính nhãn đầu ra. Bài toán này là bài toán nằm giữa bài toán học
có giám sát và học không có giám sát.
Một thuật toán học bán giám sát được sử dụng sẽ học các ví dụ có nhãn, sau
đó tiến hành gán nhãn cho một số (có lựa chọn) ví dụ không có nhãn một cách hợp
lý, có đánh giá chất lượng công việc hay độ chính xác. Tiếp theo, chọn các ví dụ
vừa được gán nhãn có độ tin cậy cao (vượt trên một ngưỡng chọn trước) đưa vào
kết hợp với tập dữ liệu có nhãn, tạo thành một tập dữ liệu huấn luyện mới sau đó
áp dụng một phương pháp kiểm thử để đánh giá hiệu năng/độ chính xác của mô
hình.
1.2.4.

Học củng cố (Reinforcement Learning)
Học củng cố là các bài toán giúp cho một hệ thống tự động xác định hành vi

dựa trên hoàn cảnh để đạt được lợi ích cao nhất. Hiện tại, học củng cố chủ yếu
được áp dụng vào Lý Thuyết Trò Chơi (Game Theory), các thuật toán cần xác định
nước đi tiếp theo để đạt được điểm số cao nhất.


5

1.3. Một số thuật toán đặc trƣng trong huấn luyện Machine Learning

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  gii

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

Thuật toán Gradient kết hợp được coi là thuật toán kết hợp giữa Gradient

Desent và thuật toán Newton. Phương pháp này được xây dựng với mục tiêu khắc
phục sự hội tụ chậm của phương pháp Gradient Desent và giảm bớt sự phức tạp về
tính toán và lưu trữ bộ nhớ của phương pháp Newton.
Giả sử d là vector huấn luyện, chúng ta tiến hành bắt đầu huấn luyện với
vector thông số w0 và khởi tạo vector huấn luyện theo công thức d   gi . Phương
pháp gradient kết hợp được tiến hành dựa vào phương trình lặp sau:
di 1  gi 1  di i


6
Với  i được gọi là thông số kết hợp. Thông số này có rất nhiều cách tính trong
đó có hai cách phổ biến đó là 2 phương pháp của Fletcher, Reeves và Polak, Ribiere.
Sau khi tính toán được thông số vector huấn luyện chúng ta có thể tiến hành
cập nhật giá trị tham số theo công thức sau:
wi 1  wi  di .i

Phương pháp này được đánh giá là có hiệu quả huấn luyện tốt hơn phương
pháp Gradient Desent ngoài ra do phương pháp này không yêu cầu tính toán đối với
ma trận Hessian vì vậy nó thường được khuyến nghị dùng đối với các mạng neural
có số tham số rất lớn.
1.3.4.

Phương pháp Quasi-Newton
Từ những ưu và nhược điểm của phương pháp Newton một phương pháp khác

có tên là Quasi-Newton được thiết kế ra để giải quyết những hạn chế đó của phương
pháp Newton. Phương án này tận dụng khả năng tính toán nhan của phương pháp
Newton nhưng tránh việc tính toán ma trận Hessian bằng cách sử dụng phương án

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 độ

chậm nhưng cũng chiếm ít bộ nhớ nhất là thuật toán Gradient Desent. Phương pháp
có khả năng cân bằng tốt nhất giữa tốc độ và bộ nhớ là phương pháp Quasi-Newton.

1.4. Giới thiệu về bộ thƣ viện Tensorflow và ứng dụng
1.4.1.

Giới thiệu
TensorFlow là một thư viện phần mềm mã nguồn mở dành cho máy học trong

nhiều loại hình tác vụ nhận thức và hiểu ngôn ngữ.. TensorFlow được phát triển bởi
đội Google Brain cho mục đích nghiên cứu và sản xuất của Google và sau đó được
phát hành theo giấy phép mã nguồn mở Apache 2.0 vào ngày 9/11/2015.
Vào tháng 6/2016, Jeff Dean của Google cho biết đã có 1.500 repository (kho)
trên GitHub đề cập tới TensorFlow, trong đó chỉ có 5 đến từ Google.
Các mô hình Deep Learning phát triển trên TensorFlow có thể được sử dụng
trên nhiều nền tảng hệ điều hành, phần cứng khác nhau và trên cả CPU lẫn GPU.

Hình 1. 3: TensorFlow hỗ trợ tính toán song song trên cả CPU và GPU


8
1.4.2.

Các khái niệm trong Tensorflow

1.4.2.1. Node
Vì Tensorflow mô tả lại dòng chảy của dữ liệu thông qua graph nên mỗi một
điểm giao cắt trong graph thì được gọi là Node. Vì các Node chính là điểm đại
diện cho việc thay đổi của dữ liệu nên việc lưu trữ lại tham chiếu của các Node
này là rất quan trọng.

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

thiệu được về các thành phần cơ bản trong thư viện học máy Tensorflow. Chương tiếp
theo sẽ trình bày sâu hơn về các mô hình và thuật toán mà học viên sử dụng từ đó đưa
ra mô hình mạng phù hợp để tiến hành huấn luyện và thử nghiệm.


10

CHƢƠNG II:
XÂY DỰNG MÔ HÌNH, LỰA CHỌN THUẬT TOÁN, TIẾN HÀNH
THỬ NGHIỆM
2.1. Giới thiệu bài toán và các vấn đề áp dụng mô hình Machine Learning
Với mục đích nghiên cứu về Deep Learning và sử dụng thư viện Tensorflow để thử
nghiệm các tìm hiểu của mình, dựa vào mục tiêu nghiên cứu lâu dài của bản thân về hệ
thống xe tự lái (self-driving) ở luận văn học viên định hướng tìm hiểu và nghiên cứu về
bài toán nhận diện hình ảnh cụ thể hơn là nhận diện các biển báo giao thông sử dụng mô
hình mạng neural tích chập (CNN - Convolution Neural Network) làm nền tảng cho các
nghiên cứu sau này.
Bài toán nhận diện hình ảnh là một bài toán cơ bản và phù hợp với nghiên cứu về
Deep Learning ở giai đoạn đầu. Với định hướng sử dụng mạng CNN thì vấn đề đặt ra
ngoài việc hiểu về các kiến thức chung về Machine Learning, ở chương này em sẽ trình
bày về những kiến thức thu lượm được trong quá trình nghiên cứu và tìm hiểu về mạng
CNN bắt đầu từ mô hình mạng neural truyền thống từ đó phát triển và nghiên cứu tiếp tục
về mạng CNN.

2.2. Lựa chọn mô hình mạng Machine Learning phù hợp
Ở phần này em sẽ trình bày lý thuyết về mạng neural truyền thống và mạng neural
tích chập là mạng neural phổ biến trong cách chương trình huấn luyện có giám sát của
Deep Learning.
2.2.1.


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ử

dụng nhiều trong những năm trước đây tuy nhiên gần đây nó ít được sử dụng do có
một số nhược điểm là khi đầu vào có giá trị tuyệt đối lớn thì gradient của hàm đầu
ra rất gần với số 0 tương ứng với các hệ số tương ứng của nút mạng gần như không
được cập nhật. Và cũng tương tự như vậy đối với hàm tanh.
Để khắc phục nhược điểm trên của hai hàm gần đây người ta sử dụng một
khác hàm khác có tên là ReLU (Rectified Linear Unit) là một hàm đơn giản. Đồ thị
được mô tả ở hình sau:


12

Hình 2. 2: Hàm ReLU

2.2.2.

Giới thiệu về mạng Neural tích chập (CNN - Convolution Neural Network)
Một ví dụ cơ bản nhất đó là nhận diện kí tự “X” và “O”. Nhiệm vụ của chúng ta

là xây dựng được một mạng CNN có nhiệm vụ khi đưa vào một bức ảnh thì mạng có
vai trò đưa ra phán đoán đó là “X” hay “O” với điều kiện chắc chắn hình ảnh chúng ta
đưa vào là 1 trong 2 loại.
Dưới đây là kiến trúc một mạng CNN:

Hình 2. 3: Kiến trúc một mạng CNN

Tích chập (Conv)
Khi xem một hình ảnh mới, CNN không biết chính xác nơi các đặc tính này sẽ
khớp nên nó sẽ thử chúng khắp mọi nơi. Khi tính toán sự khớp của một đặc tính trên
toàn bộ ảnh, chúng ta làm thành một bộ lọc (filter). Phần toán ta sử dụng để làm điều
này được gọi là tích chập.

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

Trong Machine Learning nói riêng và toán tối ưu nói chung, chúng ta thường

xuyên phải tìm giá trị nhỏ nhất (hoặc lớn nhất) của một hàm số nào đó. Nhìn chung,
việc tìm giá trị tối thiểu toán cục (global minimum) của các hàm mất mát trong
Machine Learning là rất phức tạp. Thay vào đó, người ta thường cố gắng tìm các điểm
tối thiểu cục bộ (local minimum), và ở một mức độ nào đó, coi đó là nghiệm cần tìm
của bài toán.
Hướng tiếp cận phổ biến nhất là xuất phát từ một điểm mà chúng ta coi là gần
với nghiệm của bài toán, sau đó dùng một phép toán lặp để tiến dần đến điểm cần tìm,
tức đến khi đạo hàm gần với 0. Gradient Descent (GD) và các biến thể của nó là một
trong những phương pháp được dùng nhiều nhất.


14

Hình 2. 4: Ví dụ về tìm điểm cực tiểu trên đồ thị

2.3.2.

Gradient Descent cho hàm một biến và nhiều biến
Từ hình vẽ ở mục trên, giả sử chúng ta có một thuật toán tìm điểm cực tiểu sau

các vòng lặp và xt là điểm mà chúng ta đang tìm được sau t vòng lặp. Chúng ta cần
một thuật toán để đưa xt về gần với x* càng gần càng tốt.
Chúng ta thấy 2 điểm như sau:
1. Nếu đạo hàm của hàm số tại điểm xt : f '( xt )  0 thì ta có xt nằm ở phía bên phải
so với x* và ngược lại. Để điểm tiếp theo xt 1 gần hơn so với x* ta cần thực hiện
di chuyển xt 1 về phía phía âm tức là về phía ngược dấu với đạo hàm xt 1  xt  
trong đó  là đại lượng ngược dấu với đạo hàm f '( xt )
2. xt càng xa x* thì giá trị | f '( xt ) | càng lớn. Vì thế lượng cần di chuyển  tỉ lệ

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

 So sánh gradient của nghiệm tại hai lần cập nhật liên tiếp
 So sánh giá trị của hàm mất mát của nghiệm tại các lần cập nhật liên tiếp, khi nào
giá trị này đủ nhỏ thì dừng lại.
 Cách thường dùng là so sánh nghiệm sau một vài lần cập nhật, nếu sự thay đổi
qua nhiều điểm liên tiếp luôn duy trì ở mức là đủ nhỏ thì chúng ta sẽ lựa chọn đó
là nghiệm.

2.4. Giới thiệu các công cụ phụ trợ cho chƣơng trình
2.4.1.

Thư viện Numpy
Numpy là một thư viện nền tảng sử dụng cho tính toán số học được sử dụng cho

ngôn ngữ lập trình Python.
Trong luận văn này, em sử dụng thư viện Numpy để làm công cụ chuyển các dữ
liệu từ tập dữ liệu huấn luyện và tập dữ liệu thử nghiệm về kiểu dữ liều chuẩn phù hợp
với thư viện Tesorflow.
2.4.2.

Thư viện Matplotlib
Matplotlib là một thư viện mạnh mẽ trong việc tạo biểu đồ bằng ngôn ngữ lập

trình Python. Matplotlib tích hợp các hàm làm việc tương tự MATLAB.
2.4.3.

Thư viện OpenCV
Ở trong luận văn này, do trong quá trình sử dụng tập mẫu có số lượng ảnh ở các

nhãn là không cân bằng nên em sử dụng thư viện OpenCV để làm công cụ thực hiện
cân chỉnh nhằm cân bằng số lượng hình ảnh về mức tương đối cân bằng. Ngoài ra, khi

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


2

Lớp 1

3

Lớp 2

4

Lớp 3

5

Lớp 4 – Đầu ra

Chi tiết
Ảnh có kích thước [3 32 32]
Đầu vào = Đầu vào dữ liệu
Tích chập + Tinh chỉnh: Tích chập 5x5, Độ rộng lớp: 108 mảng
Hợp nhất lớn nhất: 2x2
Đầu ra = “Conv1”
Đầu vào = “Conv1”
Tích chập + Tinh chỉnh : Tích chập 3x3, Độ rộng lớp: 200 mảng
Hợp nhất lớn nhất : 2x2
Đầu ra = “Conv2”
Đầu vào = “Conv2”
Kết nối đầy đủ + Tinh chỉnh + Kết nối đầy đủ + Tinh chỉnh (768 mảng –
300 mảng)

Đầ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

mạng một cách nhanh chóng để tập trung thời gian vào thử nghiệm, đánh giá hệ thống.
3.1.2.

Thư viện Tensorflow
Thư viện Tensorflow là thư viện của Google được tạo ra với mục đích chính là

hỗ trợ người dùng nghiên cứu và thiết kế các chương trình về Machine Learning. Thư
viện Tensorflow hỗ trợ tính toán các phép toán về ma trận rất tốt trên cơ sở các
phương pháp tính toán ma trận đã được tối ưu từ các nhà toán học. Thư viện
Tensorflow được em sử dụng để xây dựng chương trình học và huấn luyện. Đây được
coi là công cụ chính của cả luận văn này.
3.1.3.

Thư viện OpenCV
Ở luận văn, em sử dụng thư viện vào hai nhiệm vụ chính:

 Lọc ảnh bằng các hàm lọc cơ bản, chuẩn kích thước, độ sâu, định dạng lưu trữ
của các hình ảnh trước khi đưa đưa vào kiến trúc mạng huấn luyện và thử
nghiệm.
 Hỗ trợ xoay ảnh để làm cân bằng dữ liệu của các nhãn trước khi tiến hành huấn
luyện để mạng đạt được khả năng học đều đối với tất cả đối tượng.

3.2. Quá trình thu thập và tạo tập mẫu
Trong các bài toán thực tế về học máy có giám sát có một bước rất quan trọng và
tốn rất nhiều chi phí cũng như thời gian đó là xây dựng tập dữ liệu mẫu để đưa vào huấn
luyện mạng nhằm đạt được kết quả huấn luyện tốt nhất. Tập mẫu huấn luyện tốt cần đáp
ứng được các điều kiện về: Số lượng mẫu đủ lớn, đang dạng số lượng trường hợp của
mỗi mẫu,…
Trong số các tập dữ liệu mà em tìm được, em đã quyết định lựa chọn tập mẫu
GTSRB (German Traffic Sign Recognition Benchmark dataset). Tập dữ liệu này chứa rất



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


Ngoài ra, trong tập mẫu các ảnh được lưu trữ với các kích thước khác nhau (từ
15x15 đến 250x250) vì vậy trước khi đưa vào huấn luyện cần phải chuẩn hóa các bức ảnh
về kích thước chuẩn. Kiến trúc mạng trong luận văn sử dụng ảnh đầu vào có kích thước
là 3x32x32 (32 pixel ngang, 32 pixel dọc và 3 lớp màu), vì vậy em đã sử dụng thư viện
OpenCV để tiến hành chỉnh tất cả các ảnh này về về chung một kích thước là 3x32x32.

3.3. Huấn luyện và đánh giá
Sau khi nghiên cứu sử dụng các công cụ em đã xây dựng được chương trình thử
nghiệm và tiến hành huấn luyện vớp tập mẫu đã xây dựng được ở trên (Chương trình chi
tiết đính kèm ở phụ lục).
Chương trình được tiến hành chạy huấn luyện với 39.209 mẫu được đính nhãn,
12.630 mẫu kiểm nghiệm trên 43 loại mẫu khác nhau và cho kết quả chạy như sau:
>>
>>
>>
>>

Time to trainning: 4673.0710661411285s
Validation accuracy: 0.9854
Test accuracy: 0.9260
Time to process a picture: 0.253s
Bảng 3. 1: Thông số kết quả sau khi chạy mô phỏng

Dựa vào kết quả cho thấy tổng thời gian huấn luyện cho mạng chiếm khoảng 77
phút cho một lần huấn luyện tập dữ liệu 39.029 ảnh được duyệt lại 50 lần liên tiếp
(1.951.450 ảnh huấn luyện) đã thu được độ khớp với tập huấn luyện là 98,54% (Tỉ lệ
chính xác huấn luyện) và khi lấy mô hình đó thử nghiệm với tập mẫu thử thì độ chính xác
là 92,6%. Sau khi tiến hành huấn luyện, trong chương trình thử nghiệm em tiến hành xây
dựng thêm một hàm tính toán thời gian xử lý một bức ảnh đầu vào cho đến khi ra được
quyết định. Kết quả cho thấy thời gian trung bình kể từ khi đưa bức ảnh vào đến khi đạt

đượ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

thiết. Ngoài ra, con số 92,6% hiện cũng chưa phải là con số thực sự cao về độ chính xác.
Em định hướng phát triển mạng thêm một số lớp trích chọn đặc trưng và gia tăng thêm độ
rộng của mỗi lớp để nâng cao độ chính xác nhận diện của mạng.
Về tốc độ xử lý hiện nay mạng sau khi huấn luyện xử lý một bức ảnh trên một máy
tính có cấu hình CPU Core i7 (4 luồng vật lý), Ram 16GB cho kết quả thời gian xử lý
một bức ảnh là 0.253s (3,95 hình/s).

3.5. Kết luận
Chương cuối của luận văn đã trình bày về quá trình xây dựng phần mềm thử
nghiệm, quá trình huấn luyện và đánh giá khả năng hoạt động của mạng. Kết quả cho
thấy mạng hiện được thiết kế có kiến trúc không phức tạp nhưng cho kết quả đáp ứng với
độ chính xác tương đối cao (92,6%). Kết quả này cho thấy mô hình hoạt động tốt tuy
nhiên cũng cần có những điều chỉnh và triển khai nghiên cứu thêm để nâng cao về độ
chính xác cũng như tốc độ đáp ứng của mạng phục vụ cho những nghiên cứu tiếp theo
của em.


7

KẾT LUẬN
Dưới sự hướng dẫn của người hướng dẫn khoa học cùng với sự tập trung nghiên cứu
của bản thân, sau một quá trình tìm hiểu, nghiên cứu, xây dựng và giải quyết bài toán đặt ra
trong luận văn học viên đã hoàn thiện được nội dung luận văn đáp ứng được các yêu cầu và
nội dung đặt ra theo đề cương đã xây dựng.
Về kiến thức và những kết quả thực tế học viên đã tiếp thu và ứng dụng được kiến
thức về các vấn đề sau:
 Các phương pháp học thường sử dụng trong học máy trong đó tập trung vào tìm
hiểu và nghiên cứu về bài toán phân loại thuộc phương pháp học có giám sát.
 Nghiên cứu tập trung về cấu trúc và hoạt động của một mô hình mạng học máy cụ
thể: Mạng tích chập (CNN)

 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


×