過去那一段時間,直到感受做不出明確的實作成果,和夥伴才意識到題目有問題。
經驗整理一下,或許可以用幾個面向來決定我們的題目:
連續型資料v.s離散型資料
這取決於你想要的是一個數值結果,還是Yes or No 的答案。
數值的結果基本上會是一種連續型的資料,譬如說預測老闆明天會幾點進辦公室,可能9:01分,可能九點02分,或者9點03分。
更精準的數值,也許是9:01:00,也許是9:01:01,甚至9:01:01.234等等,換而言之這就不會有標準答案,我們只需要的一個可以接受範圍內的答案。
或者預測房屋總價,假設有個物件在800萬上下,802萬,805萬,820萬等等其實意義不大,我們只是需要個大概的價錢。
一方面,因為是數學公式運算,得到的解若非精準一模一樣,在數學上就是不正確,因此這種題目的答案可以說一開始就沒有完美解答,只有誤差範圍在一定的程度之下的答案。
離散型的答案,譬如說對/錯、是/否、貓/狗辨識等等,彼此個體差異有明確的界線,比起數值的加減乘除,你在意的是能夠分界的參數。
這兩種不同性質的結果,會影響到參數的取用,以及模型的選定。
範圍越大,問題會越複雜,所需要的參考參數也會越多,甚至會需要因應不同的情境而調整(換句說問題複雜到考慮各種情境)。
而一個參數,就可以想像成一個維度,試想人類生活在3維空間,感受到4維的流動(時間),4維以上已經無法用圖像表示模型的運作處理,只能用數學表示,可知道對於理解的直覺上會有諸多不便。
因此題目的大小,一方面可以用需要選用參數多寡,作為檢視題目難易的一種參考依據。
題目可以是開放式的問題,或者天馬行空的想像,不過答案越肯定與切確越好,最好每個人聽到這個問題都有共同的認知與定義,ML才越有機會做下去。
舉例來說,題目定義「抓出違反交通規則的行為」,什麼是違反交通規則?答案無法在短時間得出,而且有模糊邊界,答案基本上有分歧的狀況之下,這個題目有非常高的複雜度。
但是題目簡化一下,變成「抓出闖紅燈的行為」,問題簡單多了吧?不過也因此我們當初太大意了,認為這樣的題目已經簡略到可以處理,其實卻還是太過攏統。
闖紅燈也許是汽車、機車、腳踏車、行人、甚至一隻狗、另外是不是要排除救護車、警車、消防車的通過,通過兩個直線的紅燈才是我們關心的問題,或者違規在紅燈時迴轉,也是我們關心的問題呢?
諸如此類,題目能夠精簡,入門的障礙在開始之前就能夠排除一大堆。
當然就會開始碰到現實面的問題,太簡單的問題,對商業產出是否有意義呢?是否能夠說服你的老闆進行項目?
以貓狗辨識來說,這世界上有貓有狗,進行ML就不太困難。
但你要預測世界有沒有外星人,或者經過幾年後,我們會跟外星人有一次清楚的文明交流,問題就相當困難。
現實層面上,你要預測電商每天會有多少訂單量,比起預測明年雙11辦活動的時候,會有多少訂單量還來得容易。
每天的訂單量在你每次訓練完模型,或者參數調整完,馬上就可以驗證與調整。
辦活動的訂單量卻在明年活動結束之前,都不知道結果如何。
我們常說機器學習,就是一直在訓練模型,所謂「訓練」真的不是隨便說說而已,需要反覆進行無數次的調整,要怎麼調整又是基於前次的不好而改變,如果不知道結果好壞,又該如何調整?
所以基於成本效益,能夠短時間驗證我們訓練結果的題目才是好題目,如果沒辦法確定的事情,就先放一邊去吧。
又譬如說你想要做一個偵測駭客攻擊的AI模型,除非團隊有能力自行製造情境,否則你怎麼知道駭客什麼時候會來攻擊系統,好驗證你的訓練模型呢?
以上大概是這陣子來的血淚心得,我們的題目在前兩次都選擇不夠好。