在 autoencoder 的模型裏面,會希望以一個 unsupervised 方法來做到特徵萃取的目的。
你也可以說他是一種降維的方法或是有損壓縮的方法。
基本上就是透過一個線性轉換將原來的特徵,映射到比較低維度的特徵空間上。
繼續閱讀原本是算到今天就會發完 30 天的文章了,不過系統似乎把第一天跟第二天的文章判定是第一天的了。
我記得我最早參加鐵人賽的時候,一次接受兩個挑戰,分別寫了 Julia 語言以及基礎的機器學習。
這次的系列文章是在基礎之上,讓大家得以理解不同模型之間的來龍去脈以及變化性,這樣才有辦法更進一步進展到深度學習的領域。
完成這次鐵人賽的意義在於讓大家理解模型的來龍去脈,以及為什麼要用什麼樣的數學元件去兜一個模型。
當你遇到問題的時候,不可能會有一個 ready-to-use 的模型等在那邊給你用,對於人工智慧的技術應用,你必須要為自己所面對的問題和狀況自己去量身訂作自己的模型。
是的!你沒看錯,必須要由領域專家去理解自己要的是什麼,然後自己做出專門給這個情境的模型。
當你的情境非常特殊的時候,讓深度學習專家來深入其他知識領域是非常花時間的。如果以領域專家及深度學習專家之間以合作模式進行,那將會花費更高的成本在溝通上,因為人工智慧的技術應用需要對特定領域非常敏感。我個人認為只有領域專家繼續鑽研成為深度學習專家才有辦法徹底解決特定領域的問題。當然這條路非常的漫長,等於是需要一個特定領域的博士,以及深度學習的博士的等級。這些問題,只有當領域專家自己 理解 之後,不是只有 解決 問題,才能夠算是真正的 解決 了。
這系列文獻給擁有機器學習基礎,想繼續晉升到深度學習領域的朋友們。
感謝大家的支持!
在前面的 Transformer 的文章中有提到了 auto-regressive 的特質。
在 When Recurrent Models Don’t Need to be Recurrent 這篇文章以及他的論文當中又在重述了這件事。
他們探討了是不是所有 recurrent 模型都可以被換成 auto-regressive 的模型呢?
繼續閱讀繼 Attention model 之後,由於 recurrent 架構的特性一直無法善用 GPU 的資源做加速。
這時 Google Brain 團隊就看到別人在用 self-attention 機制,也是基於 recurrent 架構,解決了不少問題,用在閱讀理解、摘要、文字蘊涵(textual entailment)及語句表示的問題上。
Google Brain 團隊就提出了史上第一個不需要依賴任何 recurrent 架構的 self-attention 機制模型,Transformer。
(跟變形金剛一樣的名字耶!帥吧!)
繼續閱讀繼 Seq2seq model 之後,真正可以做到 end-to-end 翻譯的,很多都是用了 attention model。
Attention model,正確來說,不是指特定的一個模型,他是模型的一個部份或是一種設計,所以有人叫他 attention mechanism。
Attention model 被用在機器翻譯、語句的摘要、語音辨識、影像理解(image caption),算是用途非常廣泛。
繼續閱讀當大家正在開心的用著 RNN 跟 LSTM 等等模型之時,就有人跳出來了。
不要再用 RNN 為基礎的模型了!!
為什麼呢?
基本上裏面提到 vanishing gradient 的問題一直沒有解決以外,還有沒有辦法善用硬體的侷限在。
像這種循序型的模型,模型天生無法平行化運算,所以 GPU 就無用武之地,只能靠 CPU 慢慢跑。
那有什麼解決辦法呢?
Self-attention model
Attention Is All You Need 這篇文章提出了 Transformer 這個模型,基本上這個模型使用了 self-attention 的機制。
要講這個之前我們要先聊聊 attention model。在 attention model 之前,sequence-to-sequence model 做出了重大的突破。一個具有彈性,可以任意組合的模型誕生了,管你是要生成句子還是怎麼樣。原本是只有 RNN 一個單元一個單元慢慢去對映 X 到 Y,sequence-to-sequence model 將這樣的對應關係解耦,由一個 encoder 負責將 X 的資訊萃取出來,再經由 decoder 將資訊轉換成 Y 輸出。
但是 LSTM 還是沒辦法記憶夠長的,後來 attention model 就誕生了。乾脆就將 encoder 所萃取到的資訊紀錄下來,變成一個,然後再丟到 decoder 去將資訊還原成目標語言,就可以完成機器翻譯了。
但是這種方式還是不脫 recurrent model,那就乾脆做成 self-attention 的機制,也就是這邊的 Transformer,完全摒棄了 recurrent 的限制。
Autoregressive generative model
接著是今年6月的文章 When Recurrent Models Don’t Need to be Recurrent,當你的 recurrent model 不必再 recurrent!
也就是將 RNN 的問題又重述了一遍,並且提出大家都漸漸以 autoregressive generative model 來解決這樣的問題。
這篇算這引言,我接下來會開始一一解釋模型。
接續上一篇。
Recurrent neural network
那大家所熟知的 RNN 是怎麼回事呢?我們把假設改了一下:
- 狀態都是 連續 的。
- 時間是離散的。
- 內在狀態是不能被觀察的,外在狀態是可被觀察的。
- 以一個 隨機向量 作為一個狀態。
- 允許在每個時間點給輸入
- 引入非線性
首先,在這邊的狀態會以一個向量做表示,大家應該也知道 RNN 的 input 是一個向量,當中的狀態也是一個向量,最後的 output 也是一個向量。而這些向量當中的的值都是連續的 $\mathbb{R}^n$(假設向量大小為 n),不像上面的模型都是離散的 $k$(假設有 k 個狀態),所以在空間上的大小可以說是擴大非常多。
接下來我們來看看時間的狀態轉換:
在 RNN 中一樣含有內在狀態,但不同的是 RNN 可以在每個時間點上給輸入向量($\mathbf{x^{(t)}}$),所以可以根據前一個時間點的內在狀態($\mathbf{h^{(t)}}$)跟輸入向量去計算輸出,或是外在狀態($\mathbf{y^{(t)}}$)。
所以大家會在一些論文上看到模型的狀態關係式長下面這個樣子:
$$
\mathbf{h^{(t)}} = f(\mathbf{x^{(t)}}, \mathbf{h^{(t-1)}}) = \mathbf{x^{(t)}} W_x + \mathbf{h^{(t-1)}} W_h + \mathbf{b}
$$
$$
\mathbf{y^{(t)}} = g(\mathbf{h^{(t)}}) = sigm(\mathbf{h^{(t)}} W_y)
$$
這邊特別引入了非線性的轉換($sigm$)來讓模型更強大。
隨著從一開始的馬可夫模型到這邊應該對這幾個模型有點感覺,其實 RNN 可以說是很大的突破,在假設上放了很多元素讓模型變得更強大。
Long short-term memory
人們為了改進 RNN這個模型的記憶性,希望他可以記住更遠以前的東西,所以設計了 LSTM 來替換他的 hidden layer 的運作模式,後期更有 GRU,還有人說只需要 forget gate 就有很強大的效能的 MGU。這些都是對於記憶性做的改進,個人覺得這些在工程上的貢獻比較大,真正學術上的突破其實還好。
今天的整理就先到這邊啦!