Phan_trung_duc_cnns_0324.docx

  • Uploaded by: duc phan
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Phan_trung_duc_cnns_0324.docx as PDF for free.

More details

  • Words: 6,079
  • Pages: 25
SV: PHAN TRUNG ĐỨC MSSV: 20141176

Ứng dụng Convolution Neural Network (CNN) trong bài toán phân loại ảnh

Nguồn: https://tinhte.vn/threads/giai-ma-cac-thuat-ngu-neural-networks-deep-learningmachine-learning-va-artificial-intelligence.2805575/

Artificial Intelligence (AI) Artificial Intelligence-trí tuệ nhân tạo là lĩnh vực nghiên cứu mà một máy tính (và hệ thống của nó) phát triển khả năng hoàn thành thành công các nhiệm vụ phức tạp mà thường đòi hỏi trí thông minh của con người như nhận thức thị giác, nhận dạng giọng nói, ra quyết định và dịch thuật. AI thường được định nghĩa là " khoa học của máy tính làm điều đó điều này đòi hỏi trí thông minh khi thực hiện”. Nói cách khác, trí tuệ nhân tạo có liên quan đến việc giải quyết các nhiệm vụ dễ dàng cho con người nhưng khó cho máy tính.

Machine learning (ML) Machine learning- học máy là lĩnh vực nghiên cứu áp dụng các nguyên tắc khoa học máy tính và thống kê để tạo ra các mô hình thống kê, được sử dụng cho các dự đoán trong tương lai (dựa trên nguồn dữ liệu trong quá khứ hay dữ liệu lớn) và xác định (khám phá) các mẫu trong dữ liệu. ML là một loại trí tuệ nhân tạo cho phép các ứng dụng phần mềm trở nên chính xác hơn trong việc dự đoán các kết quả mà không được lập trình một cách rõ ràng. ML có khả năng cho một máy tính xuất hoặc làm một cái gì đó mà nó không được lập trình để làm. Trong khi ML nhấn mạnh vào việc đưa ra dự đoán về tương lai, AI thường tập trung vào các máy tính lập trình để đưa ra quyết định. Nếu bạn sử dụng một chương trình thông minh có liên quan đến hành vi giống như con người, nó có thể là AI. Tuy nhiên, nếu các tham số không được tự động học (hoặc có nguồn gốc) từ dữ liệu, nó không phải là ML.

Trong cốt lõi của nó, ML chỉ đơn giản là một cách để đạt được AI. ML là loại của AI có thể bao gồm nhưng không giới hạn đối với mạng nơ ron và deep learning”.

Deep learning (DL) Deep learning- học sâu được biến đến như là mạng nơ ron sâu, một trong những cách tiếp cận đến ML. Các phương pháp tiếp cận chính khác bao gồm học quyết định cây, lập trình logic quy nạp, phân cụm, tăng cường học tập và mạng Bayesian. DL là một loại đặc biệt của ML. Nó liên quan đến việc nghiên cứu các thuật toán liên quan dến ANN và ML có chứa nhiều hơn một lớp ẩn. DL bao gồm mô hình toán học, có thể được coi là một thành phần của các khối đơn giản của một loại nhất định và là nơi một số khối này có thể được điều chỉnh để dự đoán tốt hơn kết quả cuối cùng. Từ "deep” có nghĩa là thành phần có nhiều khối này xếp chồng lên nhau- trong một hệ thống phân cấp làm tăng độ phức tạp. Đầu ra được tạo ra thông qua một cái gì đó gọi là Blackpropagation bên trong của một quá trình lớn hơn được gọi là Gradient descent, cho phép thay đổi các tham số theo cách cải thiện mô hình của bạn. Các thuật toán học máy truyền thống là tuyến tính. Các thuật toán học sâu được xếp chồng lên nhau trong một hệ thống phân cấp làm tăng độ phức tạp.

Nguồn:

https://dominhhai.github.io/vi/2018/04/nn-intro/#5-lan-truy%E1%BB%81n-

ng%C6%B0%E1%BB%A3c-v%C3%A0-%C4%91%E1%BA%A1o-h%C3%A0m

MẠNG NEURAL NETWORKS Mạng nơ-ron nhân tạo (Neural Network - NN) là một mô hình lập trình rất đẹp 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 - DL), 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.

1. Perceptrons 1.1. Perceptron cơ bản

Một mạng nơ-ron được cấu thành bởi các nơ-ron đơn lẻ được gọi là các perceptron. Nên trước tiên ta tìm hiểu xem perceptron là gì đã rồi tiến tới mô hình của mạng nơ-ron sau. Nơ-ron nhân tạo được lấy cảm hứng từ nơ-ron sinh học như hình mô tả bên dưới:

Như hình trên, ta có thể thấy một nơ-ron có thể nhận nhiều đầu vào và cho ra một kết quả duy nhất. Mô hình của perceptron cũng tương tự như vậy:

perceptron Một perceptron sẽ nhận một hoặc nhiều đầu x vào dạng nhị phân và cho ra một kết quả oo dạng nhị phân duy nhất. Các đầu vào được điều phối tầm ảnh hưởng bởi các tham số trọng lượng tương ứng wcủa nó, còn kết quả đầu ra được quyết định dựa vào một ngưỡng quyết định bb nào đó:

Đặt b = - threshold, ta có thể viết lại thành:

Để dễ hình dung, ta lấy ví dụ việc đi nhậu hay không phụ thuộc vào 4 yếu tố sau: 

1. Trời có nắng hay không?



2. Có hẹn trước hay không?



3. Vợ có vui hay không?



4. Bạn nhậu có ít khi gặp được hay không?

Thì ta coi 4 yếu tố đầu vào là x1, x2, x3, x4 và nếu o=0 thì ta không đi nhậu còn o=1 thì ta đi nhậu. Giả sử mức độ quan trọng của 4 yếu tố trên lần lượt là w1=0.05, w2=0.5, w3=0.2, w4=0.25 và chọn ngưỡng b=-0.5 thì ta có thể thấy rằng việc trời nắng có ảnh hưởng chỉ 5% tới quyết định đi nhậu và việc có hẹn từ trước ảnh hưởng tới 50% quyết định đi nhậu của ta. Nếu gắn x0=1 và w0=b, ta còn có thể viết gọn lại thành:

1.2. Sigmoid Neurons Với đầu vào và đầu ra dạng nhị phân, ta rất khó có thể điều chỉnh một lượng nhỏ đầu vào để đầu ra thay đổi chút ít, nên để linh động, ta có thể mở rộng chúng ra cả khoảng [0, 1]. Lúc này đầu ra được quyết định bởi một hàm sigmoid σ(wT x). Như các bài trước đã đề cập thì hàm sigmoid có công thức:

Đồ thị của hàm này cũng cân xứng rất đẹp thể hiện được mức độ công bằng của các tham số:

Sigmoid Function Đặt z = wT x thì công thức của perceptron lúc này sẽ có dạng:

Tới đây thì ta có thể thấy rằng mỗi sigmoid neuron cũng tương tự như một bộ phân loại tuyến tính (logistic regression) bởi xác suất P(yi=1|xi;w)=σ(w⊺x). Thực ra thì ngoài hàm sigmoid ra, ta còn có thể một số hàm khác như tanh, ReLU để thay thế hàm sigmoid bởi dạng đồ thị của nó cũng tương tự như sigmoid. Một cách tổng quát, hàm perceptron được biểu diễn qua một hàm kích hoạt (activation function) f(z) như sau: o = f(z) = f(w⊺x) Bằng cách biểu diễn như vậy, ta có thể coi neuron sinh học được thể hiện như sau:

Một điểm cần lưu ý là các hàm kích hoạt buộc phải là hàm phi tuyến. Vì nếu nó là tuyến tính thì khi kết hợp với phép toán tuyến tính w⊺x thì kết quả thu được cũng sẽ là một thao tác tuyến tính dẫn tới chuyện nó trở nên vô nghĩa.

2. Kiến trúc mạng NN Mạng NN là sự kết hợp của của các tầng perceptron hay còn được gọi là perceptron đa tầng (multilayer perceptron) như hình vẽ bên dưới:

Một mạng NN sẽ có 3 kiểu tầng:



Tầng vào (input layer): Là tầng bên trái cùng của mạng thể hiện cho các đầu vào của mạng.



Tầng ra (output layer): Là tầng bên phải cùng của mạng thể hiện cho các đầu ra của mạng.



Tầng ẩn (hidden layer): Là tầng nằm giữa tầng vào và tầng ra thể hiện cho việc suy luận logic của mạng.

Lưu ý rằng, một NN chỉ có 1 tầng vào và 1 tầng ra nhưng có thể có nhiều tầng ẩn.

Trong mạng NN, mỗi nút mạng là một sigmoid nơ-ron nhưng hàm kích hoạt của chúng có thể khác nhau. Tuy nhiên trong thực tế người ta thường để chúng cùng dạng với nhau để tính toán cho thuận lợi. Ở mỗi tầng, số lượng các nút mạng (nơ-ron) có thể khác nhau tuỳ thuộc vào bài toán và cách giải quyết. Nhưng thường khi làm việc người ta để các tầng ẩn có số lượng nơ-ron bằng nhau. Ngoài ra, các nơ-ron ở các tầng thường được liên kết đôi một với nhau tạo thành mạng kết nối đầy đủ (full-connected network). Khi đó ta có thể tính được kích cỡ của mạng dựa vào số tầng và số nơ-ron. Ví dụ ở hình trên ta có: 

44 tầng mạng, trong đó có 22 tầng ẩn



3+4*2+1=123+4∗2+1=12 nút mạng



(3*4+4*4+4*1)+(4+4+1)=41(3∗4+4∗4+4∗1)+(4+4+1)=41 tham số

3. Lan truyền tiến Như bạn thấy thì tất cả các nốt mạng (nơ-ron) được kết hợp đôi một với nhau theo một chiều duy nhất từ tầng vào tới tầng ra. Tức là mỗi nốt ở một tầng nào đó sẽ nhận đầu vào là tất cả các nốt ở

tầng trước đó mà không suy luận ngược lại. Hay nói cách khác, việc suy luận trong mạng NN là suy luận tiến (feedforward):

Trong đó, n(l) số lượng nút ở tầng l tương ứng và aj(l) là nút mạng thứ j của tầng l. Còn wij(l+1) là tham số trọng lượng của đầu vào aj(l) đối với nút mạng thứ i của tầng l+1 và bi(l+1) là độ lệch (bias) của nút mạng thứ i của tầng l+1. Đầu ra của nút mạng này được biểu diễn bằng ai(l+1) ứng với hàm kích hoạt f(zi) tương ứng. Riêng với tầng vào, thông thường a(1) cũng chính là các đầu vào x tương ứng của mạng. Để tiện tính toán, ta coi a0(l) là một đầu vào và wi0(l+1) = bi(l+1) là tham số trọng lượng của đầu vào này. Lúc đó ta có thể viết lại công thức trên dưới dạng véc-tơ:

Nếu nhóm các tham số của mỗi tầng thành một ma trận có các cột tương ứng với tham số mỗi nút mạng thì ta có thể tính toán cho toàn bộ các nút trong một tầng bằng véc-tơ:

4. Học với mạng NN Cũng tương tự như các bài toán học máy khác thì quá trình học vẫn là tìm lấy một hàm lỗi để đánh giá và tìm cách tối ưu hàm lỗi đó để được kết quả hợp lý nhất có thể. Như đã đề cập mỗi nút mạng của NN có thể coi là một bộ phân loại (logistic regression) có hàm lỗi là:

Trong đó, m là số lượng dữ liệu huấn luyện, y(i) là đầu ra thực tế của dữ liệu thứ i trong tập huấn luyện. Còn σ(i) là kết quả ước lượng được ứng với dữ liệu thứ i.

Hàm lỗi của NN cũng tương tự như vậy, chỉ khác là đầu ra của mạng NN có thể có nhiều nút nên khi tính đầu ra ta cũng cần phải tính cho từng nút ra đó. Giả sử số nút ra là K và yk là đầu ra thực tế của nút thứ k, còn σk là đầu ra ước lượng được cho nút thứ kk tương ứng. Khi đó, công thức tính hàm lỗi sẽ thành:

Lưu ý rằng, các tham số lúc này không còn đơn thuần là một ma trận nữa mà là một tập của tất cả các ma trận tham số của tất cả các tầng mạng nên tôi biểu diễn nó dưới dạng tập hợp W. Để tối ưu hàm lỗi ta vẫn sử dụng các phương pháp đạo hàm như đã đề cập ở các bài viết trước. Nhưng việc tính đạo hàm lúc này không đơn thuần như logistic regression bởi để ước lượng được đầu ra ta phải trải qua quá trình lan truyền tiến. Tức là để tính được σk ta cần một loạt các phép tính liên hợp nhau.

5. Lan truyền ngược và đạo hàm Để tính đạo hàm của hàm lỗi ∇J(W) trong mạng NN, ta sử dụng một giải thuật đặc biệt là giải thuật lan truyền ngược (backpropagation). Nhờ có giải thuật được sáng tạo vào năm 1986 này mà mạng NN thực thi hiệu quả được và ứng dụng ngày một nhiều cho tới tận ngày này. Về cơ bản phương pháp này được dựa theo quy tắc chuỗi đạo hàm của hàm hợp và phép tính ngược đạo hàm để thu được đạo hàm theo tất cả các tham số cùng lúc chỉ với 2 lần duyệt mạng. Tuy nhiên trong bài viết này, tôi chỉ đề cập ngay tới công thức tính toán còn việc chứng minh thì tôi sẽ dành cho các bài tiếp theo. Giải thuật lan truyền ngược được thực hiện như sau: 1. Lan truyền tiến: Lần lượt tính các a(l) từ l=2→L theo công thức:

Trong đó, tầng vào a(1) chính bằng giá trị vào của mạng x. 2. Tính đạo hàm theo zz ở tầng ra:

với a(L), z(L) vừa tính được ở bước 1. 3. Lan truyền ngược: Tính đạo hàm theo z ngược lại từ l=(L-1) → 2 theo công thức:

với z(l) tính được ở bước 1 và

tính được ở vòng lặp ngay trước.

4. Tính đạo hàm: Tính đạo hàm theo tham số ww bằng công thức:

với a(l-1) tính được ở bước 1 và

tính được ở bước 3.

MẠNG CONVOLUTION NEURAL NETWORKs:

Nguồn: https://labs.septeni-technology.jp/technote/ml-18-convolution-neural-network-part-1/

https://labs.septeni-technology.jp/technote/ml-19-convolution-neural-network-part-2/ https://labs.septeni-technology.jp/technote/ml-20-convolution-neural-network-part-3/

INTRO 1. Problem with fully-connected Neural Network (ANN): Mạng NN truyền thống (được dùng với nhiều tên gọi như MLP – Multilayer Perceptron, Regular Neural Net, fully-connected nets) hoạt động bằng cách nhận input (là một vector) và biến đổi vector này thông qua các hidden layer. Mỗi hidden layer được tạo bởi một tập các neuron (mỗi neuron trong layer được connect với toàn bộ các neuron của layer liền trước nó), và điểm đặc biệt là các neuron thuộc cùng một layer hoạt động hoàn toàn biệt lập với nhau (các trọng số gắn với các neuron này được sử dụng độc lập và hoàn toàn không liên quan đến nhau).

Bên cạnh đó hiệu suất của mạng NN truyền thống cũng không tốt đối với vấn đề xử lý ảnh. Chẳng hạn với một bức ảnh có kích thước nhỏ: 32x32x3 (width = 32, height = 32, color channels = 3 – Red Green Blue) thì số lượng feature của input sẽ là : 32323 = 3072 -> ở hidden layer đầu tiên, ngay sau input layer mỗi neuron sẽ phải có lượng trọng số (weights) là 3072 -> vẫn kiểm soát được, tuy nhiên nếu với ảnh lớn hơn một chút chỉ vào khoảng 200x200x3 -> mỗi neuron đã cần tới 120,000 weights. Chính vì vậy nên khi sử dụng mạng NN truyền thống

trong xử lý ảnh, kích cỡ của ảnh khiến cho số lượng tham số (trọng số) được sử dụng trong mạng tăng lên chóng mặt -> khi số lượng trọng số lớn sẽ khiến chi phí tính toán lớn và dễ dẫn đến quá tải.

2. Solution with weight sharing: Khi ta nhìn vào một bức ảnh, bản thân các chi tiết trong ảnh giúp ta định hình được nội dung trong bức ảnh, nhưng nếu ta nhận được từng chi tiết riêng lẻ, và phải hình dung toàn bộ nội dung bức ảnh -> công việc trở nên khó khăn hơn. Vấn đề các neuron trên cùng 1 layer hoạt động độc lập với nhau hay chính là việc không sử dụng chung các trọng số khiến cho việc trích xuất những đặc trưng trên input cũng gặp khó khăn hơn -> yêu cầu nhiều neuron hơn, nhiều layer hơn -> chi phí tính toán tăng và dễ vướng vào overfitting. Vì vậy các mạng NN mới liên tiếp ra đời, cố gắng giải quyết vấn đề này. Cụ thể trong các mạng NN mới trọng số được dùng chung giữa các neuron theo nhiều cách, giúp giảm số lượng trọng số, giảm chi phí tính toán, nhưng vẫn đem lại kết quả tốt.

3. Introduction of Convolution Neural Network (CNN): Điển hình trong số đó là mạng tích chập (Convolution Neural Network – CNN) và mạng hồi quy (Recurrent Neural Network – RNN). Trong bài viết này chúng ta sẽ bắt đầu vào đi tìm

hiểu CNN. Cũng giống như mạng NN truyền thống CNN hoạt động theo phương thức nhận input và biến đổi input thông qua các layer, tuy nhiên điểm khác biệt nằm ở cấu trúc của input và cấu trúc bên trong 1 layer. – Input: Lấy cảm hứng từ xử lý ảnh nên input của CNN có dạng như một bức ảnh chứ không có

dạng

vector

như

ANN,

cụ

thể

một

bức

ảnh

sau

khi

số

hoá



dạng width x height x depth (width: số lượng điểm ảnh trên chiều rộng, height: số lượng điểm ảnh trên chiều cao, depth: số lượng kênh chẳng hạn như RGB có 3 kênh đại diện cho mức độ của 3 màu Đỏ, Lục, Lam) nên input của CNN là 1 tensor 3 chiều (tensor là gì ta sẽ cùng tìm hiểu trong phần tiếp theo).

– Layer: ngoài sử dụng layer Fully-connected CNN còn sử dụng một số layer đặc biệt như “Convolution Layer” (đây chính là nơi mà các trọng số được share), “ReLU”, “Pooling” (không chứa trọng số hay tham số nhưng lại giúp giảm kích thước của ảnh).

4. What is tensor: Chúng ta đã được biết các khái niệm như: – Scalar: số vô hướng hay các số trong hệ thập phân ta vẫn sử dụng (5, 10, 7.2,…). – Vector: là một tập các số vô hướng. Số lượng số vô hướng là số chiều của vector. – Matrix: là một bảng hình chữ nhật được chia ô như bàn cờ, với mỗi ô là một số vô hướng. Một cách định nghĩa khác là matrix gồm nhiều vector có cùng số chiều.

– Tensor: phát triển lên từ các khái niệm trên ta có định nghĩa tensor, mỗi tensor n chiều là 1 tập các tensor n-1 chiều có cùng kích thước. Chẳng hạn Scalar là tensor 0D (0 Dimention – 0 chiều), Vector là tensor 1D, Matrix là tensor 2D…

MẠNG CNNs 1. Integral (Tích phân): Nếu ta đã hiểu thế nào là slope hay gradient của một đoạn thẳng, từ đó phát triển lên đạo hàm của hàm số tại một điểm. Vậy là từ một hàm số f(x) cho trước ta có thể quan sát được xu hướng tăng hay giảm của nó thông qua việc tăng hay giảm x. Bây giờ câu hỏi đặt ra là nếu ta có đạo hàm của hàm số f(x) tại x liệu ta có thể quan sát được f(x) hay không? Nói một cách khác là khi ta biết độ dốc của f(x) tại các điểm, liệu ta có thể tìm được giá trị của f(x) hay cả hàm số f(x) không?

Chú ý rằng, đạo hàm tại một điểm chính là tỉ số giữa thay đổi vô cùng nhỏ trên trục y và thay đổi vô cùng nhỏ trên trục x. Như ở hàm số trên, ta có thể dễ dàng hình dung nó là một hàm bậc 2 nên đạo hàm sẽ là hàm bậc 1 hay tuyến tính – một đường thẳng:

Nếu giả sử rằng ∆x ≈ 0, khi đó nó là khoảng cách giữa 2 điểm liên tiếp trên đồ thị. Ta có đạo hàm tất cả các điểm trên đồ thị của của hàm số f(x) như sau: (Ta bắt đầu từ x=a và kết thúc ở x=b). f'(a) = [f(a + ∆x) – f(a)] / ∆x f'(a + ∆x) = [f(a + 2∆x) – f(a + ∆x)] / ∆x f'(a + 2∆x) = [f(a + 3∆x) – f(a + 2∆x)] / ∆x f'(a + 3∆x) = [f(a + 4∆x) – f(a + 3∆x)] / ∆x …. f'(a + (b-a)/∆x * ∆x) = [f(a + ((b-a)/∆x + 1) * ∆x) – f(a + (b-a)/∆x * ∆x)] / ∆x Để ý rằng nếu ta cộng lần lượt tương ứng vế trái với vế trái và vế phải với vế phải ta sẽ có:

Kết quả cuối cùng, vế trái ở biểu thức trên rất quen thuộc, nó chính là tích phân mà chúng ta phải vật lộn trong những năm tháng thi đại học đó. Dấu ∫ trong tích phân chính là đại diện cho dấu ∑ khi số lượng số hạng trong tổng là vô hạn ứng với trường hợp hàm số liên tục. Còn ∆x chính là đại diện cho dx (viết tắt cho differential x – vi phân trên x hay thay đổi vô cùng nhỏ trên trục x). Thay 2 kí hiệu ta vừa nhắc tới vào, ta được công thức của tích phân

Vậy tích phân, chính là tổng đạo hàm của tất cả các điểm nằm trên khoảng chúng ta có đạo hàm. Nếu như ta có giá trị của một điểm bắt đầu f(a), ta có thể tìm được giá trị f(b) bất kì chỉ với đạo hàm biết trước.

2. Integral in statistic:

Trong thống kê, khi phải làm việc với các giá trị liên tục ta cũng sử dụng tích phân thay thế cho tổng thông thường. Chẳng hạn khi các giá trị là gián đoạn như: Tung xúc xắc 100 lần ta được 20 lần 1, 22 lần 2, 15 lần 3, 16 lần 4, 12 lần 5, 15 lần 6. Vậy trung bình ta sẽ tung xúc sắc được: (20 * 1 + 22 * 2 + 15 * 3 + 16 * 4 + 12 * 5 + 15 * 6) / 100 = 323/100 = 3.23 Ta viết gọn lại: ∑xk * pk = 3.23 Trong đó: xk là các giá trị trên mặt xúc sắc {1,2,3,4,5,6}, còn pk là xác xuất rơi vào các mặt được tính trên số lần rơi vào các mặt trên tổng số lần rơi (chẳng hạn mặt 1 có 20 lần rơi thì xác suất = 20/100 = 0.2). Khi giá trị của x không còn là các giá trị gián đoạn như trên mặt xúc sắc, giá trị trung bình của các x (hay mean của x hay E(x)) là tích phân: ∫xf(x)d(x) trong đó f(x) là hàm mật độ xác suất (p(x) = f(x) * dx trong đó d(x) rất nhỏ còn f(x) mô tả xác suất của một x bất kì trong khoảng dx).

3. What is convolution: Tới đây các bạn đã có khái niệm về tích phân. Ta đã có thể hiểu convolution là gì và ý nghĩa của nó trong ML như thế nào. Theo Wikipedia tích chập của 2 hàm số được định nghĩa như sau:

Nhìn vào công thức trên các bạn sẽ khá … “hoang mang”. Tôi sẽ giải thích từng thành phần trong công thức trên: 𝜏 : chính là biến x, biến số mà ta sẽ quan sát sự thay đổi hàm số khi 𝜏 thay đổi vô cùng nhỏ d𝜏. t : đây là một biến số khác, trong đó f(𝜏) đứng im còn g(t-𝜏) dịch một khoảng t và bị lật ngược lại, đối xứng qua trục y. Nghĩa là với mỗi t ta sẽ có một hàm g(t-𝜏) khác nhau có vị trị đối xứng và lệch đi t so với hàm g(𝜏) ban đầu. f(𝜏) * g(t-𝜏) : tại mỗi t, ta tính tổng của tất cả f và g tại từng 𝜏. Vẫn hơi đau đầu phải không? Giờ nếu bạn nhìn lên phần tích phân trong thống kê bên trên, bạn sẽ thấy tích chập nhìn rất giống ∫xf(x)d(x) trong đó f(𝜏) mô tả x còn g(t-𝜏) mô tả xác suất

của x. Vậy có nghĩa là nếu đứng từ mặt thống kê tích chập chẳng qua Mean hay Expectation của biến ngẫu nhiên với hàm phân phối xác suất đã biết.

4. Intuition of convolution: Để các bạn dễ hiểu hơn, tôi sẽ giải thích trên một ví dụ: Giả sử ta có hàm số f(x) mô tả vị trí của một người dựa trên thiết bị GPS người đó mang theo (Để cho đơn giản, ta sẽ chỉ thu thập kinh độ của người đó). Tuy nhiên trên thực tế, các thiết bị GPS hoạt động không chính xác 100%, đôi khi có nhiễu, nghĩa là dù ta đứng yên, toạ độ của ta vẫn có thể thay đổi. Chính vì vậy thay vì tạo ra một thiết bị chính xác hơn, ta có thế ước tính vị trị hiện tại thông qua tất cả các vị trí. Cũng giống như trên, tại mỗi f(x) ta tạo ra một w(t-x) (w đại diện cho wieght) để chỉ trọng số của vị trí đó (tại mỗi thời điểm t, hàm trọng số của ta sẽ khác nhau), w(t-x) cao tức xác suất tại thời điểm t vị trí x có độ chính xác cao, độ tin cậy cao. Khi tính giá trị trung bình của tất cả các f(x)w(t-x) ta được vị trị cần ước lượng. Nhưng khi x là liên tục thì ta cần sử dụng đến tích phân. Hay để ước lượng ta sử dụng tích chập. Vì hàm trọng số w cũng có giá trị cao tại những f(x) đáng tin cậy nên w sẽ phải tương quan với với các vị trí chính xác (w và xác suất vị trí x là chính xác phải cùng lớn hoặc cùng nhỏ). Ta có thể hiểu ý tưởng của convolution là sử dụng một hàm trọng số để đánh dấu các giá trị quan trọng (giá trị ước lượng bên trên), hoặc để tìm kiếm các vị trí tương quan của 2 hàm số (các t mà 2 hàm số tương đương nhau). Như các bạn thấy trên wiki:

Tôi thấy trên hình vẽ này của wiki có chú thích phần màu vàng là diện tích dưới f(𝜏)g(t-𝜏) không sai nhưng bản thân phần màu vàng lại trông như đang mô tả diện tích phần giao nhau giữa 2 hàm số. Nên các bạn cần phân biệt rõ, phần màu vàng là tổng của các f(𝜏)g(t-𝜏) không phải là diện tích phần giao nhau.

KIẾN TRÚC MẠNG CNNs

Các lớp cơ bản trong một mạng CNN bao gồm: Lớp tích chập (Convolutional), Lớp kích hoạt phi tuyến ReLU (Rectified Linear Unit), Lớp lấy mẫu (Pooling) và Lớp kết nối đầy đủ (Fullyconnected), được thay đổi về số lượng và cách sắp xếp để tạo ra các mô hình huấn luyện phù hợp cho từng bài toán khác nhau.

1. Convolution Layer: Đây là thành phần quan trọng nhất trong mạng CNN, cũng là nơi thể hiện tư tưởng xây dựng sự liên kết cục bộ thay vì kết nối toàn bộ các điểm ảnh. Các liên kết cục bộ này được tính toán bằng phép tích chập giữa các giá trị điểm ảnh trong một vùng ảnh cục bộ với các bộ lọc – filters – có kích thước nhỏ. Trong bài trước ta đã nói về convolution (tích chập), nhưng các bạn cũng thấy rằng những nội dung trong bài viết trước vẫn nói về những hàm số liên tục. Tuy nhiên với input là những bức ảnh, thông tin ta cần xử lý là rời rạc nên giờ ta sẽ xem với hàm số rời rạc tích chập được sử dụng như thế nào. Khi đó image và filter chính là 2 hàm số rời rạc. Số chiều của convolution chính là số hướng mà hàm filter có thể di chuyển được. Cụ thể như sau: + Convolution 1D: Tích chập 1 chiều sẽ chỉ cho phép hàm filter di chuyển theo 1 chiều, (nghĩa là image của ta phải convert về dạng vector) chính là độ dài của vector. + Convolution 2D: Tích chập 2 chiều sẽ cho phép hàm filter di chuyển theo 2 chiều (theo cả width và height). + Convolution 3D: Tương tự ta cũng có tích chập 3 chiều là khi hàm filter có thể di chuyển thêm cả chiều sâu của ảnh nữa. Ngoài việc lựa chọn filter của ta slide được theo những chiều nào, ta còn có thể kiểm soát được tốc độ slide của filter. Vì hàm số giờ đây không còn là liên tục nên tốc độ trượt của filter là có thể điều chỉnh.

Hình 2.2: Ví dụ bộ lọc tích chập được sử dụng trên ma trận điểm ảnh Trong ví dụ ở Hình 2.2 [12], ta thấy bộ lọc được sử dụng là một ma trận có kích thước 3x3. Bộ lọc này được dịch chuyển lần lượt qua từng vùng ảnh đến khi hoàn thành quét toàn bộ bức ảnh, tạo ra một bức ảnh mới có kích thước nhỏ hơn hoặc bằng với kích thước ảnh đầu vào. Kích thước này được quyết định tùy theo kích thước các khoảng trắng được thêm ở viền bức ảnh gốc và được tính theo công thức (1) [13]: 𝑜 = 𝑖+2∗𝑝−𝑘 + 1

(1)

𝑠 Trong đó: o: kích thước ảnh đầu ra i: kích thước ảnh đầu vào p: kích thước khoảng trắng phía ngoài viền của ảnh gốc k: kích thước bộ lọc s: bước trượt của bộ lọc

Hình 2.3: Trường hợp thêm/không thêm viền trắng vào ảnh khi tích chập Như vậy, sau khi đưa một bức ảnh đầu vào cho lớp Tích chập ta nhận được kết quả đầu ra là một loạt ảnh tương ứng với các bộ lọc đã được sử dụng để thực hiện phép tích chập. Các trọng số của các bộ lọc này được khởi tạo ngẫu nhiên trong lần đầu tiên và sẽ được cải thiện dần xuyên suốt quá trình huấn luyện. Sau khi tính tích chập với filter, ta chỉ cần cho kết quả đi qua hàm ReLU để loại bỏ hết những số âm.

2. Lớp kích hoạt phi tuyến ReLU Lớp này được xây dựng với ý nghĩa đảm bảo tính phi tuyến của mô hình huấn luyện sau khi đã thực hiện một loạt các phép tính toán tuyến tính qua các lớp Tích chập. Lớp Kích hoạt phi tuyến nói chung sử dụng các hàm kích hoạt phi tuyến như ReLU hoặc sigmoid, tanh… để giới hạn phạm vi biên độ cho phép của giá trị đầu ra. Trong số các hàm kích hoạt này, hàm ReLU được chọn do cài đặt đơn giản, tốc độ xử lý nhanh mà vẫn đảm bảo được tính toán hiệu quả. Cụ thể, phép tính toán của hàm ReLU chỉ đơn giản là chuyển tất cả các giá trị âm thành giá trị 0. 𝑓(𝑥) = 𝑚𝑎𝑥(0, 𝑥)

(2)

Thông thường, lớp ReLU được áp dụng ngay phía sau lớp Tích chập, với đầu ra là một ảnh mới có kích thước giống với ảnh đầu vào, các giá trị điểm ảnh cũng hoàn toàn tương tự trừ các giá trị âm đã bị loại bỏ.

3. Pooling Layer: Một thành phần tính toán chính khác trong mạng CNN là lấy mẫu (Pooling), thường được đặt sau lớp Tích chập và lớp ReLU để làm giảm kích thước kích thước ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng của ảnh đầu vào. Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng tham số cũng như tăng hiệu quả tính toán. Lớp lấy mẫu cũng sử dụng một cửa sổ trượt để quét toàn bộ các vùng trong ảnh tương tự như lớp Tích chập, và thực hiện phép lấy mẫu thay vì phép tích chập – tức là ta sẽ chọn lưu lại một giá trị duy nhất đại diện cho toàn bộ thông tin của vùng ảnh đó. Điều này rất hữu ích khi ta sử dụng mạng cho ảnh có kích cỡ lớn (dimentional reduction). Tuy nhiên nếu lạm dụng loại layer này cũng có thể khiến data đi qua bị mất dữ liệu. Pooling ở đây ta sử dụng 1 “window”, cho window này trượt trên image sau khi convolution, tại mỗi thời điểm ta lấy giá trị lớn nhất của vùng image “nằm” trong window. Cụ thể: Với Image 20×20, ta sử dụng window có dạng 2×2, thì tức là ta chia bức ảnh thành các ô trong đó mỗi ô gồm 4 pixel (2×2).

Sau khi loại bỏ hết những “pixel” không cần thiết, tại mỗi ô ta chỉ còn 1 giá trị duy nhất, điều này giúp cho kích thước của ảnh giảm xuống đáng kể. Với window có dạng 2×2, cứ mỗi 4 pixel được scale xuống 1 pixel -> giảm 75% số lượng giá trị trên matrix các điểm ảnh. Như hình trên ta có ảnh 20×20 (400 pixel) sau khi áp dụng Pooling sẽ chỉ còn 10×10 (100 pixel).

4. Fully-Connected Layer: Cũng như khi sử dụng mạng ANN truyền thống để xử lý những dữ liệu có dạng ma trận như hình ảnh. Ta cần làm phẳng dữ liệu về dạng vector, sau đó đưa vào ANN như bình thường. Hay nói cách khác phần Fully-Connected Layer (FC Layer) chính là một mạng NN được gắn vào phần cuối của CNNs. Phần FC-Layer này chính là nơi từ các feature được trích xuất bởi phần tích chập và lấy mẫu tạo ra kết quả cuối cùng (Classification hoặc Regression). Lớp kết nối đầy đủ này được thiết kế hoàn toàn tương tự như trong mạng nơ-ron truyền thống, tức là tất cả các điểm ảnh được kết nối đầy đủ với node trong lớp tiếp theo. So với mạng nơron truyền thống, các ảnh đầu vào của lớp này đã có kích thước được giảm bớt rất nhiều, đồng thời vẫn đảm bảo các thông tin quan trọng cho việc nhận dạng. Do vậy, việc tính toán nhận

dạng sử dụng mô hình truyền thẳng đã không còn phức tạp và tốn nhiều thời gian như trong mạng nơ ron truyền thống.

SỰ ĐA DẠNG CỦA CNNs: Hiện nay có một số cấu trúc CNN đạt được kết quả khả quan như: – LeNet: Đây là mô hình CNN thành công đầu tiên, đặc biệt là trong việc nhận dạng chứ số, kí tự trong văn bản. Được phát triển bởi Yann Lecun vào cuối nhưng năm 90. – AlexNet: Được phát triển bởi Alex Krizhevsky, Ilya Sutskever và Geoff Hinton. Lần đầu được giới thiệu vào năm 2012 với cấu trúc khá tương tự như LeNet nhưng với số lượng neuron, filter và layer lớn hơn. Được coi là mạng neural đầu tiên phổ biến rộng rãi khả năng của CNNs. – ZF Net: Là mạng CNNs tốt nhất năm 2013 được phát triển bởi Matthew Zeiler và Rob Fergus (ZF là viết tắt của Zeiler và Fergus). Mạng neural này được phát triển từ AlexNet với việc tinh chỉnh các hyperparameter (filter size, stride…). Với nhưng layer gần input layer, filter size và stride nhỏ hơn. – GoogLeNet: Là mạng CNNs tốt nhất năm 2014 được phát triển bởi Szegedy từ Google. Với một số thay đổi như giảm thiểu số lượng tham số trong AlexNet từ 60 triệu xuống còn 4 triệu, sử dụng Average Pooling thay cho FC-Layer. – VGGNet: Là mạng CNNs tốt nhất năm 2015 được phát triển bởi Karen Simonyan và Andrew Zisserman. Sử dụng filter 3×3 và pooling 2×2 từ đầu tới cuối mạng. – ResNet: Là mạng CNNs tốt nhất năm 2015 được phát triển bởi Kaiming He et al (Viết tắt của Resividual Net). Bỏ qua FC-Layer ở cuối mạng, và sử dụng “special skip connection” và “batch normalization”. Và vẫn được tiếp tục phát triển, với kết quả gần nhất được publish vào tháng 3 năm 2016: Kaiming He et al. Identity Mappings in Deep Residual Networks

More Documents from "duc phan"