方格精選

[探索] 門外漢的類神經網路導覽

更新於 發佈於 閱讀時間約 21 分鐘

狹義的解釋深度學習,便是指多層的類神經網路。迄今,類神經網路的架構愈來愈複雜,包括在傳統一層一層的架構上,添加一到多個模組。這個模組可以單純如多個不同大小的平行卷積層或複雜如小型的 Attention 網路。

類神經網路的表現,仰賴著一個適宜的架構和一個最佳化的演算法。在這一系列介紹類神經網路的文章中,我們會先從架構切入,在未來的文章中,再對演算法深入介紹。

raw-image

感知器(Perceptron)

就如同所有自然生物的起源,都可追溯源頭至單細胞生物。現在最火熱的機械學習演算法,以類神經為主的深度學習,也從一個單一的神經元開始。

在 1943年 McCulloch 和 Pitts 仿造人類的神經細胞結構,設計了第一個以軟體實現的人工神經元。此時的神經元就如同數位邏輯電路裡的邏輯閘一樣, 所有的輸入都依照神經元的計算邏輯,輸出相對應的計算結果。

只不過這個輸出結果,比較近似於房間使用的開關:若計算的結果超過某一個給定值後,神經元的輸出就會等於1(on 的狀態),若沒有超過這個給定值,則為零(off 的狀態)。

raw-image


這個神經元並沒有任何學習的方法,直到 1950 年, Rosenblatt 才提出了一個名為感知器(Perceptron)的學習演算法,將神經元帶入了人工智慧的領域中,也造就今日深度學習的廣泛應用。

在這篇的源起篇,我們就來看看這個只能輸出 0 和 1 的神經元,在結合了感知器的學習方法後,如何進行模式辨認並完成分類工作,以及它如何啟發之後的類神經網路(Neural Network)方法和它的遠房兄弟 Support Vector Machine (SVM)

一個簡單的 Perceptron 網路的架構如下:

raw-image

這個架構可以看成一個只擁有一個輸出神經元,且不含有隱藏層的 Feed Forward 類神經網路。Perceptron 和僅有輸入和輸出層的 Feed Forward 類神經網路結構相比較:除了 activation function 換成了擁有 hard threshold ,只能輸出 0 和 1,或 -1 和 1 的函式外,並沒有太大的差異。

坦白而言,一個感知器網路,其實只是一個線性的分類器,比起深度類神經網路,如多個隱藏層的 Feed Forward 類神經網路,感知器所能表示的函式範圍卻遠遠少於 Feed Forward 深度類神經網路。就能表示各種複雜函式的能力,感知器簡直是差多了!

雖然架構簡單,但感知器,卻蘊含了兩個類神經重要的觀念,一是非線性的 activation function,以及透過糾錯學習的方式,習得最佳分類直線。感知器學習演算法會藉著迭代的方式,逐一改變線性方程式的權重值,最終(希望)找到能夠正確分類所有訓練例子的線性函式,此函式又被稱為 decision line decision plane

接下來就是感知學習器演算法的圖解步驟解說,為了方便視覺呈現,這裡用二維的例子來做說明:

raw-image

上圖中,黑點的分類標籤被標註為 1,而白點的分類標籤被標註為 -1[1]。藍色實線為該步驟所計算得到的 decision line 和它的法線(藍色箭頭)。

在這個簡單的例子,我們不考慮 bias。bias 為零, decision line 就必須通過原點。一個能夠正確分類這三點,且通過原點的 decision line,其法線,或與 decision line 正交的向量,w,必須要和黑點的座標向量同向,或內積為正(夾角小於 90度),和白點的座標向量反向,或內積為負(夾角大於 90 度)。

現將該演算法的步驟簡述如下:

步驟 1. 任意初始化 decision line 的法線向量(normal vector)。(對應上圖為 Step 1
步驟 2. 開始對所有的訓練例子,以下面的原則,逐一比較 decision line 的輸出後,更新 decision line 的正交向量:
   步驟 2a. 若訓練例子為黑點,且分類錯誤,則將 decision line 的正交向量往靠近分類錯誤的訓練例子的方向移動。在此是利用向量加法的方式移往黑點所在方向(對應上圖為 Step 2)。
   步驟 2b. 若訓練例子為白點,且分類錯誤,則將 decision line 的正交向量往遠離分類錯誤的訓練例子的方向移動。在此是利用向量減法的方式遠離白點所在方向(對應上圖為 Step 3-4)。
   步驟 2c. 若沒有分類錯誤,則 decision line 的正交向量維持不動。

步驟 3. 重複步驟二,直到所有的訓練實例都已經分類正確,或超過最大迭代數目。

這個簡單的學習方法,有一個致命的缺點:由 Minsky 指出,那就是感知器無法學習過於線性不可分的例子,如兩種類別呈 XOR 的分佈。下圖,就是根據線性可分和不可分(XOR)所構建的兩個例子。

raw-image

XOR (上圖右)的例子分佈像棋盤格,上圖下方則是用迴歸分析或 least square 方法得到的 decision line(黑線)和其法線(綠色箭頭)。而下圖,則是使用 scikit-learnPerceptron 來進行分類。從圖中可以看到,只能做線性分類的 Perceptron 網路,並沒有足夠的模型能力來對非線性分佈的實例進行分類。

raw-image

多層感知分類器

一個最簡單的類神經網路,可被稱為多層感知分類器(Multiple Layer Perceptron ),又多以簡寫 MLP 出現在文件。名稱是對應的一開始所介紹的感知器(Perceptron)而取的名字,但實際上,兩者除了使用具有激發功能(activation function)的神經元外,並沒有太大的關係。

類神經網路的架構中,多層感知分類器,是屬於 Feed Forward 網路的一種。 Feed Forward 類神經網路,每一層中包含許多各自獨立的神經元,這些位於同一層的神經元彼此之間並沒有任何連結,但對位於上下兩層的每一個神經元,都有相對應的連結。也就是,下層的每一個神經元,對上層的每一個神經元,都會學習到一個權重值,來表達上下兩層神經元連結的強度。這個連結的強度,對於分類任務而言,可能是屬於某一類別的獨有特徵。

raw-image

因為 Feedforward 類神經網路中,上下兩層之間中的神經元具有全連結性質,所以這樣的網路有經常被稱為 Fully-Connected Layer,又因為像三明治被輸入和輸出層夾在中間,所以又可稱為隱藏層(Hidden Layer);相對於,影像識別中經常使用的卷積層Convolution Layer)Feedforward Layer 中的連結分佈更為緊密,所以又常被稱為 Dense layer。關於卷積類神經網路Feedforward 類神經網路的差別,會在往後的文章中更深入的討論。

相較感知器而言,能夠在輸入和輸出層,堆積多層 Feedforward Layer 的類神經網路,藉由多層的非線性 activation function 疊加,並透過學習而得到一個非線性的 decision boundary,具有能力去表示各種複雜函示,亦能將幾乎所有訓練例子正確地分類。知道何為多重感知器(MLP)我們現在可以應用一個真正的類神經網路來解決線性不可分的 XOR 問題了。

下圖擷取自由 Ian Goodfellow, Yoshua BengioAaron Courville 共同撰寫的深度學習的教科書。在第六章,Deep Feedforward Networks 特別以一個簡單的實例表示一個簡單的類神經網路如何解決 XOR 問題。

如下圖左下所示,現在正向的訓練例子被分配到 1 的值,而 0 的值則分配給負向的訓練例子。相較於,之前從 XOR 的分佈取樣,圖中 Original x space 只有四個例子,例子位於第一,三象限被標註為 0,而在二,四象限則為 1 (亦可對應 XOR 的輸出來看)。類神經網路的結構,則如下圖左上所示,只具有一層 hidden layer,該層只具有兩個 hidden units: h1 h2(下圖右上則是左上網路架構的簡圖)。

該類神經網路的 hidden layer,可將位在斜對角,具同分類標籤的子區域內的訓練實例,映射到新的特徵維度中。在這個新的特徵維度中,分類標籤為 1 的點,會映射到相同的座標位置(見下圖右下,Learned h space)。也就是說,hidden layer 藉由多重映射非線性函式,學到新的特徵向量,此新組合的特徵向量足以代表該分類的獨特之處,而能分辨其他類別。


raw-image


藉由學習分類函式本身,而達到精準分類的結果,是類神經網路的中心思想。在往後的文章,我們會看到,如何加深網路的層級以期達到 decision function 本身複雜度,以致於能學習更複雜,更高維的訓練例子分佈。

感知器學習演算法,雖然是個古老又簡單的方法,但在大多數的實際應用上,仍舊有它的一席之地。由於該演算法的簡易快速,在超級巨量資料的學習,有時還是會應用上簡單又快速的感知器來做 Online 的學習(一次餵進一個訓練資料),而類神經網路就像隻慢工出細活的烏龜般,軟體業推崇的 fast fail 在這方面目前就完全使不上力了。

不過,談到這裏,讓我們先稍微提及類神經網路的遠親,SVM,其理論同樣也是架構在 Perceptron 線性分類器之上發展出來,但以不同的方法來解決線性不可分的問題?

支持向量機器(Support Vector Machine)

SVM 是一個線性方法,但會透過一種稱為 Kernel 的方法,將訓練例子映射到新的特徵向量空間,在此空間,維度會增加而使所有的訓練例子皆是可分的。


raw-image

同樣 XOR 的訓練分佈中,SVM 會藉由加入描述 hyperbolic 函式的新變數,建構成較高維的特徵空間,而變得可分。SVM 自己也是一門廣大精深的學問,已經超出了此系列的範圍,有興趣的人可以找相關領域的專家或書籍來學習。

談完了類神經網路的源起,我們還得提到另外一個線性模型分類器,才能真正的開始進入深度學習的領域中 。這個線性模型分類器,就是邏輯迴歸(Logistic Regression)

邏輯迴歸分類器(Logistic Regression)

分類器和迴歸的最大不同處,在於迴歸的 response variable,或 y 值若給定線性方程式為,y = Wx,為沒有限制的實數值。所以在迴歸中,誤差表示可以考慮 mean squared error,因為希望結果能離真實的實數值愈接近愈好,無論是多出或少於真實的值(因此取平方)。但,若是要訓練一個分類器,就必須考慮此時的 response variable 是離散的值,線性迴歸的 mean squared error 損失,因為分類標籤的離散性和使用 log 函式的緣故就不適用了,因為我們現在在乎的是預測的不確定性,並不在意離真正的值有多近。

邏輯迴歸(Logistic Regression) 也是一個線性模型,但這個線性的關係是建立在透過 log 函式對預測結果做轉換上。在這個線性關係上,原本應該是連續數值的 response variable 則為兩分類預測機率的 log-odds ratiolog-odds ratio 可看做預測為 1 對預測為 0 的比例,再取 log 值)可看到下圖右下角方程式,線性迴歸的 y’,則為兩分類預測機率的比,也是線性迴歸中的輸出(方程式右方)。而原來線性迴歸的輸出 y (下圖右上角方程式),則透過非線性轉換輸入,z,得到近於機率的輸出。

相較於線性迴歸上使用的 mean squared error 的損失函式,cross-entropy 是更佳的選擇。因為這種近似於線性回歸的特性,對 mean squared error 損失函式做最佳化的演算法都能使用在 Logistic Regression 上。

從另外一個觀點來看,Logistic Regression 可以看做一個沒有 hidden layer 的類神經網路,其輸出則是藉由非線性的 sigmoid function 來限制在 0 與 1 之間,以符合機率值的數值域。在過去類神經網路,廣泛使用 sigmoid function 作為 activation function,在那個架構深度達到兩三層就能算是深度網路的時代,都會遭遇到所謂 gradient vanishinggradient explosion 問題。

這是因為 sigmoid function 本身的特性,會將輸入位於兩端的極值,壓縮到相當相當靠近於 0 或 1 的值,而造成沒有 gradient 或極小 gradient 的結果。這類具有極限值的函式特性,在英文文獻中通常被稱為 “saturate”,中文則用“飽和”這個翻譯,可捕捉到因為達到極限值而無法繼續訓練的性質。

raw-image

那些年關於類神經網路和支持向量的小事:

在這篇長文的最後,就來輕鬆一下,談一個小趣聞。這在卷積網路的主要作者之一,在 2017 年來台灣演講趣聞的當事人,Yann LeCun,演講中亦有提及此事。

事情是這樣的,當時和 LeCun 同在 AT&T 的貝爾實驗室工作的三人,另外兩位是專精統計學且孕育 SVM 理論的 Vladmir Vapnik,和當時為實驗室的主管的 Larry Jackel,分別在 1995 年在 LeCun 的見證下兩個賭,這兩個賭注內容和類神經網路的未來預測有關,賭注都是一個昂貴的晚餐。

第一個是 Jackel Vapnik 打賭認為到了 2000 年,大型的類神經網路將會被應用在巨量資料酷的。然而類神經的發展要比 Jackel 所想的晚了兩年。第二個賭注則是由 Vapnik Jackel 打賭,在 2005 完全無人使用類神經網路作為學習演算法。


raw-image

實際上,類神經網路其實有一陣子相當沒落,那些執意進行類神經網路相關研究的學者,包括現在被人所廣知的 Geoffrey Hinton,都被主流的研究學者稱呼為傻瓜。

但當時堅持研究類神經網路,包括之前提到的 Geoffrey HintonYann LeCun Yoshua Bengio 得到相當於計算機科學的諾貝爾獎,圖靈獎的殊榮了!那麼,當時主流的研究都在做些什麼呢?原來就是 SVM 最為熱門。反觀今日,因為大數據興起,造成類神經網路的熱門,但也沒有造成 SVM 式微。只能說「天下沒有免費的午餐」[3] 吧!

當然這對吃了一頓完全免費晚餐,賭注的見證人例外。

註釋:

[1] 在這裡分類的標籤給 1 和 -1,是因為該點位置與 decision line 的法線(normal vector)的內積值為正或負相關。若該點與法線同方向,則該點語法線的內積為正,反之亦然。通常,在計算 Perceptron 的點內積時,不考慮內積的大小,只知正負號即可。要注意的是,當點在 decision line 上時,與法線的內積為零,因為呈 90 度。
[2] 讀者若有興趣,可以前往 Tensorflow Playground ,該網站提供了建構一到多層的 Feedforward layer,除此之外還可以調整許多參數,包括輸入資料集(包括 XOR)等,有興趣的讀者可以前往把玩一番,可助於了解訓練一個類神經網路是個怎麼樣的經驗。
[3] No Free Lunch Theorem:這個「沒有免費的午餐定理」講的是一個以證明數學定理,說明一個通用的機械學習演算法是不存在的。詳細的內容可以閱讀《機器學習裡不存在的免費午餐:NO FREE LUNCH THEOREM》這篇文章。

參考資料:

  1. Neural Network DesignPerceptron 的圖解都來自於本書第四章。
  2. Deep LearningMLPXOR 問題的圖解來自於一書。第六章 Fig 6-1 和 Fig 6.2
  3. Introduction to Statistical Learning: SVM 的圖出自於第九章,Support Vector Machines。

延伸閱讀:

  1. McCulloch-Pitts Neuron — Mankind’s First Mathematical Model Of A Biological Neuron (英):詳細解說如何使用 activation function 搭配單一神經元架構,得到不同的邏輯閘(如,ANDOR)。
  2. [魔法陣系列] Artificial Neural Network (ANN) 之術式解析 (中):這篇文章中將以 step function 作為 activation function 很詳細的用圖解說。若不了解 step function 可以前往該網站閱讀。
  3. ONLINE LEARNING PERCEPTRON (英):MLWave 在 2015 年發表的文章,文章內容包括了 Perceptron 教學,文中包括用 python 寫成的 Online Perceptron。在該文亦提到 Perceptron 曾成功用於 Kaggle 競賽。
  4. 深度学學大神 Yann LeCun:我曾見証過一個偉大的賭局,當時神經網絡並不被看好 (簡中):搜狐科技新聞,對 LeCun 見證大師的賭局有詳細的介紹。

留言
avatar-img
留言分享你的想法!
avatar-img
Rene Wang的沙龍
70會員
35內容數
<p>專為年輕的女孩設計的科學/資訊科技寫作計畫,希望讓每位女孩在體脂肪、青春痘與暗戀對象之外,還能找到新的生活樂趣。</p>
Rene Wang的沙龍的其他內容
2021/03/19
一個好的自然語言模型,若出現了語言模型的 vocabulary set 未曾收錄的單字,語言模型就會產生 Out-of-Vocabulary (OOV)。 本文介紹 subword algorithms 介於 word-level 和 character-level 解決 OOV 的方法。
Thumbnail
2021/03/19
一個好的自然語言模型,若出現了語言模型的 vocabulary set 未曾收錄的單字,語言模型就會產生 Out-of-Vocabulary (OOV)。 本文介紹 subword algorithms 介於 word-level 和 character-level 解決 OOV 的方法。
Thumbnail
2021/02/26
本篇文章前半段先對網路裁減做簡單介紹,後半段針對彩卷假說作文獻式的探討。網路裁減是一種重新發現等價小網路的方法,主要目的在為 over-parameterized 的方式訓練而成的類神經網路提供一個精簡版的網路,有助於在資源受限的平台上運行。彩卷假說則是探討權重初始值和網路裁減之間的關係。
Thumbnail
2021/02/26
本篇文章前半段先對網路裁減做簡單介紹,後半段針對彩卷假說作文獻式的探討。網路裁減是一種重新發現等價小網路的方法,主要目的在為 over-parameterized 的方式訓練而成的類神經網路提供一個精簡版的網路,有助於在資源受限的平台上運行。彩卷假說則是探討權重初始值和網路裁減之間的關係。
Thumbnail
2021/01/08
多任務學習指的是使用多個相關的任務目標(Multiple objectives)來學習共享的表示方法。在這篇文章中,我們會介紹 google 的 youtube recommender 系統就是利用 Multi-gate Mixture of Experts 來達成多目標多任務學習的方式。
Thumbnail
2021/01/08
多任務學習指的是使用多個相關的任務目標(Multiple objectives)來學習共享的表示方法。在這篇文章中,我們會介紹 google 的 youtube recommender 系統就是利用 Multi-gate Mixture of Experts 來達成多目標多任務學習的方式。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
M-P神經元模型 1943年,沃倫·麥卡洛克(Warren McCulloch)和沃爾特·皮茨(Walter Pitts)提出了歷史上第一個用於模擬生物神經元功能的數學模型,這便是M-P神經元模型。這一模型的提出,標誌著神經科學和計算理論領域的一個重要里程碑。 麥卡洛克是一位神經生理學家和精神病
Thumbnail
M-P神經元模型 1943年,沃倫·麥卡洛克(Warren McCulloch)和沃爾特·皮茨(Walter Pitts)提出了歷史上第一個用於模擬生物神經元功能的數學模型,這便是M-P神經元模型。這一模型的提出,標誌著神經科學和計算理論領域的一個重要里程碑。 麥卡洛克是一位神經生理學家和精神病
Thumbnail
[機器學習][監督式][資料分群] 支持向量機 (Support Vector Machine, SVM)
Thumbnail
[機器學習][監督式][資料分群] 支持向量機 (Support Vector Machine, SVM)
Thumbnail
在我們的上一篇文章,我們把神經網路的架構用簡化再簡化的方式來說明,本篇文章我們會說明神經網路怎麼透過很多輸入資料來調整神經網路裡面的權重跟誤差值,藉由得到接近完美個權重跟誤差值,來做到學習的效果
Thumbnail
在我們的上一篇文章,我們把神經網路的架構用簡化再簡化的方式來說明,本篇文章我們會說明神經網路怎麼透過很多輸入資料來調整神經網路裡面的權重跟誤差值,藉由得到接近完美個權重跟誤差值,來做到學習的效果
Thumbnail
上篇文章我們解說到了神經網路的基本架構包含了輸入層,輸出層,還有中間的隱藏層,也說明了這是一個把輸入資料拆解出特徵然後依照特徵做判斷的過程。究竟每一層的神經網路,如何影響下一層的神經網路可以辨識出特徵呢? 這些中間的線條(連結)到底是什麼意義呢? 這就是這一篇要告訴你的。
Thumbnail
上篇文章我們解說到了神經網路的基本架構包含了輸入層,輸出層,還有中間的隱藏層,也說明了這是一個把輸入資料拆解出特徵然後依照特徵做判斷的過程。究竟每一層的神經網路,如何影響下一層的神經網路可以辨識出特徵呢? 這些中間的線條(連結)到底是什麼意義呢? 這就是這一篇要告訴你的。
Thumbnail
數學為我們提供了豐富多彩的素材用以學習程式設計:從讀者已掌握的知識(例如繪製一個抛物線,計算一個函數的導數)到未知的領域(如求一個複雜函數的極值),這期間有驗證的快樂,也有探索的艱辛,在不斷重複這些活動的過程中學會熟練運用這一工具,工具的熟練使用反過來也會幫助我們對特定問題進行更為深入的探討與研究。
Thumbnail
數學為我們提供了豐富多彩的素材用以學習程式設計:從讀者已掌握的知識(例如繪製一個抛物線,計算一個函數的導數)到未知的領域(如求一個複雜函數的極值),這期間有驗證的快樂,也有探索的艱辛,在不斷重複這些活動的過程中學會熟練運用這一工具,工具的熟練使用反過來也會幫助我們對特定問題進行更為深入的探討與研究。
Thumbnail
Google JAX是一種用於轉換數值函數的機器學習框架。 它被描述為匯集了autograd(通過函數微分自動獲得梯度函數)和TensorFlow的XLA(加速線性代數)的修改版本。 它旨在盡可能地遵循NumPy的結構和工作流程,並與各種現有框架(如TensorFlow和PyTorch)一起工作。
Thumbnail
Google JAX是一種用於轉換數值函數的機器學習框架。 它被描述為匯集了autograd(通過函數微分自動獲得梯度函數)和TensorFlow的XLA(加速線性代數)的修改版本。 它旨在盡可能地遵循NumPy的結構和工作流程,並與各種現有框架(如TensorFlow和PyTorch)一起工作。
Thumbnail
■控制系統分類 ●依開閉路系統區分 (1)開路系統 (2)閉路控制系統 A.線性系統與非線性系統。 B.時變系統與時不變(非時變)系統。 C.線性時不變系統(俗稱LTI系統) D.因果系統與非因果系統。 ●依系統之訊號性質區分 (1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的
Thumbnail
■控制系統分類 ●依開閉路系統區分 (1)開路系統 (2)閉路控制系統 A.線性系統與非線性系統。 B.時變系統與時不變(非時變)系統。 C.線性時不變系統(俗稱LTI系統) D.因果系統與非因果系統。 ●依系統之訊號性質區分 (1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的
Thumbnail
============================================= 根軌跡的定義 ============================================= ■根軌跡的定義 ●控制系統轉移函數 ●特性方程式及特性根 亦即 1+開迴路轉移函數=0 ●根軌跡
Thumbnail
============================================= 根軌跡的定義 ============================================= ■根軌跡的定義 ●控制系統轉移函數 ●特性方程式及特性根 亦即 1+開迴路轉移函數=0 ●根軌跡
Thumbnail
此為蔡老師提供給修課學生的參考資料的handout,為Jure Leskovec 課程的Graph Neural Network投影片的簡略解說,在此分享給有興趣的同好。這可不是完整的介紹文章,請對照原投影片使用。
Thumbnail
此為蔡老師提供給修課學生的參考資料的handout,為Jure Leskovec 課程的Graph Neural Network投影片的簡略解說,在此分享給有興趣的同好。這可不是完整的介紹文章,請對照原投影片使用。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News