Chào mừng bạn đến với phần 6 của loạt bài viết “Nhập môn Machine Learning”. Ở phần trước, chúng ta đã tìm hiểu về Computational Graph. Trong bài viết này, chúng ta sẽ tiếp tục khám phá một khía cạnh quan trọng của Machine Learning: Neural Network.
Neural Network là gì?
Neural Network, hay còn được biết đến với tên gọi là mạng nơ-ron, là một mô hình toán học được lấy cảm hứng từ cấu trúc của hệ thống nơ-ron trong não người. Mạng nơ-ron có khả năng học từ dữ liệu và thực hiện các nhiệm vụ như phân loại, dự đoán, và rất nhiều ứng dụng khác.
Khởi nguồn từ Computational Graph
Trước khi chúng ta đào sâu vào Neural Network, hãy liên kết nó với khái niệm Computational Graph mà chúng ta đã thảo luận trong bài viết trước đó. Computational Graph là một biểu đồ biểu diễn các phép toán và luồng dữ liệu trong mô hình.
Neural Network là một dạng đặc biệt của Computational Graph. Trong Neural Network, việc tính toán output được thực hiện theo thuật toán lan truyền xuôi (forward pass) và sau đó tính lỗi và cập nhật trọng số mạng thần kinh bằng thuật toán lan truyền ngược (backpropagation).
Trong biểu đồ trên, mỗi nút biểu thị một tham số, thuật toán, và mỗi cạnh biểu thị kết nối giữa các nơ-ron. Dữ liệu được đưa vào mô hình thông qua lớp đầu vào (Input Layer) và kết quả được tính toán tại các lớp ẩn (multiple hidden layer) và cho ra kết quả tại lớp đầu ra (Output Layer).
Cấu trúc của Neural Network
Neural Network bao gồm các lớp nơ-ron, mỗi lớp thường được chia thành ba phần chính:
- Input Layer: Nhận dữ liệu đầu vào và chuyển nó đến lớp tiếp theo.
- Hidden Layers: Các lớp nằm giữa Input Layer và Output Layer. Chúng thực hiện các phép toán và học từ dữ liệu.
- Output Layer: Trả về kết quả dự đoán của mô hình.
Các nơ-ron trong mỗi lớp được kết nối với nơ-ron ở các lớp khác thông qua các trọng số (weights), và chúng sử dụng các hàm kích thích (activation functions) để đưa ra quyết định.
Học từ Dữ liệu
Một trong những đặc điểm quan trọng của Neural Network là khả năng học từ dữ liệu. Quá trình này được thực hiện thông qua việc điều chỉnh trọng số của các kết nối nơ-ron dựa trên sự chênh lệch giữa đầu ra thực tế và đầu ra dự đoán.
Neural của con người và Neural Network của mô hình máy học
Ví dụ
Đây là một ví dụ về triển khai 1 mạng nơron tích chập (CNN) với Python và Keras
# Import thư viện Keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# Xây dựng mô hình CNN
model = Sequential()
# Thêm lớp Convolutional với 32 bộ lọc, kích thước kernel là (3, 3), và hàm kích thích là relu
model.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu'))
# Thêm lớp MaxPooling để giảm kích thước của feature maps
model.add(MaxPooling2D(pool_size=(2, 2)))
# Thêm lớp Convolutional với 64 bộ lọc, kích thước kernel là (3, 3), và hàm kích thích là relu
model.add(Conv2D(64, (3, 3), activation='relu'))
# Thêm lớp MaxPooling
model.add(MaxPooling2D(pool_size=(2, 2)))
# Chuyển đổi feature maps thành vector
model.add(Flatten())
# Thêm lớp Fully Connected với 128 nơ-ron và hàm kích thích là relu
model.add(Dense(128, activation='relu'))
# Thêm lớp Output với 1 nơ-ron và hàm kích thích là sigmoid (vì đây là bài toán nhị phân)
model.add(Dense(1, activation='sigmoid'))
# Compile mô hình với optimizer là 'adam', hàm mất mát là 'binary_crossentropy' (vì đây là bài toán nhị phân), và metrics là 'accuracy'
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Hiển thị cấu trúc của mô hình
model.summary()
Chú thích
- Conv2D: Là lớp thực hiện phép tích chập (convolution) trên đầu vào. Trong ví dụ này,
Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu')
có ý nghĩa là sử dụng 32 bộ lọc (filter) có kích thước (3, 3), đầu vào có hình dạng (64, 64, 3) (ảnh màu RGB với kích thước 64×64 pixel), và hàm kích thích (activation function) là ‘relu’. - MaxPooling2D: Là lớp thực hiện phép lấy giá trị lớn nhất từ mỗi vùng không chồng lấp của feature map. Trong ví dụ,
MaxPooling2D(pool_size=(2, 2))
giảm kích thước của feature map bằng cách giữ lại giá trị lớn nhất từ mỗi vùng 2×2. - Flatten: Chuyển đổi feature map thành một vector để có thể được sử dụng trong các lớp Fully Connected. Lệnh
model.add(Flatten())
thêm lớp Flatten vào mô hình. - Dense: Là lớp mà mỗi nơ-ron trong nó kết nối với tất cả các nơ-ron ở lớp trước đó. Trong ví dụ,
Dense(128, activation='relu')
có 128 nơ-ron với hàm kích thích ‘relu’. Lớp Output cũng là một Dense layer với 1 nơ-ron và hàm kích thích ‘sigmoid’ cho bài toán nhị phân. - compile: Bước này cấu hình mô hình để nó biết làm thế nào để học. Trong lệnh
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
, chúng ta sử dụng optimizer ‘adam’, hàm mất mát ‘binary_crossentropy’ vì đây là bài toán nhị phân, và đánh giá mô hình bằng độ chính xác (accuracy).
Kết luận
Neural Network là một phần quan trọng của Machine Learning, và hiểu rõ về nó giúp chúng ta xây dựng các mô hình mạnh mẽ và linh hoạt.
Qua bài viết này, chúng ta đã liên kết Neural Network với Computational Graph và tìm hiểu về cấu trúc cơ bản của một mô hình Neural Network. Trong các phần tiếp theo, chúng ta sẽ khám phá sâu hơn về các loại Neural Network cũng như các kỹ thuật đào tạo và tối ưu hóa chúng. Đừng quên theo dõi để không bỏ lỡ những kiến thức quan trọng tiếp theo!