各位大大好,小弟是機器學習的新手,想來請教一個困擾我蠻久的問題
最近在建構LSTM神經網路時,我覺得很納悶,看paper或者Kaggle上面大家分享的kernel時,我每次都很好奇,到底他們是怎麼決定中間的 hidden layer 要放多少層(或者放甚麼類型的layer),還有到底每個 layer 又是如何決定要放多少個?
我上國外的論壇找了一下,感覺這個問題目前好像並沒有一個比較好的方法論去參照,不少人給的建議都比較偏向於:
「去看類似問題的paper是怎麼處理的,再拿他的架構來微幅調整,或者還有人說用直覺XD」(這邊講的不是只有一層 hidden layer 的情況,只有一層我是有看到如下圖的方式找解)
所以我想問,一般業界內有沒有甚麼方法或者說小技巧去做模型架構的設計呢?
謝謝~
閒聊,關鍵其實不是你講的那些參數,
而是模型在 testing data 上面的表現到底怎麼樣?(這是一句幹話)
理論上,我說理論上,隱藏層越多越好啊、神經元越多越好啊,但跑得動嗎?
同時還得考量若要達到特定數字的epoch所耗的時間喔~
機器學習的本質,在於探索某個特定範圍的變數,
然後嘗試找出最佳的參數,好讓 training data 的正確率趨近100%,或誤差接近0。
再運用相同的模型去看 testing data 有沒有相同的效果,是否過擬。
但在做上面這件事情時......
機器學習本身你所採用的那個學習方法,所使用的參數內容,卻是你給定的。
所以這邊延伸出一件很哲學的事情:
是不是應該弄一套更大的機器學習,去決定一套機器學習的參數該如何訂定?
是不是應該弄一套又更大的機器學習,去決定那套更大的機器學習的參數如何訂定?
所以你就知道,這種層層堆疊的「尋找最佳參數」的過程,是無止盡的,
換句話說,在硬體技術有更顯著的突破之前,這個哲學議題是大哉問,無解的。
話說回來,目前實務上了不起能做到的,是讓機器學習自己本身嘗試不同的參數,
最後將所有的結果做比較之後,返回一個最佳設定的機器學習參數,
同時告訴你這參數之下,在該份data的最佳模型(參數)是什麼。
但縱使如此,我們也只會嘗試某幾個特定的數字,
例如隱藏層跑[3,4,5]層、神經元跑[2,3,4,5,6]個,之類的,
但光是如此,那個運作時間就已經是會跑到懷疑人生的狀態。
所以應該這樣問,在你已經用極短的時間嘗試出90%的模型正確率時,
你還願意花上200倍的時間,去增加僅僅1%的正確率嗎?
這是邊際效益的問題,也是沒有人去做「尋找最佳參數」的原因。
那到底第一時間拿到資料到底該用什麼參數?直覺之外,就剩下經驗累積了吧。
是不是應該弄一套更大的機器學習,去決定一套機器學習的參數該如何訂定?
是不是應該弄一套又更大的機器學習,去決定那套更大的機器學習的參數如何訂定?
這是不是前一段時間google 做的 autoML 在做的事情 ? XD
看完這篇,我覺得幾乎跟國外網路上看到的文章都好類似哈哈
謝謝哥 !
免客氣就是同行閒聊罷了~
講起來有點不太一樣,我說的那兩段話,毫無商業利益可言,開發起來曠日廢時(甚至花大錢),改善幅度也很有限;AutoML確實是有點類似的概念,只是它更講究運用在實際大家常用到的領域,並包裝成一個「看起來很厲害」的商品。
嗯...我想說的是google畢竟還是一個營利單位,而不是像NASA這種國家單位,在商言商的狀況下,通常還是商業利益考量,並試圖讓自己的開發成為一個可以銷售的商品。但可參考2018驚艷大家的Duplex在一年之後,也不過只還是這種程度,所以對於聲稱AI或ML有多麼威能...實際到底能做到什麼地步,坦白說我態度是很保守的。
尤其自己身在這個領域(你繼續做下去就會更明白我想說的),很多時候根本還開發不到一半,老闆啦、投資者啦,就已經在問商品要訂多少錢了,而自己甚至還無法想像這商品能有開發完成的一天......