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

Sigmoid và phân loại logistic

Kéo trượtTính lại thậtTrực giác hình học

Sigmoid và phân loại logistic

Trượt trọng số và bias để nắn đường cong sigmoid rồi dời ranh giới quyết định.

Một mô hình phân loại phải trả lời câu hỏi có hay không, nhưng phép tính bên trong nó lại cho ra một số thực chạy từ âm vô cùng tới dương vô cùng. Sigmoid là cái cầu giữa hai thứ đó: nó ép mọi số thực về khoảng (0, 1) để đọc được như một xác suất, rồi ngưỡng 0.5 biến xác suất thành nhãn.

Trượt trọng số cho đổi độ dốc, trượt bias cho dời chỗ mà xác suất bằng 0.5, rồi xem từng điểm đổi màu theo lớp dự đoán. Mười điểm dữ liệu trong sim là cố định: năm điểm bên trái thuộc lớp 0, năm điểm bên phải thuộc lớp 1.

Sigmoid và phân loại logistic · trượt trọng số và bias
w = 1.00b = 0.00ranh giới: 0.00đúng 10/10
00.51xranh giớix=-4.4, lớp thật 0, xác suất 0.010.01x=-3.2, lớp thật 0, xác suất 0.040.04x=-2.1, lớp thật 0, xác suất 0.110.11x=-1.3, lớp thật 0, xác suất 0.210.21x=-0.5, lớp thật 0, xác suất 0.380.38x=0.5, lớp thật 1, xác suất 0.620.62x=1.3, lớp thật 1, xác suất 0.790.79x=2.1, lớp thật 1, xác suất 0.890.89x=3.2, lớp thật 1, xác suất 0.960.96x=4.4, lớp thật 1, xác suất 0.990.99lớp 0lớp 1

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

Mặc định w = 1b = 0. Ranh giới quyết định nằm ở x = 0.00, và cả 10 trên 10 điểm được phân loại đúng. Xác suất đọc từ trái sang phải là 0.01, 0.04, 0.11, 0.21, 0.38, 0.62, 0.79, 0.89, 0.96, 0.99.

Hai điểm trong cùng đáng nhìn hơn cả. Điểm x = -0.5 cho xác suất 0.37754066879814546 và điểm x = 0.5 cho 0.6224593312018546. Cộng hai số đó lại được đúng 1, và đó không phải trùng hợp: sigmoid thoả sigmoid(-z) = 1 - sigmoid(z), nên hai điểm đối xứng qua ranh giới luôn có xác suất bù nhau. Cả hai vẫn được phân loại đúng, chỉ là mô hình không dám chắc lắm, và sự không dám chắc đó là thông tin chứ không phải khuyết điểm.

Ranh giới nằm ở đâu, và vì sao nó là -b/w

Sigmoid bằng 0.5 đúng khi đối số của nó bằng 0. Đối số ở đây là w·x + b, nên ranh giới là nghiệm của w·x + b = 0, tức x = -b/w. Ở trạng thái mở đầu b = 0 nên ranh giới trùng gốc toạ độ.

Điều này giải thích phân công giữa hai núm. Bias dời ranh giới mà không đổi độ dốc, vì nó chỉ cộng một hằng số vào đối số. Trọng số vừa đổi độ dốc vừa dời ranh giới, vì nó nằm ở mẫu số của -b/w. Muốn dời riêng ranh giới thì kéo bias, đó là việc của bias.

Dốc hơn không có nghĩa là đúng hơn

Đây là chỗ dạy đáng giá nhất của bài, và nó cần một con số để nói cho rõ. Hãy đo bề rộng dải chuyển tiếp, tức khoảng cách theo trục x giữa chỗ xác suất bằng 0.01 và chỗ nó bằng 0.99. Bề rộng đó bằng 2·ln(99)/|w|, và ở w = 1 nó là 9.19023970026918.

Tăng trọng số thì dải hẹp lại đúng theo tỉ lệ nghịch: 9.19w = 1, 4.60w = 2, 3.06w = 3, tức mốc cao nhất của thanh kéo. Đường cong dựng lên, và trông như mô hình đang trở nên dứt khoát hơn.

Nhưng dứt khoát không phải là đúng. Ở w = 3, điểm x = 0.5 vẫn chỉ đọc 0.82 chứ không phải 1.00, nên ngay tại mốc cao nhất của thanh kéo đường cong vẫn còn mềm ở giữa. Và một hàm bậc thang thật thì cần trọng số vô cùng: đẩy w lên 1000, dải chuyển tiếp co lại còn 0.009190239700269177, nhỏ nhưng vẫn khác 0.

Chỗ đáng lo hơn là khi bias đẩy ranh giới sang chỗ sai. Với w = 1b = 3, điểm x = -0.5 vốn thuộc lớp 0 lại nhận xác suất 0.92 cho lớp 1. Với w = 2b = 6, cùng điểm đó nhận 0.99. Mô hình chắc chắn 99 phần trăm vào một câu trả lời sai, và nó chắc chắn hơn chính vì trọng số lớn hơn. Độ tự tin của mô hình đo độ dốc của đường cong, không đo chất lượng của câu trả lời.

Khi trọng số bằng 0 thì không còn ranh giới nào

w = 0 là một ca biên thật, không phải trường hợp bệnh lý cần tránh. Lúc đó w·x + b không phụ thuộc x nữa, nên mọi điểm nhận cùng một xác suất. Ở w = 0b = 0 cả mười điểm đều đọc 0.50, và sim báo ranh giới là không có thay vì bịa ra một con số.

Bề rộng dải chuyển tiếp ở đó là vô cùng, đúng theo công thức 2·ln(99)/|w| khi |w| bằng 0. Về số điểm đúng, ngưỡng 0.5 là lấy bằng nên 0.50 được xếp vào lớp 1, và mô hình đúng 5 trên 10, tức đúng đủ năm điểm thuộc lớp 1. Không cấu hình nào có w = 0 làm tốt hơn năm điểm, dù bias có bằng bao nhiêu.

Đổi dấu trọng số thì tệ hơn cả vô dụng. Với w = -1b = 0, ranh giới vẫn ở x = 0 nhưng mô hình sai cả 10 trên 10, và các xác suất đúng là ảnh gương của trạng thái mở đầu.

Đếm số điểm đúng không chọn được đường cong

Trạng thái mở đầu đã đúng cả mười điểm, nên không cấu hình nào vượt được nó. Nhưng trên toàn bộ lưới thanh kéo, tức w từ -3 tới 3b từ -6 tới 6 với bước 0.1, có 7381 cấu hình, và 465 trong số đó cũng đạt 10 trên 10.

Bốn trăm sáu mươi lăm đường cong rất khác nhau cùng có một số điểm đúng. Nghĩa là nếu bạn chỉ đếm số điểm đúng thì bạn không có cách nào chọn giữa chúng, và đó chính là lý do hàm mất mát của phân loại logistic dùng xác suất chứ không dùng số điểm đúng. Một đường cong đặt ranh giới sát ngay cạnh một điểm dữ liệu vẫn đếm đủ điểm đúng, nhưng nó mong manh; hàm mất mát nhìn thấy sự mong manh đó, còn phép đếm thì không.

Vì sao cần xác suất chứ không chỉ cần nhãn

Nếu chỉ cần nhãn thì cắt thẳng ở một ngưỡng trên w·x + b là xong, khỏi cần sigmoid. Xác suất mua thêm được ba thứ mà một cái ngưỡng không cho.

Thứ nhất, nó cho biết mô hình đang chắc hay đang lưỡng lự, nên bạn có thể để dành các ca lưỡng lự cho con người xem lại. Thứ hai, nó cho một hàm mất mát trơn và khả vi, tức huấn luyện được bằng gradient, còn phép đếm nhãn thì bậc thang và không có gradient để đi theo. Thứ ba, nó cho phép dời ngưỡng sau khi huấn luyện: cùng một mô hình, hạ ngưỡng xuống thì bắt được nhiều ca lớp 1 hơn và cũng báo sai nhiều hơn, và bạn chọn điểm đánh đổi theo việc của mình chứ không phải theo mặc định 0.5.

Hai công thức sigmoid, và chỗ chúng không bằng nhau

Sách nào cũng viết sigmoid theo một trong hai dạng, 1/(1 + e^-z) hoặc e^z/(1 + e^z). Về đại số chúng bằng nhau tuyệt đối. Về số học dấu phẩy động thì không.

Tại z = -1e-16, hai dạng cho hai kết quả lệch nhau 5.551115123125783e-17, đúng một đơn vị cuối ngay dưới 0.5. Khe lệch đó nhỏ tới mức không ai nhìn thấy trên hình, nhưng nó tồn tại, và nó là lý do các thư viện thật chọn dạng theo dấu của z thay vì dùng một dạng cho mọi trường hợp.

Còn hai mốc nữa đáng biết. Sigmoid tròn hẳn lên 1 từ z = 37: 1 - sigmoid(36) vẫn còn dương và bằng 2.220446049250313e-16, nhưng 1 - sigmoid(37) đúng bằng 0. Từ mốc đó trở đi mọi thông tin về việc điểm nằm xa ranh giới bao nhiêu đã mất, không phải vì mô hình mà vì số thực 64 bit hết chỗ. Và Math.exp tràn khi đối số vượt 709.782712893384, nên một cài đặt viết thẳng 1/(1 + Math.exp(-z)) sẽ chết ở z âm rất lớn trong khi giá trị đúng chỉ đơn giản là 0.

Điều rút ra

Sigmoid ép mọi số thực về (0, 1) để làm xác suất, và ranh giới nằm đúng ở x = -b/w, tức nơi xác suất bằng 0.5. Trọng số điều khiển độ dốc: dải chuyển tiếp rộng 2·ln(99)/|w|, hẹp lại từ 9.19w = 1 xuống 3.06w = 3. Nhưng dốc hơn chỉ là tự tin hơn, không phải đúng hơn: với w = 2b = 6 mô hình chắc 0.99 vào một câu trả lời sai. Và vì 465 trong 7381 cấu hình cùng đạt 10 trên 10, đếm số điểm đúng không chọn được đường cong, nên hàm mất mát phải nhìn vào xác suất.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Ranh giới quyết định của phân loại logistic nằm ở nơi xác suất dự đoán bằng bao nhiêu?
  2. 2Tăng trọng số w từ 1 lên 3 thì điều gì xảy ra với dải chuyển tiếp, tức khoảng x giữa chỗ xác suất bằng 0.01 và chỗ bằng 0.99?
  3. 3Trên toàn bộ lưới thanh kéo có 7381 cấu hình, và 465 trong số đó phân loại đúng cả 10 điểm. Điều đó nói gì về việc huấn luyện?