Chuyển tới nội dung chính

Hàm mất mát

Kéo thảTính lại thậtTrực giác hình học

Hàm mất mát

Kéo dự đoán, đẩy một điểm lạc ra xa, và xem hai hàm mất mát chọn hai nghiệm khác nhau.

Câu "mô hình này tốt hơn mô hình kia" không tự có nghĩa. Muốn so được thì phải quy mọi sai lệch của mô hình về một con số duy nhất, và hàm mất mát chính là cái quy tắc quy đổi đó. Chọn quy tắc nào không phải chuyện hình thức: hai hàm mất mát khác nhau có thể xếp thứ tự hai mô hình theo hai chiều ngược nhau, và bài này đo cho thấy điều đó.

Sim dưới đây có ba khung nhìn. Khung hồi quy cho một sai lệch, xem hai hàm phạt nó nặng nhẹ ra sao. Khung điểm lạc cho cả một tập dữ liệu và để bạn tự đẩy một điểm ra xa, rồi xem nghiệm tối ưu của từng hàm chạy theo hay đứng yên. Khung phân loại cho cross-entropy.

Hàm mất mát · kéo dự đoán, xem phạt
MSE = 2.25MAE = 1.50MSE ≈ 1.50× MAE
246losserrđíchMSE = err²MAE = |err|

Ở trạng thái mở đầu, sim đang nói gì

Sim mở ở khung hồi quy với sai lệch err = 1.50. Ô kết quả đọc MSE = 2.25MAE = 1.50, kèm huy hiệu MSE ≈ 1.50× MAE.

Ba con số đó khớp nhau không phải tình cờ. 2.25 đúng bằng 1.5 nhân 1.5, 1.50 đúng bằng trị tuyệt đối của 1.5, nên tỉ số giữa chúng là err² chia |err|, tức chính bằng |err|. Huy hiệu ghi 1.50× vì sai lệch đang là 1.50. Kéo chấm ra xa thì con số trong huy hiệu tăng đúng theo sai lệch, và đó là cách gọn nhất để thấy khoảng cách giữa hai hàm không phải một hằng số.

Bấm sang khung điểm lạc thì dữ liệu là năm giá trị 4, 5, 6, 7, 8. Mô hình ở đây đơn giản nhất có thể: nó chỉ xuất ra một hằng số c. Ô kết quả đọc trung bình = 6.00, trung vị = 6.00, MSE = 2.00, MAE = 1.20, n = 5. Hai nghiệm trùng nhau vì dữ liệu đang đối xứng quanh 6, và cả bài sau đây là chuyện phá vỡ sự trùng nhau đó.

Vì sao phải là một con số duy nhất

Muốn nói mô hình A tốt hơn mô hình B thì phải có một quan hệ thứ tự. Nhưng sai lệch của một mô hình không phải một số, nó là cả một danh sách: mỗi điểm dữ liệu một sai lệch. Hai danh sách số nói chung không so được với nhau, vì mô hình A có thể tốt hơn ở điểm này và tệ hơn ở điểm kia. Hàm mất mát gộp danh sách đó về một số thực, và chỉ khi đó phép so mới tồn tại.

Cái giá của việc gộp là mất thông tin, và cái được là có thứ tự để tối ưu theo. Quan trọng hơn: cách gộp là một lựa chọn, không phải một sự thật. Ở err = 0.5 thì bình phương cho 0.25 còn trị tuyệt đối cho 0.5, tức bình phương phạt nhẹ hơn. Ở err = 2 thì bình phương cho 4 còn trị tuyệt đối cho 2, tức bình phương phạt nặng hơn. Hai hàm đổi vai ở đúng err = 1, nơi cả hai cùng cho 1.

Nên câu hỏi "sai lệch này lớn hay nhỏ" đã phụ thuộc hàm mất mát trước khi ta kịp so hai mô hình.

Bình phương so với trị tuyệt đối: hệ số

Đây là chỗ khác nhau đo được rõ nhất. Nếu một điểm cách xa gấp k lần, phần nó góp vào tổng trị tuyệt đối tăng gấp k lần, còn phần nó góp vào tổng bình phương tăng gấp lần.

Hãy tự đo bằng sim. Ở khung điểm lạc, tại hằng số c = 6 thì điểm di động đang ở 8, sai lệch của nó là 2, nên nó góp 4 vào tổng bình phương 10 và góp 2 vào tổng trị tuyệt đối 6. Bây giờ kéo nó ra 30. Sai lệch thành 24, tức xa gấp 12 lần. Phần góp vào tổng bình phương thành 576, tức tăng gấp 144 lần, và 144 đúng bằng 12 bình phương. Phần góp vào tổng trị tuyệt đối chỉ thành 24, tức tăng gấp 12 lần.

Hệ quả là điểm đó chiếm bao nhiêu phần của tổng. Vẫn tại c = 6, tổng bình phương lúc này là 582 và một mình điểm lạc chiếm 576, tức 98.97%. Tổng trị tuyệt đối là 28 và điểm lạc chiếm 24, tức 85.71%. Cùng một dữ liệu, cùng một điểm, mà mức chi phối khác nhau hẳn.

Nói cách khác, với bình phương thì một điểm có thể mua đứt cả hàm mất mát. Mọi điểm còn lại cộng lại chỉ còn hơn một phần trăm tiếng nói.

Điểm lạc kéo nghiệm đi bao nhiêu

Phần trên nói về giá trị của hàm mất mát. Phần này quan trọng hơn: nó nói về nghiệm, tức về mô hình mà ta sẽ đem đi dùng.

Với mô hình một hằng số, cả hai nghiệm đều có công thức đóng. Hằng số làm nhỏ nhất tổng bình phương là trung bình, còn hằng số làm nhỏ nhất tổng trị tuyệt đối là trung vị. Sim vẽ hai vạch đứng ở đúng hai chỗ đó.

Ở trạng thái mở đầu cả hai vạch nằm chồng nhau tại 6.00. Kéo điểm lạc từ 8 ra 30 và xem chúng tách nhau:

  • trung bình đi từ 6.00 lên 10.40, tức dịch 4.40
  • trung vị vẫn đứng ở 6.00, tức dịch đúng 0.00

Tốc độ dịch của trung bình có công thức, và sim đo đúng công thức đó: mỗi đơn vị mà điểm lạc đi ra, trung bình đi theo 1/n. Với n = 5 thì hệ số là 0.2 ở toàn bộ 60 bước của thanh kéo; bấm sang n = 4 thì hệ số thành 0.25. Nghĩa là điểm lạc không bao giờ bị bỏ qua, nó chỉ bị chia cho số điểm.

Quét hết thanh kéo, tức cho điểm lạc đi từ 0 tới 30, thì:

  • trung bình chạy từ 4.40 tới 10.40, tức đi được 6.00
  • trung vị chỉ chạy từ 5 tới 6, tức đi được 1.00, và nó chỉ nhận đúng ba giá trị là 5, 5.5, 6
  • trên 61 vị trí của thanh kéo, trung vị đứng nguyên tại 649 vị trí

Sáu so với một, đo trên cùng một thao tác. Đó là nội dung định lượng của câu "bình phương nhạy với điểm lạc".

Nhưng đừng đọc quá lời. Trung vị không phải bất động: nó bền với điểm nằm ngoài đám dữ liệu, chứ không bền với mọi điểm. Kéo điểm di động vào giữa đám, tới 5.5, thì trung vị dịch thành 5.5 ngay. Cái nó bỏ qua là khoảng cách của một điểm ở xa, không phải sự tồn tại của điểm đó.

Và có một chi tiết dễ đọc ngược. Khi điểm lạc ở 30, phần của nó trong tổng bình phương tính tại nghiệm chỉ còn 79.2%, thấp hơn con số 98.97% tính tại c = 6. Không phải vì nó bớt chi phối, mà vì nghiệm đã chạy tới gần nó rồi. Cuộc chạy theo đó chính là thiệt hại, không phải bằng chứng ngược lại.

Khi n chẵn, nghiệm của trị tuyệt đối là một đoạn

Bấm nút n = 4 (chẵn). Dữ liệu thành 4, 5, 6, 8. Trung bình là 5.75, một điểm duy nhất, vì tổng bình phương là hàm lồi ngặt. Nhưng phía trị tuyệt đối thì khác hẳn: hai giá trị giữa56, và mọi hằng số trong đoạn [5, 6] đều cho tổng trị tuyệt đối đúng bằng 5.

Đó là điều đo được, không phải điều suy ra: cổng kiểm lấy 1001 mẫu trải khắp đoạn và độ lệch lớn nhất so với 5 nằm dưới 1e-12. Ra ngoài đoạn một chút thì tổng tăng thật, c = 4.9c = 6.1 đều cho 5.20. Nên đoạn đó là đoạn đóng: hai đầu mút vẫn là nghiệm.

Sim buộc phải chọn một con số để hiển thị, và nó chọn điểm giữa 5.50. Đây là quy ước, không phải chân lý, nên sim ghi thẳng câu đó ra ô kết quả khi n chẵn. Ô kết quả lúc này đọc trung bình = 5.75, trung vị = 5.50, MSE = 2.19, MAE = 1.25, n = 4. Con số 2.19 là bản làm tròn hai chữ số của 2.1875.

Còn một chỗ nữa dễ nói quá. Điều kiện đúng không phải "n chẵn" mà là "n chẵn hai giá trị giữa khác nhau". Trên 61 vị trí thanh kéo ở chế độ n = 4, có 60 vị trí cho một đoạn thật và đúng một vị trí không: khi điểm di động đặt ở 5, dữ liệu thành 4, 5, 6, 5, hai giá trị giữa trùng nhau ở 5, và đoạn co về một điểm. Bề rộng đoạn quét được trên lưới chỉ nhận ba giá trị 0, 0.51.

Trị tuyệt đối không khả vi tại 0

Nếu trị tuyệt đối bền hơn với điểm lạc thì vì sao bình phương vẫn là mặc định ở gần như mọi nơi? Câu trả lời nằm ở chỗ tối ưu, và nó cũng đo được.

Xét khung mở đầu với dữ liệu 4, 5, 6, 7, 8 và trượt hằng số c quanh 6, tức quanh một giá trị có điểm dữ liệu. Đo hai độ dốc một phía của MAE:

  • bên phải là +0.20
  • bên trái là -0.20
  • bước nhảy giữa hai bên là 0.40

Điều quyết định không phải hai con số đó mà là bước nhảy không teo đi khi bước thử nhỏ lại. Đo ở bốn bước 1e-2, 1e-4, 1e-61e-9 thì bước nhảy của MAE vẫn là 0.40 ở cả bốn. Cùng bốn bước đó, bước nhảy của MSE co lại cỡ hai lần bước thử, và ở bước 1e-9 nó bằng đúng 0. Một bước thử duy nhất không phân biệt được hai hàm; bốn bước thì phân biệt được.

Mỗi điểm dữ liệu đóng góp một góc gấp, nên đường MAE không phải một chữ V trơn mà là một chuỗi đoạn thẳng nối nhau, năm góc cho năm điểm. Ngay tại nghiệm tối ưu thì đạo hàm không tồn tại, còn MSE có đúng một độ dốc ở mọi chỗ và độ dốc đó tiến về 0 một cách trơn khi tới nghiệm.

Đó là lý do thực dụng khiến bình phương phổ biến dù nó nhạy với điểm lạc: nó cho gradient ở mọi nơi, kể cả ở đáy. Tối ưu trị tuyệt đối không phải bất khả thi, chỉ là cần công cụ khác, ví dụ dưới gradient hoặc quy hoạch tuyến tính. Sim này chỉ chứng minh cái góc gấp; nó không chạy thuật toán huấn luyện nào, nên đừng đọc nó như bằng chứng về tốc độ hội tụ.

Trung bình so với tổng: chia cho n để làm gì

Cho tới đây bài dùng lẫn "tổng" và "trung bình". Chỗ khác nhau không phải cosmetic, và sim cho đo trực tiếp.

n = 5, tổng bình phương là 10MSE2. Bấm sang n = 4, tức bỏ một điểm nền: tổng bình phương giảm xuống 8.75, trong khi MSE tăng lên 2.1875. Phía trị tuyệt đối cũng vậy, tổng đi từ 6 xuống 5 còn MAE đi từ 1.2 lên 1.25.

Tổng và trung bình vừa xếp thứ tự hai khung nhìn theo hai chiều ngược nhau. Chỉ một trong hai con số nói được điều ta muốn, và đó là trung bình: tổng nhỏ hơn chỉ vì có ít số hạng hơn.

Dạng gọn nhất của cùng một sự thật là nhân đôi dữ liệu. Lấy đúng năm điểm cũ và ghi mỗi điểm hai lần, thành 10 điểm. Dữ liệu nói y nguyên một chuyện. Tổng bình phương đi từ 10 lên 20, tổng trị tuyệt đối đi từ 6 lên 12, còn MSEMAE không đổi tới từng bit. Một con số đổi khi dữ liệu không đổi thì con số đó đang đo một thứ khác chứ không đo chất lượng của mô hình.

Chú thích về hình vẽ: khung điểm lạc vẽ căn của MSE chứ không vẽ MSE, để hai đường cùng đơn vị với dữ liệu và ngồi được trên một trục dọc. Căn là hàm tăng nên nó không dời điểm cực tiểu, còn mọi con số trong ô kết quả vẫn là MSE.

Mất mát nhỏ hơn không bảo đảm mô hình tốt hơn

Ở trạng thái điểm lạc bằng 30, nghiệm trung bình 10.40MSE = 97.04, còn hằng số 6MSE = 116.40. Trung bình thắng, và nó thắng theo định nghĩa: trung bình là chỗ tổng bình phương nhỏ nhất trên đúng năm điểm này.

Giờ giả sử điểm thứ sáu tới, và nó ở 6 như phần lớn đám dữ liệu. Hằng số 10.40 trả giá 19.36 theo bình phương, còn hằng số 6 trả giá đúng 0. Theo trị tuyệt đối thì 4.4 so với 0. Mô hình có mất mát huấn luyện thấp hơn lại là mô hình tệ hơn trên điểm mới.

Cần nói thẳng phạm vi của ví dụ này. Đây là một điểm giữ lại, một chiều, tính bằng tay ngay trong bài. Sim không có tập kiểm tra, không có vòng huấn luyện, nên nó không chứng minh được bất cứ điều gì tổng quát về khả năng tổng quát hoá, và bài không đòi điều đó. Nếu điểm ở 30 là một số đo thật chứ không phải lỗi nhập liệu thì trung bình mới là câu trả lời đúng, và trị tuyệt đối mới là cái đang bỏ sót thông tin.

Điều chứng minh được thì mạnh theo cách khác: quét toàn bộ 122 cấu hình mà hai núm của khung điểm lạc tạo ra, có 116 cấu hình cho hai nghiệm khác nhau. Nghĩa là "nghiệm tốt nhất" không phải tính chất của riêng dữ liệu. Nó là tính chất của dữ liệu cộng hàm mất mát, và hàm mất mát do bạn chọn.

Sang phân loại thì mất mát nhìn vào xác suất

Khung phân loại đổi bài toán: mô hình xuất ra một xác suất p, nhãn thật là 0 hoặc 1, và mất mát là cross-entropy, tức -log(p) khi nhãn là 1-log(1-p) khi nhãn là 0.

Ở trạng thái mở của khung này, p = 0.50 và cross-entropy đọc 0.69, tức ln 2. Đáng chú ý là bấm nút Nhãn thật ở đúng đây không đổi con số nào, và điều đó đúng chứ không phải núm chết: p = 0.5 là điểm bất động, hai nhãn cho đúng cùng một mất mát. Trượt p đi một bước rồi bấm lại thì hai nhãn tách nhau ngay.

Đường cong bùng nổ khi p tiến về đầu sai. Sim kẹp p trong khoảng (0.01, 0.99) nên đỉnh cột chỉ tới 4.61 thay vì chạy ra vô cực. Cái kẹp đó là quyết định vẽ hình, không phải tính chất của cross-entropy: hàm thật không có trần.

Điều rút ra

Hàm mất mát là quy tắc quy một danh sách sai lệch về một con số để so được, và quy tắc đó là lựa chọn. Một điểm xa gấp k lần góp vào tổng bình phương gấp lần: đẩy điểm lạc từ 8 ra 30 thì phần góp của nó tăng 144 lần và nó chiếm 98.97% tổng bình phương tại c = 6, so với 85.71% tổng trị tuyệt đối. Hậu quả nằm ở nghiệm: nghiệm bình phương là trung bình nên nó dịch 4.40, còn nghiệm trị tuyệt đối là trung vị nên nó dịch 0.00; quét cả thanh kéo, trung bình đi 6.00 và trung vị chỉ đi 1.00. Bù lại, trị tuyệt đối có góc gấp tại mỗi điểm dữ liệu, bước nhảy đạo hàm 0.40 không teo đi ở bốn bước thử liên tiếp, nên nó khó tối ưu hơn, và đó là lý do bình phương vẫn là mặc định. Cuối cùng, chia cho n mới cho một con số so được: bỏ một điểm làm tổng bình phương giảm từ 10 xuống 8.75 trong khi MSE tăng từ 2 lên 2.1875.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Điểm di động đang ở 8 và bạn kéo nó ra 30. Tại hằng số c = 6, phần nó góp vào tổng bình phương thay đổi thế nào?
  2. 2Vẫn kéo điểm đó từ 8 ra 30. Nghiệm tối ưu của hai hàm mất mát dịch bao nhiêu, và điều đó nói gì về việc chọn hàm?
  3. 3Bấm từ n = 5 sang n = 4 thì tổng bình phương giảm từ 10 xuống 8.75 còn MSE tăng từ 2 lên 2.1875. Đọc thế nào cho đúng?