Mạng nơ ron nhân tạo (Artificial Neural Network ANN) là một chuỗi các giải thuật lập trình, mô phỏng dựa trên cách hoạt động của mạng lưới thần kinh trong não bộ các sinh vật sống. Mạng nơ ron nhân tạo được sử dụng để tìm ra mối quan hệ của một tập dữ liệu thông qua một thiết kế kiến trúc chứa nhiều tầng ẩn (hidden layer), mỗi tầng lại chứa nhiều nơ ron. Các nơ ron được kết nối với nhau và độ mạnh yếu của các liên kết được biểu hiện qua trọng số liên kết.
Lập trình thông thường có thể làm được rất nhiều phần mềm lớn, như tính toán mô phỏng các vụ nổ hạt nhân trong siêu máy tính ở các phòng thí nghiệm, hoặc tái hiện các tế bào ở cấp độ phân tử để phân tích các thử nghiệm thuốc. Một siêu máy tính có thể tính toán được nhiều tỉ phép tính trên giây, tuy nhiên lập trình thông thường lại gặp khó khăn trong việc nhận ra các mẫu đơn giản, ví dụ như nhận diện mặt người, điều mà một bộ não sinh học xử lý nhanh và chính xác hơn nhiều.
Áp dụng với các kỹ thuật học sâu, mạng nơ ron nhân tạo hiện nay đang được áp dụng để giải quyết những vấn đề mà lập trình theo logic thông thường khó có thể giải quyết được. Do đó, mạng nơ ron nhân tạo đang nhanh chóng trở nên phổ biến, và là xu thế trên nhiều lĩnh vực.
1.2.2 Một số kiểu mạng nơ ron
Có hai kiểu mạng nơ ron chính: mạng nơ ron truyền thằng (feedforward neural network) và mạng nơ ron hồi quy (recurrent neural network).
Mạng truyền thẳng và hồi quy được minh họa như sau:
Hình 1.13: Mạng nơ ron truyền thẳng
1
Dễ thấy, ở mạng nơ ron truyền thẳng, các nơ ron trong tầng ẩn đều được kết nối với các nơ ron trong tầng n. Do có nhiều tầng ẩn nên chúng ta có thể thấy rằng mạng truyền thẳng kéo dài trong không gian, và là không có bất kỳ đường tuần hoàn (cyclic path) nào nằm trong mạng. Mạng nơ ron truyền thẳng rất phổ biến hiện nay.
Hình 1.14: Mạng nơ ron hồi quy
Một loại khác là mạng nơ ron hồi quy. Không giống như mạng nơ ron truyền thẳng, mạng nơ ron hồi quy có ít nhất một đường dẫn tuần hoàn. Chúng ta có thể thấy nó ở hình minh họa phía trên. Vì có một đường dẫn tuần hoàn, nên mạng nơ ron hồi quy có thể gây ra vòng lặp vô cực. Tuy nhiên, mạng nơ ron tuần hoàn có một ứng dụng quan trọng là chúng có thể nhận diện cho các giai đoạn thời gian khác nhau, như hình minh họa sau:
Hình 1.15: Cách huấn luyện cho một mạng nơ ron hồi quy
Như ví dụ trên, có một nút A kết nối với nút B và một chu kỳ đến chính nút A. Mạng nơ ron hồi quy không xử lý đường dẫn tuần hoàn và các kết nối cùng một lúc. Mạng nơ ron hồi quy giả sử rằng đầu ra của nút A trong thời gian n là đầu vào của nút B và nút A trong thời gian n + 1. Vì vậy, ngoài tính chất kéo dài trong không gian khi kết nối với các tầng nơ ron tiếp theo, mạng nơ ron hồi quy cũng nằm sâu trong thời gian. Vì vậy, các mạng nơ ron hồi quy có thể mô hình hóa các hệ thống thay đổi theo bối cảnh. Ví dụ: mạng nơ ron hồi quy thường được sử dụng trong xử lý ngôn ngữ theo ngữ cảnh. Mạng
1
nơ ron hồi quy có thể xử lý các phụ thuộc xa (long-term dependencies) theo mốc thời gian, ví dụ như mạng bộ nhớ dài-ngắn (Long Short Term Memory networks).
1.2.3 Mạng nơ ron lan truyền ngược
1.2.3.1 Tổng quan về mạng nơ ron lan truyền ngược
Giải thuật lan truyền ngược được mô tả ngắn gọn như sau:
1. Bước 1: Lan truyền. Giai đoạn lan truyền có hai bước, lan truyền tiến và lan truyền ngược. Bước lan truyền tiến là nhập dữ liệu huấn luyện vào các mạng nơ ron và tính toán đầu ra. Sau đó, dựa vào kết quả đầu ra, so sánh với dữ liệu huấn luyện. Chúng ta có thể sử dụng lan truyền ngược để cập nhật ngược lại trọng số lại cho các nơron trong các tầng trước đó.
2. Bước 2: Cập nhật trọng số. Mạng cập nhật các giá trị của trọng số của nơ ron theo lỗi của kết quả đầu ra.
3. Bước 3: Lặp hai bước trên. Lặp lại bước một và hai cho đến khi sai số tối thiểu. Sau đó kết thúc khóa huấn luyện.
1.2.3.2 Cách thức lan truyền ngược
1. Sử dụng để biểu diễn đầu vào cho nút của lớp .
2. Sử dụng cho trọng số từ nút của lớp đến nút của lớp 3. Sử dụng được biểu diễn cho độ lệch của nút của lớp .
4. Sử dụng đại diện cho đầu ra của nút của lớp .
5. Sử dụng đại diện cho đầu ra mong muốn, dựa trên tập huấn luyện được sử dụng.
6. Sử dụng là hàm kích hoạt, sử dụng Sigmoid cho hàm kích hoạt. Để có được lỗi tối thiểu, hàm chi phí được tính toán với công thức như sau:
1
Trong đó x là đầu vào dữ liệu huấn luyện và là đầu ra mong muốn. L là tổng số
y L
là đầu ra của mạng nơ ron tương ứng với đầu vào x. Để đạo hàm dễ dàng, ta nhân tổng của (4) với một hằng số 1/2.
Để tìm ra mức tối thiểu. Trước tiên, ta tính toán các đạo hàm riêng của hàm chi phí đối với bất kỳ trọng số nào, với công thức sau:
Có hai trường hợp: Nút là một nút đầu ra hoặc trong một tầng ẩn. Trong trường hợp ở tầng đầu ra, trước tiên chúng ta tính đạo hàm chênh lệch:
Phương trình cuối cùng dựa trên quy tắc chuỗi. Nút là nút duy nhất có trọng số nên các giá trị khác sẽ bằng 0. Và là đầu ra của hàm kích hoạt (hàm Sigmoid). Do đó, phương trình mới thu được là:
Trong đó
các trọng số. Hàm sigmoid là đạo hàm có dạng sau:
1
download by : skknchat@gmail.com
L
k sự kết hợp tuyến tính của tất cả các đầu vào của nút j trong tầng L với
Do đó, hàm trên trở thành:
Vì kL WL yL 1
. Vì vậy, (9) trở thành:
i L 1
(10)
Vì liên quan đến và không liên quan khi khác . Do đó, có mối quan hệ giữa nút của tầng và nút của tầng . Ta có công thức:
để biểu diễn nút của tầng . Do vậy, phương trình mới thu được là:
Ta xem xét các nút của tầng ẩn . Ở lớp ngay trước lớp đầu ra. Áp dụng đạo hàm riêng một phần trên trọng số cho hàm chi phí. Các trọng số cho các nút của tầng ẩn này:
1
Vì có một tổng trên tầng. Do thay đổi của các trọng số cho các nút của các tầng ẩn sẽ ảnh hưởng đến đầu ra mạng nơ ron. Do đó, áp dụng quy tắc chuỗi (chain rule):
Sau đó, đạo hàm theo quy tắc chuỗi:
Dòng thứ 2 của (14) dựa vào đầu vào của là sự kết hợp tuyến tính giữa các đầu ra của nút của lớp trước với trọng số. Vì đạo hàm không liên quan đến nút của lớp L. Do đó, ta đơn giản hóa đạo hàm dựa trên quy tắc chuỗi:
Chuyển thành . Do đó phương trình trở thành:
Ta xét 2 trường hợp:
1
Đối với tầng đầu ra nút k: , trong đó:
Đối với tầng ẩn nút j: , trong đó:
Áp dụng quy trình tương tự. Ví dụ, Tính đạo hàm riêng cho độ lệch của nút k trong lớp cuối cùng và thu được:
Bởi vì nên . Phương trình có thể được cập nhật
thành:
Công thức trên áp dụng với bất kể đầu ra nào. Vì vậy, độ dốc của hàm chi phí so với độ lệch là:
Rút ra từ công thức trên, giải thuật loan truyền ngược sẽ được mô tả như sau: Bước 1: Chạy mạng tính toán với dữ liệu đầu vào để có được đầu ra mạng Bước 2: Đối với mỗi nút đầu ra, ta thực hiện phép tính:
Bước 3: Đối với mỗi nút ở tầng ẩn, ta thực hiện phép tính:
1
Bước 4: Cập nhật các trọng số và thiên lệch như sau: Giả thiết:
Áp dụng:
Tham số trong thuật toán được gọi là tốc độ học tập. Thuật toán này lặp lại cho đến khi đạt sai số tối thiểu hoặc dưới ngưỡng chấp nhận được để hoàn thành quá trình huấn luyện.
1.3 Mạng nơ ron tích chập
1.3.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 toán.
Hình 1.16: Các tầng (layer) trong CNN là 3 chiều
1
Hình 1.17: Hình minh họa một ví dụ sử dụng CNN để phân lớp đồ vật [20]
1.3.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.18: Ví dụ minh họa về cấu trúc CNNs – LeNet – 5[19]
1
1.3.2 Xây dựng mạng nơ ron tích chập
1.3.2.1 Mạng được kết nối cục bộ
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.19: 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 toán hơn 3 triệu nơ ron. Số lượng lớn các nơ ron làm cho toàn bộ quá trình học rất chậm và dẫn đến quá tải so với khả năng tính toá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 toá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.20: 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 vuông 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 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
2
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.21: 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 và kích thước cửa sổ là
sẽ có 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 toà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.
2
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ổ trong hình ảnh và không sử dụng bù viền (pad-zero), 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ữ nguyên, 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ố nguyên, 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 hoàn chỉnh trong một mạng nơ ron.
1.3.2.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à quá 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.3.2.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
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: