Hàm softmax

Trong toán học, **hàm softmax**, hoặc **hàm trung bình mũ**, là sự khái quát hóa của hàm lôgit biến không gian K-chiều véc tơ  với giá trị thực bất kỳ đến không gian K-chiều véc tơ  mang giá trị trong phạm vi (0, 1] bao gồm cả giá trị 1. Phương trình được biểu diễn như sau:
:  &nbsp;&nbsp; cho *j* = 1,..., *K*.
Trong lý thuyết xác suất, giá trị xuất ra của hàm softmax có thể được sử dụng để đại diện cho một loại phân phối – đó là phân phối xác suất trên K khả năng khác nhau có thể xảy ra. Trong thực tế, nó là gradien logarit chuẩn hóa thuộc nhóm phân phối xác suất.

Các hàm softmax được sử dụng trong nhiều phương pháp phân loại đa lớp như hồi quy logistic đa biến,  Biệt thức tuyến tính phân tích nhiều lớp, Phương pháp phân loại Bayes, và mạng neuron. Đặc biệt, trong hồi quy logistic đa biến và biệt thức tuyến tính phân tích, hồi quy đầu vào thành phương trình là kết quả của K hàm tuyến tính riêng biệt, và dự đoán xác suất cho lớp thứ j cho bởi véc tơ mẫu  trọng số véc tơ  là:
: 
Đây có thể được coi là thành phần của K và hàm softmax (ở đây  biểu khị kết quả của  và ). Phép tính này tương đương với việc áp dụng toán tử được xác định bởi  để tơ vậy, chuyển đổi nguyên bản, có thể rất nhiều chiều, véc tơ đầu vào nằm trong một K-chiều không gian .

## Ví dụ
Nếu chúng ta có một đầu vào [1, 2, 3, 4, 1, 2, 3], các softmax đó là [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]. Đầu ra có trọng số cao nhất là giá trị '4' nằm trong vec tơ đầu vào. Đây là ví dụ về cách thông thường mà hàm softmax được sử dụng: để làm nổi bật giá trị lớn nhất và làm mờ các giá trị bé hơn đáng kể so với giá trị lớn nhất.

Sau đây là ví dụ về phép tính này bằng một đoạn mã Python đơn giản:
```python
>>> import math
>>> z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
>>> z_exp = [math.exp(i) for i in z]
>>> print([round(i, 2) for i in z_exp])
[2.72, 7.39, 20.09, 54.6, 2.72, 7.39, 20.09]
>>> sum_z_exp = sum(z_exp)
>>> print(round(sum_z_exp, 2))
114.98
>>> softmax = [round(i / sum_z_exp, 3) for i in z_exp]
>>> print(softmax)
[0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]
```


## Mạng neuron nhân tạo
Các hàm softmax thường được sử dụng trong lớp cuối cùng của thuật toán phân loại sử dụng mạng neuron. Như mạng thường được sử dụng trong phạm vi log-loss (hoặc cross-entropy), đưa ra một biến thể phi tuyến của hồi quy logistic đa biến.

Bằng các hàm ánh xạ một véc tơ và chỉ số 'i' của phần tử trong véc tơ, giá trị đạo hàm cần sử dụng chỉ số để tính toán:
: {\displaystyle {\frac {\partial }{\partial q_{k}}}\sigma ({\textbf {q}},i)=\cdots =\sigma ({\textbf {q}},i)(\delta _{ik}-\sigma ({\textbf {q}},k))}
Ở đây, sử dụng Kronecker delta làm cho biểu thức được đơn giản. (xem. đạo hàm của hàm sigmoid, được thể hiện thông qua chính hàm số đó).

Xem đa thức logit cho mô hình xác suất, sử dụng hàm softmax làm hàm kích hoạt.

## Học tăng cường
Trong lĩnh vực của học tăng cường, một hàm softmax có thể được sử dụng để chuyển đổi giá trị thành xác suất. Các hàm thường dùng là:
: P_{t}(a)={\frac {\exp(q_{t}(a)/\tau)}{\sum _{i=1}^{n}\exp(q_{t}(i)/\tau)}}{\text{,}}
nơi giá trị của hành động  tương ứng với hiệu quả mong muốn của hành động a và  (một sự ám chỉ trong thống kê cơ học). Với nhiệt độ cao (), tất cả hành động như có cùng một xác suất và với nhiệt độ càng thấp hơn thì sự ảnh hưởng của hiệu quả mong muốn đến xác suất càng cao. Với nhiệt độ thấp (), xác suất của hành động với hiệu quả mong muốn lớn nhất sẽ có xu hướng tiến tới 1.

## Chuẩn hóa softmax
Sigmoidal hay còn gọi là chuẩn hóa softmax là một cách làm giảm sự ảnh hưởng của các giá trị cực và ngoại lai trong dữ liệu mà không phải loại bỏ chúng ra khỏi dải dữ liệu. Đó là những dữ liệu ngoại lai hữu ích mà ta muốn giữ chúng trong dải dữ liệu trong khi vẫn đảm bảo sự ý nghĩa của dữ liệu trong phạm vi sai lệch chuẩn của giá trị trung bình. Dữ liệu được biến đổi phi tuyến sử dụng một trong những hàm sigmoidal sau:

Hàm logistic sigma:
: x_i' \equiv \frac{1}{1+e^{-(x_i - \mu_i)/\sigma_i}} 
Hàm hyperbolic, tanh:
: x_i' \equiv \frac{1-e^{-(x_i - \mu_i)/\sigma_i}}{1+e^{-(x_i - \mu_i)/\sigma_i}} 

Hàm sigmoid làm giới hạn phạm vi của giá trị đã được bình thường hóa trong khoảng từ 0 đến 1. Hàm sigmoid gần như là tuyến tính trong phạm vi lân cận giá trị trung bình và là hàm phi tuyến liên tục tại hai cực, đảm bảo rằng tất cả các điểm giá trị đều nằm trong phạm vi giới hạn. Điều này đảm bảo cho độ chính xác của hầu hết giá trị nằm trong phạm vi lệch chuẩn của giá trị trung bình.

Hàm hyperbolic, tanh giới hạn phạm vi của giá trị được bình thường hóa trong khoảng -1 và 1. Hàm hyperbolic gần như là tuyến tính tại lân cận giá trị trung bình, nhưng có đường dốc bằng nửa dốc của hàm sigmoid. Như hàm sigmoid, nó là hàm phi tuyến  liên tục, đơn điệu tại hai cực. Cũng giống như hàm sigmoid, nó đảm bảo tính khả vi tại mọi điểm và  biểu hiện của đạo hàm (đường cong) không bị ảnh hưởng bởi sự bình thường hóa. Việc này đảm bảo rằng việc tối ưu và các thuật toán tích phân có thể tiếp tục tin cậy vào đạo hàm để ước lượng sự thay đổi của giá trị đầu ra (giá trị được bình thường hóa) điều đó sẽ được sinh ra bởi thay đổi các đầu vào trong khu vực lân cận điểm linearisation.

## Mối quan hệ với phân phối Boltzman
Hàm softmax cũng là xác suất của các nguyên tử được tìm thấy trong trạng thái lượng tử của năng lượng  khi nguyên tử là một phần của quần thể đạt trạng thái cân bằng nhiệt động tại nhiệt độ . Đó được biết là phân phối Boltzmann. Mối tương quan mong muốn của mỗi trạng thái là và đây là sự bình thường hóa để tổng các mức năng lượng tiến tới 1. Trong sự tương tự này, đầu vào của hàm softmax là phản năng lượng của mỗi trạng thái lượng tử chia bởi .

## Tham khảo

## Xem thêm
* Softplus
* Đa thức logistic hồi quy
* Phân phối Dirichlet – một cách khác để lấy mẫu phân loại phân phối
* Mịn tối đa