Google đã xây dựng tensorflow như một công cụ để xây dựng các mô hình deep learning một các đơn giản và tối ưu chỉ với vài dòng code. Tuy nhiên, nếu chỉ sử dụng các API này thì thật khó để biết được các cách thức hoạt động đằng sau của từng thành phần trong mô hình. Bài viết này sẽ hướng dẫn các bạn cách xây dựng mạng neural một cách chi tiết qua từng dòng lệnh, từ đó có một cái nhìn rõ ràng hơn về cách hoạt động của chúng.

Đây là bài viết nói về cả quá trình và các bước thực hiện trong 1 mạng neural, nên sẽ không đi sau chi tiết từng phần nhưng vẫn cung cấp cho bạn kiến thức để hiểu được vai trò của nó trong cả kiến trúc.

Mạng neural là gì?

Mạng neural có thể coi là một phương thức để miêu tả cách hoạt động trong bộ não của con người. Nói một cách đơn giản hơn, mạng neural là một hàm nhận một đầu vào x, xử lý nó và đưa ra một đầu ra y tương ứng. Mạng neural gồm những thành phần sau:

  • Một lớp biểu diễn đầu vào x
  • Một số lượng các lớp ẩn - hidden layers
  • Một lớp biểu diễn đầu ra y
  • Một bộ các chỉ số weights(W)bias(b) giữa các lớp
  • Một hàm kích hoạt - activation function giữa các lớp

Hình dưới đây miêu tả một kiến trúc mạng neural gồm 2 lớp (lớp đầu vào x thường không được tính vào số lượng lớp của mạng)

Neural network, mạng nơ ron, neurol

Giờ thì chúng ta sẽ bắt đầu xây dựng kiến trúc trên với Python. Đầu tiên là khởi tạo class NeuralNetwork. Để đơn giản hóa mô hình, ta sẽ mặc định là các biến bias bằng 0.

Neurol network, mạng nơ ron

Huấn luyện mạng neural

Với kiến trúc trên, biến ŷ thể hiển đầu ra của mạng sẽ được tính theo công thức:

Neurol network, mạng nơ ron

Theo công thức trên, có thể thấy được rằng các biến weights W và bias b đóng vai trò quyết định đầu ra ŷ. Giá trị của các biến này cần được tinh chỉnh để tăng độ chính xác trong những dự đoán của mạng neural. Quá trình tinh chỉnh các biến này được gọi là quá trình huấn luyện mạng. Quá trình này là một vòng lặp gồm các bước:

  • Feedforward: Tính toán đầu ra ŷ
  • Backpropagation: Cập nhật các giá trị W và b

Mỗi vòng lặp trong quá trình huấn luyện diễn ra như sau:

Neurol network, mạng nơ ron

Chúng ta sẽ đi vào chi tiết từng phần

Feedforward

Neurol network, mạng nơ ron

Code hàm feedforward:

Neurol network, mạng nơ ron

Sau bước feedforward, ta đã tính được đầu ra ŷ của mạng neural. Tuy nhiên ta vẫn chưa xây dựng một cách thức để đánh giá mức độ đúng đắn của dự đoán này. Phương thức phổ biến nhất dùng để đánh giá mức độ chênh lệch giữa dự đoán ŷ (Giá trị output của mạng) với kết quả mong muốn y (Giá trị output thực sự mà ta muốn) là sử dụng hàm mất mát - Loss function.

hàm mất mát - Loss function

Là một hàm để tính toán mức độ chênh lệch giữa ŷy. Vì giá trị độ chênh lệch này biểu diễn sự sai sót trong quá trình dự đoán của mạng nên giá trị này còn được gọi là giá trị lỗi. Giá trị lỗi càng nhỏ thì dự đoán của mạng neural càng chính xác. Có rất nhiều biến thể của hàm mất mát phù hợp cho từng bài toán khác nhau, trong bài viết này ta sẽ sử dụng hàm tổng bình phương lỗi (Sum of square error):

Neurol network, mạng nơ ron

Giống như cái tên hàm tổng bình phương lỗi, giá trị lỗi được tính theo tổng bình phương của độ chệnh lệch của từng dự đoán ŷ với mong muốn y tương ứng. Mục tiêu của việc huấn luyện mạng là giảm giá trị lỗi này đến mức tối thiểu và quá trình backpropagation sẽ thực hiện điều đó.

Backpropagation

Sau khi đã tính được giá trị lỗi, ta cần phải cập nhật các biến Wb sao cho các dự đoán ŷ về sau có giá trị lỗi nhỏ nhất có thể. Nhắc lại kiến thức về giải tích, để tìm cực tiểu của một hàm số ta phải tính đạo hàm của hàm số đó theo từng biến. Các giá trị đạo hàm nói cho ta biết về các "hướng" cần di chuyển các biến để hàm số đi về cực tiểu. Vì vậy, một khi ta đã có đạo hàm của hàm mất mát theo từng biến Wb, ta sẽ cập nhật các giá trị của chúng theo giá trị các đạo hàm tương ứng. Phương pháp này được gọi là gradient descent.

Neurol network, mạng nơ ron

Để tính toán các đạo hàm của hàm mất mát theo từng biến Wb, ta sử dụng quy tắc tính đạo hàm của hàm số hợp như sau:

Neurol network, mạng nơ ron

Code hàm Backpropagate:

Neurol network, mạng nơ ron

Để có thể hiểu rõ hơn nữa về quá trình backpropagate và các tính toán đằng sau nó, các bạn nên xem video này:


Tổng hợp lại

Vậy là mạng neural 2 lớp đã được xây dựng xong, cũng không quá phức tạp phải không. Giờ ta sẽ chạy thử nó với một ví dụ đơn giản:

Neurol network, mạng nơ ron

Ta có một tập hợp đầu vào X và đầu ra Y như trên. Ta sẽ bắt đầu quá trình huấn luyện với 1500 vòng lặp của các bước feedforward - backpropagate và xem biểu đồ biến thiên của hàm mất mát:

Neurol network, mạng nơ ron

Sau khi đã học xong, với mỗi đầu vào theo thứ tự trên ta có đầu ra ŷ như sau:

Neurol network, mạng nơ ron

Khá tốt phải không. Mỗi dự đoán ŷ đã ở rất gần so với mong muốn y rồi. Vậy là mạng neural đã được huấn luyện thành công. Hy vọng các bạn học được nhiều điều mới qua bài viết này :D.