Ví dụ minh họa về bước tính tích chập sử dụng:
- Đầu vàoX: 5×5×3(ảnh trên hình đã được thêm padding) K = 2 bộ lọc:
3×3×3với bias1 = 1,bias2 = 0 Bước nhảyS1 =S2 = 2Số lượng viền mỗi phía P1 =P2 = 1
- Đầu ra: Tại vị trí(0,0,1) (như ví dụ trên hình) được tính bằng cách áp bộ lọc W1 lên vị trí (0 : 2,0 : 2,:) của ảnh (hay vị trí (1 : 3,1 : 3,:) của đầu vào khi đã thêm viền như trong hình), nhân điểm ảnh by điểm ảnh và cộng dồn tất cả các giá trị tính được lại, sau đó cộng tới giá trị bias.
O(0,0,1) =W1[:,:,0]∗X[0 : 2,0 : 2,0] (2.19)
+W1[:,:,1]∗X[0 : 2,0 : 2,1] +W1[:,:,2]∗X[0 : 2,0 : 2,2] +b1
=−1
( Giải thích kí hiệu: W1[:,:, i] là ma trận thứ i của filerW1 X[i:j, n:m, k]
là ma trận gồm các giá trị cột i đến j , hàng n đến m của ma trận thứ k
của đầu vào X b1 = 0 là một số do mảng b1 chỉ có 1 hàng 1 cột 1 chiều ). Áp dụng tương tự với những vị trí khác của đầu ra, vị trí tiếp theo của X
được áp bộ lọc lên sẽ dịch sang phía phải S1 điểm ảnh và xuống phía dưới
S2 điểm ảnh
Mục đích của tầng tích chập là trích xuất đặc tính quan trọng của ảnh thơng qua các bộ lọc, sau khi qua một vài tầng tích chập. Tầng kết nối trực tiếp với ảnh sẽ trích xuất những đặc tính đơn giản như cạnh, màu sắc, hình thái v.v, trong khi những tầng ở xa hơn sẽ biến đổi những đặc tính đơn giản thành những đặc tính phức tạp hơn và các giá trị này sẽ là thông tin hữu ích giúp cho q trình phân loại được chính xác hơn.
2. Hàm phi tuyến tính (AF, Activation function)
Tầng này sẽ áp dùng một hàm kích hoạt phi tuyến tính lên các điểm ảnh trong đầu ra của tầng tích chập trước đó. Mục đích loại bỏ tính phi tuyến cho mơ hình. Đầu vào là một tensor có kích thước i1×i2×d
Các hàm kích hoạt thường dùng trong CNN ( gọi x là giá trị các điểm ảnh trong dữ liệu đầu vào):
a. Hàm Sigmod
f(x) = 1
1 +e−x (2.20) Hàm sigmod biến đổi x(x không phải là dạng nhị phân) và giá trị đạo hàm cũng liên quan đến x, đồng thời có đạo hàm (f0(x)) liên lục trên miền giá
trị của x. Với 1 sự thay đổi nhỏ từ x sẽ dẫn đến sự thay đổi f0(x). Đầu ra
của hàm sigmod luôn thuộc khoảng (0,1)trong khi hàm linear (hàm tuyến tính f(x) =cx với clà giá trị hằng) thì thuộc khoảng (+∞;−∞).
Luận văn thạc sĩ Phân loại và nhận dạng tự động các ký tự trong ảnh captcha
function là không đáng kể sau mỗi lần update w và b, dẫn đến việc huấn
luyện rất chậm. Nhưng có nhiều cách khác nhau để khắc phục phần nào đó vấn đề này. Dù vậy hàm sigmod vẫn được dùng rất rộng rãi.
b. Hàm Tanh
f(x) = 2
1 +e−2x −1
=> tanh(x) = 2sigmoid(x)−1 (2.21)
Hàm tank tỉ lệ tuyến tính với hàm sigmod nên nó có những tính chất như hàm sigmod: đạo hàm liên quan đến x, giá trị nằm trong khoảng (−1,1)
(có giới hạn). Tuy nhiên đạo hàm của hàm tank lớn hơn hàm sigmod nhưng khơng phải là q lớn. Vì vậy, việc quyết định chọn sigmod hay tank tùy thuộc vào yêu cầu về độ lớn của đạo hàm mà nhà nghiên cứu mong muốn. Hàm tanh cũng được sử dụng làm hàm activation phổ biến và rộng dãi.
c. Hàm ReLU f(x) =max(0, x) f(x) = x (x≥0) 0 x <0 (2.22)
f(x) khơng là hàm tuyến tính và sự kết hợp của các hàm ReLU với nhau (kết hợp lớp này với lớp kia) cũng không là hàm tuyến tính. Trên thực thế thì hàm ReLU xấp xỉ rất tốt, hầu hết có thể xấp xỉ mọi hàm bằng cách kết hợp các hàm ReLU với nhau. Đầu ra của hàm ReLU nằm trong miền
(0,+∞), điều này có nghĩa là giá trị đầu ra có thể bị thổi phồng lên.
Nếu sử dụngtanh haysigmod thì giá trị activation giới hạn trong 1 khoảng nên các giá trị điểm ảnh được kích hoạt theo dạng analog, có nghĩa là tất cả các giá trị sẽ cháy và ra 1 kết quả (thường các kết quả đầu ra có giá trị khác nhau) để mơ tả đầu ra của tồn mạng. Do đó, sự phân bố giá trị của activation dày đặc, tức là có bao nhiêu điểm ảnh thì có bấy nhiêu giá trị activation. Việc này rất tốn kém về thời gian lẫn không gian. Chúng ta muốn một vài điểm ảnh khơng được kích hoạt để làm cho phân bố của đầu ra thưa và hiệu quả hơn và hàm ReLU mang lại hiệu quả đó. Mạng với đầu vào là ảnh (dữ liệu x lớn) thì khoảng 50% giá trị đầu ra là 0 (với những giá trị điểm ảnh nhỏ hơn 0) nên số lượng giá trị khác nhau của đầu ra được giảm đi đáng kể. Nhưng khơng gì là hồn hảo và ReLU cũng thế. Số lượng đầu ra bằng 0 nhiều dẫn đến số lượng những dòng kẻ ngang trên đồ thị của hàm Relu cũng nhiều, điều này có nghĩa là đạo hàm bằng 0 ở nhiều vị
trí dẫn đến các trọng số của bộ lọc khơng được điều chỉnh trong suốt q trình huấn luyện. Các bộ lọc rơi vào trạng thái này sẽ ngừng thay đổi (vì đạo hàm bằng 0 nghĩa là ko thay đổi gì cả). Đây gọi là vấn đề Dying ReLU.
Vấn đề này xảy ra khi một số nơ-ron chết và khơng phản hồi gì cho những nơ-ron khác liên quan đến nó. Có nhiều cách để khắc phục phần nào vấn đề này trong ReLU như thay đổi những đường ngang x = 0 thành những được khơng ngang ví dụ như y = −0.01x với x < 0. Mục đích chính là để
đạo hàm khác 0 và không bị rơi vào trạng thái Dying ReLU.
ReLU khơng tốn kém thời gian và khơng gian tính tốn bằng tanh và sigmod (độ phức tạp nhỏ hơn) vì hàm Relu tính tốn đơn giản hơn. Ngoài ra ReLU cũng cho thấy hiệu quả rõ rệt của nó qua q trình thực nghiệm trong luận văn này.
3. Lấy mẫu(Pooling)
Sau các tầng tích chập, số lượng mẫu được nhân lên rất lớn so với đầu vào, mỗi mẫu dữ liệu chứa những đặc tính được trích xuất khác nhau. Tuy nhiên khơng phải tất cả các đặc tính đó đều có ích cho q trình phân loại, trên thực tế chúng chứa nhiễu nhiều hơn đặc tính cần thiết. Có nhiều phương pháp để loại nhiễu và CNN sử dụng POOL để loại nhiễu đồng thời giản tham số cho mơ hình.
a. Max Pooling
Thủ tục pooling phổ biến là max-pooling, thủ tục này chọn giá trị lớn nhất trong vùng được chọn kích thước a1×a2. ví dụ trong hình 2.20 là2×2 là tỉ lệ phổ biến thường dùng hiện nay.