iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0

前言

5W1H指的是What、Who、Where、When、Why、How。具體來說要使用最佳化演算法前有些因素可以考慮看看,做好規劃後再著手進行調整會是比較有效率的方式。

Why,為甚麼要最佳化?

這問題其實見仁見智,並沒有特定的答案。有些人可能單純想追求更好的效果;有些人可能被指導教授或老闆嫌效果不好;有些人可能開發出很厲害的模型,差臨門一腳就可以做出效能優於其他模型的成果了,於是寄託在最佳化演算法上。
有時候Why也可以考慮為何最佳化?希望達到的效果?對我來說先決定好目標對於後續程式的規畫也會有一個比較清楚的方向~

釐清為何使用最佳化演算法對於各位應用的意義才能更清楚的規畫後續問題。這也是考慮Why的一個思路。
要考慮的重點是為何使用最佳化?最佳化的目標是甚麼?

What,問題是什麼?

既然有要使用最佳化,那代表一定有一個問題,在這個部分我們需要釐清要最佳化的「問題是什麼」?例如在做分類模型,可能要考慮要提升整體的準確性,或者只需要提升模型計算的速度但可能需要犧牲一點準確性?又或是我全都要,這也是一個選項,但如果考慮全都要的話那問題就勢必會變得複雜。

所以在要最佳化前我們必須確定需要最佳化的問題是什麼,接著要考慮的是要找出最大值或者最小值。這點也很重要,因為準確率是要盡可能越大越好、但像迴歸模型的誤差應該是要越小越好。所以要將問題找出最佳化的方向也是其中一個考慮因素。

What就是要找出要最佳化的問題,以及最佳化的方向,具體目標可以在Why環節中思考。

Who,誰來做?

這問題很簡單,誰來做?當然是各位來做啦XD

不過另一方面要考慮的問題是,要優化的對象有誰,要考慮的因素有什麼。例如今天是生成對抗網路,但生成器效果一直不怎麼樣這是就要考慮來最佳化生成器,反之亦然。接著要考慮的就是要考慮的因素,例如AI模型通常都要調整網路層的層數、學習率、神經元數量等。

Who是要考慮最佳化的對象是誰(不過通常都是一個系統或者一個模型,所以對象理所當然就是那個系統或者模型),以及會影響最佳化對象的因素是什麼。

Where,要考慮的因素在哪裡?

這聽起來有點抽象,但我的想法是將要考慮的那些因素的範圍當作Where,也就是說要從哪個範圍找出最佳解。這麼做的用意是如果今天求解的範圍太廣大那一定會花比較多時間才能找到比較好的解,那如果在事前可以先規劃好那些影響因素的範圍的話,那就可以大幅提升程式執行的效率。

舉個例子。假如今天如果要以學習率的調整當作深度學習模型最佳化調整的因素的話,學習率通常會設定10^-5~10^-2這個範圍,其實差了三個數量級其實已經蠻廣了。如果以上述的範圍當做求解範圍的話或許程式計算的時間不會那麼長,也可以得到不錯的結果。但如果今天範圍設定10^-10~100的話,那就是比較不建議的範圍,今天如果演算法把學習率=100帶入模型進行訓練的話,不用想也大概猜得出會發生什麼事。

所以求解因素的範圍可以先大概抓一下範圍,真的沒想法再從比較廣的範圍找出效果會比較好的那個區間再從那個區間再來最佳化都可以。

Where主要就是希望在求解最佳化前可以先決定好問題因素的求解範圍。

When,何時才能用最佳化演算法?

接下來我們要考慮要甚麼時候使用最佳化演算法,總不可能一切都模糊不清的情況下就隨便使用吧。所以使用最佳化演算法通常的時機,對於我來說會是在以下三個時機以後:

  1. AI模型完成後,確定執行沒有噴錯誤,且結果基本上是沒有問題的,具有一定可行性。
  2. 其他考慮的因素都已經規劃好了,例如要調整的項目,調整的範圍等。也就是What、Who、Where的問題都解決了之後。
  3. 程式中有把紀錄程式結果的部分已經撰寫完畢而且確定沒問題。

第三點是對於我來說我認為是很重要的一個部分,因為每次程式執行帶進去的超參數可能不同,而且結果也勢必會有差異。這時候就要有程式負責把那部分的資料記錄下來,也方便日後分析相關性等,而且也要注意檔案名稱會不會沒設定好不小心複寫掉!!我曾經不小心沒設定好檔案名稱而造成跑完所有結果但只有一個檔案==。

另外有一個小細節可以供各位參考,通常可以設定跑2~3個迭代確定程式沒有問題、檔案不會被複寫、資料都有成功保存。確定真的萬事具備了以後再跑更多次的迭代。

When就是要在萬事俱備只欠最佳化的情況下再使用,雖然聽起來很簡單但偶爾寫程式就是難免會有一些漏洞,如果最佳化跑了一段時間後才發現漏洞那就浪費了很多時間了。

How,如何使用最佳化演算法?

通常在測試前我們不太會知道哪個演算法最適合自己,所以基本上會進行多方嘗試,再去比較性能。

接著如何具體使用這些演算法在後續我會花很多篇幅向各位介紹,敬請各位期待啦~

How就是要確定如何實際寫出程式來,這部分會在後續詳細介紹~

結語

今天講了很多東西,文字量爆棚。但希望各位可以在使用最佳化之前先清楚的考慮好一些規劃,這可以使各位的程式開發時間縮短也能夠助於程式的執行效率跟提升結果的效能,因為有時候模型訓練一次就要花很多時間,套用最佳化跑很多次只會花費更多時間,所以程式執行效率跟避免浪費時間是必須首要考慮的點。

接下來我會帶各位正式進入最佳化演算法的世界,希望各位學成之後能夠對你的模型優化帶來幫助。


上一篇
[Day 1]關於這次鐵人賽…前言以及規劃
下一篇
[Day 3]當今的最佳化手段有甚麼?
系列文
調整AI超參數好煩躁?來試試看最佳化演算法吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言