DNN(深度神經網路)的全面認識

王柏鈞
機器學習歷程
Published in
7 min readFeb 14, 2020

有人想知道什麼是DNN,所以也趁這個機會整理一次這個基礎的部分。本文會把神經網路的整個流程跑一遍,如果已經有知識但想梳理一番我覺得也很適合。

很久很久以前

我們有了一個資料集,那是,我期末收到的成績單。當時很流行在收到成績單之前回家攔截。不過我從來沒成功過。

期末成績單大概長這樣。這是我用高斯分布隨機生出來的,不過這種複雜的統計技術下次再討論。

那麼現在我們用這個資料集來預測我第5次考試中「國文」的成績。(看到第0次考試不用懷疑,工程師的世界是從0開始數的)

神經元計算

首先我們先放3個神經元做為輸入層,像這樣。(你也可以放500個)

然後這邊我們只有把輸入值(各科分數)連接到第一個神經元,這是為了跟各位解釋y是從何而來。

其實他很簡單,以y1來說,他的計算如下:

關於神經元細節可以參考我的上一篇文章。今天這邊先不贅述,不過w(權重)的部分等一下會再提到。

總而言之我們用一樣的方式繼續計算可以得到y1, y2, y3

然後因為這種簡單的輸出,因為只有相乘和相加,所以它是一個線性的計算。線性的東西不管怎麼排列組合都是線性的,就像一群正整數不管你做什麼加減乘除都會是正的。

所以我們要透過激勵函數(activity function)來讓它變成非線性。以解決非線性問題(通常情況問題都是非線性的)。

激勵函數

關於激勵函數不用想得太複雜,你可以把它當成三角函數,或者一個條件式,例如Relu:

我們把小於0的值全部歸零,如果大於零就不處理他。

你可能覺得「哈囉?」,不過Relu是目前認為最好用的激勵函數之一。
(而且大腦真的是這樣運作的,比如說放空的時候我的大腦就像鳥飛絕的山林)

總而言之,我們就是把剛才的算式加上一個激勵函數讓y值變成非線性,表示如下:

然後要記得幫y2y3也計算一下。

那麼我要向各位提問

y是什麼 ?

大致上,你可以把這些y當成這個神經元對於輸入資訊的理解。

輸入層的每個神經元都會接收到我的各科成績,但是他們所帶有的權重矩陣[w1,w2,w3,w4,w5]是不同的。加上權重的神經元如下圖所示,他表示了神經元對於各科成績的重視程度,各科成績會被乘上這個加權值(權重)。

加上權重後的計算。

每個神經元都透過不同的權重矩陣來得到不同的認知,每一個權重矩陣都是完全隨機的,這讓每個神經元在一開始都有不同的加權傾向,就像有些神經元可能重視國文,有些重視數學。

我們透過這些各有不同傾向的神經元來分析我的成績,然後吐出他的理解。

因為我們的神經元會把所有的輸入值加總進行計算,下一層的神經元也會把上一層的輸出值加總進行計算。

也就是每一個神經元都會跟上一層的所有神經元相連接

所以這種形式的神經網路也稱為全連接神經網路。如下所示:

隱藏層就是不是輸入、也不是輸出層的中間層。

接下來我們來思考。

這個神經元理解了多少 ?

事實上,非常少,因為他真的很簡單,腦容量少就是少。關於這一點你可以參考派大星。

不過他依然確實的把輸入值加上他的理解傳遞給下一層的神經元,不過這樣還不夠,我們還要再傳到下一層的神經元,下一層的神經元再加上他的理解,再傳遞到下下一層的神經元......。

就是因為這種一層一層往下堆疊的型態,所以這種神經網路被稱為深層神經網路(DNN, Deep Neural Network)

然後在過程中,因為理解被不斷的傳遞,就像口耳相傳的故事終致謬誤,所以深層的神經元得到的資訊可能會與原來的輸入資料截然不同,這個現象一直以不同的形式存在,直到現在,我們還在跟它對抗。(不過我們有許多可靠的方法來克服它了。ex: Residual)

輸出層

在許多次的傳遞後,最後資訊終於來到輸出層。因為我們是想要預測國文的成績,所以輸出層只有一個神經元。這個神經元也完成計算後,同樣會得到一個y,只是在這時候y就是我們最後的答案,也就是國文的成績。

這種最後輸出一個數字的情況,我們將它稱為迴歸。就像資訊不論經歷了多少風浪,最後還是會回歸到一個基本面的感覺。

但是很顯然,輸出值不會跟正確答案一樣。所以我們需要用一個方法來調整所有神經元的權重

反向傳播法(梯度下降法)

儘管輸出值不等於答案,但是我們可以求得他們之間的誤差。然後透過這個誤差,來調整神經網路讓輸出值益發接近答案。

首先我們的目標是藉由誤差來調整每一個神經元的權重。

調整的方法是微分,透過微分來求得一個變化率,透過變化率調整權重,並透過權重調整輸出值。讓輸出值和答案之間的誤差縮小。

在調整完權重後,我們會得到輸出層的新的輸出值。這個新的輸出值會更加接近正確答案。不過還沒結束。

我們要根據這個新的輸出值用一樣的方式,向上一層神經元的輸出值微分,求得變化率,調整權重,獲得上一層的新的輸出值。然後一次又一次,直到我們把輸入層的權重也進行調整。這樣,我們就完成了一次訓練。

就這樣,可能你以前聽到梯度下降或是反向傳播就覺艱澀難懂。不過概念上就是這樣而已。

不過還沒結束喔。

訓練資料集

我們把資訊傳到輸出層,再透過反向傳播法基於誤差把所有神經元的權重都調整。這樣就只是一次訓練而已。

我們往往需要上千次的訓練才能訓練好一個預測系統。但是下一次考試的國文成績只會有那唯一的一個,怎麼辦?

所以實際上,如果我們想要訓練一個神經網路預測國文成績,我們會先準備許多次段考中除了國文以外的各科考試成績,我們將這些資料稱為「訓練資料X」,而每一次段考的國文成績,就是我們的「訓練資料y」。

蒐集許多的訓練資料X和與之對應的訓練資料y,我們就可以獲得一個訓練資料集。這時候我們神經網路的目標可以被精確地描述為:

透過各科段考成績與國文成績的對應關係,來預測國文成績

所以其實神經網路就是在學習一個資料和答案的對應關係,只是他透過人多力量大的道理,匯集許多神經元利用他們貧弱的判斷機制,並讓判斷機制層層相連,最後能夠成就偉業。

以上,就是整個神經網路(NN, Neural network)的運作過程。如果神經網路很多層,它就變成深度神經網路(DNN, Deep Neural network),不過幾層算深還沒有定論,所以通常NN和DNN是講同一個東西。

關於神經網路你可能會聽說很多複雜技術說明,不過大概就是這樣而已。

總結

今天的分享就到這邊結束啦,其實神經網路相對來說是比較單純的。在這之間還有許多技術細節值得分享,不過我想有了這樣一個全面理解會讓以後研究技術細節時如虎添翼吧。

最後向各位提問3個問題做為今天課程的學習評鑑,各位可以自己思考,或是在留言區跟我討論。

  1. 神經元的權重可以比喻成什麼?
  2. 透過各科成績來預測國文成績真的是有用的嗎?
  3. 如果今天我們有了你睡眠時房間內的溫度、濕度以及照度資料。我們可以訓練一個神經網路來預測房間內的二氧化碳濃度嗎?

以上,祝各位情人節快樂。

圖片引用連結

快速反應機制─類神經網路
https://medium.com/marketingdatascience/%E5%BF%AB%E9%80%9F%E5%8F%8D%E6%87%89%E6%A9%9F%E5%88%B6-%E9%A1%9E%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-a3bbdee4a6f6

--

--