# 11.1 Introduction 本章要討論的是 artificial neural network models 的其中一種,叫做 <font color = "snake">perceptrons</font>。 大腦是一個在很多領域(像是視覺、語音識別、學習⋯⋯),有許多很厲害的能力、超越很多現有產品的 info. processing device,如果我們能知道大腦是如何讓這些功能運作,我們就能用 formal algorithms 定義這些問題的 solutions,然後 implement 在電腦上。 人腦和電腦其實有很大的區別,電腦通常只有一個 processor,但人腦有很大量的 processing units 在同時運行,也就是 neurons。雖然我們還不知道細節,但是 neurons 被認為是比電腦的 processor 還要簡單也還要慢的。 但是為什麼人腦在一些領域上能夠那麼厲害呢? $\rightarrow$ 一個人腦和電腦的區別,就是 neurons 之間的 ++large connectivity++,這也被認為是為什麼人腦有這麼強大的 computational power 的原因。 > neurons 之間有 synapes(突觸,把樹突和軸突連在一起的東西)將他們相連 更進一步來看,在電腦裡面,processor 是 active 的,但 memory 是 separate 且 passive 的;但是在人腦裡面,我們認為 processing 和 memory 在整個 network 中是 ++distributed together++,透過 neurons 使得大腦可以做 processing,然後 memory 就直接是在 nuerons 間的 synapses 中。 ## 11.1.1 Understanding the Brain info. processing system 被劃分成三個 levels,叫做 <font color = "snake">levels of analysis</font>: 1. ++Computational theory++ > 指的是 computation 的目標,還有對 task 的抽象定義 2. ++Representation and Algorithm++ > 指的是 input 和 output 如何呈現,還有要把 input 轉換成 output 的 algo. 的 specification 3. ++HW implementation++ > 指的是在物理上如何實踐這個 system 舉例來說,如果我們要做 sorting: 1. Computational theory $\Rightarrow$ to order a given set of elements 2. Representation and Algorithm $\Rightarrow$ representation 可以用 int,algorithm 可以用 quicksort 3. HW implementation $\Rightarrow$ 在 compile 以後,針對某個特定的 processor 所得到的 binary represent 的 executable code 是其中一種 - 對同個 Computational theory 來說,Representation 和 Algorithm 可能有很多種;同樣的,對同一個 Representation and Algorithm,HW implementation 的方式也可能有很多種。 > 舉例來說, sorting algo. 有很多種,而且就算是同一種,在不同的 processors 上 compile 也會有不同的 HW implementation。 (課本舉了一堆例子 in p.269) 其中一個 classic example: ++natural / artificial flying machines++ $\rightarrow$ 麻雀如果要飛會拍動它的翅膀,飛機沒有翅膀但是會用噴射引擎 $\Rightarrow$ 麻雀和飛機是兩種為了不同的目的打造的 HW implementation,滿足了不同的限制,但是他們都 implement 了同一個理論,也就是空氣動力學。 回過頭來看大腦,大腦是 learning, pattern recognition 的其中一種 HW implementation,如果從這個 HW implementation,我們可以反過來去 extract 其中的 Representation and Algorithm,然後再進一步得到 Computational theory(從 3 到 1 的一個反向過程),我們就可以再用另一種 Representation and Algorithm,來得到另一種更適合我們現有的方法和限制的 HW implementation。 ## 11.1.2 Neural Networks as a Paradigm for Parallel Processing 自從 1980 年代以來,有數千個 processors 的 computer system 已經是 commercially available,但是 SW 沒有進步的和 HW 一樣快,因為那時候所有的 theory of Computation 都是基於連續的、單一 processor 的 machine。 $\rightarrow$ 我們沒辦法有效地去運用我們所擁有的 parallel machine,因為我們沒辦法有效的去 program。 - 在 parallel processing 中,有兩種主要的 paradigms: 1. ==SIMD== (single instr., mult. data) > 所有的 processors 執行同個 instr. 在不同的 data 上 >> 舉例來說,兩個 $4\times 4$ 的矩陣相加,我們有四個 processors,同樣一個相加的 instr., $P_1$ 可以做第一行、$P_2$ 做第二行⋯⋯。 >> > $\rightarrow$ SIMD 比較容易去 program ,因為只需要寫一份程式就好,但是問題就是我們要解決的問題通常沒有一個 regular structure 來這樣去平行化。 2. ==MIMD== (mult. instr., mult. data) > 不同的 processors 可以在不同的 data 上執行不同的 instr. > > $\rightarrow$ MIMD 比較 general,但是要去對每個 processor 撰寫個別分開的 program 較困難,除此之外,還有 synchronization、processors 之間的 data transfer 等問題。 除了上述之外,SIMD 也比較簡單、MIMD 比較複雜。 假設現在我們有一個比 SIMD 複雜,但比 MIMD 簡單的 machine,並且我們有簡單的 processors,每個有一個小小的 local memory 可以放一些 parameters。 每一個 processor 會 implement 固定的功能,然後像 SIMD 一樣執行相同的 instr.,但是如果我們把不同的 value load 到各個 local memory,這些 processors 就能做不同的事情,然後整個 operation 就可以被分散到各個 processor 中。 上述這樣的 machine 被稱作 <font color = "snake">neural instruction, multiple data (NIMD) machines</font>,其中每個 processor 對應到一個 neuron,local parameters 對應到到它的 synaptic weights,然後整個 structure 就是一個 neural network。 現在的問題變成: Q. 要怎麼把一個 task 分散到這樣的 processors 所組成的 network 中,還有要怎麼決定 local parameters 的值? A. 方法:++learning++ $\rightarrow$ 如果這樣的 machines 可以從例子中學習,我們就不用自己去 program 這樣的機器,也不用去決定 local parameters 的值。 因此,artificial neural networks 是一種我們用現有的科技可以打造來好好利用 parallel HW 的方式,而且因為有 learning,我們不需要去 program 它們。 - 「artificial neural network 的 operation」 其實就只是++一個可以被 implement 在 serial computer 上的數學 function++,然後要去「train 一個 network」 基本上和前幾章提到的統計學技巧差不多。