信心度與不確定性(confidence and uncertainty)
/ KON-fuh-dunss and un-SER-tun-tee /
信心度,是模型對一個答案有多篤定;不確定性則是它的反面——是它對「自己不知道什麼」的誠實承認。一位明智的專家,在熟悉的領域裡會說「我確定」,而在自己知識的邊緣則會說「我沒把握,讓我查一下」。我們希望模型也這樣:給每一個預測都繫上一個有意義的「疑慮」度量,好讓下游的人或系統知道:什麼時候該靠上去,什麼時候該退一步。
把不確定性分成兩類會很有幫助。一類源自世界中真實存在的隨機或雜訊,再多資料也消不掉——一張模糊的照片,本身就是含混的(這叫「偶然不確定性」)。另一類則源自模型自身的無知:它沒見過足夠多像這一個的例子,多給些資料會有幫助(這叫「認知不確定性」)。這一區分很實用:前者你只能與之共處,後者你可以靠收集更多、或不同的資料來減小。估計不確定性的方法包括:訓練一群模型組成的「集成」,看它們在哪裡意見相左;或採用貝氏方法,把模型參數本身也當作不確定的。
這之所以要緊,是因為在高風險場景裡,一個不帶「自身可靠性意識」的數字是危險的。一個知道自己何時心裡沒底的醫療或自動駕駛系統,能轉交人類、要求再做一項檢查、或放慢速度——這是一個模型所能擁有的、最有用的單一安全行為。誠實的告誡是:模型原始的信心度(它吐出來的那個softmax機率)並不等於「有根有據的不確定性」。深度網路經常自信地犯錯,在那些與訓練資料不像的輸入上尤其如此;所以,好的不確定性估計是一個活躍的、尚未解決的問題,而不是一個你讀一眼就有的、免費的輸出。
把同一個模型用同樣的資料、以不同的隨機初始化訓練五份(這叫「集成」)。對一張尋常的照片,五個都一致說「貓」——不確定性低。對一張古怪、模糊的圖,兩個說「貓」、兩個說「狗」、一個說「狐狸」——這種意見高度分歧,標示著高不確定性,是一個信號:該把這個個案標記出來交人類複核,而不是硬認一個猜測。
「集成」內部的意見分歧,是「模型力有不逮」的一個實用信號。
最危險的失敗模式,是「自信地犯錯」。一個不知道時就說「我不知道」的模型,遠比一個永遠很篤定的模型來得安全。可那個省事的默認做法——把softmax輸出當成機率來讀——給的是信心,而非真正的不確定性。對原始信心度要存疑;真正的不確定性估計,需要刻意的方法與驗證。