iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
7
AI & Data

英雄集結:深度學習的魔法使們系列 第 4

[魔法陣系列] Artificial Neural Network (ANN) 之術式啟動

  • 分享至 

  • xImage
  •  

上篇介紹 ANN 魔法陣結構:輸入層(Input Layer)、隱藏層(Hidden Layer)及輸出層(Output Layer)。此外,也解釋了神經元與激活函數(activation function)的概念,我們來複習一下激活函數的功用:
激活函數的作用

圖片來源:https://community.alteryx.com/t5/Data-Science-Blog/It-s-a-No-Brainer-An-Introduction-to-Neural-Networks/ba-p/300479

激活函數用來決定哪些神經元要被激活(可發送訊息出去),例如今天模型的任務是辨識貓跟狗,把帶有貓跟狗標籤的圖片資料集輸入 ANN 後,這時並不是每個神經元都重要,是否重要由激活函數決定,被激活的神經元傳遞下去的訊息代表是對輸出結果有價值的訊息。

所以這樣就可以成功發動 ANN 魔法陣了嗎?
不,還不夠。記得在序幕提到的 Deep Learning 吧!

哥布林之覆誦:Deep Learning 是 Machine Learning 的子集, Machine Learning 特色是從資料中學習歸納出規則等等等

那麼,ANN 要如何「學習(Learning)」? 怎麼樣才能啟動魔法陣?

https://ithelp.ithome.com.tw/upload/images/20181017/20112540hlxieMJD28.jpg

Fate 裡的凜

答案是,還需要 Backpropagation

反向傳播(Backpropagation)

還記得你以前是怎麼學習嗎?當你指著貓咪說是小狗,你家人會跟你說:「錯了,這是貓。」同理,想讓 Neural Network 能夠學習,需要定義一個指標來衡量模型學習的好壞,讓我們知道現在的模型與訓練資料有沒有擬合(fit)。

一般進行機器學習任務時會有一個目標函數(Objective Function),演算法便是對這個目標函數進行最佳化(optimization)。例如在分類任務中,即是使用損失函數(Loss Function)作為其目標函數,又稱為代價函數(Cost Function)

損失函數(Loss Function): 計算單個資料點的誤差
代價函數(Cost Function): 計算整個訓練集所有損失之和的平均值

所以深度學習的訓練是代價函數(Cost Function)最小化的過程。有了 loss 的概念後,現在正式來談一下反向傳播。以下引用 wiki 的定義:

反向傳播(英語:Backpropagation,縮寫為BP)是「誤差反向傳播」的簡稱,是一種與最優化方法(如梯度下降法)結合使用的,用來訓練人工神經網絡的常見方法。該方法對網絡中所有權重計算損失函數的梯度。這個梯度會反饋給最優化方法,用來更新權值以最小化損失函數。

謎之小矮人:嗯,怎麼好像開始變難了...

這個時候需要講解一下 梯度下降法(Gradient Descent) ,直接上動態圖理解概念:
梯度下降

圖片來源:Mark Chang 大大的 Optimization Method -- Gradient Descent with Momentum

梯度下降法是一種 Optimizer ,幫助改善網絡的權重,以減少 loss。
作法:每次計算函數點上面的梯度,並且沿著反方向的步長(step)迭代,總有一天會走到局部最小值。它是最佳化的一種方法,目的是想讓 cost function 最小化,找出最佳的權重(weights)。

反向傳播搭配梯度下降的方式去更新神經元的權重,所謂的 從資料中學習 是由比對正確與錯誤答案之間的差異,從正確/錯誤經驗中學習,將這些差異反向傳遞回去,每一次迭代都修正相對應的神經元,使其在下一輪訓練可以得到更準確的結果。

例如本文一開始提到的例子:今天模型的任務是辨識貓跟狗的圖片。在第一次 ANN 看貓的圖片時只有部分的神經元被激活,那如果輸出的結果被預測為狗,表示結果錯誤,那麼訓練中透過反向傳播調整權重參數,使最後神經元能夠對真正重要的信息更為敏感。

Backpropagation

圖片來源:https://www.cnblogs.com/ooon/p/5284676.html

Backpropagation 的基本流程:

引用自「類神經網路跟Backpropagation一點筆記

  1. 初始化神經網路所有權重
  2. 將資料由input layer往output layer向前傳遞運算(forward)計算出所有神經元的output
  3. 計算誤差由output layer往input layer向後傳遞運算(backward)算出每個神經元對誤差的影響
  4. 用誤差影響去更新權重
  5. 重複2,3,4直到誤差收斂到夠小

此篇帶給各位見習魔法使 ANN 魔法陣啟動的方式,講解 Neural Networks 是如何運行,以及深度學習是怎麼「學習」的。

本系列「英雄集結:深度學習的魔法使們」目的是希望讓閱讀的讀者不要被太多數學推導所嚇倒(其實是筆者怕嚇到自己),我們一步一步來,從入門開始欣賞深度學習之美,後面可怕的野獸就留給未來的我們唷!

學習是永無止盡的,人類是如此,機器也是。

下篇預計會讓各位實戰演練抓一下畫 ANN 魔法陣的感覺,謝謝有看到這句話的大家!


上一篇
[魔法陣系列] Artificial Neural Network (ANN) 之術式解析
下一篇
[實戰系列] 使用 TensorFlow 搭建一個 ANN 魔法陣(模型)
系列文
英雄集結:深度學習的魔法使們31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言