Function Network(Under Construction!)

Function Network(Computational Graph)

函數:輸入多個數值,輸出一個數值。

計算學家擅長線性函數、仿射函數。以下只討論仿射函數。

函數網路:形成網路架構。可以宏觀地視作一個函數。

計算學家擅長樹、有向無環圖。以下只討論有向無環圖。

仿射函數不斷串接,仍是仿射函數。

多項式函數不斷串接,仍是多項式函數。

Function Network Operation

函數網路按理可以定義加減乘除微積運算,可以求根、求解、求極值,可以用於內插、迴歸、分類。

不過這些運算仍在研究當中,尚未定義。

求值

函數:代入x,求得y。

函數鏈:按照順序,每個函數各自求值。

函數網路:按照拓樸順序,每個函數各自求值。

求根

一條路徑對應一道線性方程式。等同於解線性方程組。

最佳化

函數:仿射函數,呈直線,極值在無限遠處,沒有討論意義。

話雖如此,但這裡還是介紹一下最佳化演算法,以鋪陳後文。

仿射函數可以一次微分,適用梯度下降法。沿梯度方向走會上升、得極大值,沿梯度反方向走會下降、得極小值。

函數鏈:展開之後仍是仿射函數。

沿總梯度方向走。梯度是「f(x)變化」和「x變化」的比值。總梯度是「f(...f(x))變化」和「x變化」的比值。梯度逐層連乘,得到總梯度。

另外介紹一個畫蛇添足的方法:最內層x走一步,每一層x也都跟著走一步。

梯度是「f(x)變化」和「x變化」的比值,乘以梯度估得外層步伐大小,除以梯度估得內層步伐大小。當f是仿射函數、呈直線,則步伐大小精準無誤。

函數網路:Multi-Objective Optimization與Scalarization。

最佳化函數們相加合併。函數的總和的梯度,等於函數的梯度的總和。

內插

古代有一種做法叫做Radial Basis Function Network。

迴歸

化作最佳化問題,實施梯度下降法。

函數網路末端套上平方誤差函數,化作最佳化問題。每個函數各自實施梯度下降法,求得係數。逆拓樸順序,方便統計總梯度。

另一種等價觀點:每個函數各自迴歸。逆拓樸順序,方便統計總誤差。總誤差是各誤差的加權總和,權重是後繼函數的梯度、亦是係數(由於是仿射函數)。總誤差是拋物線函數的加權總和,仍是拋物線函數,沒有區域最小值、擁有唯一一個最小值。有公式解!是P問題!

幾何意義不明,也許是階層迴歸。

此演算法又稱作「反向傳播法Backpropagation」。

大量數據的最佳化演算法,衍生兩種版本,offline和online,又叫做batch和stochastic。實務上使用online版本。

函數網路太深,導致梯度數值巨大與渺小、浮點數溢位與歸零。解法是數據預先正規化:減去平均、除以標準差,範圍調成[-1,+1]。如此一來,迴歸函數的係數、亦是梯度,也自然而然正規化了。關鍵字Vanishing Gradient Problem與Batch Normalization。

承上,Scalarization,梯度總和改成梯度平均值。

擬合、分類

函數網路方程式,幾何意義不明。點到它的距離,如何定義呢?

變換

函數網路就是對數據實施一連串變換。

一個有趣的觀點是摺紙:

https://zhuanlan.zhihu.com/p/23186434

一個有趣的觀點是座標系轉換、流形:

http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/

Neural Network(Under Construction!)

Neural Network

仿射函數:𝑓(x₁, x₂, ...) = a₁x₁ + a₂x₂ + ... + b

仿射方程式:𝑓(x₁, x₂, ...) = a₁x₁ + a₂x₂ + ... + b = 0

仿射函數:𝑓(x⃗) = a⃗ ᵀx⃗ + b

仿射方程式:𝑓(x⃗) = a⃗ ᵀx⃗ + b = 0

註:有人把數值x₁, x₂, ...合在一起,簡寫成向量x⃗。

註:由於外觀宛如加權平均值,因此有人把a寫成w。

註:仿射函數不是線性函數,前者多了常數項。仿射方程式即是線性方程式,兩者都有常數項。我想應該是歷史共業。

仿射方程式(線性方程式)的幾何意義是超平面!

一維空間的點:ax + b = 0

二維空間的直線:a₁x₁ + a₂x₂ + b = 0

三維空間的平面:a₁x₁ + a₂x₂ + a₃x₃ + b = 0

任意維空間的超平面:a₁x₁ + a₂x₂ + a₃x₃ + ... + b = 0

註:中學數學習慣寫成ax+by+c=0、ax+by+cz+d=0。本文當中,由於維度太多,只好重編符號。

點線距離函數:𝒹(x₁,x₂) = (a₁x₁ + a₂x₂ + b) / √a₁² + a₂²

直線函數:𝑓(x₁,x₂) = a₁x₁ + a₂x₂ + b

單位步階函數:𝓊(x) = (x < 0) ? 0 : 1

原本是想談任意的仿射函數,以下以直線函數為例。

直線有正反側,點線距離有正負號。點線距離代入𝓊,得到正側或反側。

直線擬合(二維):arg mina⃗,b i ‖ 𝒹(x⃗ᵢ) ‖²

線性分類(二維):arg mina⃗,b i ‖ cᵢ - 𝓊(𝒹(x⃗ᵢ)) ‖²

線性迴歸(三維):arg mina⃗,b i ‖ yᵢ - 𝑓(x⃗ᵢ) ‖²

已知大量點座標x⃗ᵢ、渴望的類別cᵢ、渴望的截距yᵢ,請找到一個直線函數,盡量符合已知條件,令誤差平方總和越小越好。

線性分類當中,𝒹的分母√a₁² + a₂²不影響正反側判斷,無作用、可省略。因此𝒹可以簡化成𝑓。

註:數學家沒有定義「直線函數」。本文的定義是我逕自調配的,請小心服用。眼尖讀者應該發現了本站文件存在兩種不同定義:點線距離,直線函數是標準式𝑓(x₁,x₂) = a₁x₁ + a₂x₂ + b;線性迴歸,直線函數是斜截式f(x) = ax + b。不要搞混囉!

活化函數:𝜙(x)

神經元:𝜙(𝑓(x⃗))

神經網路:𝜙(𝑓(x⃗))相互銜接,成為函數網路。

直線函數,接上活化函數,合稱神經元。神經元相互銜接,合稱神經網路。這些概念起初是藝術創作來的,不是邏輯推理來的,因此名稱非常奇葩。

神經元迴歸:arg mina⃗,b i ‖ yᵢ - 𝜙(𝑓(x⃗ᵢ)) ‖²

迴歸函數是神經元。統合了線性分類、線性迴歸。

𝜙(x) = (x < 0) ? 0 : 1是線性分類。𝜙(x) = x是線性迴歸。𝜙(x) = (x < 0) ? 0 : x是線性迴歸限制範圍,關注正側、冷落反側。𝜙(x) = eˣ / (eˣ + 1)𝜙(x) = (e²ˣ + 1) / (e²ˣ - 1)是線性迴歸限制範圍,關注inlier、冷落outlier。

損失函數:𝓁(ŷ;y)

神經元迴歸:arg mina⃗,b i 𝓁(𝜙(𝑓(x⃗ᵢ));yᵢ)

誤差可以寫成函數的形式。𝓁(ŷ;y) = ‖ y - ŷ ‖是絕對值誤差。𝓁(ŷ;y) = ‖ y - ŷ ‖²是平方誤差。

註:古人將「誤差函數」這個詞彙做為erf(x),今人只好另起一名「損失函數」做為誤差的函數。

一筆數據的誤差:𝓁(𝜙(𝑓(x⃗));y)

直線函數.改:𝑓ₚ(a⃗,b;x⃗) = a₁x₁ + a₂x₂ + b

最小化誤差:arg mina⃗,b 𝓁(𝜙(𝑓ₚ(a⃗,b;x⃗));y)

因為沒有公式解,所以迴歸問題化作最佳化問題。

實施梯度下降法,求得a₁ a₂ b。函數𝑓暨參數x₁ x₂,改成了函數𝑓ₚ暨參數a₁ a₂ b。總梯度是∇𝑓ₚ ∇𝜙 ∇𝓁相乘。

𝑓ₚ(a₁,a₂,b) = a₁x₁ + a₂x₂ + b	∇𝑓ₚ(a₁,a₂,b) = [x₁,x₂,1]ᵀ
𝜙(x) = eˣ / (eˣ + 1)        	∇𝜙(x) = eˣ / (eˣ + 1)²
𝓁(ŷ) = (ŷ - y)²             	∇𝓁(ŷ) = 2 (ŷ - y)

多筆數據的誤差:i 𝓁(𝜙(𝑓(x⃗ᵢ));yᵢ)

最小化誤差:arg mina⃗,b i 𝓁(𝜙(𝑓ₚ(a⃗,b;x⃗ᵢ));yᵢ)

梯度下降法衍生兩種版本。實務上用online版本。

offline:一次梯度下降法,梯度是∇(𝓁∘𝜙∘𝑓ₚ)(x⃗₁) + ∇(𝓁∘𝜙∘𝑓ₚ)(x⃗₂) + ...。每一步都用到所有數據,數據存取數輪。

online:數次梯度下降法,第一次∇(𝓁∘𝜙∘𝑓ₚ)(x⃗₁),第二次∇(𝓁∘𝜙∘𝑓ₚ)(x⃗₂),……。每一次只用到一筆數據,數據存取一輪。

神經網路迴歸:𝜙(𝑓(x⃗))網路實施迴歸。

神經元迴歸通常採用梯度下降法。神經網路迴歸也是採用梯度下降法,而藝名叫做反向傳播法:逆拓樸順序,統計總梯度,每個神經元各自沿著總梯度方向前進。

活化函數ReLU:總誤差是拋物線函數,原點以左被輾平成零,原點以右仍擁有唯一最小值。數學證明在此

活化函數sigmoid:總誤差沒有規律。大家不使用也不討論。

梯度下降法可以找到唯一最小值,然而online版本四處跳坑,因而衍生新問題:如何挑選數據、起點、步伐。俗稱「調參」。

神經元迴歸通常採用平方誤差。神經網路迴歸通常額外考慮各個輸出管道的誤差分布,衍生了各種損失函數softmax、cross entropy、focal loss,但是原理不明,也不再有唯一最小值。總之有了log/exp就會變得很厲害,而大家也都用得很開心,一片和諧。

神經元迴歸的幾何意義是線性分類、線性迴歸。神經網路迴歸的幾何意義仍是謎題。也許是階層線性分類、階層線性迴歸,對象是數據到迴歸函數的截距。

延伸閱讀:Universal Approximation Theorem

http://neuralnetworksanddeeplearning.com/chap4.html

當活化函數是sigmoid,神經網路可以逼近各種平滑函數。

根據Taylor Series,多項式函數們的加權總和,可以逼近各種平滑函數。

當活化函數是sigmoid,函數鏈形成了一類平滑函數。而函數網路可以視作函數鏈們的加權總和、複合。此定理是說這類平滑函數的加權總和、複合,可以逼近各種平滑函數。

然而大家習慣使用ReLU而非sigmoid。況且我們也不知道神經網路應該怎麼接。神經網路迴歸結果也不保證得到理想的平滑函數。因此這定理目前沒什麼用處。

延伸閱讀:Perceptron / Multilayer Perceptron

線性分類的時候,活化函數是𝜙(x) = (x < 0) ? 0 : 1,神經元即是「感知器」,神經網路即是「多層感知器」。這些東西目前沒什麼用處。

層層疊疊類型(Under Construction!)

概論

接好接滿,又深又廣。

神經網路沒人知道怎麼兜。大家中二病發作,瘋狂亂接亂串,自創各種造型,想要改變世界。亂槍打鳥,窮舉試誤,已經發掘許多漂亮網路,卻無法用數學證明其結構是否合理,已然是藝術創作。

Feedforward Neural Network(前饋神經網路)

http://playground.tensorflow.org/

深度:經古人實測,無論多少層,效果跟三層沒兩樣。

廣度:沒人知道正確數量應該是多少。

活化函數:sigmoid。

深層無效的原因也許是:

一、仿射函數的函數網路,仍是仿射函數。增加層數淪為白工。

二、接上sigmoid可以解決上述問題。然而sigmoid的功用是引入限制範圍,關注inlier、冷落outlier。當限制範圍過小,可導致迴歸函數鬆脫掉落,喪失迴歸功效。增加層數淪為白工。

ICPC 4359

Convolutional Neural Network(摺積神經網路)

先備知識「Convolution」和「Image Filtering」。

仿射函數(點積與偏差)推廣成摺積。

摺積:窮舉各種位移量,並且實施點積。

換句話說,大量神經元共用同一組係數,銜接位置形成區塊。等寬間隙可以遏止overtraining或說是overfitting。關鍵字dilated convolution。

理論上神經元可以拆散,實務上沒人這樣做。梯度下降法挑選起點時,令係數相同;梯度下降法執行過程中,梯度相同、步伐相同、係數仍相同。

輸入是圖片,則是二維摺積。二維摺積可以拆散成一維摺積,最後再累加合併,降低時間複雜度。

深度:目前是100層上下。

廣度:沒人知道正確數量應該是多少。

活化函數:ReLU。

點積的幾何意義是投影量projection,統計意義是相關程度correlation。仿射函數是點積外加常數。

經典版本是圖片辨識的VGGNet、物件偵測的R-CNN。

https://www.youtube.com/watch?v=ILsA4nyG7I0
http://cs231n.stanford.edu/syllabus.html
http://www.vision.rwth-aachen.de/media/course/WS/2015/computer-vision/cv15-part16-categorization4.pdf
http://kaiminghe.com/
http://www.rossgirshick.info/
http://chuansong.me/account/girlswhocode
dropout 去掉一些沒用的點
pooling 取總和或最大值
一種是二分資料,以data point為主角
一種是區域摺積,以pixel為主角
兩者之間應該有duality

Residual Neural Network(殘差神經網路)

CNN改良版本。效果超群,原理不明。

難道是difference of Gaussian?

梯度下降法可以視作不動點遞推法。難道是加上x的原因?

仿射函數與ReLU,雙層似乎會形成山谷。難道是跳兩層的原因?

電路設計類型(Under Construction!)

概論

建立訊號迴路、建立功能模組。

Recurrent Neural Network(遞迴神經網路)

製造迴圈,處理序列。好處是餘韻繞梁,壞處是難以計算。

學術前沿正在嘗試用CNN取代RNN。

經典版本是自然語言處理的LSTM Network。

Encoder-Decoder Network(編碼解碼網路)

先階層分解、再階層合成。

經典版本是物件偵測的RetinaNet、照片轉模型的Volumetric CNN。

Generative Adversarial Network(生成對抗網路)

一個生成、一個判定。

經典版本是圖片轉譯的Conditional GAN,作品是pix2pix。

備忘

由於無法預測數據分布,因此任何事先指定的Representation(例如sigmoid和kernel trick)都是沒有意義的。添加機率(例如貝氏學習)也是同樣沒有意義的。

個人推測正確的解法是:改變函數之間的輸入輸出連接方式。從最簡單的函數開始(例如線性函數),以函數的複合來得到各種特別的函數,或說是特別的Representation。

一個值得關注的地方是將各種Representation視作模組,經過適當突變(改變單一函數)、適當排列組合(改變階層架構)之後,可以得到更有用的模組。就好比人類發明機器的歷史過程。人類的智力架構可能也類似於此。

一個函數的輸出的重新排列組合,可以視作鏡射,鏡射是線性變換。至於函數之間的輸入輸出連接方式的重新排列組合,可以視作函數們複合一個線性函數。反過來說,函數的複合具備了重新排列組合的功效,而階層最佳化自然能找到適當的排列組合。

我就一介民科。以上僅供參考。

Neural Network(Under Construction!)

楔子

Neuron與Perceptron

生物學家、醫學家研究動物,發現了動物藉由神經來接收與傳達訊息,神經的基本單位是「神經元」。後來又發現,動物的大腦由大量神經元構成。

計算學家、數學家仿照神經元,發明了「感知器」,用來分類和預測事物。後來又發現,感知器其實就是線性分類器。

於是科學家大膽猜測:大腦似乎是一大堆線性分類器,思考似乎是一連串線性分類!科學家正在深入研究當中。

人格、行為、情緒、本能、直覺、天分、三觀、智力、智慧,這些抽象的心理概念,也許就是一堆線性分類器。

一大堆Neuron與Perceptron

神經元、感知器能做什麼事?

數學家發現感知器可以分類。一個感知器,製造筆直的分界線。一連串感知器,得以兜出各式各樣的分類效果,製造曲折的分界線。

這個發現相當重要。適當地排列組合感知器,就擁有辨識能力。大腦的辨識能力很可能源自於此!

數學家發現感知器可以算數學。一層可兜出邏輯運算NOT和AND和OR,兩層可兜出邏輯運算XOR和XNOR。進一步從邏輯運算兜出數值運算。進一步從數值運算兜出演算法。

這個發現相當重要。適當地排列組合感知器,就擁有判斷能力、計算能力。大腦的判斷能力、計算能力很可能源自於此!

大腦擁有大量神經元,應該得以進行非常深奧的推理,甚至超越邏輯所能描述的現象。例如由愛生恨、愛之深責之切、愛到深處無怨尤,大腦經常產出超乎理性的結論。

然而科學家迄今還不知道大腦的詳細結構。比如說「由愛生恨」的神經元如何連結呢?沒有人知道!科學家正在克服這個問題。

http://zhuanlan.zhihu.com/p/20561464

Artificial Neural Network

「人工神經網路」、「類神經網路」。大量感知器串聯成網路,建立階層架構,模仿大腦!

然而我們往往不知道人工神經網路該兜成什麼樣子。於是大家捨難取易──選擇特定款式,藉由調整權重,達到分類效果。

真實神經網路,神經元會增生、死亡、重新連結。人工神經網路,格式固定,感知器不會增生、死亡、重新連結,分類效果較差。

為什麼不改成動態版本呢?因為時間複雜度。動態版本的計算量更加巨大,而現今計算機的計算力仍嫌不足。

近況

人工神經網路的潛力,遠遠超越目前的演算法,遠遠超越我們以窮舉法、分治法、動態規劃、貪心法所設計出來的演算法。最近電腦打敗人類圍棋冠軍,正是使用人工神經網路,棋風宛如真人。

http://www.zhihu.com/question/39905662/answer/88895000

學術單位正在研究人工神經網路的功效,公司行號正在製作人工神經網路的晶片。又由於分散式計算的崛起,計算機的計算力增加了,使得人工神經網路的研究略有進展。人工神經網路正夯。

http://www.zhihu.com/question/24825159/answer/29427405

各個領域的專家,也開始關注神經系統。關鍵字如neuroscience、neural computing、neural engineering,請讀者自行研究。

遠景

人工神經網路應該可以效仿編譯器自舉。我們總是用人腦設計演算法,既然人腦是神經元構成的網路、演算法是感知器構成的網路,理所當然我們能用人工神經網路設計人工神經網路。

學以致用、神來之筆,這些抽象的心理概念,也許就是自舉。

邏輯運算 → 數值運算 → 分類運算 → 算法

古人發明了邏輯運算(藉由電路),再用邏輯運算兜出數值運算(藉由二進位),再用數值運算兜出演算法(藉由流程圖)。至此是地球人的最新進度。

目前計算學家正在嘗試:用數值運算兜出分類運算(藉由數值方法),再用分類運算兜出演算法(藉由感知器)。讓我們拭目以待!