You are on page 1of 8

I.

Mạng CNN
Mạng CNN (Convolutional Neural Network) là một loại mạng nơ-ron sâu được
sử dụng rộng rãi trong xử lý hình ảnh, nhận dạng vật thể, phân loại ảnh và các
tác vụ liên quan đến xử lý ảnh và video. CNN được thiết kế để học các đặc
trưng từ dữ liệu ảnh và giảm thiểu sự phụ thuộc vào các biểu diễn đặc trưng
được xác định bằng tay.
CNN bao gồm các lớp chính sau:
1. Lớp Convolutional (Conv layer):
2. Lớp Pooling:
3. Lớp Activation:
4. Lớp Fully Connected (FC layer):
Kiến trúc CNN có thể được tùy chỉnh để phù hợp với các nhiệm vụ xử lý hình
ảnh khác nhau. Các kiến trúc CNN phổ biến nhất bao gồm LeNet-5, AlexNet,
VGG, ResNet và Inception. Các mạng CNN này có thể được điều chỉnh và tùy
chỉnh để đạt được kết quả tốt hơn trong các bài toán khác nhau.

1. Lớp Convolutional (Conv layer):


Lớp Convolutional (Conv layer) trong mạng CNN là lớp đầu tiên trong quá
trình trích xuất đặc trưng từ ảnh đầu vào. Lớp Convolutional sử dụng một bộ lọc
(filter) để quét qua từng phần của ảnh đầu vào, tìm kiếm các đặc trưng cục bộ
của ảnh và tạo ra một tập các ma trận đặc trưng (feature maps).
Quá trình này được thực hiện như sau:
1. Khởi tạo các bộ lọc (filters):
Trước tiên, cần khởi tạo một số lượng bộ lọc (filters) có kích thước nhỏ hơn
hoặc bằng kích thước của ảnh đầu vào. Mỗi bộ lọc là một ma trận số có kích
thước bằng nhau, thường là 3x3 hoặc 5x5.
2. Tích chập (convolution):
Sau đó, mỗi bộ lọc được di chuyển qua ảnh đầu vào bằng một bước (stride)
và tính tích chập của bộ lọc và phần của ảnh đang được quét. Tích chập được
thực hiện bằng cách nhân các phần tử của bộ lọc và phần ảnh đang được quét
tương ứng với nó, sau đó cộng tổng các tích chập này để tạo ra một giá trị
đầu ra.
3. Ma trận đặc trưng (feature map):
Sau khi tính toán tích chập cho tất cả các vị trí của bộ lọc trên ảnh đầu vào,
ta sẽ thu được một ma trận đặc trưng (feature map) mới có kích thước nhỏ
hơn ảnh ban đầu. Các giá trị trong ma trận đặc trưng là kết quả của tích chập
cho mỗi vị trí của bộ lọc.
4. Activation:
Để tạo ra các đặc trưng phi tuyến tính, lớp Activation sẽ được áp dụng trên
mỗi ma trận đặc trưng. Hàm kích hoạt phổ biến nhất là Rectified Linear Unit
(ReLU), nó sẽ giữ lại các giá trị không âm và loại bỏ các giá trị âm.
5. Lặp lại quá trình trên nhiều bộ lọc:
Quá trình trên được lặp lại với nhiều bộ lọc khác nhau để tìm kiếm các đặc
trưng khác nhau trong ảnh. Kết quả của quá trình này là một tập hợp các ma
trận đặc trưng (feature maps) tương ứng với mỗi bộ lọc.
2. Lớp Pooling :
Lớp Pooling là một phần quan trọng của mạng CNN, được sử dụng để giảm
kích thước của ma trận đặc trưng và giảm số lượng tham số cần tính toán trong
quá trình huấn luyện mô hình. Lớp Pooling có thể được áp dụng sau lớp
Convolutional trong quá trình trích xuất đặc trưng từ ảnh đầu vào.
Có hai loại lớp Pooling phổ biến trong CNN là Max Pooling và Average
Pooling. Cả hai loại lớp này hoạt động tương tự nhau, với mục đích lấy giá trị
lớn nhất hoặc giá trị trung bình từ một vùng của ma trận đặc trưng và ghi nhận
giá trị này vào ma trận đặc trưng mới.
Quá trình hoạt động của lớp Pooling được mô tả như sau:
1. Chọn kích thước của vùng Pooling:
Trước tiên, cần chọn kích thước của vùng Pooling. Vùng Pooling có thể có
kích thước 2x2 hoặc 3x3.
2. Dịch chuyển Pooling:
Sau đó, vùng Pooling được di chuyển trên ma trận đặc trưng với bước
(stride) nhất định. Mỗi vùng Pooling được di chuyển sẽ tương ứng với một
giá trị trong ma trận đặc trưng mới.
3. Lấy giá trị lớn nhất hoặc giá trị trung bình:
Trong trường hợp của Max Pooling, giá trị lớn nhất trong vùng Pooling sẽ
được chọn và ghi nhận vào ma trận đặc trưng mới. Trong trường hợp của
Average Pooling, giá trị trung bình của các giá trị trong vùng Pooling sẽ
được tính toán và ghi nhận vào ma trận đặc trưng mới.
4. Lặp lại quá trình trên từng ma trận đặc trưng:
Quá trình trên được lặp lại trên từng ma trận đặc trưng để tạo ra ma trận đặc
trưng mới.
Lớp Pooling có nhiều ưu điểm, bao gồm giảm kích thước của ma trận đặc trưng
và làm giảm quá trình tính toán trong quá trình huấn luyện. Tuy nhiên, lớp
Pooling cũng có một số hạn chế, bao gồm mất mát thông tin về đặc trưng, đặc
biệt là khi sử dụng Max Pooling. Do đó, việc áp dụng lớp Pooling cần được cân
nhắc kỹ lưỡng
3. Lớp Activation:
Lớp Activation (hay còn gọi là hàm kích hoạt) là một phần quan trọng của mạng
CNN, được sử dụng để áp dụng một hàm phi tuyến lên ma trận đặc trưng được
trích xuất từ lớp Convolutional hoặc lớp Pooling.
Hàm kích hoạt có thể được áp dụng sau lớp Convolutional hoặc lớp Pooling để
kích hoạt các đặc trưng được trích xuất từ ảnh đầu vào. Các hàm kích hoạt phổ
biến được sử dụng trong CNN bao gồm:
1. Hàm ReLU (Rectified Linear Unit):
Hàm ReLU là hàm phi tuyến đơn giản nhất, được định nghĩa là f(x) = max(0,
x). Nghĩa là nếu giá trị đầu vào x lớn hơn 0, giá trị đầu ra sẽ là x, còn nếu giá
trị đầu vào x nhỏ hơn hoặc bằng 0, giá trị đầu ra sẽ là 0. Hàm ReLU thường
được sử dụng trong CNN vì tính đơn giản và tính hiệu quả trong việc giảm
thiểu gradient vanishing.
2. Hàm Sigmoid:
Hàm Sigmoid là một hàm phi tuyến, được định nghĩa là f(x) = 1 / (1 + exp(-
x)). Hàm này có thể áp dụng cho các tác vụ phân loại nhị phân và có tính
chất giống như xác suất, giá trị đầu ra của hàm sigmoid luôn nằm trong
khoảng (0,1).
3. Hàm Tanh:
Hàm Tanh là một hàm phi tuyến, tương tự như hàm sigmoid nhưng giá trị
đầu ra của hàm Tanh nằm trong khoảng (-1, 1). Hàm Tanh được sử dụng để
xử lý đầu ra có giá trị âm.
Quá trình hoạt động của lớp Activation là áp dụng hàm kích hoạt được chọn lên
ma trận đặc trưng để tạo ra ma trận đặc trưng kích hoạt. Ma trận đặc trưng kích
hoạt sẽ được đưa vào lớp tiếp theo của mạng CNN để trích xuất đặc trưng tiếp
theo và thực hiện các bước xử lý tiếp theo.
4. Lớp Fully Connected (FC layer):
Lớp Fully Connected (FC layer) là một trong các lớp chính của mạng CNN,
được sử dụng để kết nối tất cả các nơ-ron của lớp trước với tất cả các nơ-ron của
lớp sau, tạo thành một mạng nơ-ron truyền thẳng đầy đủ.
Cách hoạt động của lớp FC layer trong CNN như sau:
1. Flatten: Trước khi đưa dữ liệu vào lớp FC layer, đầu tiên chúng ta cần
phải làm phẳng đầu ra của lớp trước đó thành một vector 1 chiều. Việc
này sẽ giúp chúng ta biến đổi ma trận đầu ra của lớp trước thành một
vector, từ đó dễ dàng kết nối với lớp FC.
2. Kết nối đầy đủ: Sau khi đã có vector đầu vào, các nơ-ron trong lớp FC sẽ
được kết nối đầy đủ với tất cả các nơ-ron của lớp trước đó. Mỗi nơ-ron
trong lớp FC sẽ tính toán một hàm tuyến tính trên đầu vào và truyền đầu
ra qua lớp Activation để tạo ra đầu ra cuối cùng.
3. Đầu ra: Đầu ra cuối cùng của lớp FC là một vector chứa các giá trị dự
đoán của mô hình cho bài toán cần giải quyết.
Lớp FC layer thường được sử dụng ở cuối của kiến trúc mạng CNN, trước khi
đưa ra đầu ra của mô hình. Lớp này giúp cho mô hình có khả năng học và biểu
diễn các đặc trưng phức tạp của dữ liệu đầu vào. Tuy nhiên, nếu sử dụng quá
nhiều nơ-ron trong lớp FC, mô hình sẽ trở nên quá phức tạp và dễ bị overfitting.
Do đó, cần cân nhắc khi thiết kế kiến trúc mạng CNN để tránh tình trạng này.

II. Hàm signmoid


Sigmoid là một hàm phi tuyến với đầu vào là các số thực và cho kết quả nằm
trong khoảng [0,1] và được xem là xác xuất trong một số bài toán. Trong hàm
Sigmoid, một sự thay đổi nhỏ trong input dẫn đến một kết quả output ko mấy
thay đổi. Vì vậy, nó đem lại một đầu ra "mượt" hơn và liên tục hơn so với input.

Công thức của hàm Sigmoid và đạo hàm của nó được nêu ra dưới đây:

Hàm sigmoid là một hàm liên tục và đạo hàm của nó cũng khá đơn giản, dẫn
đến việc áp dụng hàm vào mô hình mạng đem lại sự dễ dàng trong việc xây
dựng mô hình và cập nhật tham số dựa trên back-propagation. Một điểm đáng
chú ý của hàm Sigmoid, khiến nó trở nên nổi bật trong thời gian gần đây lại là
điểm "bất lợi" của nó. Đó là khái niệm "Vanishing Gradient" :
1. Vanishing Gradient - Saturated Sigmoid Neurons:
Một neuron có activation function là hàm sigmoid được xem như bão hòa
(saturated) nếu nó đạt được giá trị lớn nhất, hoặc nhỏ nhất. Trong công thức
toán học của hàm Sigmoid, khi ta để đầu vào là một số cực lớn (dương vô
cùng), đầu ra của nó sẽ đạt giá trị rất gần 1, và ngược lại, giá trị của nó sẽ đạt 0
nếu ta đưa vào input 1 số cực bé (âm vô cùng).

Khi hàm số đạt được giá trị cực tiểu hay cực đại, ta nói hàm số bão hòa. Do đó,
đạo hàm của hàm Sigmoid trở thành 0 tại điểm bão hòa. Hãy cùng nhìn qua một
ví dụ để thấy được ảnh hưởng của vấn đề về sự bão hòa của sigmoid neuron.
Trong mạng "nhỏ" nhưng "sâu" trên hình, giả sử muốn tính đạo hàm của weight
w2 của hàm loss. Pre-activation và post-activation của neuron trong tầng ẩn thứ
3 là:

Và đã tính toán rất cẩn thận đạo hàm theo "chain rule":

Nếu 'h3' đạt được giá trị rất gần với giá trị bão hòa, giá trị của đạo hàm sẽ là 0.
Do đó sẽ không có sự cập nhật tham số nào ở đây cả. Đó là vanishing gradient
problem. Từ đây ta có thể thấy được rằng, một neuron đạt trạng thái bão hòa sẽ
khiến cho đạo hàm biến mất, và việc cập nhật trọng số sẽ bị ảnh hưởng rất
nhiều.
2. Tại sao hàm sigmoid lại bão hòa trong mô hình ?
Ta đã thấy vấn đề khi hàm đạt giá trị bão hòa nhưng tại sao và khi nào thì nó
bão hòa ? Nếu đầu vào của hàm là một số cực lớn hoặc cực bé (điều này có
nghĩa là input và weights đều phải là những số có tính chất tương tự) nó có
thể dẫn đến sự bão hòa. Chúng ta biết rằng trước khi đưa dữ liệu vào mô
hình mạng, dữ liệu hầu hết được tiền xử lý bằng cách chuẩn hóa các giá trị
về miền [0,1], điều này có thể giảm thiểu được khả năng trên. Ngoài ra, khi
khởi tạo weights cho mô hình chúng ta cũng nên tránh những giá trị quá lớn
vì nó cũng có thể dẫn đến việc hàm sigmoid bị bão hòa.
3. Hàm sigmoid không có tính chất Zero-centered !
Do điểm bão hòa của hàm số là 1 và 0 nên ta có thể dễ dàng nhận thấy được
trung bình của hàm không phải là 0. Một "zero-centered function" có tính
chất lấy 0 làm trung tâm miền giá trị, có nghĩa là giá trị của nó sẽ có thể lớn
hơn và nhỏ hơn 0.
Hãy cũng xem xét vấn đề mà điều này đem lại qua một ví dụ nhỏ dưới đây.
Xét 2 tầng cuối trong mạng. Trạng thái "pre-activation" của tầng gần cuối là
"a3".

Hãy thử tính toán đạo hàm của loss đối với w1 và w2:
Nhớ rằng h21 và h22 là output của sigmoid function vì vậy giá trị của chúng
luôn > 0. Vì vậy dấu của đạo hàm sẽ cùng dấu với phần được tô đỏ, do đó việc
cập nhật giữa các weights luôn cùng là dương, hoặc luôn cùng là âm. Do đó,
việc cập nhật sẽ chỉ diễn ra theo 1 số hướng nhất định, hạn chế sự linh hoạt của
mô hình.

You might also like