Trong bài tập trước, bạn đã thấy rằng chỉ cần thêm các lớp ẩn đối với mạng của chúng tôi không đủ để thể hiện các hành vi phi tuyến tính. Các phép toán tuyến tính được thực hiện trên các phép toán tuyến tính vẫn là các phép toán tuyến tính.
Cách thiết lập mạng nơron để tìm hiểu mối quan hệ phi tuyến tính giữa các giá trị? Chúng ta cần một cách nào đó để chèn phi tuyến tính phép toán thành một mô hình.
Nếu bạn thấy điều này khá quen thuộc thì đó là do chúng tôi đã áp dụng các phép toán phi tuyến tính cho đầu ra của mô hình tuyến tính trước đó trong khoá học. Trong phần Logistic Regression (Hồi quy hậu cần) mô-đun này, chúng tôi đã điều chỉnh mô hình hồi quy tuyến tính để đưa ra giá trị liên tục từ 0 đến 1 (đại diện cho một xác suất) bằng cách truyền đầu ra của mô hình thông qua một giá trị hàm sigmoid.
Chúng ta có thể áp dụng nguyên tắc tương tự cho mạng nơron. Hãy cùng xem lại mô hình của chúng ta từ Bài tập 2 trước đó, nhưng lần này là trước xuất giá trị của mỗi nút, trước tiên chúng ta sẽ áp dụng hàm sigmoid:
Thử thực hiện các phép tính của từng nút bằng cách nhấp vào nút >| (ở bên phải nút phát). Xem các phép toán đã thực hiện để tính toán từng giá trị nút trong bảng điều khiển Tính toán bên dưới biểu đồ. Lưu ý rằng đầu ra của mỗi nút hiện là biến đổi sigmoid của tuyến tính kết hợp của các nút trong lớp trước đó và các giá trị đầu ra là tất cả đều nằm trong khoảng từ 0 đến 1.
Ở đây, sigmoid đóng vai trò là chức năng kích hoạt đối với mạng nơron, một sự biến đổi phi tuyến tính đối với giá trị đầu ra của nơron trước khi giá trị đó được truyền dưới dạng dữ liệu đầu vào cho các phép tính tiếp theo tầng mạng nơron.
Bây giờ chúng ta đã thêm hàm kích hoạt, việc thêm các lớp sẽ có nhiều tác động hơn. Việc xếp chồng phi tuyến tính trên các phi tuyến tính cho phép chúng tôi lập mô hình rất phức tạp mối quan hệ giữa đầu vào và đầu ra được dự đoán. Tóm lại, mỗi lớp đang học hiệu quả một hàm cấp cao hơn, phức tạp hơn so với dữ liệu thô đầu vào. Nếu bạn muốn nâng cao trực giác về cách hoạt động của quy trình này, hãy xem bài đăng hay của Chris Olah trên blog.
Các hàm kích hoạt phổ biến
Ba hàm toán học thường được dùng làm hàm kích hoạt là sigmoid, tanh và ReLU.
Hàm sigmoid (được thảo luận ở trên) thực hiện phép biến đổi sau đây trên đầu vào $x$, tạo ra giá trị đầu ra từ 0 đến 1:
\[F(x)=\frac{1} {1+e^{-x}}\]
Dưới đây là đồ thị của hàm này:
![Hình 4. Biểu đồ của hàm sigmoid: một đường cong hình s
tiệm cận với trục x khi x tiến đến giá trị âm
vô cực và 1 khi x tiến đến vô cực.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=0000&hl=vi)
Hàm tanh (viết tắt của "tang siêu tốc") biến đổi đầu vào $x$ thành tạo ra giá trị đầu ra nằm trong khoảng từ –1 đến 1:
\[F(x)=tanh(x)\]
Dưới đây là đồ thị của hàm này:
![Hình 5. Biểu đồ của hàm tanh: một chút
đường cong hình s dốc hơn hàm sigmoid có tiệm cận
tiến gần đến –1 khi x tiến đến vô cực âm và 1 khi x tiến đến
vô tận.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=0000&hl=vi)
Hàm kích hoạt đơn vị tuyến tính đã chỉnh sửa (hoặc ReLU, cho short) biến đổi đầu ra bằng thuật toán sau:
- Nếu giá trị đầu vào $x$ nhỏ hơn 0, hãy trả về 0.
- Nếu giá trị đầu vào $x$ lớn hơn hoặc bằng 0, hãy trả về giá trị đầu vào.
ReLU có thể được biểu diễn theo toán học bằng cách sử dụng hàm max():
Dưới đây là đồ thị của hàm này:
![Hình 6. Biểu đồ của hàm ReLU: một đường ngang
dọc theo trục x từ vô cực âm đến 0, đường thẳng này trở thành đường chéo
đi lên và sang phải với hệ số góc 1 (y=x) từ 0 đến vô cùng.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=0000&hl=vi)
ReLU thường hoạt động tốt hơn một chút với vai trò kích hoạt so với một hàm trơn tru có chức năng như sigmoid hoặc tanh, vì tính năng này ít nhạy cảm hơn với bài toán biến mất độ dốc trong quá trình đào tạo mạng nơron. ReLU cũng dễ dàng hơn đáng kể hơn các hàm này.
Các hàm kích hoạt khác
Trong thực tế, mọi hàm toán học đều có thể đóng vai trò là hàm kích hoạt. Giả sử rằng \(\sigma\) đại diện cho hàm kích hoạt của chúng ta. Giá trị của một nút trong mạng được xác định theo công thức sau công thức:
Keras sẵn sàng hỗ trợ cho nhiều người dùng hàm kích hoạt. Tuy nhiên, bạn vẫn nên bắt đầu với ReLU.
Tóm tắt
Video sau đây tóm tắt mọi điều bạn đã tìm hiểu được từ trước đến nay về cách xây dựng mạng nơron:
Mô hình của chúng tôi hiện có tất cả các thành phần tiêu chuẩn của những gì mọi người thường nghĩa là khi chúng tham chiếu đến mạng nơron:
- Một tập hợp các nút, tương tự như các nơron, được sắp xếp theo lớp.
- Một tập hợp trọng số đại diện cho các kết nối giữa mỗi mạng nơron và lớp bên dưới nó. Lớp bên dưới có thể một lớp mạng nơron khác hoặc một loại lớp khác.
- Một tập hợp các độ lệch, một độ lệch cho mỗi nút.
- Một hàm kích hoạt chuyển đổi đầu ra của mỗi nút trong một lớp. Các lớp khác nhau có thể có các hàm kích hoạt khác nhau.
Lưu ý: mạng nơron không phải lúc nào cũng tốt hơn nhưng mạng nơron có cung cấp một phương án thay thế linh hoạt trong nhiều trường hợp.