iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 16

【Day 16】深度學習(Deep Learning)--- Tip(一)

深度學習流程

我們知道深度學習是三個步驟,首先定義一個function set和structure,之後決定Loss function,接著就可以用Grandient Descent去做最佳化。
做完這三個步驟之後就會得到一個訓練好的Neural Network,然後你要去看這個Neuron Network在你的訓練資料上有沒有得到好的結果,如果沒有,就要回去三個步驟中做修改,讓你在訓練資料上得到好的結果。
接著就要去看你的模型在測試資料上有沒有得到好的結果,如果沒有,就代表發生了Overfitting,那就要回去三個步驟中做修改,要注意的是,修改完之後要再去看在訓練資料上得到的結果還是不是好的。

不是所有不好的結果都是Overfitting

並不是所有在測試資料上得到不好的結果都是Overfitting,也有可能是因為在訓練的時候沒有訓練好才導致結果不理想,因此只要對模型有修改,就要回去看在訓練資料上是不是有得到好的結果。

用不同的方法來解決不同的問題,舉例來說Dropout方法是在測試結果不好的時候使用,如果是訓練結果不好的時候使用只會越訓練越不好。

訓練結果不好

New activation function

  • 架構設計不好
    • 換一個Activation function

假設我們是使用Sigmoid function,從圖中可以發現Deeper不一定代表better,當層數越來越多,準確率一開始持平最後往下掉,但這不是Overfitting,因為這是在訓練資料上得出的結果,所以是模型訓練壞了。

Vanishing Gradient Problem

而會這樣的原因是當你的Network很深的時候,在靠近輸入的地方Gradient很小,而在靠近輸出的地方Gradient很大,如果設定同樣的Learning rate,靠近輸入的地方參數更新就會很慢,靠近輸出的地方參數更新則會很快,就會產生輸入還是幾乎隨機的時候,輸出已經收斂了,就會以為是找到Local minimum。

從直覺上來講,我們知道某一個參數 https://chart.googleapis.com/chart?cht=tx&chl=w 對total cost https://chart.googleapis.com/chart?cht=tx&chl=C 的偏微分,可以理解成當我把某一個參數做小小的變化,它對這個cost的影響如何,以此決定這個參數的Gradient的值有多大。
於是我們就可以把第一個layer裡面的某一個參數加上 https://chart.googleapis.com/chart?cht=tx&chl=%5CDelta%20w,然後看它的輸出跟它的目標之間的Loss有甚麼影響。

從圖中可以看到,如果 https://chart.googleapis.com/chart?cht=tx&chl=%5CDelta%20w 很大,通過Sigmoid function之後輸出會變小。

也就是說在輸入的地方改參數,對輸出的變化其實是很小的,對cost的影響也很小。


參考資料

李宏毅老師 - ML Lecture 9-1


上一篇
【Day 15】反向傳播(Backpropagation)
下一篇
【Day 17】深度學習(Deep Learning)--- Tip(二)--- ReLU
系列文
30天搞懂機器學習是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言