---
# System prepended metadata

title: 11.1 Introduction
tags: [ML]

---

# 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」 基本上和前幾章提到的統計學技巧差不多。
