Chia kernel 3×3 thành 2 kernel 3×1

Một phần của tài liệu Xây dựng hệ thống hỏi đáp (Trang 25 - 27)

8 Tổng kết

3.6 Chia kernel 3×3 thành 2 kernel 3×1

Với việc thay vì phải sử dụng 9 phép nhân cho phép convolution cho kernel 3x3, chỉ cần dùng 3 phép nhân (6 phép tất cả cho 2 kernel) giúp giảm số lượng phép toán trong khi đạt được hiệu quả tương tự. Tuy nhiên ta nhận thấy rằng không phải bất kì kernel nào có kích thước 3×3 cũng có là tích của 2 ma trận 3×1 và 1×3 nên có thể sẽ chỉ có một lượng nhỏ các ma trận có thể áp dụng theo cơ chế này.

Depthwise separable convolution [2] không chỉ làm việc trên chiều không gian (spatial dimensions) mà còn làm việc cả chiều sâu (depth dimensions) - số lượng kênh của ảnh. Sau một vài phép tích chập, có thể ảnh sẽ có nhiều kênh mỗi kênh là một dạng biểu diễn của ảnh. Ví dụ ảnh bình thường có 3 kênh, kênh nào đỏ biểu diễn màu sắc đỏ của tấm ảnh, kênh màu xanh lục biểu diễn tính chất xanh của ảnh và tương tự với màu xanh lá cây.

Trước tiên chúng ta sẽ lướt qua cách mà phép tích chập thông thường (normal convolution) hoạt động. Giả sử ta có bức ảnh kích thước 12×12×3, với 12 là chiều dài và chiều rộng của ảnh, 3 là số kênh của ảnh, ảnh thông thường sẽ có 3 kênh: đỏ, xanh lục, xanh lam. Ta sẽ thực hiện phép convolution với kernel 5×5 không padding và hệ số trượt là 1. Phép convolution giống như luồng thực thi sau: (12×12) - (5×5) -> (8×8); kernel 5×5 sẽ thực hiện 25 phép nhân tương ứng với 25 vị trí trong điểm ảnh và trả về một con số. Nhưng ảnh có 3 kênh, nên kernel chúng ta sẽ là 5×5×3 mỗi lần dịch chuyển kernel sẽ thực hiện 75 phép nhân. Do đó với ảnh 12×12×3 và thực hiện phép convolution với kernel 5×5×3 thì sẽ thu được ảnh có kích thước 8×8×1. Nếu chúng ta muốn tăng số kênh (channel) của ảnh lên thì như thế nào, ví dụ 8×8×256? Ta sẽ dùng 256 kernel với mỗi kernel có đầu ra là 8×8×1 thì sẽ thu được ảnh có kích thước 8×8×256. Ta có thể hình dung phép convolution như một phép toán có chức năng: 12×12×3 - 5×5×3×256 -> 8×8×256.

KIẾN THỨC NỀN TẢNG Depthwise separable convolution sẽ chia làm 2 giai đoạn: depthwise convolution và point- wise convolution. Giai đoạn đầu tiên - Depthwise Convolution: ta sẽ thực hiện phép convolution mà không làm thay đổi số lượng kênh của ảnh. Ta sẽ dùng 3 kernel có kích thước giống nhau: 5×5×1. Với mỗi kernel ta sẽ duyệt qua với chỉ một kênh (không phải tất cả các kênh như phép convolution thông thường) và thu được đầu ra là ảnh 8×8×1. Đặt những ảnh đầu ra lên với nhau thì sẽ được ảnh 8×8×3.

Giai đoạn thứ hai - Pointwise Convolution: nhớ lại rằng ở trên với phép convolution thông thường chuyển ảnh từ 12×12×3 về ảnh 8×8×256. Ở bước đầu tiên chúng ta đã thực hiện chuyển ảnh từ 12×12×3 về ảnh 8×8×3. Tích chập theo từng điểm (pointwise convolution) được đặt tên theo như vậy vì bởi vì ta sẽ dùng kernel 1x1x3 để duyệt qua tất cả các điểm trong ảnh. Vì vậy với ảnh 8×8×3 thực hiện phép tích chập với kernel 3×3×1 sẽ thu được ảnh 8×8×1. Ta sẽ dùng 256 kernel có kích thước 1×1×3 để thu được ảnh có kích thước mong muốn là 8×8×256. Vì sao lại tạo ra phép depthwise separable convolution ? Ta sẽ thực hiện một vài tính toán đơn giản. Sẽ có 256 kernel 5×5×3 với số lần trượt 8x8 sẽ cần tất cả 256×5×5×3×8×8 = 1.228.800 phép nhân. Với depthwise convolution: ở bước đầu tiên gồm 3 kernel 5×5×1 trượt 8x8 lần số phép tính là 3×5×5×8×8 = 4.800 phép toán nhân; ở bước sau sẽ cần 256×1×1×3×8×8 = 49.152 phép nhân (256 kernel 1×1×3 với số lần trượt 8×8 lần). 49.152 so với 1.228.800 ta thấy số phép toán giảm đi đáng kể, lượng tham số cũng giảm đáng kể giúp mô hình nhẹ hơn nhưng kết quả vẫn tương tự.

3.5 Attention

Kĩ thuật Attention ra đời vào năm 2015 và thu hút rất nhiều sự quan tâm. Đối với lĩnh vực xử lí ngôn ngữ tự nhiên và điển hình là bài toán dịch máy, sau đó các kỹ thuật như Self-attention ra đời đem lại nhiều kết quả khả quan và được áp dụng vào mô hình Transformer, sau đó được áp dụng vào nhiều mô hình như BERT, ALBERT, ...

Ý tưởng của kĩ thuật này nằm ở việc bắt chước lại quá trình học và nhận biết của não người. Ví dụ khi chúng ta dịch một đoạn văn từ ngôn ngữ Anh sang Pháp, chúng ta hoàn toàn có thể tập trung nhìn cùng một lúc vào toàn bộ đoạn văn trong khi dịch. Tuy nhiên hầu như chúng ta không làm như vậy, tại một thời điểm chúng ta chỉ nhìn vào một từ hoặc cụm từ nhất định thuộc đoạn văn để dịch từ. Cơ chế này giúp bộ não tiết kiệm nhiều năng lượng vì chỉ cần lưu trữ và xử lí một phần nhỏ thông tin của đối tượng tại một thời điểm mà vẫn đem lại kết quả tin cậy.

Việc áp dụng kĩ thuật Attention vào mô hìnhsequence-to-sequencegiúp cải thiện được kết quả dự đoán của mô hình, nhờ việc khắc phục được yếu điểm mà các mô hình vanilla RNN như: các mô hình vanilla RNN nén toàn bộ thông tin của đoạn văn thành một vector duy nhất sau khi qua bước Encoder, vector này chứa toàn bộ thông tin của đoạn văn; sau đó vector này sẽ là đầu của tầng Decoder để tiến hành dịch sang văn bản đích, dẫn tới xảy ra vấn đề những câu dài sẽ không được dịch chính xác vì thông tin không được lưu trữ đủ trong một vector duy nhất. Này là một điểm hạn chế rất lớn, vì thế cơ chế Attention ra đời để giải quyết vấn đề này.

Attention được sử dụng như một lớp giao tiếp giữa encoder và decoder trong mô hình sequence-to-sequence nhằm cung cấp thông tin từ mọi trạng thái ẩn của encoder cho decoder. Như vậy mô hình có thể học được cách tập trung vào các phần quan trọng của đoạn văn mà đem lại kết quả tốt khi dịch.

Attention được áp dụng vào mô hình dịch gồm các bước: 6Tham khảo thêm tại:đây.

KIẾN THỨC NỀN TẢNG

Một phần của tài liệu Xây dựng hệ thống hỏi đáp (Trang 25 - 27)

Tải bản đầy đủ (PDF)

(71 trang)