所謂集成學習,就是訓練多個機器學習模型,然后組合在一起,讓它們協調工作。
俗話說,人多力量大,機器學習算法也是一樣。
江寒經過一番認真的設計,確定了一個新的網絡拓撲結構。
他從排名4~15的模型里,精心選擇了7種,再加上“唯一優勝者”、“黑馬中等生”、“書呆子”,一共10個神經網絡。
將它們放在一起,簡單地并聯起來,組成了一個整體,然后設計了一個投票程序。
一張手寫數字的圖片輸入網絡后,會同時傳遞給10個神經網絡模型,讓它們各自進行計算,輸出自己的預測結果。
如果大家的判斷完全一致,那自然沒什么問題。
但如果大家意見相左,就會啟動投票程序,根據票數來決定最終的輸出。
票數并不是平均分配的,在驗證集上表現更好的模型,手里的選票也應該更多。
所以,理所當然的,“唯一優勝者”擁有最多的票數。
如果他全票投給自己,那么一般來說,他的意見就基本上接近正解,理應得到采納。
這種情況下,其他模型就算有不同意見,而且全都統一口徑,也不應該推翻優勝者的判斷。
這就好比領導班子開會,不能光講民主,還得適當集中……
但很多時候,優勝者對自己的判斷,也并不是十分有把握,這個時候,其他“學生”給出的答案,就很有參考意義了。
如果其他人中,有人認為答案是另一個,并得到了多數人的支持,那么就會對優勝者的答案進行“彈劾”。
如果優勝者投給自己的票數,并不足以駁回大家的“彈劾”,那么就會少數服從多數,將最后輸出修改為受到更多人認同的。
舉例來說,剛才的那個數字5。
優勝者判斷有60%的概率是6,37%的概率是5,2%的可能性是其他數字,這個時候,它就會輸出錯誤的答案:6。
但如果在其他“學生”中,有人經過計算,認為答案應該是5,與優勝者判斷不一致,就會啟動投票程序。
由于優勝者判斷只有60%的概率是數字6,折算后,等于它只肯為自己的答案投6票。
這個時候,只要其他9個模型的票數,加一起超過6票,即可彈劾成功。
如果優勝者對自己的判斷,有90%以上的把握,那么其他9個人加起來,也不足以推翻他的結論。
意思就是這么個意思,具體的折算比例,當然不會這么簡單。
還需要十分細致、耐心地進行調整,以使整個模型的輸出,更加接近最優解。
當然,這種投票式的做法,無疑也有極小極小的可能性,產生不那么美好的結果。
比如,優勝者本來的判斷明明是正確的,只是對自己信心不夠充足,也有可能被其他模型給“糾正”成錯誤的。
但這種情況發生的幾率,遠遠小于優勝者誤判的幾率。
所以,集成學習的總體性能,仍然領先于每一個單獨的神經網絡。
這種集成學習的思想,無疑是比較先進的,但實現起來難度也相當大。
尤其是那個投票程序,相當耗費腦細胞。
江寒全力開動腦力,也足足用了四個多小時,才將集成學習網絡打造成功。
時間主要浪費在投票程序,折算比例的調整上。
至于10個子模塊,已經全部訓練完畢,就無需再耗費時間訓練了。
也幸虧如此,否則就沒辦法及時提交上去了。
隨后,江寒在最終版本的集成網絡上,重新跑了一遍驗證集。
結果十分喜人,識別準確率達到了驚人的99.62%。
這個成績已經十分令人滿意。
接下來,江寒就按照官網發布的說明,對自己的代碼進行了一點處理。
主要是去掉一些調試語句,再將數據文件的接口,改成主辦方要求的方式。