Tải bản đầy đủ (.docx) (34 trang)

Ứng dụng mạng Nơ ron tíchchập (Convolutional Neural Network CNN) cho bài toán nhận dạng vật thể (Chim)

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 (2.23 MB, 34 trang )

Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
MỤC LỤC

1


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
BẢNG CÁC TỪ VIẾT TẮT
STT Từ viết tắt Từ Tiếng Anh

Giải thích

CNN

Convolutional Neural
Network

Mạng Nơ ron tích-chập

2

DCGANs

Deep Convolutional
Generative Adversarial
Networks

Mạng tích-chập đối kháng sinh
mẫu đa lớp

3



DNN

Deep Neural Network

Mạng Nơ-ron đa lớp

4

FCNN

Fully-connected Neural
Network

Mạng Nơ-ron kết nối hoàn
chỉnh

5

MNIST

Modified National Institute
Tập chữ viết tay MNIST
of Standards and Technology

6

NN

Neural Networks


Mạng Nơ-ron

7

RNN

Recurrent Neural Network

Mạng Nơ-ron hồi quy

8

DL

Deep Learning

Kỹ thuật học sâu

1

2


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài
Mạng nơ-ron nhân tạo (Neural Network - NN) là một mô hình lập trình tiên
tiến lấy cảm hứng từ mạng nơ-ron thần kinh. Kết hợp với các kĩ thuật học sâu
(Deep Learning), NN đang trở thành một công cụ rất mạnh mẽ mang lại hiệu quả

tốt nhất cho nhiều bài toán khó như nhận dạng ảnh, giọng nói hay xử lý ngôn ngữ
tự nhiên.
Mạng Nơ-ron truyền thống (Neural Network) hoạt động không thực sự hiệu
quả với dữ liệu đầu vào là hình ảnh. Trong các mạng nơ-ron truyền thống tất cả các
đầu vào và cả đầu ra là độc lập với nhau, tức là chúng không liên kết thành chuỗi
với nhau. Nhưng các mô hình này không phù hợp trong rất nhiều bài toán; Ví dụ,
nếu muốn đoán từ tiếp theo có thể xuất hiện trong một câu thì ta cũng cần biết các
từ trước đó xuất hiện lần lượt thế nào.
Convolutional Neural Network (CNNs hay Convnets – Mạng nơ-ron tích
chập) là một trong những mô hình Deep Learning tiên tiến giúp cho chúng ta xây
dựng được những hệ thống thông minh với độ chính xác cao. CNN được lấy cảm
hứng từ vỏ não thị giác, mỗi khi chúng ta nhìn thấy một cái gì đó, một loạt các lớp
tế bào thần kinh được kích hoạt, và mỗi lớp thần kinh sẽ phát hiện một tập hợp các
đặc trưng như đường thẳng, cạnh, màu sắc, v.v… của đối tượng. lớp thần kinh càng
cao sẽ phát hiện các đặc trưng phức tạp hơn để nhận ra những gì chúng ta đã thấy.
Mạng nơ-ron tích chập cho phép các máy tính có khả năng “nhìn” và “phân
tích” bằng cách đưa nó qua nhiều layer với một bộ lọc tích chập để sau cùng có
được điểm số nhận dạng đối tượng một cách tốt nhất.
CNN ngày nay được sử dụng rộng rãi trong các bài toán nhận dạng hình ảnh,
xử lý ngôn ngữ tự nhiên và các bài toán dự đoán. Với sự phát triển phần cứng
mạnh mẽ cho phép tính toá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 và đóng vai trò quan trọng trong sự phát triển của trí
3


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
tuệ nhân tạo nói chung và xử lý ảnh nói riêng. Hiện nay như hệ thống xử lý ảnh lớn
như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức
năng thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay
drone giao hàng tự động.
2. Phạm vi nghiên cứu

Trong phạm vi nghiên cứu của Báo cáo này, chúng tôi trình bày về các vấn
đề về mạng nơ-ron, gồm: khái niệm của mạng nơ-ron nhân tạo, lịch sử phát triển,
các mô hình mạng và phương pháp xây dựng cũng như huấn luyện mạng. Trong đó
đi sâu vào nghiên cứu hoạt động của Mạng nơ-ron tích chập và ứng dụng của mạng
cho một bài toán cụ thể là bài toán nhận dạng đối tượng.
Báo cáo này cũng trình bày một thực nghiệm cho ứng dụng mạng nơ-ron
tích chập cho việc tìm kiếm hình ảnh chứa chim.

4


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
NỘI DUNG
1. NHỮNG KHÁI NIỆM CƠ BẢN
1.1. Machine Learning là gì?
Machine Learning là ý tưởng rằng có những thuật toán chung chung (generic
algorithms) có thể cho bạn biết điều gì đó thú vị về một bộ dữ liệu mà không cần
phải viết bất kỳ mã tùy chỉnh nào cụ thể cho vấn đề. Thay vì viết mã, bạn đưa dữ
liệu vào thuật toán chung chung và nó xây dựng logic riêng dựa trên dữ liệu.
Ví dụ như thuật toán phân loại dữ liệu, nó có thể đưa dữ liệu vào các nhóm
khác nhau. Thuật toán phân loại được sử dụng để nhận dạng số viết tay cũng có thể
được sử dụng để phân loại email rác và email thường mà không thay đổi một dòng
mã nào. Cùng một thuật toán nhưng được đào tạo trên tập dữ liệu khác nhau với
mục đích khác nhau.
Thuật toán Machine Learning này là một hộp đen có thể được sử dụng lại
cho nhiều vấn đề phân loại khác nhau. Machine Learning là một thuật ngữ bao
hàm rất nhiều thuật toán chung chung.
Hai loại thuật toán Machine Learning
Thuật toán Machine Learning có hai loại chính: học có giám sát và học
không giám sát. Sự khác biệt tuy đơn giản nhưng thực sự quan trọng.

Học có giám sát
Trong quá trình học có giám sát, bạn sẽ để cho máy tính tìm ra mối quan hệ
đó cho bạn. Và một khi bạn biết những phép toán học nào là cần thiết để giải quyết
vấn đề cụ thể này, bạn có thể trả lời cho bất kỳ vấn đề nào khác cùng loại!
Học không giám sát
Học tập theo chế độ giám sát là những gì chúng ta sẽ tập trung cho phần còn
lại của bài đăng này, nhưng đó không phải là vì học không giám sát không ít hữu
ích hay thú vị. Trên thực tế, học không giám sát ngày càng trở nên quan trọng vì
5


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
các thuật toán này tốt hơn bởi vì nó có thể sử dụng mà không cần gắn nhãn dữ liệu
với câu trả lời chính xác.

Do đó, chúng ta cần điều chỉnh tất cả các trọng số để "lăn xuống" điểm cực
tiểu đó. Nếu chúng ta thay đổi trọng số từng tí một, theo chiều hướng về cực tiểu,
thì cuối cùng, chúng ta sẽ tìm ra lời giải, mà không phải thử tất cả các trọng số có
thể như ý tưởng ban đầu.
Trong môn Giải tích, chúng ta biết rằng: đạo hàm của hàm số cho ta biết hệ
số góc của một hàm số ở bất kì điểm nào. Hay nói theo một cách khác, nó cho ta
biết chiều mà ta cần đi để chạm tới cực tiểu.
Chúng ta có thể thay đổi trọng số dần dần bằng cách trừ đi giá trị đạo hàm
từng phần của hàm mất mát đối với từng trọng số. Lặp lại quá trình như vậy cho
tới khi chúng ta chạm tới cực tiểu và có giá trị tốt nhất của trọng số.
Đó là giải thích ngắn gọn của phương pháp tìm trọng số với tên gọi là batch
gradient descent - xuống dốc toàn cục.
Khi chúng ta sử dụng thư viện để giải quyết vấn đề, tất cả những điều trên đã
được ẩn đi. Dẫu sao thì, hiểu điều gì đang diễn ra vẫn sẽ rất có ích cho bạn.
6



Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Liệu học máy có thật sự giải quyết mọi vấn đề?
Khi bạn nhìn thấy những thuật toán học máy được áp dụng dễ dàng để giải
quyết các vấn đề rất phức tạp (như nhận diện chữ viết), bạn bắt đầu cảm thấy bạn
có thể sử dụng học máy để giải quyết bất kể vấn đề nào và nhận được câu trả lời,
miễn là bạn có tập dữ liệu đủ lớn. Chỉ cần đưa dữ liệu vào và bằng một cách nào
đó, máy tính đưa ra hàm số phù hợp với dữ liệu.
Nhưng hãy nhớ rằng, học máy chỉ hiệu quả nếu vấn đề thực sự có thể giải
quyết bằng dữ liệu bạn đưa vào.
Ví dụ, nếu bạn xây dựng mô hình dự đoán giá nhà dựa trên số giỏ cây ở mỗi
nhà, hàm số tìm được sẽ không thể áp dụng. Không có bất kể mối liên hệ nào giữa
số giỏ cây và giá nhà. Bạn chỉ có thể mô hình hóa mối quan hệ thực sự tồn tại giữa
các đại lượng.

1.2. Mạng nơ-ron thần kinh là gì?
Kết nối toàn bộ những gì đã mô tả ở trên ta có đồ thị kết hợp như sau:

7


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Mỗi nơ-ron sẽ chứa các giá trị đầu vào, áp dụng trọng số cho chúng và tính
toán được kết quả đầu ra. Bằng cách kết nối nhiều tầng nơ-ron với nhau, chúng ta
có thể mô hình hóa các chức năng phức tạp.
Ý tưởng đơn giản trên có thể được diễn đạt lại theo cách sau:
- Chúng ta tạo nên những hàm dự đoán đơn giản, thực hiện tính toán bằng
cách nhân giá trị mỗi nơ-ron với trọng số tương ứng của nó. Mỗi hàm đơn giản này

được gọi là một tế bào thần kinh.
- Kết nối nhiều tế bào thần kinh đơn giản lại với nhau, chúng ta xây đựng
được một mạng thần kinh để mô hình hóa nhiều bài toán phức tạp mà một tế bào
thần kinh không làm được.
Tư tưởng trên giống như bộ ghép hình LEGO. Chúng ta không thể tạo mô
hình với chỉ 1 mảnh ghép, nhưng bằng cách kết hợp nhiều mảnh ghép với nhau, ta
có thể tạo nên robot, máy bay, xe tăng...
8


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Tự động tạo văn bản mới
Cung cấp bộ nhớ cho mạng thần kinh (NN)
Mạng thần kinh trên luôn luôn trả về kết quả giống nhau với những tập dữ
liệu đầu vào giống nhau. Nó không có bộ nhớ. Trong thuật ngữ lập trình, đó là một
thuật toán phi trạng thái.
Trong nhiều trường hợp (giống như ước lượng giá trị ngôi nhà), đó chính
xác là điều bạn mong muốn. Nhưng một việc mà loại mô hình này không thể làm
là đáp ứng với các mô hình dữ liệu theo thời gian.
Ví dụ cho bạn một bàn phím và yêu cầu bạn viết một câu chuyện. Nhưng
trước khi bạn bắt đầu, sẽ dự đoán ký tự đầu tiên bạn sẽ gõ. Tôi nên đoán đó là chữ
gì?
Tôi có thể sử dụng kiến thức về tiếng Anh của mình để nâng cao tỉ lệ đoán
đúng của tôi. Ví dụ, bạn có thể chọn gõ một ký tự thông dụng. Nếu tôi đã xem qua
những câu chuyện bạn viết trước đó, tôi có thể dựa trên xác suất những từ bạn
thường sử dụng đầu câu chuyện để thu hẹp tập kết quả dự đoán hơn, và xây dựng
một mạng thần kinh để mô hình hóa khả năng bạn sẽ bắt đầu một lá thư với ký tự
nào.
Mô hình như sau:


Nhưng giờ hãy làm vấn đề này khó khăn hơn. Làm sao để tôi có thể dự đoán
ký tự tiếp theo bạn sẽ gõ tại bất kỳ thời điểm nào trong câu chuyện của bạn. Đây
quả là một vấn đề thú vị hơn nhiều.
9


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
1.3. Deep Learning
Deep Learning là một trong những mảng phát triển nhất của Machine
Learning. Có thể hiểu đơn giản Deep Learning là mạng nơ-ron đa lớp có cấu trúc
đặc biệt. Recurrent Neural Network - RNN (mạng nơ-ron hồi quy), Convolutional
Neural Network - CNN (mạng nơ ron tích-chập) hay Deep Convolutional
Generative Adversarial Networks - DCGANs (mạng đối kháng sinh mẫu tích chập
đa lớp) đều là các thuật toán trong Deep Learning
Ở mạng nơ-ron đa lớp thường, giá trị đầu ra của lớp này là đầu vào của lớp
tiếp theo, và các lần chạy mạng với các giá trị truyền vào độc lập với nhau. Ở
mạng RNN, mạng nơ-ron ở mỗi lần chạy được lưu trạng thái, và sử dụng ở lần
chạy tiếp theo. Ở mạng CNN, các đặc trưng của giá trị truyền vào được trích lọc
bằng chuỗi phương pháp như tích chập, giảm mẫu, kết nối mạng trước khi phân
nhóm.
1.4.1. Nhận diện vật thể cùng Deep Learning
Bạn có thể đã từng nhìn thấy đoạn hoạt hình nổi tiếng này trước đây. Bức
tranh mô tả ý tưởng: bất kỳ một đứa trẻ 3 tuổi nào cũng có thể nhận ra bức tranh
của một chú chim, nhưng để nhận dạng vật thể với máy tính là một câu đố cho
những nhà khoa học máy tính giỏi nhất trong vòng 50 năm vừa qua.
Trong khoảng vài năm gần đây, cuối cùng, chúng ta cũng đã tìm được một
phương pháp thích hợp để nhận dạng vật thể sử dụng Deep Convolutional Neural
Networks - mạng nơ-ron tích chập đa lớp. Để hiểu hơn về thuật toán này, hãy cùng
nhau viết chương trình nhận dạng chim từ ảnh.
1.4.2. Bắt đầu từ Bài toán đơn giản

Trước khi chúng ta học cách nhận diện chim, hãy cùng nhau nhận diện số 8
trong chữ số viết tay - một chương trình đơn giản hơn.
Chúng ta đã biết mạng nơ-ron giải quyết các vấn đề phức tạp bằng cách kết
nối nhiều nơ-ron đơn giản. Chúng ta có thể tạo ra mạng nơ-ron nhỏ, để dự đoán giá
nhà dựa trên số phòng ngủ nó có, độ rộng ngôi nhà, hay hàng xóm của ngôi nhà.
10


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Chúng ta cũng biết ý tưởng của học máy là tái sử dụng các thuật toán với dữ
liệu khác nhau để giải quyết các vấn đề khác nhau. Vì thế, hãy thay đổi mạng nơron này để nhận diện ký tự viết tay, và một trường hợp đơn giản là nhận diện số 8.
Học máy chỉ chạy khi bạn có dữ liệu, càng nhiều càng tốt. Vì thế, chúng ta
cần rất nhiều số 8 viết tay để bắt đầu. May mắn là những nhà nghiên cứu đã tạo ra
tập chữ viết tay MNIST cho mục đích này. MNIST cung cấp 60,000 ảnh với mỗi
ảnh 18x18 pixel. Dưới đây là tập số 8 từ dữ liệu:

11


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
1.4.3. Mọi đặc trưng đều là số
Nếu chúng ta muốn xử lý dữ liệu bằng mạng nơ-ron, làm cách nào chúng ta
có thể truyền hình ảnh vào mạng?
Câu trả lời hóa ra cực kỳ đơn giản. Dữ liệu đầu vào mà mạng nơ-ron cần là
số. Đối với máy tính, tấm ảnh thực sự chỉ là mạng lưới với mỗi số sẽ đại diện cho
vùng tối của mỗi pixel:

Để truyền ảnh vào mạng nơ-ron, chúng ta chỉ cần coi 18x18 pixel ảnh là một
mảng gồm 324 số:


12


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Để xử lý 324 điểm ảnh, chúng ta cần mở rộng mô hình mạng nơ-ron với 324
nơ-ron đầu vào.

Chú ý rằng mạng nơ-ron của chúng ta cũng có 2 giá trị đầu ra (thay vì chỉ
một). Đầu ra thứ nhất sẽ sự đoán khả năng một ảnh là số 8 và đầu ra thứ 2 sẽ dự
đoán một ảnh không phải số 8. Bằng việc phân tách đầu ra cho từng vật thể ta
muốn nhận dạng, chúng ta có thể sử dụng mạng nơ-ron để phân nhóm vật thể.
Mạng nơ-ron hiện giờ đã lớn hơn rất nhiều so với lần trước đây (324 giá trị
đầu vào thay vì chỉ 3). Nhưng bất kể máy tính hiện đại nào cũng có thể xử lý mạng
nơ-ron cùng với hàng trăm nơ-ron một cách liên tục.
Đây là tập dữ liệu đào tạo:

13


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Quá trình đào tạo có thể kéo dài vài phút trên laptop. Khi quá trình kết thúc,
mạng nơ-ron có thể nhận ra số 8 với độ chính xác khá cao.
1.4.4. Nhận diện hình ảnh
Thật hay là chỉ cần truyền giá trị pixel vào trong mạng nơ-ron để có thể nhận
diện hình ảnh! Machine Learning thật là thần kỳ phải không mọi người...
Nhưng mọi chuyện không đơn giản như vậy.
Đầu tiên, tin tốt là nhận diện số 8 thực sự hoạt động rất tốt trong những bức
ảnh đơn giản, khi mà ký tự nằm ở chính giữa


Nhưng tin xấu là: việc nhận diện số 8 thất bại hoàn toàn khi mà ảnh bị lệch
sang một phía. Chỉ cần lệch 1 chút thôi cũng đủ để phá vỡ hệ thống:

Điều này bởi vì, dữ liệu đào tạo có tất cả các số 8 đều nằm chính giữa, và
mạng nơ-ron không có bất kỳ ý tưởng nào về việc số 8 bị lệch. Mạng nơ-ron biết
một và chỉ một cấu trúc đó mà thôi.
Việc nhận diện một cấu trúc thực sự không hữu hiệu trong thực tế. Vấn đề
thực tế không bao giờ đơn giản và tinh gọn, vì thế chúng ta cần tìm ra cách để
khiến mạng nơ-ron nhận diện bất cứ số 8 không hoàn hảo nào.
1.4.5. Giải pháp 1: Tìm kiếm với cửa sổ trượt (Sliding Window)
Chúng ta tạo ra một chương trình tìm kiếm số 8 nằm chính giữa. Liệu chúng
ta có thể quét tất cảcác ảnh số 8 có thể ở những vùng nhỏ hơn, từng vùng một, cho
tới khi chúng ta tìm ra.

14


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Phương pháp này được gọi là tìm kiếm với cửa số trượt. Đây là một giải
pháp khiên cưỡng. Nó chỉ đúng trong một số trường hợp giới hạn nhất định, nhưng
không thực sự hiệu quả. Bạn phải kiểm tra cùng một bước ảnh lặp đi lặp lại với các
kích thước khác nhau. Và chắc chắn, chúng ta có thể làm tốt hơn điều đó.
1.4.6. Giải pháp 2: Nhiều dữ liệu hơn với một mạng lưới nhiều lớp
Khi chúng ta đào tạo mạng, dữ liệu hiển thị số 8 nằm ở vị trí chính giữa.
Liệu chúng ta có thể đào tạo với nhiều dữ liệu hơn, bao gồm số 8 ở tất cả các vị trí
và các kích thước khác nhau.
Chúng ta thậm chí không cần thu thập thêm dữ liệu mới, ta chỉ cần viết một
đoạn mã để tạo ra những hình ảnh mới từ ảnh số 8 ban đầu với đầy đủ các vị trí và

kích thước khác nhau.

15


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Sử dụng kĩ thuật này, chúng ta có thể dễ dàng tạo ra nguồn dữ liệu vô tận.
Nhiều dữ liệu khiến vấn đề khó hơn cho mạng nơ-ron để giải quyết, nhưng
chúng ta có thể mở rộng mạng luới bằng cách thêm nhiều lớp nơ-ron, giúp mạng
học được những cấu trúc phức tạp hơn.

Chúng ta gọi đây là deep neural network (mạng nơ-ron đa lớp), bởi vì nó
chứa nhiều lớp nơ-ron hơn mạng truyền thống.
Ý tưởng này bắt đầu từ cuối nắm 1960s. Nhưng đến gầy đây, việc đào tạo
mạng lưới lớn và phức tạp vẫn quá chậm để hữu ích do tính toán quá chậm. Khi
chúng ta tìm ra thẻ đồ hoạ 3D (cho phép tính toán ma trận phức tạp cực nhanh),
ứng dụng mạng nơ-ron đa lớp trở lên thiết thực hơn.
2. NGHIÊN CỨU MÔ HÌNH CONVOLUTIONAL NEURAL NETWORKS
2.1. Mạng Convolutional Neural Network - (CNN - mạng nơ-ron tích chập)
Con người có cảm quan để biết rằng bức ảnh có tầng lớp hoặc cấu trúc từng
vật thể. Hãy nghĩ về bức ảnh sau:

16


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Bạn có thể ngay lập tức nhận ra cấu trúc bức ảnh:
- Có một đứa trẻ
- Đứa trẻ ngồi trên con ngựa nẩy

- Con thú (ngựa) nhún nằm trên mặt cỏ
- Mặt cỏ phủ trên mặt sân
Và quan trọng nhất là, chúng ta nhận diện được đứa trẻ ở bất cứ địa điểm
nào, dù chúng ta không được đào tạo cách nhận diện đứa trẻ ở mọi địa điểm tồn tại
trên trái đất.
Nhưng mạng nơ-ron hiện tại của chúng ta lại không thể làm điều đó. Nó
nghĩ số 8 ở vị trí khác nhau là hoàn toàn khác biệt. Nó không hiểu rằng việc di
chuyển vật thể xung quanh bức ảnh không tạo ra sự sai khác. Chúng ta cần tạo ra
một mạng nơ-ron có thể hiểu được biến thể của số 8, dù số 8 xuất hiện ở vị trí nào
đi chăng nữa.
Ý tưởng mạng nơ-ron tích chập ra đời, nhờ công nghiên cứu của cả các nhà
khoa học máy tính và những nhà di truyền học. Thực tế, một số nhà khoa học đã
truyền dung dịch vào não bộ của mèo để xem mèo nhận diện hình ảnh như thế nào.

17


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
2.2. Mạng CNN hoạt động như thế nào?
Thay vì truyền vào toàn bộ bức ảnh (vật thể bị dính chặt với khung nền),
chúng ta bắt đầu với ý tưởng: một vật thể là giống nhau dù nó ở vị trí nào trong
bức ảnh, và chia bức ảnh thành một mạng lưới
Bước 1: Tách bức ảnh thành các mảnh chồng chéo
Giống như cửa sổ trượt phía trên, hãy quét cửa sổ trượt trên toàn bộ bức ảnh
gốc và lưu giữ kết quả theo từng mảnh ảnh.

Bằng cách làm này, chúng ta đã chuyển bức ảnh ban đầu thành 77 mảnh ảnh
nhỏ cùng kích cỡ.
Bước 2: Truyền mỗi mảnh ảnh vào mạng nơ-ron nhỏ
Trước đây, chúng ta truyền 1 ảnh duy nhất vào mạng nơ-ron để tìm kiếm số

8. Chúng ta lặp lại quá trình đó, nhưng cho mỗi mảnh ảnh.

18


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Chúng ta sử dụng cùng trọng số mạng nơ-ron cho tất cả các mảnh ảnh để lấy
dữ liệu đầu ra.
Vì có cùng trọng số, mà đầu vào khác nhau nên đầu ra khác nhau. Mục đích
của phần này là tìm kiếm những phần nhỏ đặc biệt của bức ảnh.
Trong một bức ảnh lớn, ta không thể tìm ra đứa trẻ. Ta tách ảnh ra để tìm
đầu, chân, tay bởi vì một cánh tay giơ cao hay hạ xuống vẫn là cánh tay đó. Đứa
trẻ ở góc hay ở giữa ảnh, vẫn có đầy đủ bộ phận cơ thể như thế.
Bước 3: Lưu giữ kết quả từ từng mảnh ảnh vào mảng
Chúng ta không muốn làm mất sự sắp xếp của những mảnh gốc. Vì thế
chúng ta lưu trữ kết quả xử lý mỗi mảnh vào mạng lưới sắp xếp giống như ảnh ban
đầu, như hình sau:

19


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Chúng ta bắt đầu với ảnh lớn, và chúng ta kết thúc với nhiều mảng nhỏ hơn.
Những mảng này lưu trữ những phần đáng chú ý từ ảnh ban đầu.
Từ bước 1 đến bước 3 được gọi là quá trình tích chập (Convolutional) - lấy
giá trị đầu ra với từng mảnh ảnh, thông qua trọng số cố định.
Bước 4: Giảm mẫu
Ở bước 3, ta đã có một chuỗi mảng chứa đặc trưng ảnh. Tuy thế, chuỗi mảng

này vẫn rất lớn, khiến việc tính toán của máy tính trở nên khó khăn. Hơn nữa,
ngoài đặc trưng, mảng cũng chứa cả nhiễu.

20


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Để giảm chiều của mảng, ta dùng thuật toán max pooling - tách lọc lớn nhất.
Với mỗi ô trống 2x2 của mảng giá trị, ta chỉ lưu lại giá trị lớn nhất - đặc trưng rõ
ràng và thú vị nhất của ảnh.

Bước 5: Truyền đặc trưng vào mạng nơ-ron khác và dự đoán
Chúng ta đã chuyển bức ảnh lớn ban đầu thành tập hợp của những đặc trưng
nổi bật nhất.
Giờ đây, chúng ta kết nối tất cả đặc trưng đó lại tạo thành Fully-connected
Neural Network - mạng nơ-ron kết nối hoàn chỉnh. Gía trị của mạng mới sẽ dùng
làm đầu vào cho mạng nơ-ron phân nhóm để tìm ra kết quả cuối cùng.
Kết nối mạng giống như khi tìm được tay, chân, đầu, ta cần lắp ghép lại
thành 1 người hoàn chỉnh. Vì phương pháp này không phụ thuộc vào vị trí của
người trong ảnh, mà phụ thuộc vị trí tương đối của các đặc trưng: tay, chân, đầu...
với nhau, nên dù ảnh ở vị trí nào cũng sẽ nhận biết được.
Từ đầu đến cuối, toàn bộ quá trình của chúng ta như sau:

21


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
Chèn thêm nhiều bước nữa:
Quá trình nhận diện ảnh là một chuỗi các bước: tích chập, giảm mẫu và kết
nối mạng hoàn chỉnh.

Khi giải quyết vấn đề thực tế, những bước này có thể được kết nối rất nhiều
lần. Bạn có thể có 2, 3 thậm chí 10 lớp tích chập. Bạn có thể chèn giảm mẫu vào
bất cứ vị trí nào bạn muốn.
Ý tưởng là bắt đầu từ ảnh lớn, từng bước một chúng ta trích xuất đặc trưng,
giảm chiều để có kết quả cuối cùng. Càng nhiều bước tích chập, mô hình càng có
thể nhận diện đặc trưng phức tạp.
Việc có nhiều lớp tích chập giúp ta tìm được các đặc trưng nhỏ hơn của cơ
thể người: Thay vì nhận diện tay chân đầu, giờ chúng ta nhận diện bàn tay, cánh
tay, khửu tay... Nhiều lớp tích chập hơn nữa giúp ta nhận diện đốt tay, móng tay,
vân tay... Cứ tiếp tục như thế, ta có thể tìm người bằng cách tìm đặc trưng ở cấp độ
phân tử (just kidding ).
Cũng giống như nhận diện người qua phân tử (tưởng tượng như vậy), hầu
hết các con số trích xuất từ học máy là những đặc trưng mà có thể con người không
hình dung được, nhưng máy tính lại biết được. Người ta thường coi đó là hộp đen
thần kì của học máy. Hiện nay, cũng đã tồn tại một số hệ thống nhận diện ảnh tốt
hơn con người.
Vì nhận dạng ở cấp độ nhỏ hay rất nhỏ, nhận diện giữa gà hay chó, giữa ô tô
hay xe máy đều sẽ có một số quá trình tách lọc đặc trưng giống nhau. Nên mạng
nơ-ron dùng để phân biệt động vật có thể được tái sử dụng (transfer learning) để
phân biệt xe cộ, các loại hoa, đồ vật... và chỉ cần tinh chỉnh trọng số của mạng ở
những lớp cuối cùng.
Đây là một mạng lưới CNN thực tế trong các bài nghiên cứu khoa học:

22


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Trong trường hợp này, họ bắt đầu với ảnh 224x224 pixel, áp dụng 2 lần tích
chập và giảm mẫu, 3 lần tích chập tiếp, rồi 1 giảm mẫu và thêm 2 lần mạng kết nối.

Kết quả cuối cùng có thể giúp ta nhận dạng 1000 nhóm khác nhau.
Xây dựng mạng lưới tốt
Vậy làm thế nào bạn biết được những bước nào bạn cần làm để nhận diện
ảnh hoạt động tốt
Sự thật thì, bạn phải làm nhiều thử nghiệm và kiểm chứng. Bạn có thể đào
tạo 100 mạng trước khi bạn tìm ra cấu trúc và tham số tối ưu. Học máy bao gồm
rất nhiều thử nghiệm và loại lỗi.
3. ỨNG DỤNG MẠNG CNN TRONG VIỆC TÌM KIẾM HÌNH ẢNH
3.1. Nhận diện chim trong ảnh
Từ những nghiên cứu ở trên, ta cần thực nghiệm một chương trình xác định
nếu ảnh có chứa chim hay không.
Để làm được việc đó, ta cần có dữ liệu đầu tiên. Tập dữ liệu CIFAR10 chứa
6000 ảnh chim và 52,000 bức ảnh không chứa chim. Nhưng để có nhiều dữ liệu
hơn, chúng ta cung cấp thêm tập dữ liệu Caltech-UCSDBirds bao gồm 12,000 ảnh
chim.
Để viết ngắn gọn mình tạm gọi bức ảnh chứa chim là ảnh chim, ảnh không
chứa chim là ảnh không chim.
Dưới đây là tập hợp chim từ tổ hợp dữ liệu:

23


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim

Và 52,000 ảnh không chim:

Tập dữ liệu này hoạt động tốt cho nhu cầu thử nghiệm, nhưng 72,000 bức
ảnh chất lượng kém vẫn khá bé so với ứng dụng thực tế. Nếu bạn muốn đạt được
chất lượng như Google, bạn cần hàng triệu tấm ảnh cỡ lớn. Trong học máy, có
nhiều dữ liệu hơn hầu như lúc nào cũng quan trọng hơn có thuật toán tốt hơn. Bạn

đã hiểu tại sao Google sẵn lòng cho bạn lưu trữ ảnh không giới hạn. Họ muốn
nguồn dữ liệu dồi dào từ bạn đó).
Trong quá trình đào tạo, độ chính xác tăng lên. Sau vài lần chạy, độ chính xác
khoảng 75,4%. Sau 10 lần, 91,7%. Sau 50 lần, giao động khoảng 95,5% và những
lần chạy tiếp theo không làm tăng độ chính xác nên tôi đã dừng lại quá trình đào
tạo.
3.2. Kiểm nghiệm mạng nơ-ron
Để có thể dự đoán ảnh chim hay không, chúng ta cần viết một chương trình
dự đoán ảnh chim (mà chúng ta sẽ để cập chi tiêt trong mục 4).
Nhưng để thực sự biết sự hiệu quả của mạng, ta cần kiểm nghiệm với rất rất
nhiều ảnh. Dữ liệu tôi tạo ra có 15.000 ảnh kiểm chứng, và kết quả cho độ chính
xác 95%.
95% có thực sự tốt?
24


Ứng dụng Mạng nơ-ron tích chập (CNN) cho bài toán nhận diện chim
95% có ý nghĩa rất khác nhau, điều đó phụ thuộc vào chi tiết của cả quá trình
đào tạo. Ví dụ, nếu 5% tập đào tạo gồm ảnh chim, và 95% ảnh không chim. Và
chương trình đoán không chim cho tất cả các lần đoán, tỉ lệ chính xác sẽ là 95%!
Nhưng điều đó hoàn toàn vô nghĩa.
Chúng ta cần nhìn kĩ vào những giá trị hơn là độ chính xác tổng thể. Để đánh
giá một hệ thống có thực sự tốt, chúng ta cần biết mạng lỗi như thế nào, chứ không
chỉ % dự đoán sai là bao nhiêu.
Thay vì nghĩ về dự đoán đúng hay sai, hãy chia nhỏ ra thành 4 tập phân biệt.
Các tập có công thức A + B, với A là True hoặc False (dự đoán đúng hay sai)
và B là Positives hay Negatives (dự đoán chứa chim hay không chứa chim). Ví dụ:
True Positives: dự đoán chứa chim, và dự đoán đúng.
1. Ảnh chim được dự đoán chính xác là có chim, được gọi là tập True
Positives:


2. Ảnh không chứa chim và dự đoán chính xác, gọi là True Negatives:

3.Ảnh không chứa chim nhưng đoán là có chim, gọi là False Positives:

4. Ảnh chứa chim nhưng dự đoán là không chim, gọi là False Negatives:

Kiểm nghiệm với 15.000 ảnh, dưới đây là bảng tổng kết:
25


×