ai10min - cccbook/py2gpt GitHub Wiki
十分鐘看懂現代 AI
ChatGPT 的出現令人突然發現 AI 技術竟然如此強大 ...
這樣強大的技術,並非突然發生的,而是醞釀了七十年
AI 的最核心觀念是優化 (Optimization) , 優化的目標是損失函數 (Loss Function) ,而優化的演算法是 梯度下降法 (Gradient Descendent) ...
想理解《梯度下降法》請務必看完下列文章
但是上述文章中,採用《數值偏微分》的方式計算梯度,速度很慢。
如果採用《反傳遞算法》計算《偏微分與梯度》,那麼就會快上 n 倍 (n 是該損失函數的所有參數數量,也就是計算網路的參數數量)
Karpathy 的 micrograd 專案用非常精簡的程式碼,實作了一個梯度引擎,請參考下列文章
Geoffrey Hinton 在 1986 年和他的老師一起《重新發明》了《反傳遞演算法》,讓神經網路的計算快上很多,奠定了現代 AI 的基礎,這個算法一直用到現在,仍然是 AI 當中最重要的算法。
1998 年 Yan LeCun 與 Yoshua Bengio 等人發表了 LeNet ,提出了卷積神經網路 CNN 的觀念,在影像辨識領域效果很好,想理解這類網路請參考下列文章
2018 年,圖靈獎頒獎給 Geoffrey Hinton, Yan LeCun, Yoshua Bengio 等三人,這是圖靈獎首次頒獎給《神經網路領域的研究者》 (也是到目前為止唯一的一次)。
早期的神經網路,通常用 Sigmoid 函數作為非線性函數,現在則通常用 ReLU 系列的函數取代 Sigmoid 。
Sigmoid(x) 在 x 值太小或太大時,斜率幾乎都為零,因此很容易導致梯度消失。
因此早期的神經網路通常只有 3 到 4 層,超過 10 層的神經網路幾乎沒有見過。
ReLU 則只有在 x < 0 時斜率為零,搭配神經網路中 $W X + b$ 這樣的 b 值做為門檻,形成 $ReLU(W X + b)$ 這樣的浮動的閥門,這個搭配讓神經網路變得較好控制。
於是神經網路的層數可以變得更多更深,但是卻還可以控制,不容易梯度消失,因此《新一代的神經網路技術》被改稱為《深度學習》。
後來在殘差網路 (ResNet) 出現之後,透過將輸入向前傳遞,讓更深的神經網路也可以運作得很好,甚至達到上百層之多。
神經網路不只可以用在影像辨識,也可以用在自然語言領域,例如 RNN 循環神經網路 (Recurrent neural network) 就能用來學習如何寫文章
但是 RNN 表現不夠好,於是有人提出具有長期記憶的網路稱為 LSTM (Long short-term memory)
於是這類網路開始展現出令人驚訝的語言學習能力,像是 Karpathy 就在做了一些 RNN/LSTM 實驗後,寫了下列文章
Karpathy 的實驗顯示 RNN/LSTM 可以學會寫文章,包含寫《莎士比亞小說/維基百科/論文/C語言程式》等等 ...
後來在 2014 年 Google 提出 詞向量 的觀念之後,發現使用向量表示詞彙,對自然語言理解有很大幫助。
在 PyTorch/Tensorflow 這些神經網路套件出現之後,程式中只要加入一個 embed 層 ,就能將詞彙轉換成向量
這種方式完美的將詞向量的觀念融入到神經網路當中
2018 年,Google 在 Attention Is All You Need 這篇文章中提出了 Transformer 模型 (Encoder-Decoder),造成了革命性的進展,後來 OpenAI 擷取 Transformer 的一半 (只有 Decoder), 創建了 GPT。
GPT 雖然很厲害,可是卻不好用,因為使用者必須下達很精確的問句,才能得到夠好的回答,於是後來 OpenAI 為 GPT 在包裝了一層,透過該層將人類語句轉換成 GPT 聽得懂精確輸入,才創造出 2022 年令人震驚的 ChatGPT
如果你想了解 GPT 的原理,可以參考下列文章
然後如果你想進一步深入 GPT,可以閱讀 Karpathy 的下列程式專案
- https://github.com/karpathy/minGPT
- https://github.com/karpathy/llama2.c
- https://github.com/karpathy/llm.c