在程式開發中,對於程式的品質非常重要,我們有各個種測試方式測試,最常用的就是單元測試(Unit test)。但是機器學習沒有這樣的機制,只能用直接輸入數據,直接觀察,這時候「數據的依賴性」(Data Dependencies)就很重要了!
文章:Data Dependencies
在進行模型的建置,對於數據的依賴性跟程式碼一樣,但是沒有程式碼的單元測試,可以讓資料穩定、獨立,不受其他資料影響。因此機器學習中,有幾個數據的特點需要注意與反思:可靠性、數據版本、必要性、相關性、回饋環
-
可靠性(Reliability):數據資料的正確性,是否有達到100%
- 可靠性包含:每次數據產生的時候,都會有相同的資料嗎?當我們要重新測試或是驗證時,資料會如先前產生的一樣嗎?
- 為了避免這種事發生,我們可以設計一個訊號,當他資料會是正常的時候,使用這個訊號,否則就是反面的訊號。這樣可以正確的時機使用這個模型。
-
數據版本(Versioning):數據資料是否會隨著時間改變
- 我們的資料從上游過來,是否會因為時間而改變。如果這樣改變的話,我們不能直接使用,必須製作出各種版號,然後逐一訓練與測試。如果都是以當下為主,可能當下資料不完整,而導致模型有偏差。
- 為了避免這樣事情發生,我們可以記錄某個階段的資料,用這些資料進行測試或是訓練。
-
必要性(Necessity):這些資料參數是否必要的
- 我們在訓練模型的時候會使用為數不少的參數,但我們這些參數都是必要的嗎?
- 有些參數在前期具有很大影響力,但是後期卻幾乎沒有影響,如同經濟學上的「邊際效益」。當超過一個數量之後,獲得的利益會減少,例如肚子餓吃飯,一開始很有滿足感,但是吃飽後,那個滿足的幸福感會直線下降,甚至到零(有就是吐或吃壞肚子)。參數也是如此。所以可以考慮刪除這些資料,因為他可能對於這個學習中,沒有什麼意義。
- 當少了一些參數,要參考的值便少,動作變少,效率也許會提昇。
- 但是如參數多,會牽扯的範圍比較大,無論是參數的管理和觀察其因果關係,都會增加成本。而這樣的效果,跟我們的成本是否值得。
-
相關性(Correlations):這些資料是否有因果的相關性
- 當這些數據有因果關係的時候,我們是否要設定策略去紓解這些因果關係?
- 因此隨機的選入這些資料,也是個不錯的方法
-
回饋環(Feedback Loops):當模型A的值出來,是否會影響我的數據
- 這樣說很奇怪,因為模型應該是不會影響數據。就拿文章的例子說明。當有個模型預測股票,而其中有點bug,當他買入股票的時候,只有一檔股票價格會提高,提高後的股票數據會影響下一個步驟或是模組的輸入值,因為輸入值已經被提高了,這樣就是一個影響的「回饋環」。
- 但為什麼會有這樣情況呢?我們要增加模型的泛用性,會讓數據的輸入從某個模組產生,這樣就會造成相互影響。
睫毛之聲:
當我們要使用數據的時候,要考量這些點,確認我們的資料有避免這些現象,或是符合設些現象。就像是做化學實驗時的實驗組與對照組,要讓參數變少、依賴性變少,單純一點可以比較好掌控這些變化。否則的話成本會很高,而這樣的成本是否自己可以負荷?