Tải bản đầy đủ (.doc) (33 trang)

Bài tập lớn Trí Tuệ Nhân Tạo Ứng dụng mạng CNN bài toán phân loại hoa quả

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 (1.62 MB, 33 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
======***======

BÀI TẬP LỚN: TRÍ TUỆ NHÂN TẠO
Đề tài: Tìm hiểu về mạng CNN và ứng dụng phân loại hoa quả



LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn các thầy cô trường Đại học Công Nghiệp Hà
Nội, đặc biệt các thầy cô bộ môn Hệ thống thông tin, đã tận tình dạy dỗ, giúp đỡ và tạo
mọi điều kiện tốt nhất cho em trong suốt quãng thời gian em theo học tại trường, để em
có thể hồn thành được đề tài này.
Chúng em tỏ lòng biết ơn sâu sắc với TS Lê Thị Thuỷ, người cơ đã tận tình
hướng dẫn khoa học và giúp đỡ, chỉ bảo em trong suốt q trình nghiên cứu và hồn
thành báo cáo này.
Tơi xin chân thành cảm ơn các bạn học sinh viên khóa 14 tại trường Đại học
Cơng Nghiệp Hà Nội đã giúp đỡ tơi trong q trình theo học tại trường, cũng như giúp
đỡ tôi thực hiện đề tài này.
Xin trân trọng cảm ơn!


MỤC LỤC
CHƯƠNG 1.................................................................................................................1
TỔNG QUAN VỀ MẠNG NƠ RON.......................................................................1
VÀ GIỚI THIỆU VỀ MẠNG NƠ RON TÍCH CHẬP..........................................1
1.1 Nơ ron nhân tạo.......................................................................................1
1.1.1 Lịch sử của nơ ron nhân tạo...........................................................1
1.1.2 Cấu tạo và quá trình xử lý của một nơ ron sinh học.....................2
1.1.3 Cấu tạo và quá trình xử lý của một nơ ron nhân tạo....................2


1.1.4 Các mơ hình hàm kích hoạt của mạng nơ ron nhân tạo...............5
1.2 Mạng nơ ron tích chập............................................................................8
1.2.1 Khái niệm về mạng nơ ron tích chập..............................................8
1.2.2 Mơ hình mạng nơ ron tích chập.....................................................8
1.2.3 Xây dựng mạng nơ ron tích chập...................................................9
CHƯƠNG 2..............................................................................................................16
ỨNG DỤNG PHÂN LOẠI HOA QUẢ.................................................................16
2.1.Tạo tập dữ liệu.......................................................................................16
2.2. Các bước thực hiện...............................................................................17
2.2.1:Kết nối Google Colaboratory với drive.........................................17
2.2.2: Import các thư viện cần thiết cho quá trình training.................17
2.2.3: Xem thử một ảnh trong tập dữ liệu.............................................17
2.2.4. Train tập dữ liệu...........................................................................18
2.2.5 Lưu ảnh vào X và nhãn vào y.......................................................19
2.2.6 Lưu X và y thành file.pickle vào drive..........................................19
2.2.7 Import các thư viện cần thiết cho quá trình tạo model CNN......20
2.2.8 Load X và y từ file pickle ở drive và kiểm tra...............................20
2.2.9 Tiến hành mã hoá các nhãn y bằng thuật toán one-hot..............20


2.2.10 Tiến hành xây dựng mạng CNN phục vụ quá trình phân loại. 21
2.3. Kết quả...................................................................................................23
TÀI LIỆU THAM KHẢO.........................................................................................27


CHƯƠNG 1.
TỔNG QUAN VỀ MẠNG NƠ RON
VÀ GIỚI THIỆU VỀ MẠNG NƠ RON TÍCH CHẬP
1.1 Nơ ron nhân tạo
1.1.1 Lịch sử của nơ ron nhân tạo

Vào năm 1943, nhà thần kinh học Warren McCulloch đã cùng nhà toán học
Walter Pitts đã viết một cuốn sách về cách mạng thần kinh hoạt động. Và họ đã thực hiện
mô phỏng một mạng thần kinh đơn giản trên một mạch điện. [9]
Vào năm 1949, Donald Hebb đã viết cuốn sách Organization of Behavior. Điểm
nhấn chính là mạng thần kinh nào được sử dụng nhiều sẽ được tăng cường.
Vào năm 1959, David Hubel và Torsten Wiesel đã xuất bản cuốn sách Receptive
fields of single neurons in the cat’s striate cortex, miêu tả về phản ứng của các tế bào thần
kinh thị giác trên loài mèo, cũng như cách loài mèo ghi nhớ và nhận diện hình dạng trên
kiến trúc vỏ não của nó.

Hình 1.1 Hình ảnh thí nghiệm của David Hubel và Torsten Wiesel trên mèo [10]

Vào năm 1989, Yann LeCun đã áp dụng thuật toán học cho mạng nơ ron theo kiểu
lan truyền ngược vào kiến trúc mạng nơ ron tích chập của Fukushima. Sau đó vài năm,
LeCun đã cơng bố LeNet-5 [13]. Có thể nói, LeNet-5 là một trong những mạng nơ ron
tích chập sơ khai nhất, tuy nhiên các dấu ấn của nó vẫn tồn tại tới ngày nay, có thể thấy
thông qua một số thành phần thiết yếu mà các mạng nơ ron tích chập của ngày nay vẫn
đang sử dụng

1


1.1.2 Cấu tạo và quá trình xử lý của một nơ ron sinh học

Hình 1.2: Hình ảnh một nơ ron sinh học [14]

Một nơ ron gồm có: thân nơ ron, tua gai thần kinh, sợi trục thần kinh, trong đó:
 Thân nơ ron: là nơi xử lý các tín hiệu được đưa vào;
 Tua gai thần kinh: là nơi nhận các xung điện vào trong nơ ron;
 Sợi trục thần kinh: là nơi đưa tín hiệu ra ngồi sau khi được xử lý bởi nơ

ron;
 Khớp thần kinh: vị trí nằm giữa tua gai thần kinh và sợi trục thần kinh, đây
là điểm liên kết đầu ra của nơ ron này với đầu vào của nơ ron khác.

1.1.3 Cấu tạo và quá trình xử lý của một nơ ron nhân tạo
Dựa vào cấu tạo của một nơ ron sinh học, các nhà khoa học nghiên cứu và lập trình
đã đưa ra kiến trúc của một nơ ron nhân tạo:

Hình 1.3: Công thức của một nơ ron nhân tạo [41]
2


Mạng nơ ron nhân tạo có thể mơ tả đơn giản lại như sau:

3


Hình 1.4: Hình ảnh một nơ ron nhân tạo

Trong đó:

4


 Danh sách các đầu vào: Là các thuộc tính đầu vào của một nơ ron. Số
lượng thuộc tính đầu vào thường nhiều hơn một, do dữ liệu thô đầu vào
thường là một vector nhiều chiều, hoặc nhiều nơ ron tầng trước kết nối tới
một nơ ron tầng sau.
 Trọng số liên kết: Các liên kết được thể hiện độ mạnh yếu qua một giá trị
được gọi là trọng số liên kết. Kết hơp với các đầu truyền, tín hiệu đến các

nơ ron nhân tạo khác sẽ được tính bằng ;

Hình 1.5: Hình ảnh vị trí thiên lệch được thêm vào trong thực tế

 Hàm tổng: Tổng các tích của các đầu vào với trọng số liên kết mô phỏng
các khớp kết nối. Sau đó đi qua hàm tính tổng để tính ra giá trị trước khi
đưa vào hàm truyền;
 Thiên lệch (b): Độ lệch được đưa vào sau khi khi tính tốn xong hàm tổng,
tạo ra giá trị cuối cùng trước khi đưa vào hàm truyền. Mục đích của việc
thêm vào thiên lệch nhằm dịch chuyển chức năng của hàm kích hoạt sang
trái hoặc phải, giúp ích khi mạng được huấn luyện. Hình ảnh vị trí thiên
lệch được thêm vào trong mạng nơ ron thực tế.
Hình ảnh huấn luyện khi có và khơng có thiên lệch:

5


Hình 1.6: Kết quả của hàm sigmoid với các trọng số đầu vào khác nhau nhưng khơng có thiên lệch

Hình 1.7: Kết quả của hàm sigmoid với các trọng số thiên lệch khác nhau

Hàm kích hoạt (Activation functions): Hàm này được sử dụng để tính tốn giá trị
của đầu ra dựa vào giá trị của hàm Tổng.

1.1.4 Các mơ hình hàm kích hoạt của mạng nơ ron nhân tạo
1.1.4.1 Hàm Sigmod

 Biểu diễn hàm:
 Đạo hàm của hàm:
Hàm Sigmoid được sử dụng vì ngưỡng của nó nằm trong khoảng (0, 1). Do đó,

hàm này được sử dụng nhiều cho các mơ hình dự đốn xác suất đầu ra, tức kết quả chỉ tồn
6


tại trong khoảng từ 0 đến 1: khi đầu vào là số dương lớn, đầu ra của hàm sigmoid gần
bằng 1. Khi

nhỏ hơn 0, đầu ra gần bằng 0. Tuy nhiên, việc tối ưu của hàm này khó

khăn, nguyên nhân vì nếu giá trị đầu vào của hàm là 1 số rất lớn, thì đầu ra của hàm càng
về 2 đầu xấp xỉ 1 hoặc 0, nên tốc độ hội tụ sẽ rất chậm.

Hình 1.8: Đồ thị hàm Sigmoid

1.1.4.2 Hàm TanH
 Biểu diễn hàm:
 Đạo hàm của hàm:

Hàm TanH được sử dụng vì đầu ra của hàm nằm trong khoảng

, thích hợp

với các mơ hình đầu ra có ba giá trị: âm, trung tính (0) và dương. Chúng ta có thể thấy rõ
hơn điều này trong hình minh họa.

Hình 1.9: Đồ thị hàm TanH
7


1.1.4.3 Hàm tuyến tính

 Biểu diễn hàm:
 Đạo hàm của hàm:

Hàm tuyến tính áp dụng thao tác nhận dạng trên dữ liệu với dữ liệu đầu ra tỷ lệ
thuận với dữ liệu đầu vào.

Hình 1.10: Đồ thị hàm tuyến tính

1.1.4.4 Hàm RELU
 Biểu diễn hàm:
 Đạo hàm của hàm:
Hàm RELU áp dụng với những trường hợp cần đầu ra nằm trong khoảng (0, +∞).
Hàm RELU có tốc độ tính tốn rất nhanh, gán các giá trị âm trở thành 0 ngay lập tức, phù
hợp cho việc huấn luyện từ dữ liệu chuẩn. Tuy nhiên, điều này khiến hàm RELU không
ánh xạ các giá trị âm một cách thích hợp.

8


Hình 1.11: Đồ thị hàm RELU

1.1.4.5 Hàm ELU
 Biểu diễn hàm:
 Đạo hàm của hàm:
Hàm ELU là một biến thể của hàm RELU. Hàm thường được sử dụng khi ngưỡng
đầu ra của nó nằm trong khoảng (-1, +∞). Hàm ELU khắc phục hạn chế ánh xạ các giá trị
âm của hàm RELU.

Hình 1.12: Đồ thị hàm ELU


1.2 Mạng nơ ron tích chập
1.2.1 Khái niệm về mạng nơ ron tích chập
Mạng nơ ron tích chập là một trong những mạng truyền thẳng đặc biệt. Mạng nơ
ron tích chập là một mơ hình học sâu phổ biến và tiên tiến nhất hiện nay. Hầu hết các hệ
thống nhận diện và xử lý ảnh hiện nay đều sử dụng mạng nơ ron tích chập vì tốc độ xử lý
nhanh và độ chính xác cao. Trong mạng nơ ron truyền thống, các tầng được coi là một
chiều, thì trong mạng nơ ron tích chập, các tầng được coi là 3 chiều, gồm: chiều cao,
chiều rộng và chiều sâu (Hình 1.11). Mạng nơ ron tích chập có hai khái niệm quan trọng:
kết nối cục bộ và chia sẻ tham số. Những khái niệm này góp phần giảm số lượng trọng số
cần được huấn luyện, do đó tăng nhanh được tốc độ tính tốn.

9


Hình 1.13: Các tầng (layer) trong CNN là 3 chiều

Hình 1.14: Hình minh họa một ví dụ sử dụng CNN để phân lớp đồ vật [20]

1.2.2 Mơ hình mạng nơ ron tích chập
Có ba tầng chính để xây dựng kiến trúc cho một mạng nơ ron tích chập:
1. Tầng tích chập;
2. Tầng gộp (pooling layer);
3. Tầng được kết nối đầy đủ (fully-connected).
Tầng kết nối đầy đủ giống như các mạng nơ ron thơng thường, và tầng chập thực
hiện tích chập nhiều lần trên tầng trước. Tầng gộp có thể làm giảm kích thước mẫu trên
từng khối 2x2 của tầng trước đó. Ở các mạng nơ ron tích chập, kiến trúc mạng thường
chồng ba tầng này để xây dựng kiến trúc đầy đủ. Ví dụ minh họa về một kiến trúc mạng
nơ ron tích chập đầy đủ:

Hình 1.15: Ví dụ minh họa về cấu trúc CNNs – LeNet – 5[19]


1.2.3 Xây dựng mạng nơ ron tích chập
1.2.3.1 Mạng được kết nối cục bộ
10


Trong xử lý hình ảnh, thơng tin của hình ảnh là các điểm ảnh (pixel). Nếu sử dụng
mạng được kết nối đầy đủ, chúng ta sẽ có rất nhiều tham số. Ví dụ, một hình ảnh RGB có
kích thước 512x512 pixel sẽ có 786432 (= 512 x 512 x 3) tham số đầu vào. Vì vậy, nếu
chúng ta sử dụng kiến trúc mạng nơ ron trong hình sau:

Hình 1.16: Hình ảnh một mạng nơ ron được kết nối đầy đủ

Hình trên cho thấy nếu áp dụng mạng nơ ron được kết nối đầy đủ, toàn bộ kiến trúc
mạng sẽ cần tính tốn hơn 3 triệu nơ ron. Số lượng lớn các nơ ron làm cho tồn bộ q
trình học rất chậm và dẫn đến quá tải so với khả năng tính tốn của máy tính hiện tại.

Qua một vài nghiên cứu về xử lý ảnh, các nhà nghiên cứu nhận thấy rằng các tính
năng trong một hình ảnh thường là cục bộ, và các nhà nghiên cứu chú ý đến các tính năng
cấp thấp đầu tiên khi xử lý ảnh. Vì vậy, kiến trúc mạng có thể chuyển mạng được kết nối
đầy đủ sang mạng được kết nối cục bộ, nhằm làm giảm độ phức tạp của tính tốn. Đây là
một trong những ý tưởng chính trong CNN. Chúng ta có thể thấy rõ hơn qua hình sau:

Hình 1.17: Tích chập một ma trận nhỏ để tạo ra dữ liệu đầu vào cho một nơ ron
tầng ẩn

Giống như xử lý hình ảnh thơng thường, chúng ta có thể kết nối cục bộ một khối
vng ma trận với nơ ron. Kích thước khối thông thường là 3x3, 5x5, hoặc 7x7. Ý nghĩa
11



vật lý của khối giống như một cửa sổ trượt (cửa sổ trượt là một trong những phương pháp
xử lý ảnh). Bằng cách đó, số lượng tham số có thể giảm xuống rất nhỏ nhưng không gây
ra giảm hoặc mất thơng tin, vì hình ảnh thơng thường thường có tính lặp trong khơng
gian. Để trích xuất nhiều thơng tin hơn, các mạng nơ ron kết nối khối cùng với một nơ ron
khác. Độ sâu trong các tầng là số lần chúng ta kết nối một khu vực với các nơ ron khác
nhau. Ví dụ, mạng kết nối cùng một khu vực với 5 nơ ron khác nhau. Vì vậy, độ sâu là
năm trong tầng mới. Chúng ta có thể thấy rõ hơn qua hình sau:

Hình 1.18: Ví dụ về lớp tích chập

Trong thực tế, có thể kết nối tất cả thơng tin độ sâu (ví dụ: kênh 3 RGB) với nơ ron
tiếp theo vì kết nối là cục bộ trong khơng gian và có chiều sâu đầy đủ. Tuy nhiên ở ví dụ
này chỉ kết nối thơng tin cục bộ về chiều cao và chiều rộng. Vì vậy, có thể có
các tham số trong hình trên cho nơ ron sau lớp màu xanh nếu chúng ta sử dụng cửa sổ
. Biến thứ nhất và thứ hai là chiều cao và chiều rộng của kích thước cửa sổ và biến
thứ ba là độ sâu của lớp.
Ví dụ này di chuyển cửa sổ bên trong hình ảnh và làm cho tầng tiếp theo cũng có
chiều cao và chiều rộng, và là một hai chiều. Ví dụ: nếu chúng ta di chuyển cửa sổ 1 pixel
mỗi lần, gọi là bước nhảy là 1, trong một hình ảnh
sẽ có

và kích thước cửa sổ là

các nơ ron ở tầng tiếp theo. Có thể thấy rằng, kích

thước đã giảm từ 32 xuống 28. Vì vậy, để bảo tồn kích thước, chúng ta thêm phần trống
vào đường viền. Quay lại ví dụ trên, nếu chúng ta đệm với 2 pixel, có
các nơ ron ở lớp tiếp theo để giữ kích thước chiều cao và chiều
rộng. Như ví dụ trên, nếu chúng ta sử dụng kích thước cửa sổ w, chúng ta sẽ có 1 vùng

được tích chập với kích cỡ của cửa sổ mới là

pixel. Thơng tin đường viền sẽ

khơng ảnh hưởng nhiều vì những giá trị đó chỉ được sử dụng một lần.

12


Phần kế tiếp sẽ chi tiết hơn về bước nhảy của cửa sổ trượt, tức khoảng cách thay
đổi của cửa sổ mỗi lần. Ví dụ: giả sử bước nhảy là 2 và cửa sổ trượt bao phủ vùng
Sau đó, cửa sổ thứ hai bao phủ vùng

và cửa sổ thứ 3 bao phủ vùng

Ví dụ, nếu chúng ta sử dụng bước nhảy 1 và kích thước cửa sổ
ảnh

và khơng sử dụng bù viền (pad-zero),

trong hình

thì chúng ta sẽ có

các nơ ron ở lớp tiếp theo. Nếu chúng ta thay đổi bước nhảy 1 thành
bước nhảy 2 và những tham số khác vẫn giữ ngun, thì chúng ta sẽ có có
những nơ ron ở lớp tiếp theo. Chúng ta có thể kết luận rằng nếu chúng
ta sử dụng bước nhảy s, kích thước cửa sổ

trong ảnh


, thì sẽ có

các nơ ron ở lớp tiếp theo. Khi
chúng ta sử dụng bước nhảy 3 và những tham số khác vẫn giữ nguyên thì chúng ta sẽ
nhận được
Vì kết quả khơng phải là số ngun, nên bước nhảy 3
khơng thể dùng vì chúng ta khơng thể có được một khối hồn chỉnh trong một mạng nơ
ron.
1.2.3.2 Chia sẻ tham số
Trong ví dụ minh họa của mục 1.3.2.1, ta sẽ có số lượng là

nơ ron

ở tầng tiếp theo có bước nhảy 1, kích thước cửa sổ 5 x 5 và khơng có đệm, với độ sâu là 5.
Mỗi nơ ron sẽ có

tham số. Vì vậy, trong tầng tiếp theo sẽ có
tham số. Ở đây, chúng ta có thể chia sẻ các tham số

theo từng độ sâu, do đó

nơ ron ở mỗi tầng ẩn sẽ sử dụng tham số giống nhau là

, và tổng tham số sử dụng cho mỗi tầng là
. Điều này làm số
lượng tham số giảm một cách đáng kể. Tương tự, các nơ ron ở mỗi độ sâu trong tầng tiếp
theo sẽ áp dụng tích chập cho tầng trước đó. Và q trình học tập giống như học lõi (core)
tích chập. Đây là lý do mà các mạng nơ ron này được gọi là mạng nơ ron tích chập.
1.2.3.3 Hàm kích hoạt

Trong mơ hình nơ ron truyền thống, các mạng thường sử dụng hàm sigmoid cho
hàm kích hoạt. Tuy nhiên Krizhevsky [21] đã thử với hàm kích hoạt RELU. Sau khi so
13


sánh hiệu quả của hàm kích hoạt RELU và hàm kích hoạt sigmoid trong CNNs. Họ thấy
rằng mơ hình với RELU cần ít thời gian lặp hơn trong khi đạt tỷ lệ lỗi khi huấn luyện
tương đương. Chúng ta có thể thấy kết quả trong hình sau:

Hình 1.19: So sánh giữa ReLU và Sigmoid.

Như hình trên, đường liền nét là mơ hình sử dụng RELU và đường đứt nét là sử
dụng hàm Sigmoid. Có thể dễ dàng thấy rằng, RELU cần ít vịng lặp hơn để đạt tỉ lệ lỗi
chấp nhận được. Do đó, ngày nay đa số các mơ hình CNN gần đây sử dụng RELU để làm
hàm kích hoạt.
1.2.3.4 Tầng gộp
Tầng gộp sẽ giảm kích cỡ của hình ảnh ngay sau khi thực hiện tích chập, giúp giữ
lại các đặc điểm, tính chất nổi bật nhất của ảnh. Điều này cho phép giảm mức độ tính tốn
khi hình ảnh có kích thước q lớn, đồng thời khơng làm mất đi các đặc điểm quan trọng
của ảnh.
Tuy đã sử dụng các mạng được kết nối cục bộ và chia sẻ tham số, tuy nhiên số lượng
tham số trong mang nơ ron vẫn là quá lớn. So với một tập dữ liệu tương đối nhỏ, nó có
thể gây ra tình trạng quá khớp (overfitting). Vì vậy, mạng nơ ron nhân tạo thường chèn
các tầng gộp vào mạng. Tầng gộp xử lý để giảm dần số lượng tham số nhằm cải thiện thời
gian tính tốn trong mạng nơ ron. Tầng gộp áp dụng lấy mẫu xuống cho tầng trước bằng
cách sử dụng hàm max. Tầng gộp hoạt động độc lập trên mỗi tầng trước đó. Ngồi ra, có
thể đặt lượng pixel khi chúng ta di chuyển cửa sổ trượt hoặc bước nhảy, như làm với tầng
tích chập. Ví dụ, trong hình sau:
14



Hình 1.20: Ví dụ minh họa đơn giản về tầng gộp

Ở ví dụ trên, kích thước cửa sổ trượt là
và bước nhảy mỗi lần trượt là 2. Tại
mỗi cửa sổ, hàm max sẽ lấy giá trị tối đa để đại diện cho giá trị của tầng tiếp theo. Có hai
loại tầng gộp: Nếu kích thước cửa sổ trượt bằng bước nhảy, đó là gộp chung (traditional
pooling). Nếu kích thước cửa sổ trượt lớn hơn bước nhảy, đó là gộp nhóm (overlapping
pooling). Trong thực tế, các mạng nơ ron thường sử dụng kích thước cửa sổ

cùng

kích thước bước nhảy là 2 trong gộp chung và sử dụng kích thước cửa sổ
cùng
kích thước bước nhảy là 2 trong gộp nhóm, vì nếu tăng kích cỡ cửa sổ sẽ rất dễ làm mất
các đặc tính của dữ liệu.
Ngồi việc gộp sử dụng hàm max, người ta có thể sử dụng các hàm khác. Ví dụ
người ta có thể sử dụng hàm tính trung bình của cửa sổ trượt để tính tốn giá trị cho tầng
tiếp theo, được gọi là gộp trung bình.
1.2.3.5 Tầng được kết nối đầy đủ
Tầng thứ ba là tầng được kết nối đầy đủ. Tầng này giống như mạng nơ ron truyền
thống: các nơ ron ở tầng trước sẽ kết nối với một nơ ron ở tầng tiếp theo và tầng cuối
cùng là đầu ra. Để có thể đưa hình ảnh từ những tầng trước vào, ta phải dàn phẳng dữ liệu
ra thành một véc tơ nhiều chiều. Cuối cùng là sử dụng hàm softmax để thực hiện phân
loại đối tượng

15




×