Đặt vấn đề về thiết kế phần cứng và phần mềm, sơ đồ nguyên lí, sơ đồ khối, chức năng của từng khối. Chương 4: Kết quả và thực nghiệm. Chương này sẽ trình bày về kết quả mô hình cũng như chạy thực nghiệm để kiểm chứng mức độ chính xác và độ ổn định của hệ thống. Chương 5: Kết luận và hướng phát triển.
Chương này dưa ra kết luận đã làm được và hướng phát triển đề tài. Dựa trên những kết quả mà nhóm đã thực hiện, nhóm đưa ra những vấn đề đã hoàn thành và chưa hoàn thành. Những mặt hạn chế của đề tài và hướng phát triển của đề tài trong tương lai. 3 do an CHƯƠNG 2.
MẠNG NEURAL TÍCH CHẬP (CONVOLUTIONAL NEURAL NETWORK - CNN) 2. Giới thiệu Mạng neural tích chập (Convolutional Neural Netwwork) viết tắt là CNN là một mô hình mạng neural nhân tạo. Mô hình này thường được dùng trong bài toán phân loại ảnh đối tượng hoặc như một module rút trích đặc trưng của hình ảnh trong nhiều bài toán khác. Mô hình mạng neural truyền thẳng ra đời đã được áp dụng nhiều trong các bài toán nhận dạng.
Tuy nhiên mạng neural truyền thẳng không thể hiện tốt lắm đối với các dữ liệu như hình ảnh. Chính sự liên kết quá đầy đủ tạo nên những hạn chế cho mô hình. Dữ liệu hình ảnh có kích thước khá lớn, một tấm ảnh xám có kích thước 32×32 (pixels) sẽ cho ra vector đặc trưng có 1024 chiều, còn đối với ảnh màu cùng kích thước sẽ là 3072 chiều. Do đó, ta cần 3072 trọng số θ nối giữa lớp vào và một node ở lớp ẩn kế tiếp.
Số lượng trọng số sẽ càng nhân rộng hơn nữa nếu số lượng node trong lớp ẩn tăng lên, số lượng lớp ẩn tăng lên. Dựa trên tư tưởng này mạng neural tích chập ra đời với một kiến trúc khác so mới mạng truyền thẳng. Thay vì toàn bộ ảnh nối với một node thì chỉ có một phần cục bộ trong ảnh nối đến một node trong lớp tiếp theo. Dữ liệu hình ảnh thông qua các lớp của mô hình này sẽ được “học” ra các đặc trưng để tiến hành phân lớp một cách hiệu quả.
Các lớp trong mạng CNN Về cơ bản mô hình mạng neural tích chập bao gồm các lớp sau: Lớp Convolutional. Lớp Fully-Connected (FC). Sự sắp xếp về số lượng và thứ tự giữa các lớp này sẽ tạo ra những mô hình khác nhau phù hợp cho các bài toán khác nhau. Lớp Convolutional: Lớp này chính là nơi thể hiện tư tưởng ban đầu của mạng neural tích chập.
Thay vì kết nối toàn bộ điểm ảnh, lớp này sẽ sử dụng một bộ các bộ lọc (filters) có kích thước nhỏ so với ảnh (thường là 3×3 hoặc 5×5) áp vào một vùng trong ảnh và tiến hành tính tích chập giữa bộ filter và giá trị điểm ảnh trong vùng cục bộ đó. Bộ filter sẽ lần lượt được dịch chuyển theo một giá trị bước trượt (stride) chạy dọc theo ảnh và quét toàn bộ ảnh. 5 do an Như vậy với một bức ảnh 32×32 và một filter 3×3, ta sẽ có kết quả là một tấm ảnh mới có kích thước 32×32 (với điều kiện đã thêm padding vào ảnh gốc để tính tích chập cho các trường hợp filter quét ra các biên cạnh) là kết quả tích chập của filter và ảnh. Với bao nhiêu filter trong lớp này thì ta sẽ có bấy nhiêu ảnh tương ứng mà lớp này trả ra và được truyền vào lớp tiếp theo.
Các trọng số của filter ban đầu sẽ được khởi tạo ngẫu nhiên và sẽ được học dần trong quá trình huấn luyện mô hình. Lớp RELU: Lớp này thường được cài đặt ngay sau lớp Convolutional. Lớp này sử dụng hàm kích hoạt f(x) = max(0,x). Nói một cách đơn giản, lớp này có nhiệm vụ chuyển toàn bộ giá trị âm trong kết quả lấy từ lớp Convolutional thành giá trị 0.
Ý nghĩa của cách cài đặt này chính là tạo nên tính phi tuyến cho mô hình. Tương tự như trong mạng truyền thẳng, việc xây dựng dựa trên các phép biến đổi tuyến tính sẽ khiến việc xây dựng đa tầng đa lớp trở nên vô nghĩa. Có rất nhiều cách để khiến mô hình trở nên phi tuyến như sử dụng các hàm kích hoạt sigmoid, tanh,… nhưng hàm f(x) = max(0,x) dễ cài đặt, tính toán nhanh mà vẫn hiệu quả. Lớp Pooling: Lớp này sử dụng một cửa sổ trượt quét qua toàn bộ ảnh dữ liệu, mỗi lần trượt theo một bước trượt (stride) cho trước.
Khác với lớp Convolutional, lớp Pooling không tính tích chập mà tiến hành lấy mẫu (subsampling). Khi cửa sổ trượt trên ảnh, chỉ có một giá trị được xem là giá trị đại diện cho thông tin ảnh tại vùng đó (giá trị mẫu) được giữ lại. Các phương thức lấy phổ biến trong lớp Pooling là MaxPooling ( lấy giá trị lớn nhất), MinPooling (lấy giá trị nhỏ nhất) và AveragePooling (lấy giá trị trung bình). Xét một ảnh có kích thước 32×32 và lớp Pooling sử dụng filter có kích thước 2×2 với bước trượt stride = 2, phương pháp sử dụng là MaxPooling.
Filter sẽ lần lượt duyệt qua ảnh, với mỗi lần duyệt chỉ có giá trị lớn nhất trong 4 giá trị nằm trong vùng cửa sổ 2×2 của filter được giữ lại và đưa ra đầu ra. Như vậy sau khi qua lớp Pooling, ảnh sẽ giảm kích thước xuống còn 16×16 (kích thước mỗi chiều giảm 2 lần). 6 do an Hình 2.3: Tính toán với MaxPooling [4]. Lớp Pooling có vai trò giảm kích thước dữ liệu.
Với một bức ảnh kích thước lớn qua nhiều lớp Pooling sẽ được thu nhỏ lại tuy nhiên vẫn giữ được những đặc trưng cần cho việc nhận dạng (thông qua cách lấy mẫu). Việc giảm kích thước dữ liệu sẽ làm giảm lượng tham số, tăng hiệu quả tính toán và góp phần kiểm soát hiện tượng quá khớp (overfitting). Lớp Fully-Connected (FC): Lớp này tương tự với lớp trong mạng neural truyền thẳng, các giá trị ảnh được liên kết đầy đủ vào node trong lớp tiếp theo. Sau khi ảnh được xử lý và rút trích đặc trưng từ các lớp trước đó, dữ liệu ảnh sẽ không còn quá lớn so với mô hình truyền thẳng nên ta có thể sử dụng mô hình truyền thẳng để tiến hành nhận dạng.
Tóm lại, lớp fully-connected đóng vai trò như một mô hình phân lớp và tiến hành dựa trên dữ liệu đã được xử lý ở các lớp trước đó. Một mạng neural tích chập được hình thành bằng cách ghép các lớp nêu trên lại với nhau. Mô hình bắt đầu với lớp Convolutional. Lớp RELU thường luôn được cài đặc ngay sau lớp Convolutional hoặc thậm chí kết hợp cả hai lớp này thành một lớp.
Các lớp tiếp theo có thể là Convolutional hay Pooling tùy theo kiến trúc mà ta muốn xây dựng. Cuối cùng sẽ là lớp FC để tiến hành phân lớp. Ứng dụng của mô hình Mạng neural tích chập được áp dụng khá nhiều trong các bài toán nhận dạng như nhận dạng vật thể trong ảnh, nhận dạng chữ viết tay (chuyển đổi chữ viết trong hình ảnh thành văn bản thô trong máy tính), nhận dạng vật thể 3D, xử lý tiếng nói, xử lý ngôn ngữ tự nhiên,… với độ chính xác trên 90%. Tuy nhiên, mạng CNN có một số hạn chế: kích thước và độ sâu của mạng neural.
Điều này làm cho mạng CNN trở nên thiếu linh hoạt khi muốn thay đổi kiến trúc cũ. 7 do an Trong thực tế, ta có thể chọn giải quyết các bài toán cụ thể mà nhu cầu mở rộng không quá lớn và không quá đòi hỏi độ linh hoạt cao. Với những bài toán như vậy thì mạng neural tích chập vẫn là một mô hình hiệu quả. Giới thiệu TensorFlow là một thư viện phần mềm mã nguồn mở dành cho máy học trong nhiều loại hình tác vụ nhận thức và hiểu ngôn ngữ.
Nó hiện đang được sử dụng cho cả nghiên cứu lẫn sản xuất bởi 50 đội khác nhau trong hàng tá sản phẩm thương mại của Google như nhận dạng giọng nói, Gmail, Google Photos, và tìm kiếm. TensorFlow nguyên thủy được phát triển bởi đội Google Brain cho mục đích nghiên cứu và sản xuất của Google và sau đó được phát hành theo giấy phép mã nguồn mở Apache 2.4: Trang chủ “Tensorflow. Các khái niệm cơ bản trong Tensorflow Node: Tensorflow mô tả lại dòng chảy của dữ liệu thông qua graph nên mỗi một điểm giao cắt trong graph thì được gọi là Node. Tại sao điều này quan trọng thì là vì các Node chính là điểm đại diện cho việc thay đổi của dữ liệu nên việc lưu trữ lại tham chiếu của các Node này là rất quan trọng.
Tensor: Tensor là khái niệm cơ bản nhất trong TensorFlow. 8 do an Là cấu trúc dữ liệu được sử dụng trong toàn TensorFlow, đại diện cho tất cả các loại dữ liệu. Hay nói cách khác là tất cả các loại. dữ liệu đều là tensor.
Việc trao đổi dữ liệu trong quá trình xử lý chỉ thông qua tensor. Hiểu đơn giản thì tensor là mảng n chiều hay list cộng thêm 1 vài thứ thú vị khác. Có 3 thuộc tính là Rank, Shape, Type. Rank: Rank là bậc hay độ sâu của một Tensor.
Ví dụ: Tensor = [1] sẽ có rank là 1. Tensor = [[[1,1,1],[178,62,74]]] sẽ có rank bằng 3. Tensor = [[1,1,1],[178,62,74]] sẽ có rank bằng 2. Cách nhanh nhất để xác định rank của một Tensor là đếm số lần mở ngoặc vuông cho đến giá trị khác ngoặc vuông đầu tiên.
Việc phân rank này khá quan trọng vì nó đồng thời cũng giúp phân loại dữ liệu của Tensor. Khi ở cách rank đặc biệt cụ thể, Tensor có những tên gọi riêng như sau: Scalar: Khi Tensor có rank bằng 0, Tensor đại diện cho một số hoặc một chuỗi cụ thể. Vector: Vector là một Tensor rank 1. Trong python thì Vector là một list hay mảng một chiều chứa các số.
Matrix: Đây là một Tensor rank 2 hay mảng hai chiều theo khái niệm của Python. N-Tensor: Khi rank của Tensor tăng lên lớn hơn 2, chúng được gọi chung là N-Tensor. Shape: Shape là một tuple có số chiều bằng với rank của Tensor tương ứng dùng để mô tả lại cấu trúc của Tensor đó. Ví dụ: Tensor = 1 sẽ có Shape = ().
Dựa vào cấu trúc của Shape, ta dễ dàng thấy rằng ràng buộc cơ bản của Tensor là chiều của các elements trong Tensor tại mỗi bậc phải bằng nhau. 9 do an Dtype: Đây là kiểu dữ liệu của các elements trong Tensor. Vì một Tensor chỉ có duy nhất một thuộc tính DType nên từ đó cũng suy ra là chỉ có duy nhất một kiểu DType duy nhất cho toàn bộ các elements có trong Tensor hiện tại. Dưới đây là một số kiểu dữ liệu của một Tensor.1: Một số kiểu dữ liệu của Tensor [1].