'如何優化深度神經網絡?'

人工智能 讀書 AI科技評論 2019-08-07
""如何優化深度神經網絡?

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。

原標題 | Optimization Problem in Deep Neural Networks

翻譯 | Ryan(西安理工大學)、肖書忠(深信服)

編輯 | Pita (注:相關鏈接可點擊閱讀原文訪問)

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。在本文中,我將會探索這項任務中最常見的問題及其解決方案。這些任務中包括網絡訓練時間過長,梯度消失與爆炸,還有網絡初始化方法等問題,這些我們在此統稱為優化問題。至於其餘在訓練網絡中出現的問題則認為是正則化問題,我在之前的文章中已經討論過了。如果你現在並沒有閱讀過它,請先閱讀前文:

Improving Deep Neural Networks (https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336)

輸入數據 標準化

當我們在訓練神經網絡時,我們可能會注意到模型訓練的時間比預期的要久。這是因為輸入數據沒有進行標準化,讓我們嘗試通過下方僅有兩個特徵的輸入數據來理解標準化的含義。

"如何優化深度神經網絡?

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。

原標題 | Optimization Problem in Deep Neural Networks

翻譯 | Ryan(西安理工大學)、肖書忠(深信服)

編輯 | Pita (注:相關鏈接可點擊閱讀原文訪問)

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。在本文中,我將會探索這項任務中最常見的問題及其解決方案。這些任務中包括網絡訓練時間過長,梯度消失與爆炸,還有網絡初始化方法等問題,這些我們在此統稱為優化問題。至於其餘在訓練網絡中出現的問題則認為是正則化問題,我在之前的文章中已經討論過了。如果你現在並沒有閱讀過它,請先閱讀前文:

Improving Deep Neural Networks (https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336)

輸入數據 標準化

當我們在訓練神經網絡時,我們可能會注意到模型訓練的時間比預期的要久。這是因為輸入數據沒有進行標準化,讓我們嘗試通過下方僅有兩個特徵的輸入數據來理解標準化的含義。

如何優化深度神經網絡?

在原始數據中,數據的X軸(特徵X)取值區間為5-50,Y軸(特徵Y)取值區間為3-7。另一方面,在標準化後的數據中,X軸取值區間時-0.15~0.15, Y軸的取值區間時-1.5~1.5。

通過標準化數據,我們縮放後的特徵值範圍與原始數據類似:而標準化數據只需要兩步過程。

通過將數據減去其均值,使得數據的均值為0,並讓其除以其方差,得到標準化數據。

mu = np.mean(X)X = X - mu
sigma = np.linalg.norm(X)X = X/sigma

這裡有一點需要注意,我們需要使用同樣的均值和方差去轉換我們的測試數據,因為我們想用同樣的方法來縮放它們。

為什麼標準化會起作用呢?

既然我們已經知道了如何標準化數據集,那麼讓我們試著理解為什麼標準化適用於下面的示例。下面是代價值J,權重W和偏差b之間的等高線圖。中心表示我們必須達到的最小代價。

"如何優化深度神經網絡?

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。

原標題 | Optimization Problem in Deep Neural Networks

翻譯 | Ryan(西安理工大學)、肖書忠(深信服)

編輯 | Pita (注:相關鏈接可點擊閱讀原文訪問)

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。在本文中,我將會探索這項任務中最常見的問題及其解決方案。這些任務中包括網絡訓練時間過長,梯度消失與爆炸,還有網絡初始化方法等問題,這些我們在此統稱為優化問題。至於其餘在訓練網絡中出現的問題則認為是正則化問題,我在之前的文章中已經討論過了。如果你現在並沒有閱讀過它,請先閱讀前文:

Improving Deep Neural Networks (https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336)

輸入數據 標準化

當我們在訓練神經網絡時,我們可能會注意到模型訓練的時間比預期的要久。這是因為輸入數據沒有進行標準化,讓我們嘗試通過下方僅有兩個特徵的輸入數據來理解標準化的含義。

如何優化深度神經網絡?

在原始數據中,數據的X軸(特徵X)取值區間為5-50,Y軸(特徵Y)取值區間為3-7。另一方面,在標準化後的數據中,X軸取值區間時-0.15~0.15, Y軸的取值區間時-1.5~1.5。

通過標準化數據,我們縮放後的特徵值範圍與原始數據類似:而標準化數據只需要兩步過程。

通過將數據減去其均值,使得數據的均值為0,並讓其除以其方差,得到標準化數據。

mu = np.mean(X)X = X - mu
sigma = np.linalg.norm(X)X = X/sigma

這裡有一點需要注意,我們需要使用同樣的均值和方差去轉換我們的測試數據,因為我們想用同樣的方法來縮放它們。

為什麼標準化會起作用呢?

既然我們已經知道了如何標準化數據集,那麼讓我們試著理解為什麼標準化適用於下面的示例。下面是代價值J,權重W和偏差b之間的等高線圖。中心表示我們必須達到的最小代價。

如何優化深度神經網絡?

右邊的圖看起來更對稱,這是標準化背後工作原理的關鍵。

如果特徵的範圍差異很大,則不同權重的值也會有很大的差異,並且將花費更多的時間來選擇完美的權重集。然而,如果我們使用標準化數據,那麼權重就不會有很大的變化,我們將在較短的時間內獲得理想的權重集。

此外,如果使用原始數據,則必須使用較低的學習率來適應不同的等高線高度。但是在歸一化數據的情況下,我們有更多的球面輪廓,通過選擇更大的學習速率,我們可以直接達到最小值。

當特徵在相似的尺度上時,優化權重和偏差變得容易。

梯度消失和梯度爆炸

梯度消失和梯度爆炸問題源於權值的初始化。以上兩個問題都導致網絡的訓練不當和較慢。正如他們的名字所暗示的那樣,當權重消失並最終變得太小時,會出現梯度消失;而在梯度爆炸時,權重會爆炸並變得過大。讓我們在一個例子的幫助下更好地理解它們。

設W 是與單位矩陣 I 相近的所有層的權重矩陣。

"如何優化深度神經網絡?

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。

原標題 | Optimization Problem in Deep Neural Networks

翻譯 | Ryan(西安理工大學)、肖書忠(深信服)

編輯 | Pita (注:相關鏈接可點擊閱讀原文訪問)

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。在本文中,我將會探索這項任務中最常見的問題及其解決方案。這些任務中包括網絡訓練時間過長,梯度消失與爆炸,還有網絡初始化方法等問題,這些我們在此統稱為優化問題。至於其餘在訓練網絡中出現的問題則認為是正則化問題,我在之前的文章中已經討論過了。如果你現在並沒有閱讀過它,請先閱讀前文:

Improving Deep Neural Networks (https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336)

輸入數據 標準化

當我們在訓練神經網絡時,我們可能會注意到模型訓練的時間比預期的要久。這是因為輸入數據沒有進行標準化,讓我們嘗試通過下方僅有兩個特徵的輸入數據來理解標準化的含義。

如何優化深度神經網絡?

在原始數據中,數據的X軸(特徵X)取值區間為5-50,Y軸(特徵Y)取值區間為3-7。另一方面,在標準化後的數據中,X軸取值區間時-0.15~0.15, Y軸的取值區間時-1.5~1.5。

通過標準化數據,我們縮放後的特徵值範圍與原始數據類似:而標準化數據只需要兩步過程。

通過將數據減去其均值,使得數據的均值為0,並讓其除以其方差,得到標準化數據。

mu = np.mean(X)X = X - mu
sigma = np.linalg.norm(X)X = X/sigma

這裡有一點需要注意,我們需要使用同樣的均值和方差去轉換我們的測試數據,因為我們想用同樣的方法來縮放它們。

為什麼標準化會起作用呢?

既然我們已經知道了如何標準化數據集,那麼讓我們試著理解為什麼標準化適用於下面的示例。下面是代價值J,權重W和偏差b之間的等高線圖。中心表示我們必須達到的最小代價。

如何優化深度神經網絡?

右邊的圖看起來更對稱,這是標準化背後工作原理的關鍵。

如果特徵的範圍差異很大,則不同權重的值也會有很大的差異,並且將花費更多的時間來選擇完美的權重集。然而,如果我們使用標準化數據,那麼權重就不會有很大的變化,我們將在較短的時間內獲得理想的權重集。

此外,如果使用原始數據,則必須使用較低的學習率來適應不同的等高線高度。但是在歸一化數據的情況下,我們有更多的球面輪廓,通過選擇更大的學習速率,我們可以直接達到最小值。

當特徵在相似的尺度上時,優化權重和偏差變得容易。

梯度消失和梯度爆炸

梯度消失和梯度爆炸問題源於權值的初始化。以上兩個問題都導致網絡的訓練不當和較慢。正如他們的名字所暗示的那樣,當權重消失並最終變得太小時,會出現梯度消失;而在梯度爆炸時,權重會爆炸並變得過大。讓我們在一個例子的幫助下更好地理解它們。

設W 是與單位矩陣 I 相近的所有層的權重矩陣。

如何優化深度神經網絡?

在前向傳播中,一個特定層的輸出 Z 由以下公式定義,其中 W 是權重矩陣,X 是輸入,b 是偏差:

"如何優化深度神經網絡?

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。

原標題 | Optimization Problem in Deep Neural Networks

翻譯 | Ryan(西安理工大學)、肖書忠(深信服)

編輯 | Pita (注:相關鏈接可點擊閱讀原文訪問)

訓練一個深度神經網絡並使其獲取最佳的性能是一件具有挑戰的任務。在本文中,我將會探索這項任務中最常見的問題及其解決方案。這些任務中包括網絡訓練時間過長,梯度消失與爆炸,還有網絡初始化方法等問題,這些我們在此統稱為優化問題。至於其餘在訓練網絡中出現的問題則認為是正則化問題,我在之前的文章中已經討論過了。如果你現在並沒有閱讀過它,請先閱讀前文:

Improving Deep Neural Networks (https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336)

輸入數據 標準化

當我們在訓練神經網絡時,我們可能會注意到模型訓練的時間比預期的要久。這是因為輸入數據沒有進行標準化,讓我們嘗試通過下方僅有兩個特徵的輸入數據來理解標準化的含義。

如何優化深度神經網絡?

在原始數據中,數據的X軸(特徵X)取值區間為5-50,Y軸(特徵Y)取值區間為3-7。另一方面,在標準化後的數據中,X軸取值區間時-0.15~0.15, Y軸的取值區間時-1.5~1.5。

通過標準化數據,我們縮放後的特徵值範圍與原始數據類似:而標準化數據只需要兩步過程。

通過將數據減去其均值,使得數據的均值為0,並讓其除以其方差,得到標準化數據。

mu = np.mean(X)X = X - mu
sigma = np.linalg.norm(X)X = X/sigma

這裡有一點需要注意,我們需要使用同樣的均值和方差去轉換我們的測試數據,因為我們想用同樣的方法來縮放它們。

為什麼標準化會起作用呢?

既然我們已經知道了如何標準化數據集,那麼讓我們試著理解為什麼標準化適用於下面的示例。下面是代價值J,權重W和偏差b之間的等高線圖。中心表示我們必須達到的最小代價。

如何優化深度神經網絡?

右邊的圖看起來更對稱,這是標準化背後工作原理的關鍵。

如果特徵的範圍差異很大,則不同權重的值也會有很大的差異,並且將花費更多的時間來選擇完美的權重集。然而,如果我們使用標準化數據,那麼權重就不會有很大的變化,我們將在較短的時間內獲得理想的權重集。

此外,如果使用原始數據,則必須使用較低的學習率來適應不同的等高線高度。但是在歸一化數據的情況下,我們有更多的球面輪廓,通過選擇更大的學習速率,我們可以直接達到最小值。

當特徵在相似的尺度上時,優化權重和偏差變得容易。

梯度消失和梯度爆炸

梯度消失和梯度爆炸問題源於權值的初始化。以上兩個問題都導致網絡的訓練不當和較慢。正如他們的名字所暗示的那樣,當權重消失並最終變得太小時,會出現梯度消失;而在梯度爆炸時,權重會爆炸並變得過大。讓我們在一個例子的幫助下更好地理解它們。

設W 是與單位矩陣 I 相近的所有層的權重矩陣。

如何優化深度神經網絡?

在前向傳播中,一個特定層的輸出 Z 由以下公式定義,其中 W 是權重矩陣,X 是輸入,b 是偏差:

如何優化深度神經網絡?

如果我們在 L 層(L 為層數)上執行上述計算,那麼我們可以假設權重矩陣 W 將乘以 L 次,忽略偏差。

現在,如果一個大於1的特定值,例如1.5,則層的激活將呈指數遞增,梯度將變大的,並且梯度下降將採取大的步長,網絡將花費很長時間來達到最小值。這種問題被稱為梯度爆炸。

同樣的,如果一個小於1的特定值,例如0.9,則層的激活將呈指數遞減,梯度將變得很小,並且梯度下降將採取小的步長,網絡將需要很長時間才能達到最小值。這種問題被稱為梯度消失。

為了避免梯度爆炸和梯度消失的問題,我們應該遵循以下規則 :

1. 激活層的均值應該為0

2. 激活層的方差應該在每一層都保持不變。

如果遵循上述規則,則確保梯度下降不會採取太大或太小的步長,並以有序的方式向最小值方向移動,避免了梯度爆炸和梯度消失。這也意味著網絡將以更快的速度進行訓練和優化。由於問題的根源在於權值的初始化不當,所以我們可以通過正確地初始化權值來解決這個問題。

Xavier 初始化

當特定層的激活函數為 Tanh 時,使用Xavier初始化。我們可以按照以下方式使用Xavier初始化:

# Let the dimesnion of weight matrix be(5,3)# The variance is(1/neurons in previous layer)# Randn ensure that the mean = 0
W = np.random.randn(5,3) * np.sqrt(1/3))

He 初始化

當特定層的激活函數為 ReLU 時,使用 He初始化。我們可以通過以下方式使用 He初始化:

# Let the shape of the weight matrix be(5,3)# The variance is(2/neurons in previous layer)# Randn ensure that the mean = 0
W = np.random.randn(5,3) * np.sqrt(2/3))

參考文獻

1. Deep Learning Notes(http://www.deeplearning.ai/ai-notes/initialization/)

2. Coursera — Deep Learning Course 2(https://www.coursera.org/learn/deep-neural-network/home/welcome)

感謝閱讀這篇文章的讀者,如果您有任何問題或疑問,歡迎在下面的評論部分提問。我非常樂意回答並幫助你。如果你喜歡這個文章,我將定期更新一個新的文章,歡迎大家來閱讀。歡迎讀者提出任何能改善我的文章的建議

https://ai.yanxishe.com/page/TextTranslation/1918

via https://medium.com/analytics-vidhya/optimization-problem-in-deep-neural-networks-400f853af406

"

相關推薦

推薦中...