Tanh (Hyperbolic Tangent)
Tìm hiểu cách hàm kích hoạt Tanh cải thiện quá trình huấn luyện neural network bằng cách đưa dữ liệu về trung tâm bằng 0. Khám phá vai trò của hàm này trong RNNs, GANs và các model Ultralytics YOLO26.
Hàm Tanh (Tang hyperbolic) là một hàm kích hoạt toán học được sử dụng rộng rãi trong các lớp ẩn của mạng nơ-ron nhân tạo. Hàm này biến đổi các giá trị đầu vào thành phạm vi đầu ra từ -1 đến 1, tạo ra một đường cong hình chữ S tương tự hàm sigmoid nhưng có tâm tại 0. Tính chất đưa về tâm 0 này rất quan trọng vì cho phép model học hiệu quả hơn bằng cách chuẩn hóa đầu ra của các neuron, đảm bảo dữ liệu truyền qua mạng có giá trị trung bình gần 0 hơn. Bằng cách xử lý rõ ràng các giá trị âm, Tanh giúp mạng nơ-ron nắm bắt các pattern và mối quan hệ phức tạp hơn trong dữ liệu.
Cơ chế của Tanh trong Deep Learning#
Trong kiến trúc của các model deep learning, các hàm kích hoạt đưa tính phi tuyến vào mạng, cho phép mạng học các ranh giới phức tạp giữa những lớp dữ liệu khác nhau. Nếu không có các hàm như Tanh, mạng nơ-ron sẽ hoạt động như một model hồi quy tuyến tính đơn giản, bất kể có bao nhiêu lớp. Hàm Tanh đặc biệt hiệu quả trong mạng nơ-ron hồi tiếp (RNN) và một số loại mạng truyền thẳng, trong đó việc duy trì phân phối activation cân bằng và có tâm tại 0 giúp ngăn vấn đề gradient biến mất trong quá trình lan truyền ngược.
Khi các đầu vào được ánh xạ vào phạm vi từ -1 đến 1, các đầu vào âm mạnh sẽ tạo ra đầu ra âm, còn các đầu vào dương mạnh sẽ tạo ra đầu ra dương. Điều này khác với hàm Sigmoid, vốn nén các giá trị vào khoảng từ 0 đến 1. Vì đầu ra của Tanh đối xứng quanh 0, quá trình gradient descent thường hội tụ nhanh hơn, do các trọng số ở những lớp tiếp theo không liên tục di chuyển theo một hướng duy nhất (hiện tượng được gọi là đường đi "zig-zag" trong quá trình tối ưu hóa).
Các ứng dụng trong thực tế#
Tanh vẫn đóng vai trò quan trọng trong các kiến trúc và trường hợp sử dụng cụ thể, đặc biệt khi cần xử lý chuỗi và ước lượng giá trị liên tục.
- Xử lý ngôn ngữ tự nhiên (NLP): Trong các kiến trúc như mạng Bộ nhớ dài-ngắn hạn (LSTM) và Đơn vị hồi tiếp có cổng (GRU), Tanh được sử dụng làm activation chính để điều tiết luồng thông tin. Ví dụ, trong các tác vụ dịch máy, khi một model dịch văn bản từ tiếng Anh sang tiếng Pháp, Tanh giúp các cổng bên trong LSTM quyết định cần giữ lại hay quên bao nhiêu phần ngữ cảnh trước đó (bộ nhớ). Điều này cho phép model xử lý các phụ thuộc dài hạn trong cấu trúc câu.
- Mạng đối sinh (GANs): Trong thành phần generator của nhiều Mạng đối sinh, Tanh thường được sử dụng làm hàm activation cuối cùng cho lớp đầu ra. Vì hình ảnh thường được chuẩn hóa về phạm vi từ -1 đến 1 trong bước tiền xử lý, việc sử dụng Tanh đảm bảo generator tạo ra các giá trị pixel nằm trong cùng phạm vi hợp lệ. Kỹ thuật này hỗ trợ tổng hợp hình ảnh chân thực cho các ứng dụng như tạo text-to-image.
So sánh: Tanh với Sigmoid và ReLU#
Việc phân biệt Tanh với các hàm phổ biến khác sẽ giúp hiểu rõ khi nào nên sử dụng hàm này.
- Tanh và Sigmoid: Cả hai đều là các đường cong hình chữ S. Tuy nhiên, Sigmoid tạo ra các giá trị trong khoảng từ 0 đến 1, điều này có thể khiến gradient biến mất nhanh hơn so với Tanh. Sigmoid thường được dành cho lớp đầu ra cuối cùng của các bài toán phân loại nhị phân (dự đoán xác suất), trong khi Tanh được ưu tiên cho các lớp ẩn trong RNN.
- Tanh và ReLU (Đơn vị tuyến tính chỉnh lưu): Trong các Mạng nơ-ron tích chập (CNN) hiện đại như YOLO26, ReLU và các biến thể của nó (như SiLU) thường được ưu tiên hơn Tanh cho các lớp ẩn. Lý do là ReLU tránh vấn đề gradient biến mất hiệu quả hơn trong các mạng rất sâu và có chi phí tính toán thấp hơn. Tanh có chi phí tính toán cao hơn do cần thực hiện các phép tính hàm mũ.
Triển khai các hàm activation trong PyTorch#
Mặc dù các model cấp cao như Ultralytics YOLO26 xử lý nội bộ việc định nghĩa activation trong các tệp cấu hình, việc hiểu cách áp dụng Tanh bằng PyTorch rất hữu ích khi xây dựng model tùy chỉnh.
import torch
import torch.nn as nn
# Define a sample input tensor with positive and negative values
input_data = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0])
# Initialize the Tanh activation function
tanh = nn.Tanh()
# Apply Tanh to the input data
output = tanh(input_data)
# Print results to see values squashed between -1 and 1
print(f"Input: {input_data}")
print(f"Output: {output}")Đối với người dùng quan tâm đến việc huấn luyện các kiến trúc tùy chỉnh hoặc quản lý dataset hiệu quả, Ultralytics Platform cung cấp một môi trường tinh gọn để thử nghiệm các hyperparameter của model, trực quan hóa metric huấn luyện và triển khai giải pháp mà không cần tự viết code thủ công cho từng lớp của mạng nơ-ron.









