LOSS Diagram

Text Only
================================================================================
          SƠ ĐỒ TÍNH TOÁN LOSS & ACCURACY (QUY TRÌNH MA TRẬN)
================================================================================

                                  (ĐẦU VÀO)
            +---------------------------------+      +---------------------+
            |      softmax_outputs (ŷ)        |      |  class_targets (y)  |
            |     (Ma trận dự đoán N x C)     |      |  (Nhãn thật)        |
            | [[0.7, 0.2, 0.1],               |      | [0, 1, 1]           | <-- Dạng Sparse
            |  [0.5, 0.1, 0.4],               |      |   HOẶC              |
            |  [0.02, 0.9, 0.08]]             |      | [[1, 0, 0],         |
            +---------------------------------+      |  [0, 1, 0],         | <-- Dạng One-Hot
                                                   |  [0, 1, 0]]         |
                                                   +---------------------+
                                     |
                                     v
+-------------------------------------------------------------------------------+
|                        LUỒNG 1: TÍNH TOÁN MẤT MÁT (LOSS)                        |
+-------------------------------------------------------------------------------+
                                     |
                                     v
                          (HÀNH ĐỘNG: Clipping để tránh log(0))
                           np.clip(y_pred, 1e-7, 1-1e-7)
                                     |
                                     v
                      +-------------------------------+
                      |      y_pred_clipped           |
                      | [[0.7, 0.2, 0.1],            |
                      |  [0.5, 0.1, 0.4],            |
                      |  [0.02, 0.9, 0.08]]          |
                      +-------------------------------+
                                     |
           +-------------------------+-------------------------+
           |                                                   |
           v (NẾU NHÃN LÀ SPARSE)                              v (NẾU NHÃN LÀ ONE-HOT)
+------------------------------------+             +--------------------------------------+
| Lấy giá trị theo chỉ số (Indexing) |             |    Nhân theo phần tử (Element-wise)  |
| y_pred[range(N), y_true]           |             |      y_pred_clipped * y_true         |
|                                    |             |                                      |
|  [0.7, 0.2, 0.1] ---<--- [0]       |             |  [[0.7, 0.2, 0.1],   * [[1, 0, 0],   |
|  [0.5, 0.1, 0.4] -------<--- [1]   |             |   [0.5, 0.1, 0.4],     [0, 1, 0],   |
|  [0.02, 0.9, 0.08] -----^---<--- [1]   |             |   [0.02, 0.9, 0.08]]    [0, 1, 0]]   |
|                      |           |             |            =                         |
|                      v           |             |  [[0.7, 0.0, 0.0],                   |
|  (Vector xác suất đúng)          |             |   [0.0, 0.1, 0.0],                   |
|      [0.7, 0.5, 0.9]             |             |   [0.0, 0.9, 0.0]]                   |
+------------------------------------+             |            |                         |
                                                   |            v (np.sum(axis=1))        |
                                                   +--------------------------------------+
                                     |                         |
                                     +----------->-------------+
                                                 |
                                                 v
                                    +--------------------------+
                                    | correct_confidences      |
                                    | (Vector xác suất đúng)   |
                                    |    [0.7, 0.5, 0.9]       |
                                    +--------------------------+
                                                 |
                                                 v (HÀNH ĐỘNG: Lấy Negative Log)
                                                    -np.log()
                                                 |
                                                 v
                                    +--------------------------+
                                    |      sample_losses       |
                                    | [0.356, 0.693, 0.105]    |
                                    +--------------------------+
                                                 |
                                                 v (HÀNH ĐỘNG: Lấy trung bình)
                                                     np.mean()
                                                 |
                                                 v
                                     +-----------------------+
                                     |     average_loss      |
                                     | (Một số vô hướng)      |
                                     |       0.385           |
                                     +-----------------------+


+-------------------------------------------------------------------------------+
|               LUỒNG 2: TÍNH TOÁN ĐỘ CHÍNH XÁC (ACCURACY) - ĐÃ SỬA LỖI           |
+-------------------------------------------------------------------------------+
                                     |
     (Sử dụng `softmax_outputs` GỐC) |
+---------------------------------+  |  +---------------------------------------+
|      softmax_outputs (ŷ)        |  |  |            class_targets (y)          |
| [[0.7, 0.2, 0.1],               |  |  |                                       |
|  [0.5, 0.1, 0.4],               |  |  | Nếu là One-Hot:                        |
|  [0.02, 0.9, 0.08]]             |  |  | [[1,0,0], [0,1,0], [0,1,0]]            |
+---------------------------------+  |  |      |                                |
                 |                   |  |      v np.argmax(axis=1)              |
                 v np.argmax(axis=1)   |  |                                       |
                 |                   |  | Nếu là Sparse (không cần làm gì):      |
+----------------+                   |  | [0, 1, 1]                             |
|  predictions   |                   |  +-----------------|---------------------+
|   [0, 0, 1]    |                   |                    |
+----------------+                   +-----------><-------+
                 |                              |
                 +---------------><-------------+
                                |
                                v (HÀNH ĐỘNG: So sánh bằng nhau)
                                       predictions == y
                                |
                                v
                   +----------------------------+
                   |   [0, 0, 1] == [0, 1, 1]   |
                   +----------------------------+
                                |
                                v
                   +----------------------------+
                   |   [True, False, True]      |
                   +----------------------------+
                                |
                                v (HÀNH ĐỘNG: Lấy trung bình, True=1, False=0)
                                    np.mean()
                                |
                                v
                         +-----------------------+
                         |       accuracy        |
                         | (Một số vô hướng)      |
                         |    0.666666...        |
                         +-----------------------+


================================================================================
                           KẾT QUẢ CUỐI CÙNG
                +------------------+     +------------------+
                |   average_loss   |     |     accuracy     |
                |      0.385       |     |   0.666666...    |
                +------------------+     +------------------+
================================================================================