數據正則化處理,正則化regularization

 2023-11-19 阅读 23 评论 0

摘要:正則化regulation欠擬合與過擬合L2 正則化(L2 regularization)dropout代碼示例參考 數據正則化處理、 欠擬合與過擬合 欠擬合:在訓練集上準確率較小 過擬合:表現為在訓練集上準確率高,訓練誤差較小。而在測試集上準確率與訓練集上的表現相

正則化regulation

  • 欠擬合與過擬合
  • L2 正則化(L2 regularization)
  • dropout
  • 代碼示例
  • 參考

數據正則化處理、

欠擬合與過擬合

欠擬合:在訓練集上準確率較小
過擬合:表現為在訓練集上準確率高,訓練誤差較小。而在測試集上準確率與訓練集上的表現相差較遠,測試誤差較大。
在這里插入圖片描述
Bias-Variance:

在這里插入圖片描述

L2 正則化(L2 regularization)

損失函數中加L2正則化項后:
l′(W)=L(W)+α∑iwi2l^{'}(W)=L(W)+\alpha\sum_{i}{w_{i}^{2}}l(W)=L(W)+αi?wi2?
加入L2正則化懲罰項后,權重整體趨向于減小。

dropout

dropout是在深度學習中常用的一種正則化方法。簡單的說就是在隱藏層以一定的概率使神經元失活,相等于特征得到隨機組合,以此來減小模型復雜度,增強泛化能力。
在這里插入圖片描述
注意:
1、前向傳播中,在隱藏層以一定的概率使個別神經元失活
2、前向傳播中,要對沒有失活的數據進行scale
3、反向傳播中,在前向階段失活的神經元依然保持失活
4、test 和應用階段,不需要進行 dropout

其他防止過擬合的方法
1、增加訓練數據(如圖像數據可以通過,旋轉、裁剪縮放等方法擴充數據)
2、增加噪聲
3、減小模型復雜度

代碼示例

```python
# 以一個2層的神經網絡為例
# 一個前向傳播的函數
def forward_propagation_with_dropout(X, parameters, keep_prob =0.5):"""一個簡單的 droupout 示例,前向傳播1、在隱藏層,以一定的概率使某些神經元失活2、對其他,未失活的數字進行 scale"""# 獲取參數W1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]W3 = parameters["W3"]b3 = parameters["b3"]# 前向計算Z1 = np.dot(W1, X) + b1A1 = relu(Z1)D1 = np.random.rand(A2.shape[0],A2.shape[1])                                       D1 = D2<keep_prob                                A1 = A2*D2      # 使某些神經元失活                                         A1 = A2/keep_prob # 對其余的值進行scaleZ2 = np.dot(W2, A1) + b2A2 = relu(Z2)D2 = np.random.rand(A2.shape[0],A2.shape[1])                                       D2 = D2<keep_prob                                A2 = A2*D2      # 使某些神經元失活                                         A2 = A2/keep_prob # 對其余的值進行scaleZ3 = np.dot(W3, A2) + b3A3 = sigmoid(Z3)cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)return A3, cache# 反向傳播
# 對于,前向傳播中 失活的神經元,在反向傳播的過程中依然失活
def backward_propagation_with_dropout(X,Y,cache,keep_prob):"""反向傳播,鏈式法則前向傳播中 失活的神經元,在反向傳播的過程中依然失活"""m = X.shape[1](Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3) = cachedZ3 = A3 - YdW3 = 1./m * np.dot(dZ3, A2.T)db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)dA2 = np.dot(W3.T, dZ3)dA2 = dA2*D2              dA2 = dA2/keep_prob              dZ2 = np.multiply(dA2, np.int64(A2 > 0))dW2 = 1./m * np.dot(dZ2, A1.T)db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)dA1 = np.dot(W2.T, dZ2)dA1 = dA1*D1              dA1 = dA1/keep_prob             dZ1 = np.multiply(dA1, np.int64(A1 > 0))dW1 = 1./m * np.dot(dZ1, X.T)db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2,"dZ2": dZ2, "dW2": dW2, "db2": db2, "dA1": dA1, "dZ1": dZ1, "dW1": dW1, "db1": db1}return gradients

參考

Dropout: A Simple Way to Prevent Neural Networks from Overfitting
dropout
youtube: Machine Learning Fundamentals: Bias and Variance
wikipedia: regularization

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/182180.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息