深度學習入門筆記系列 ( 二 )

深度學習入門筆記系列 ( 二 )

原創: 小詹同學 小詹學Python 7月27日

本系列將分為 8 篇 。今天是第二篇 。主要講講 TensorFlow 框架的特點和此系列筆記中涉及到的入門概念 。

1.Tensor 、Flow 、Session 、Graphs

TensorFlow 從單詞上可以分成 Tensor 和 Flow 兩個單詞 。Tensor 即張量 ,表明了其數據結構 ;Flow 翻譯可理解為流 ,直觀的表達了張量之間通過計算相互轉化的過程 ;還有一個很重要的概念 Session ,即對話的概念 ,用於執行定義好的運算 。簡單的理解 ,Flow 體現了 TF 框架的計算模型 ;Tensor 體現了 TF 框架的數據模型 ;二者可組織數據和定義相應的運算 ,並用圖(graphs)表示計算任務 。圖(graphs)中的節點稱之為op(operation),一個op獲得0個或多個Tensor 。而對話則是用於執行定義好的運算 ,即運算都是在 session 中執行的 。

上述介紹結構見下圖 ,搭配起來就比較好理解了 。

值得一提的是運算的執行在會話中進行 ,如何進行有兩種方式 ,一個是明確調用會話生成和關閉 。另一個是利用 with 上下文管理器 。這裡建議利用 python 上下文管理器的機制 ,將所有的計算放在「with」內部即可 ,這樣一來 ,當上下文管理器退出時候會自動釋放所有資源 ,這樣既解決了因為異常退出時資源釋放的問題 ,還解決了忘記調用 session.close 函數產生的資源泄露 。上述介紹舉例如下 :

2.loss function

首先得了解什麼是代價函數 ,也可以是說是損失函數 。指的是一個可以衡量預測值和真實值差異的函數 ,具體形式可以有多種選擇 。我們可以用 C(ω) 表示代價函數 ,根據其意義 ,不難理解代價函數有如下性質 :

  1. 對於每種演算法來說 ,代價函數不是唯一的 ;
  2. 代價函數是參數 ω 的函數 ;
  3. 總的代價函數可以用來評價模型的好壞 ,代價函數越小說明模型和參數越符合訓練樣本 (x, y) ;
  4. 代價函數是一個標量 ;

常用的代價函數有如下幾種 :

  1. 二次代價函數(quadratic cost)

  1. 交叉熵代價函數(cross-entropy)

  1. 對數釋然代價函數(log-likelihood cost)

總的來說 ,我們在訓練過程中 ,目標就是通過訓練使得代價函數儘可能降低 ,從而使得預期輸出和實際輸出接近 。

3.欠擬合和過擬合

在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個名詞 。首先欠擬合是指模型沒能較好的捕捉到數據特徵 ,不能夠較理想的擬合數據 ;相對的 ,過擬合就是模型把數據學習的太徹底,以至於把雜訊數據的特徵也學習到了 ,導致在後期測試的時候不能夠很好地識別數據 ,即不能正確的分類 ,模型泛化能力太差 。如下圖所示(來源於吳恩達老師課程)

模型訓練之初 ,往往是欠擬合的 ,所以我們才有進步空間 ,不斷調整演算法使得模型能夠較好的擬合數據 。欠擬合的解決方法大體有下面幾種思路 。

  1. 添加其他特徵項 ,有時候我們模型出現欠擬合的時候是因為特徵項不夠導致的 ,可以添加其他特徵項來很好地解決 。
  2. 添加多項式特徵 ,這個在機器學習演算法裡面用的很普遍 ,例如將線性模型通過添加二次項或者三次項使模型泛化能力更強 。例如上面的圖片的例子 。
  3. 減少正則化參數 ,正則化的目的是用來防止過擬合的 ,但是現在模型出現了欠擬合 ,則需要減少正則化參數 。

至於過擬合 ,可以想像一個很複雜的網路 ,包含參數相當的多 ,但是我們用於訓練的數據卻相對有限 。反覆的訓練之下 ,模型學習太過徹底 。如上圖過擬合圖中在訓練集上十分精確 ,但是在測試集中卻得不到較理想的結果 ,即模型的泛化能力很差 。常見的解決辦法如下 :

  1. 重新清洗數據,導致過擬合的一個原因也有可能是數據不純導致的,如果出現了過擬合就需要我們重新清洗數據。
  2. 增大數據的訓練量,還有一個原因就是我們用於訓練的數據量太小導致的,訓練數據佔總數據的比例過小。
  3. 採用正則化方法。正則化方法包括L0正則、L1正則和L2正則,而正則一般是在目標函數之後加上對於的範數。
  4. 採用dropout方法。這個方法在神經網路裡面很常用。dropout方法是ImageNet中提出的一種方法,通俗一點講就是dropout方法在訓練的時候讓神經元以一定的概率不工作。

本篇較為乾燥 ,小詹自己寫的都看不下去了 。但是上邊提到的一些概念是本系列文章中會用得到的 ,比如過擬合的一些處理在 mnist 識別分類中就可以用上 。所以為了方便查看理解 ,還是枯燥一點寫(讀)下去吧 ,如果有紕漏 ,敬請批評指正 。

最後 ,如果覺得這個系列不錯 ,記得掃碼關注噢 !(大佬不在,小可愛代發,請多多指教!)

往期推薦:

1. GitHub 與 git 筆記 。

2. 深度學習入門筆記系列 ( 一 )

weixin.qq.com/r/5ihKUkj (二維碼自動識別)

推薦閱讀:

Receptive Field Block論文筆記
趣談網路協議-筆記(1)
《新聞學概論》第六版增刪(重點)筆記
R上課的筆記
雅思寫作筆記——(四)influence題型 例3-1

TAG:筆記 | 做筆記 | 深度學習DeepLearning |