• 沒有找到結果。

第三章、 研究方法

第二節、 深度學習概述

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第二節、深度學習概述

深度學習(Deep Learning)近年來已是相當熱門的機器學習方法之一,許多實 務上的應用也不斷的推陳出新,熟悉深度學習的概念與其應用原理是一個好的開 始,因為這些機器學習方法正在一步一步改變我們的生活。

深度學習並不是一個全新的概念,其淵源最早可追溯自1950 年代,人類自 從電腦發明以來,便渴望讓電腦擁有類似人類的智慧,模擬人類具有思維的行為 表現,並針對我們所提出的問題準確回答,人工智慧時代正式揭開序幕。人們期 待透過電腦超強的運算能力,為我們解決生活周遭各種繁瑣的問題,然而礙於當 時電腦的計算速度尚未提升,儲存空間也小,數據量更是不夠,這使得人工智慧 的研究發展相當受限,只能解決一些簡單的代數題和數學證明,在實務上難以有 所應用。隨後電腦硬體開始以指數型的方式在進步,歸功於電腦運算能力的爆炸 性成長,儲存成本下降使得更多數據能做處理,自1980 年代逐漸興起人工智慧 的一個分支,讓電腦能夠自行從大量資料中找出規律並加以學習,各種機器學習 的 理 論 就 此 誕 生 , 包括 支 援 向 量 機(Support Vector Machine, SVM)、決策樹 (Decision Tree)和隨機森林(Random Forest)等,而類神經網路(Artificial Neural Network, ANN)也一度興起,然而相比其他淺層的機器學習算法,其理論不夠嚴 謹完備,加上神經網路在進行反向傳播算法(Back Propagation)時遇到瓶頸,只要 超過三層以上幾乎沒有效果,多層神經網路並不被主流學術界所正視。直到2006 年代深度學習之父 Hinton 成功訓練多層神經網路,並命名為深度學習,加上輝 達(NVIDIA)推出全新圖形處理器(Graphics Processing Unit, GPU)的運算架構,深 度學習才真正開始火熱起來。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 5、深度學習發展史

簡單來說,深度學習就是一個函數集,透過一群函數的集合以模仿人類的神 經網路,因此其深度意謂著神經網路的層層堆疊架構,當我們丟給機器一堆數值,

機器就會將這些數值透過神經網路不斷傳遞更多訊息,從而找出最好的結果,而 我們也能從機器的建議中做出最適當的決策。在進行深度學習時,我們需要準備 三個步驟:建構網路、設定目標、開始學習。

深度學習的神經網路結構不盡相同,常見的神經網路包括卷積神經網路 (Convolutional Neural Network, CNN)、循環神經網路(Recurrent Neural Network, RNN)和長短期記憶神經網路(Long Short-Term Memory, LSTM)等,卷積神經網路 善於處理圖像辨識,循環神經網路適合處理有時間序列和語意結構的資料,而長 短期記憶神經網路是循環神經網路的改良版,可以成功回顧更多循環前的結果。

本文僅討論深度學習的入門模型,亦即簡單的序列模型(Sequential Model),其透 過多個神經網路層的線性堆疊以傳遞數據。

神經網路模型一般可分為三層,包括輸入層、隱藏層和輸出層,如圖6 所示。

輸入層的神經元數量即是我們觀察的特徵變數,輸出層的神經元數量則是欲預測

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

的目標變數,我們給予輸入層和輸出層之間的關係,並渴望機器透過這樣的關係 從中找出規則,用以判斷在新的樣本資料中其所對應的關係為何;而從大量的樣 本資料中萃取特徵並找出規則的方式,便是透過隱藏層進行一連串的函數運算,

這些隱藏層包含許多神經網路層和各種數量的神經元,透過隱藏層的層層運算以 傳遞輸入層和輸出層之間的關係,並透過反向傳播算法反覆計算各神經元的權重 和誤差,最後得到一組最適合用於預測的神經網路模型。這些層數和神經元數的 選擇目前並無一套準則,僅是仰賴試誤法(Try and Error)決定該模型配置的參數 能得到最佳的預測效果。

圖 6、神經網路架構

細看神經網路的計算方式,神經網路是由一群神經元所構成,每個神經元都 是一個激活函數(Activation Function),當輸入值(x)進入到神經元時,這些輸入值 會與誤差值(b)進行加權線性組合,再經過激活函數的轉換輸出一個值(z),這個 輸出值會繼續傳入下一個神經元,成為該神經元的輸入值,如圖7 所示。如此循 序傳遞下去,從第一層的特徵向量作為輸入值,直到最後一層輸出預測結果。

𝑧 = 𝑓(𝑦) = 𝑓( 𝑤 𝑥 + 𝑏

1

), 𝑘為向量 x 的維度

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 7、神經網路運算過程

激活函數的目的是為神經網路加入一些非線性因素,使得神經網路可以任意 的逼近任何非線性函數,得以更好的處理較複雜的問題,常見的激活函數包括S 型函數(Sigmoid)、雙曲正切函數(Hyperbolic Tangent, Tanh)和斜坡函數(Rectified Linear Unit, Relu)等,如圖 8 所示,而實務上最常使用的是斜坡函數,其能有效 克服梯度消失的問題,其他兩者函數在接近飽和區(例如 S 型函數在[-5, +5]以外) 時,經過轉換後的輸出值趨近於零,也就是所謂的梯度消失,造成更新參數訊息 時無法藉由反向傳播算法傳遞,是神經網路加深時產生的訓練障礙之一,而斜坡 函數在資料值為正的情形下不存在飽和問題,故可用於股價或正規化後的指標進 行分析。此外,輸出層的激活函數也格外重要,根據我們所欲預測問題的類別,

選擇相對應的激活函數,例如在迴歸問題使用線性函數(Linear),在分類問題使用 歸一化指數函數(Softmax),其中歸一化指數函數能將線性組合後的輸入值等比例 壓縮至[0, 1]之間,且該層所有輸出值總和為 1,可視為機率值以用於分類。

z = 𝑒

1𝑒 , z

1

= 1, n 為分類數量

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 8、激活函數

在定義完神經網路的架構後,我們需要設定學習目標,讓神經網路得以根據 此目標進行訓練。一般來說,需要設定的參數包括訓練神經網路使用的優化器 (Optimizer)和用於評價網路通過優化器產生最小誤差結果的損失函數(Loss)。常 見的優化器包括隨機梯度下降(Stochastic Gradient Descent, SGD)、適應性動量估 計(Adaptive Moment Estimation, Adam) 和 均 方 根 傳 播 (Root Mean Square propagation, RMSprop),Kingma et al. (2015)說明適應性動量估計對參數的計算效 率高,對儲存記憶體的要求低,且適合用於資料或參數相當大,以及所欲預測的 目標會隨時間變化的問題,在實務上比起其他優化方法其運作良好且收斂速度相 當快。而根據欲預測問題的種類,也有幾種相對應的損失函數,例如迴歸問題使 用均方差(Mean square error, MSE),分類問題使用分類交叉熵(Categorical Cross-Entropy),其方法皆是用來計算預測值與目標值之間的距離。此外,在隱藏層之

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

中也能加入許多方法以改善訓練效率,資料正規化不只在輸入層需要使用,以解 決輸入值在通過激活函數時所遇到的飽和問題,在隱藏層同樣也需要使用,由於 輸入值在與每一層的權重和誤差進行線性組合,並通過神經元的激活函數後,其 輸出值可能進入飽和區,即所謂的內部變數偏移(Internal Covariate Shift),Ioffe et al. (2015)透過在隱藏層額外添加批次正規層(Batch Normalization),將每一層的輸 入值加以正規化,使得該方法能夠在達到相同準確率的情形下減少14 倍的訓練 次數。另一方面,擁有大量參數的神經網路是非常強大的機器學習系統,然而過 度訓練(Overfitting)同樣也是神經網路所遇到的問題之一,當機器學習到的規則 過於貼近訓練資料時,便會導致其規則用於測試資料時,誤差將會變得相當大,

Srivastava et al. (2014)在每一層引進丟失比率(Dropout),在訓練過程依照特定比 率將神經元隨機從神經網路中丟棄,以此對同一個神經網路訓練不同的子網路,

以避免對同一個網路訓練過多,並證實其方法能改善神經網路的預測效果。

在設定完神經網路的各種參數後,我們的目標即是讓神經網路從這些訓練樣 本中尋找規則,而其學習的方式便是透過反向傳播算法,其概念類似於梯度下降 (Gradient Descent),也就是透過損失函數找出預測值和真實值之間的差距,為了 讓此差距達到最小,神經網路便將誤差結果反向傳遞回去,重新調整神經元的權 重和誤差,以此尋找損失函數的最小值。我們可以把深度學習想像成有一百萬個 學生同時在寫答案,他們每個人都有不同的思考方式,最後每個人都交出一個不 同的答案,將所有的答案與標準答案相減後得到誤差,並將誤差畫成一個平面圖 形,離標準答案最接近的那個答案,就會在這張圖的最低點;而深度學習的目標 便是找到這個最低點,最低點代表寫出這個答案的學生,擁有最接近正確答案的 思考方式,而我們讓其他學生向這位學生學習,並繼續測試是否都能回答正確,

隨著學習次數越多,準確率就會逐漸提升。此外,反向傳播算法需要指定訓練的 期數(Epoch)和批次數量(Batch Size),一個期數是指一個完整資料集通過神經網

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

路一次並反向傳遞一次,而批次數量是指將資料集分割為多少數量的批次樣本,

同一批次所有樣本都將輸入神經網絡進行計算,並用這些樣本的平均誤差值來更 新模型的權重;批次大小也是優化神經網路訓練效率的方法之一,越大的批次數 量意味著需要等待更長的時間來完成每次的更新,而批次數量越小,則神經網絡 從每個批次獲得的數據訊息也越少,批次數量的選取在實務上仍未有一套準則,

僅能透過試誤法選擇預測效果最佳的參數。最後,如果我們對訓練後模型的效果 滿意的話,便能使用該模型對新的資料進行預測。

本文引用R 語言中的 Keras 套件,使用其內建的序列模型函數以建構神經網 路,並設定幾種參數進行模型訓練,如表1 及圖 9 所示。

表 1、神經網路參數設定

參數 設定

激活函數 Relu

損失函數 Categorical Cross-Entropy

優化函數 Adam

丟失比率 0.5

訓練期數 10

批次數量 1024

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 9、神經網路配置方式

相關文件