Courses
Mạng nơ-ron là cốt lõi của machine learning và trí tuệ nhân tạo hiện đại. Trong số nhiều loại, perceptron nhiều lớp (MLP) là khối xây dựng nền tảng cho các hệ thống học sâu. Hướng dẫn này giới thiệu khái niệm mạng nơ-ron nhân tạo, khám phá cách MLP hoạt động và trình bày các thành phần chính như lan truyền ngược (backpropagation) và hạ dốc ngẫu nhiên (stochastic gradient descent).
Một mạng nơ-ron nhân tạo (ANN) là một mô hình machine learning lấy cảm hứng từ cấu trúc và chức năng của mạng nơ-ron liên kết trong não người. Nó gồm các nút liên kết gọi là nơ-ron nhân tạo, được tổ chức theo các tầng. Thông tin chảy qua mạng, với mỗi nơ-ron xử lý tín hiệu đầu vào và tạo ra tín hiệu đầu ra ảnh hưởng đến các nơ-ron khác trong mạng.
Perceptron nhiều lớp (MLP) là một loại mạng nơ-ron nhân tạo gồm nhiều tầng nơ-ron. Các nơ-ron trong MLP thường dùng các hàm kích hoạt phi tuyến, cho phép mạng học được các mẫu phức tạp trong dữ liệu. MLP quan trọng trong machine learning vì chúng có thể học các quan hệ phi tuyến trong dữ liệu, khiến chúng trở thành các mô hình mạnh cho các tác vụ như phân loại, hồi quy và nhận dạng mẫu. Trong hướng dẫn này, chúng ta sẽ đi sâu vào những điều cơ bản của MLP và hiểu cách thức vận hành bên trong của nó.
TL;DR
- Perceptron nhiều lớp (MLP) là một mạng nơ-ron lan truyền xuôi với một hoặc nhiều tầng ẩn có thể học các mẫu phi tuyến trong dữ liệu.
- MLP gồm một tầng đầu vào, các tầng ẩn với hàm kích hoạt phi tuyến, và một tầng đầu ra.
- Quá trình huấn luyện sử dụng lan truyền ngược để tính gradient và hạ dốc ngẫu nhiên (SGD) để cập nhật trọng số theo từng vòng lặp.
- Chuẩn bị dữ liệu là yếu tố then chốt: làm sạch, chuẩn hoá/tỷ lệ hoá và chia dữ liệu trước khi huấn luyện MLP.
- Hãy bắt đầu với kiến trúc nhỏ và tăng dần độ phức tạp, sử dụng các kỹ thuật regularization để tránh overfitting.
Những điều cơ bản về Mạng Nơ-ron
Mạng nơ-ron hay mạng nơ-ron nhân tạo là công cụ nền tảng trong machine learning, cung cấp sức mạnh cho nhiều thuật toán và ứng dụng hiện đại trên nhiều lĩnh vực, gồm thị giác máy tính, xử lý ngôn ngữ tự nhiên, robot, v.v.
Một mạng nơ-ron gồm các nút liên kết, gọi là nơ-ron, được tổ chức theo các tầng. Mỗi nơ-ron nhận các tín hiệu đầu vào, thực hiện tính toán trên chúng bằng một hàm kích hoạt và tạo ra tín hiệu đầu ra có thể được truyền tới các nơ-ron khác trong mạng. Một hàm kích hoạt xác định đầu ra của một nơ-ron dựa trên đầu vào của nó. Những hàm này đưa tính phi tuyến vào mạng, giúp nó học được các mẫu phức tạp trong dữ liệu.
Mạng thường được tổ chức theo các tầng, bắt đầu với tầng đầu vào, nơi dữ liệu được đưa vào. Tiếp theo là các tầng ẩn nơi diễn ra các phép tính, và cuối cùng là tầng đầu ra nơi đưa ra dự đoán hay quyết định.
Các nơ-ron ở các tầng kề nhau được nối với nhau bằng các kết nối có trọng số, truyền tín hiệu từ tầng này sang tầng tiếp theo. Độ mạnh của các kết nối này, được biểu diễn bằng trọng số, quyết định mức độ ảnh hưởng của đầu ra một nơ-ron lên đầu vào của nơ-ron khác. Trong quá trình huấn luyện, mạng học cách điều chỉnh các trọng số dựa trên các ví dụ trong bộ dữ liệu huấn luyện. Ngoài ra, mỗi nơ-ron thường có một hệ số bias đi kèm, cho phép nơ-ron điều chỉnh ngưỡng đầu ra của mình.
Mạng nơ-ron được huấn luyện bằng các kỹ thuật gọi là lan truyền xuôi (feedforward) và lan truyền ngược. Trong lan truyền xuôi, dữ liệu đầu vào được truyền qua mạng theo từng tầng, mỗi tầng thực hiện tính toán dựa trên đầu vào nhận được và chuyển kết quả cho tầng tiếp theo.
Lan truyền ngược là một thuật toán dùng để huấn luyện mạng nơ-ron bằng cách lặp lại việc điều chỉnh các trọng số và bias của mạng nhằm tối thiểu hoá hàm mất mát. Một hàm mất mát (còn gọi là hàm chi phí hay hàm mục tiêu) là thước đo mức độ phù hợp giữa dự đoán của mô hình và giá trị mục tiêu thật trong dữ liệu huấn luyện. Hàm mất mát định lượng chênh lệch giữa đầu ra dự đoán và đầu ra thực, cung cấp tín hiệu định hướng quá trình tối ưu trong huấn luyện.
Mục tiêu của việc huấn luyện mạng nơ-ron là tối thiểu hoá hàm mất mát này bằng cách điều chỉnh các trọng số và bias. Việc điều chỉnh được dẫn dắt bởi một thuật toán tối ưu hoá, như hạ dốc (gradient descent). Chúng ta sẽ xem lại một số chủ đề này chi tiết hơn ở phần sau của hướng dẫn.
Các loại Mạng Nơ-ron

Nơ-ron sinh học so với mạng nơ-ron nhân tạo (Nguồn: ResearchGate)
ANN được minh hoạ bên phải là một mạng nơ-ron đơn giản gọi là ‘perceptron’. Nó gồm một tầng duy nhất là tầng đầu vào, với nhiều nơ-ron có trọng số riêng; không có tầng ẩn. Thuật toán perceptron học các trọng số cho các tín hiệu đầu vào để vẽ một ranh giới quyết định tuyến tính.
Tuy nhiên, để giải các bài toán phức tạp và phi tuyến hơn liên quan đến xử lý ảnh, thị giác máy tính và xử lý ngôn ngữ tự nhiên, chúng ta làm việc với các mạng nơ-ron sâu.
Xem thêm hướng dẫn Giới thiệu về Mạng Nơ-ron Sâu để tìm hiểu thêm về mạng nơ-ron sâu và cách xây dựng từ đầu bằng TensorFlow và Keras trong Python. Nếu bạn muốn dùng ngôn ngữ R, tài liệu Xây dựng Mô hình Mạng Nơ-ron (NN) trong R sẽ hỗ trợ bạn.
Có nhiều loại ANN, mỗi loại được thiết kế cho các tác vụ và yêu cầu kiến trúc cụ thể. Hãy điểm qua một số loại phổ biến trước khi đi sâu vào MLP ở phần tiếp theo.
Mạng Nơ-ron Lan truyền Xuôi (FNN)
Đây là dạng đơn giản nhất của ANN, nơi thông tin chảy theo một hướng từ đầu vào đến đầu ra. Không có chu kỳ hay vòng lặp trong kiến trúc. Perceptron nhiều lớp (MLP) là một loại mạng lan truyền xuôi.
Mạng Nơ-ron Hồi quy (RNN)
Trong RNN, các kết nối giữa các nút tạo thành các chu kỳ có hướng, cho phép thông tin tồn tại theo thời gian. Điều này giúp chúng phù hợp cho dữ liệu tuần tự, như dự báo chuỗi thời gian, xử lý ngôn ngữ tự nhiên và nhận dạng giọng nói.
Mạng Nơ-ron Tích chập (CNN)
CNN được thiết kế để xử lý hiệu quả dữ liệu dạng lưới, như ảnh. Chúng gồm các tầng bộ lọc tích chập học các biểu diễn phân cấp của đặc trưng trong dữ liệu đầu vào. CNN được dùng rộng rãi trong các tác vụ như phân loại ảnh, phát hiện đối tượng và phân đoạn ảnh.
Mạng Bộ nhớ Dài-Ngắn hạn (LSTM) và Đơn vị Hồi quy có Cổng (GRU)
Đây là các biến thể chuyên biệt của RNN nhằm giải quyết vấn đề tiêu biến gradient trong RNN truyền thống. LSTM và GRU tích hợp cơ chế cổng để nắm bắt tốt hơn các phụ thuộc dài hạn trong dữ liệu tuần tự, đặc biệt hiệu quả cho các tác vụ như nhận dạng giọng nói, dịch máy và phân tích cảm xúc.
Autoencoder
Được thiết kế cho học không giám sát, gồm một mạng mã hoá nén dữ liệu đầu vào vào không gian tiềm ẩn có chiều thấp hơn, và một mạng giải mã tái tạo lại đầu vào ban đầu từ biểu diễn tiềm ẩn. Autoencoder thường được dùng để giảm chiều dữ liệu, khử nhiễu dữ liệu và mô hình sinh.
Mạng Đối nghịch Sinh (GAN)
GAN gồm hai mạng nơ-ron, một bộ sinh và một bộ phân biệt, được huấn luyện đồng thời trong môi trường đối kháng. Bộ sinh học tạo ra mẫu dữ liệu tổng hợp không phân biệt được với dữ liệu thật, trong khi bộ phân biệt học cách phân biệt dữ liệu thật và giả. GAN được dùng rộng rãi để tạo ảnh, video và các loại dữ liệu khác chân thực.
Perceptron Nhiều Lớp (MLP) là gì?
Perceptron nhiều lớp là một loại mạng nơ-ron lan truyền xuôi gồm các nơ-ron kết nối đầy đủ với các hàm kích hoạt phi tuyến. Nó được dùng rộng rãi để phân biệt dữ liệu không thể tách tuyến tính.
Các thành phần của MLP
MLP đã được sử dụng rộng rãi trong nhiều lĩnh vực, bao gồm nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên và nhận dạng giọng nói, v.v. Tính linh hoạt về kiến trúc và khả năng xấp xỉ bất kỳ hàm nào dưới một số điều kiện khiến chúng trở thành khối xây dựng cơ bản trong học sâu và nghiên cứu mạng nơ-ron. Hãy đi sâu vào một số khái niệm chủ chốt.
Tầng đầu vào
Tầng đầu vào gồm các nút hoặc nơ-ron nhận dữ liệu đầu vào ban đầu. Mỗi nơ-ron đại diện cho một đặc trưng hay chiều của dữ liệu đầu vào. Số lượng nơ-ron ở tầng đầu vào được quyết định bởi số chiều của dữ liệu đầu vào.
Tầng ẩn
Giữa tầng đầu vào và đầu ra có thể có một hoặc nhiều tầng nơ-ron. Mỗi nơ-ron ở tầng ẩn nhận đầu vào từ tất cả nơ-ron ở tầng trước (hoặc tầng đầu vào hoặc một tầng ẩn khác) và tạo ra đầu ra truyền sang tầng kế tiếp. Số lượng tầng ẩn và số nơ-ron ở mỗi tầng ẩn là các siêu tham số cần xác định ở giai đoạn thiết kế mô hình.
Tầng đầu ra
Tầng này gồm các nơ-ron tạo ra đầu ra cuối cùng của mạng. Số nơ-ron ở tầng đầu ra phụ thuộc vào bản chất của tác vụ. Trong phân loại nhị phân, có thể có một hoặc hai nơ-ron tuỳ theo hàm kích hoạt và biểu diễn xác suất thuộc về một lớp; còn với phân loại đa lớp, có thể có nhiều nơ-ron ở tầng đầu ra.
Trọng số
Các nơ-ron ở các tầng kề nhau được kết nối đầy đủ với nhau. Mỗi kết nối có một trọng số đi kèm, xác định độ mạnh của kết nối. Những trọng số này được học trong quá trình huấn luyện.
Nơ-ron bias
Ngoài các nơ-ron đầu vào và ẩn, mỗi tầng (trừ tầng đầu vào) thường có một nơ-ron bias cung cấp đầu vào hằng cho các nơ-ron ở tầng tiếp theo. Nơ-ron bias có trọng số riêng cho mỗi kết nối, cũng được học trong quá trình huấn luyện.
Nơ-ron bias thực chất dịch chuyển hàm kích hoạt của các nơ-ron ở tầng sau, cho phép mạng học một độ lệch trong ranh giới quyết định. Bằng cách điều chỉnh các trọng số nối với nơ-ron bias, MLP có thể học cách kiểm soát ngưỡng kích hoạt và khớp dữ liệu huấn luyện tốt hơn.
Lưu ý: Cần lưu ý rằng trong ngữ cảnh MLP, bias có thể chỉ hai khái niệm liên quan nhưng khác nhau: bias như một thuật ngữ chung trong machine learning và nơ-ron bias (định nghĩa ở trên). Trong machine learning nói chung, bias chỉ sai số phát sinh khi xấp xỉ một vấn đề thế giới thực bằng một mô hình đơn giản hơn. Bias đo mức độ mô hình nắm bắt các mẫu cơ bản trong dữ liệu. Bias cao cho thấy mô hình quá đơn giản và có thể underfit dữ liệu, trong khi bias thấp gợi ý mô hình nắm bắt tốt các mẫu cơ bản.
Hàm kích hoạt
Thông thường, mỗi nơ-ron ở các tầng ẩn và tầng đầu ra áp dụng một hàm kích hoạt lên tổng có trọng số của các đầu vào. Các hàm kích hoạt phổ biến gồm sigmoid, tanh, ReLU (Rectified Linear Unit) và softmax. Những hàm này đưa tính phi tuyến vào mạng, cho phép nó học các mẫu phức tạp trong dữ liệu.
Lan truyền xuôi và Lan truyền ngược
MLP được huấn luyện bằng thuật toán lan truyền ngược, thuật toán này tính gradient của một hàm mất mát theo các tham số của mô hình và cập nhật tham số lặp đi lặp lại để tối thiểu hoá mất mát.
MLP hoạt động như thế nào: Theo từng Tầng

Ví dụ về một MLP với hai tầng ẩn. Ảnh: Tác giả
Trong perceptron nhiều lớp, các nơ-ron xử lý thông tin theo từng bước, thực hiện các phép tính gồm tổng có trọng số và biến đổi phi tuyến. Hãy đi qua từng tầng để xem điều kỳ diệu bên trong.
Tầng đầu vào
- Tầng đầu vào của MLP nhận dữ liệu đầu vào, có thể là các đặc trưng trích xuất từ các mẫu trong một tập dữ liệu. Mỗi nơ-ron ở tầng đầu vào đại diện cho một đặc trưng.
- Các nơ-ron ở tầng đầu vào không thực hiện tính toán; chúng chỉ truyền các giá trị đầu vào đến các nơ-ron ở tầng ẩn đầu tiên.
Các tầng ẩn
- Các tầng ẩn của MLP gồm các nơ-ron liên kết với nhau thực hiện tính toán trên dữ liệu đầu vào.
- Mỗi nơ-ron ở tầng ẩn nhận đầu vào từ tất cả nơ-ron ở tầng trước. Các đầu vào được nhân với các trọng số tương ứng, ký hiệu là
w. Trọng số quyết định mức độ ảnh hưởng của đầu vào từ một nơ-ron lên đầu ra của nơ-ron khác. - Ngoài trọng số, mỗi nơ-ron ở tầng ẩn có một bias đi kèm, ký hiệu là
b. Bias cung cấp một đầu vào bổ sung cho nơ-ron, cho phép nó điều chỉnh ngưỡng đầu ra. Giống trọng số, bias được học trong quá trình huấn luyện. - Với mỗi nơ-ron ở tầng ẩn hoặc tầng đầu ra, tổng có trọng số của các đầu vào được tính. Điều này bao gồm nhân mỗi đầu vào với trọng số tương ứng, cộng các tích này và thêm bias:

Trong đó n là tổng số kết nối đầu vào, wi là trọng số cho đầu vào thứ i, và xi là giá trị đầu vào thứ i.
- Tổng có trọng số sau đó được đưa qua một hàm kích hoạt, ký hiệu là
f. Hàm kích hoạt đưa phi tuyến vào mạng, cho phép nó học và biểu diễn các quan hệ phức tạp trong dữ liệu. Hàm kích hoạt xác định miền đầu ra của nơ-ron và hành vi của nó trước các giá trị đầu vào khác nhau. Việc chọn hàm kích hoạt phụ thuộc vào bản chất tác vụ và các thuộc tính mong muốn của mạng.
Tầng đầu ra
- Tầng đầu ra của MLP tạo ra các dự đoán hoặc đầu ra cuối cùng của mạng. Số nơ-ron ở tầng đầu ra phụ thuộc vào tác vụ (ví dụ: phân loại nhị phân, phân loại đa lớp, hồi quy).
- Mỗi nơ-ron ở tầng đầu ra nhận đầu vào từ các nơ-ron ở tầng ẩn cuối cùng và áp dụng một hàm kích hoạt. Hàm kích hoạt này thường khác với các hàm dùng ở tầng ẩn và tạo ra giá trị đầu ra hay dự đoán cuối cùng.
Trong quá trình huấn luyện, mạng học cách điều chỉnh các trọng số gắn với đầu vào của mỗi nơ-ron để tối thiểu hoá sai lệch giữa đầu ra dự đoán và giá trị mục tiêu thật trong dữ liệu huấn luyện. Bằng cách điều chỉnh trọng số và học các hàm kích hoạt phù hợp, mạng học cách xấp xỉ các mẫu và quan hệ phức tạp trong dữ liệu, cho phép đưa ra dự đoán chính xác trên các mẫu mới, chưa thấy.
Sự điều chỉnh này được dẫn dắt bởi một thuật toán tối ưu hoá, như hạ dốc ngẫu nhiên (SGD), thuật toán tính gradient của một hàm mất mát theo các trọng số và cập nhật trọng số theo từng vòng lặp.
Hãy xem kỹ hơn cách SGD hoạt động.
Hạ dốc Ngẫu nhiên (SGD)
- Khởi tạo: SGD bắt đầu với một tập tham số mô hình ban đầu (trọng số và bias) được khởi tạo ngẫu nhiên hoặc theo một phương pháp định sẵn.
- Tối ưu lặp: Mục tiêu là tìm cực tiểu của hàm mất mát bằng cách lặp lại di chuyển theo hướng giảm mạnh nhất của giá trị hàm. Cho mỗi vòng lặp (hay epoch) huấn luyện:
- Xáo trộn dữ liệu huấn luyện để đảm bảo mô hình không học từ cùng một mẫu theo cùng một thứ tự mỗi lần.
- Chia dữ liệu huấn luyện thành các mini-batch (các tập con nhỏ của dữ liệu).
- Với mỗi mini-batch:
- Tính gradient của hàm mất mát theo các tham số mô hình chỉ dùng các điểm dữ liệu trong mini-batch. Xấp xỉ gradient này là một ước lượng ngẫu nhiên của gradient thật.
- Cập nhật các tham số mô hình bằng cách đi một bước theo hướng ngược lại với gradient, được tỷ lệ bởi tốc độ học:
θₜ₊₁ = θₜ − η ∇J(θₜ)Trong đó:
θₜbiểu diễn các tham số mô hình (ví dụ: trọng số và bias) tại vòng lặp t∇J(θₜ)là gradient của hàm mất mátJtheo các tham số tại vòng lặp tη(eta) là tốc độ học (learning rate), điều khiển độ dài bước trong quá trình tối ưu
- Hướng đi xuống: Gradient của hàm mất mát chỉ hướng tăng nhanh nhất. Để tối thiểu hoá hàm mất mát, hạ dốc di chuyển theo hướng ngược lại, về phía giảm nhanh nhất.
- Tốc độ học: Độ dài bước ở mỗi vòng lặp được quyết định bởi một tham số gọi là tốc độ học, ký hiệu ở trên là
n. Tham số này điều khiển kích thước bước tiến về cực tiểu. Nếu tốc độ học quá nhỏ, việc hội tụ có thể chậm; nếu quá lớn, thuật toán có thể dao động hoặc phân kỳ. - Hội tụ: Lặp lại quá trình với số vòng lặp cố định hoặc cho đến khi thoả mãn tiêu chí hội tụ (ví dụ: thay đổi ở hàm mất mát nhỏ hơn một ngưỡng nhất định).
Hạ dốc ngẫu nhiên cập nhật các tham số mô hình thường xuyên hơn bằng cách dùng các tập con dữ liệu nhỏ, giúp hiệu quả tính toán, đặc biệt với các tập dữ liệu lớn. Tính ngẫu nhiên của SGD có thể mang lại hiệu ứng regularization, ngăn mô hình overfit dữ liệu huấn luyện. Nó cũng phù hợp với các kịch bản học trực tuyến nơi dữ liệu mới xuất hiện dần dần, vì có thể cập nhật mô hình nhanh với mỗi điểm dữ liệu hay mini-batch mới.
Tuy nhiên, SGD cũng có một số thách thức, như nhiễu tăng do tính ngẫu nhiên của ước lượng gradient và nhu cầu tinh chỉnh các siêu tham số như tốc độ học. Nhiều biến thể và điều chỉnh của SGD, như hạ dốc ngẫu nhiên theo mini-batch, momentum, và các phương pháp tốc độ học thích nghi như AdaGrad, RMSProp và Adam, đã được phát triển để giải quyết các thách thức này và cải thiện hội tụ cũng như hiệu năng.
Bạn đã thấy cách các tầng của perceptron nhiều lớp hoạt động và tìm hiểu về hạ dốc ngẫu nhiên; để tổng hợp lại, còn một chủ đề cuối cùng cần đi sâu: lan truyền ngược.
Lan truyền Ngược
Lan truyền ngược là viết tắt của “lan truyền ngược sai số”. Trong ngữ cảnh lan truyền ngược, SGD liên quan đến việc cập nhật tham số mạng lặp đi lặp lại dựa trên các gradient được tính ở mỗi batch dữ liệu huấn luyện. Thay vì tính gradient bằng toàn bộ tập dữ liệu huấn luyện (có thể tốn kém tính toán với các tập lớn), SGD tính gradient bằng các tập con nhỏ ngẫu nhiên gọi là mini-batch. Dưới đây là tổng quan về cách thuật toán lan truyền ngược hoạt động:
- Lan truyền xuôi: Trong bước lan truyền xuôi, dữ liệu đầu vào được đưa vào mạng nơ-ron và đầu ra của mạng được tính theo từng tầng. Mỗi nơ-ron tính tổng có trọng số của các đầu vào, áp dụng một hàm kích hoạt lên kết quả và chuyển đầu ra tới các nơ-ron ở tầng tiếp theo.
- Tính mất mát: Sau lan truyền xuôi, đầu ra của mạng được so sánh với giá trị mục tiêu thật và một hàm mất mát được tính để đo chênh lệch giữa đầu ra dự đoán và đầu ra thực.
- Lan truyền ngược (tính gradient): Ở bước lan truyền ngược, gradient của hàm mất mát theo các tham số của mạng (trọng số và bias) được tính bằng quy tắc dây chuyền trong giải tích. Gradient biểu diễn tốc độ thay đổi của hàm mất mát theo từng tham số và cho biết cách điều chỉnh tham số để giảm mất mát.
- Cập nhật tham số: Khi đã tính xong gradient, tham số của mạng được cập nhật theo hướng ngược lại với gradient để tối thiểu hoá hàm mất mát. Việc cập nhật này thường được thực hiện bằng một thuật toán tối ưu như hạ dốc ngẫu nhiên (SGD) mà chúng ta đã thảo luận.
- Quy trình lặp: Lặp lại các bước 1-4 cho số epoch cố định hoặc cho đến khi thoả tiêu chí hội tụ. Trong mỗi vòng lặp, tham số mạng được điều chỉnh dựa trên gradient tính ở bước lan truyền ngược, dần dần giảm mất mát và cải thiện hiệu năng mô hình.
Chuẩn bị Dữ liệu cho MLP
Chuẩn bị dữ liệu để huấn luyện MLP bao gồm làm sạch, tiền xử lý, tỷ lệ hoá/chuẩn hoá, chia tách, định dạng và thậm chí tăng cường dữ liệu. Dựa trên các hàm kích hoạt sử dụng và thang đo của các đặc trưng đầu vào, dữ liệu có thể cần được chuẩn hoá (standardize) hoặc bình thường hoá (normalize). Thử nghiệm các kỹ thuật tiền xử lý khác nhau và đánh giá tác động của chúng lên hiệu năng mô hình thường là cần thiết để xác định cách tiếp cận phù hợp nhất cho từng tập dữ liệu và tác vụ cụ thể.
- Làm sạch và tiền xử lý dữ liệu
- Xử lý giá trị thiếu: Loại bỏ hoặc ước lượng bù các giá trị thiếu trong tập dữ liệu.
- Mã hoá biến phân loại: Chuyển các biến phân loại thành biểu diễn số, như one-hot encoding.
- Tỷ lệ hoá đặc trưng
- Chuẩn hoá hoặc bình thường hoá: Đưa các đặc trưng về cùng thang đo để quá trình tối ưu hội tụ hiệu quả.
- Chuẩn hoá (Z-score): Trừ đi trung bình và chia cho độ lệch chuẩn của từng đặc trưng. Căn giữa dữ liệu quanh 0 và đưa về phương sai đơn vị.
- Bình thường hoá (Min-Max): Đưa đặc trưng về một khoảng cố định, thường từ 0 đến 1, bằng cách trừ đi giá trị nhỏ nhất và chia cho khoảng (max-min).
- Chuẩn hoá hoặc bình thường hoá: Đưa các đặc trưng về cùng thang đo để quá trình tối ưu hội tụ hiệu quả.
Để tìm hiểu thêm về tỷ lệ hoá đặc trưng, xem khoá học Kỹ thuật Đặc trưng cho Machine Learning bằng Python của Datacamp.
- Chia train-validation-test
- Chia tập dữ liệu thành tập huấn luyện, xác thực và kiểm thử. Tập huấn luyện dùng để huấn luyện mô hình, tập xác thực dùng để tinh chỉnh siêu tham số và theo dõi hiệu năng, còn tập kiểm thử dùng để đánh giá hiệu năng cuối cùng của mô hình trên dữ liệu chưa thấy.
- Định dạng dữ liệu
- Đảm bảo dữ liệu có định dạng phù hợp cho huấn luyện. Có thể cần reshape dữ liệu hoặc chuyển sang kiểu dữ liệu yêu cầu (ví dụ: chuyển biến phân loại thành số).
- Tăng cường dữ liệu tuỳ chọn
- Với các tác vụ như phân loại ảnh, có thể áp dụng các kỹ thuật tăng cường dữ liệu như xoay, lật, co giãn để tăng đa dạng dữ liệu huấn luyện và cải thiện khả năng khái quát của mô hình.
- Chuẩn hoá và hàm kích hoạt
- Lựa chọn giữa chuẩn hoá và bình thường hoá có thể phụ thuộc vào các hàm kích hoạt dùng trong MLP. Các hàm như sigmoid và tanh nhạy với thang đo đầu vào và có thể hưởng lợi từ chuẩn hoá. Ngược lại, các hàm như ReLU ít nhạy hơn với thang đo và có thể không cần chuẩn hoá.
Gợi ý Triển khai và Thực hành Tốt
Triển khai một MLP bao gồm nhiều bước, từ tiền xử lý dữ liệu đến huấn luyện và đánh giá mô hình. Việc chọn số lượng tầng và nơ-ron cho MLP đòi hỏi cân bằng giữa độ phức tạp mô hình, thời gian huấn luyện và khả năng khái quát. Không có đáp án chung cho mọi trường hợp, vì kiến trúc tối ưu phụ thuộc vào độ phức tạp của tác vụ, lượng dữ liệu và tài nguyên tính toán. Tuy nhiên, dưới đây là một số hướng dẫn chung khi triển khai MLP:
1. Kiến trúc mô hình
- Bắt đầu với kiến trúc đơn giản và dần tăng độ phức tạp khi cần. Khởi đầu với một tầng ẩn và số nơ-ron nhỏ, sau đó thử nghiệm thêm tầng và nơ-ron nếu cần.
2. Độ phức tạp của tác vụ
- Với các tác vụ đơn giản có độ phức tạp thấp, như phân loại nhị phân hoặc hồi quy trên tập dữ liệu nhỏ, một kiến trúc nông với ít tầng và nơ-ron có thể đủ.
- Với các tác vụ phức tạp hơn, như phân loại đa lớp hoặc hồi quy trên dữ liệu có chiều cao, kiến trúc sâu hơn với nhiều tầng và nơ-ron có thể cần thiết để nắm bắt các mẫu tinh vi trong dữ liệu.
3. Tiền xử lý dữ liệu
- Làm sạch và tiền xử lý dữ liệu, bao gồm xử lý giá trị thiếu, mã hoá biến phân loại và tỷ lệ hoá đặc trưng số.
- Chia dữ liệu thành các tập huấn luyện, xác thực và kiểm thử để đánh giá hiệu năng mô hình.
4. Khởi tạo
- Khởi tạo trọng số và bias của MLP một cách phù hợp. Các kỹ thuật phổ biến gồm khởi tạo ngẫu nhiên với trọng số nhỏ hoặc dùng kỹ thuật Xavier hay He.
5. Thử nghiệm
- Suy cho cùng, cách tốt nhất là thử nghiệm với các kiến trúc khác nhau, thay đổi số tầng và nơ-ron, và đánh giá hiệu năng một cách thực nghiệm.
- Dùng các kỹ thuật như cross-validation và tinh chỉnh siêu tham số để khám phá có hệ thống và tìm kiến trúc đạt hiệu năng tốt nhất cho tác vụ cụ thể.
6. Huấn luyện
- Huấn luyện MLP bằng dữ liệu huấn luyện và theo dõi hiệu năng trên tập xác thực.
- Thử nghiệm với các kích thước batch, số epoch và siêu tham số khác nhau để tìm thiết lập huấn luyện tối ưu.
- Trực quan hoá quá trình huấn luyện bằng các chỉ số như mất mát và độ chính xác để chẩn đoán vấn đề và theo dõi hội tụ.
7. Thuật toán tối ưu
- Thử nghiệm các tốc độ học khác nhau và cân nhắc dùng các kỹ thuật như lịch trình tốc độ học hoặc tốc độ học thích nghi.
8. Tránh overfitting
- Thận trọng tránh làm mô hình overfit dữ liệu huấn luyện bằng cách thêm độ phức tạp không cần thiết.
- Sử dụng các kỹ thuật như regularization (ví dụ: L1, L2), dropout và early stopping để ngăn overfitting và cải thiện khả năng khái quát.
- Điều chỉnh độ mạnh regularization dựa trên hiệu năng của mô hình trên tập xác thực.
9. Đánh giá mô hình
- Theo dõi hiệu năng mô hình trên tập xác thực riêng trong quá trình huấn luyện để đánh giá tác động của thay đổi kiến trúc.
- Đánh giá mô hình đã huấn luyện trên tập kiểm thử để đo khả năng khái quát.
- Dùng các chỉ số như độ chính xác, mất mát và lỗi xác thực để đánh giá hiệu năng và định hướng quyết định kiến trúc.
10. Lặp lại và thử nghiệm
- Thử nghiệm với các kiến trúc, siêu tham số và chiến lược tối ưu khác nhau để cải thiện hiệu năng.
- Lặp lại triển khai dựa trên các hiểu biết thu được từ kết quả huấn luyện và đánh giá.
Ưu điểm và Hạn chế của MLP
Trước khi chọn MLP cho dự án, bạn nên hiểu nơi chúng vượt trội và nơi các kiến trúc khác có thể phù hợp hơn.
Ưu điểm
- Khả năng xấp xỉ phổ quát: MLP có thể xấp xỉ bất kỳ hàm liên tục nào nếu có đủ nơ-ron và tầng, khiến chúng rất linh hoạt cho nhiều tác vụ.
- Mô hình hoá phi tuyến: Không giống perceptron một tầng, MLP xử lý dữ liệu không thể tách tuyến tính thông qua các tầng ẩn và hàm kích hoạt phi tuyến.
- Tính đa dụng: MLP hoạt động tốt cho phân loại, hồi quy và nhận dạng mẫu trên các lĩnh vực như tài chính, y tế và xử lý ngôn ngữ tự nhiên.
- Dễ triển khai: Các thư viện như Keras, PyTorch và scikit-learn cung cấp các triển khai MLP sẵn dùng với cấu hình tối thiểu.
Hạn chế
- Không lý tưởng cho dữ liệu không gian hay tuần tự: Với ảnh, CNN vượt trội MLP nhờ khai thác cấu trúc không gian. Với chuỗi, RNN và LSTM nắm bắt phụ thuộc thời gian tốt hơn.
- Dễ overfitting: Với nhiều tham số, MLP có thể ghi nhớ dữ liệu huấn luyện. Các kỹ thuật như regularization, dropout và early stopping giúp giảm thiểu điều này.
- Tốn kém tính toán: Các tầng kết nối đầy đủ mở rộng kém khi chiều đầu vào tăng, đòi hỏi nhiều tham số và thời gian huấn luyện hơn so với kiến trúc như CNN.
- Nhạy với tỷ lệ hoá đặc trưng: MLP yêu cầu đặc trưng đầu vào được tỷ lệ hoá phù hợp để hội tụ hiệu quả trong quá trình huấn luyện.
- Bản chất “hộp đen”: Việc diễn giải MLP đã học gì khó hơn so với các mô hình dựa trên cây hay phương pháp tuyến tính.
Kết luận
Perceptron nhiều lớp là một lớp mạng nơ-ron nhân tạo nền tảng và đa dụng, đã đóng góp đáng kể cho sự phát triển của machine learning và trí tuệ nhân tạo. Thông qua các tầng nơ-ron liên kết và các hàm kích hoạt phi tuyến, MLP có khả năng học các mẫu và quan hệ phức tạp trong dữ liệu, khiến chúng phù hợp với nhiều tác vụ. Lịch sử của MLP phản ánh một hành trình khám phá, phát hiện và đổi mới, từ các mô hình perceptron ban đầu đến các kiến trúc học sâu hiện đại vận hành nhiều hệ thống tiên tiến ngày nay.
Trong bài viết này, bạn đã học những điều cơ bản về mạng nơ-ron nhân tạo, tập trung vào perceptron nhiều lớp, tìm hiểu về hạ dốc ngẫu nhiên và lan truyền ngược. Nếu bạn muốn trải nghiệm thực hành và dùng kỹ thuật học sâu để giải quyết các thách thức thực tế, như dự đoán giá nhà, xây dựng mạng nơ-ron để mô hình hoá ảnh và văn bản - chúng tôi khuyến nghị theo dõi lộ trình công cụ Keras của Datacamp.
Làm việc với Keras, bạn sẽ học về mạng nơ-ron, quy trình làm việc với mô hình học sâu và cách tối ưu mô hình của mình. Datacamp cũng có cheat sheet Keras rất hữu ích!
Tôi đã làm việc trong nhiều ngành và đảm nhiệm nhiều vai trò: nhà phát triển phần mềm, nhà nghiên cứu học máy, nhà khoa học dữ liệu, quản lý sản phẩm. Nhưng cốt lõi của tất cả, tôi là một lập trình viên yêu thích học hỏi và chia sẻ kiến thức!
Frequently Asked Questions
Perceptron một tầng là gì?
Perceptron một tầng là dạng đơn giản nhất của mạng nơ-ron, chỉ gồm tầng đầu vào và tầng đầu ra, không có tầng ẩn. Nó chủ yếu dùng cho các tác vụ phân loại tuyến tính, nơi nó học cách tách các điểm dữ liệu bằng một ranh giới quyết định tuyến tính bằng cách điều chỉnh các trọng số của tín hiệu đầu vào.
Sự khác biệt giữa perceptron và perceptron nhiều lớp là gì?
Perceptron là một mạng nơ-ron đơn giản với một tầng nơ-ron, thường dùng cho các tác vụ phân loại tuyến tính. Nó gồm tầng đầu vào và tầng đầu ra, không có tầng ẩn. Perceptron nhiều lớp (MLP) có nhiều tầng, bao gồm một hoặc nhiều tầng ẩn, cho phép nó học và biểu diễn các quan hệ phi tuyến phức tạp hơn trong dữ liệu.
Thuật toán học perceptron là gì?
Thuật toán học perceptron là một thuật toán học có giám sát dùng để huấn luyện perceptron một tầng. Nó điều chỉnh trọng số của các tín hiệu đầu vào dựa trên sai số giữa đầu ra dự đoán và đầu ra thực, lặp lại việc tinh chỉnh ranh giới quyết định cho đến khi phân loại đúng dữ liệu huấn luyện hoặc đạt số vòng lặp định trước.
Vì sao hàm kích hoạt ReLU thường được dùng?
ReLU (Rectified Linear Unit) phổ biến vì đơn giản và giúp mô hình huấn luyện nhanh hơn bằng cách giảm vấn đề tiêu biến gradient thường gặp với sigmoid hoặc tanh.
Tôi chọn số tầng ẩn và số nơ-ron như thế nào?
Hãy bắt đầu nhỏ và tăng độ phức tạp dựa trên độ khó tác vụ và hiệu năng. Dùng dữ liệu xác thực và thử nghiệm để tìm điểm cân bằng phù hợp.
MLP có thể dùng cho tác vụ ảnh hoặc văn bản không?
Có, dù với dữ liệu có chiều cao như ảnh hoặc chuỗi, CNN và RNN có thể hoạt động tốt hơn. MLP vẫn hiệu quả cho các tác vụ đơn giản hơn hoặc đầu vào nhỏ.
Sự khác nhau giữa lan truyền ngược và SGD là gì?
Lan truyền ngược tính gradient cho tất cả tham số mô hình. SGD là kỹ thuật tối ưu cập nhật tham số dựa trên các gradient đó.
