Last Updated on 2023-09-04 by Clay
介紹
論文連結: https://arxiv.org/abs/2212.13345
本篇研究工作的作者是鼎鼎大名的深度學習之父 Geoffrey Hinton,最初撰寫本篇論文時仍是 Google Brain 的研究員(於 2023 年離開)。
眾所皆知,Hinton 先生曾經提出了奠基現代深度學習的反向傳播演算法(backward propagation),而本篇論文正式介紹了類神經網路的一種新型學習方式,並成功證明在一些小型問題上有足夠的效果、值得深入研究。
這個新型的學習方式被稱為前向-前向演算法 Forward-Forward algorithm —— 跟 Hinton 大師過去所提出的 Forward-Backward algorithm 形成了強烈的對比。
Forward-Backward algorithm 是通過一次前向傳播,到了輸出層後比較模型的輸出與標準答案之間的落差(稱其為 loss),再透過偏微分計算出梯度,透過反向傳播更新模型中的所有權重。
而 Forward-Forward algorithm(以下簡稱 FF)正是使用『兩個前向傳播』來取代經典的『前向-反向傳播』:第一個前向傳播使用正面資料(postive data),第二個前向傳播則使用合成的負面資料(negative data)。
在 FF 模型中,類神經網路中的每一層都有自己的目標函數,該目的函數被稱為 goodness,可以理解為該層中神經元激活數值的加總。
而我們希望能夠讓正面資料的 goodness 越高、負面資料的 goodness 越低 —— 也即是讓模型在面對正面資料時神經元活躍的程度才會較高。
反向傳播的反思
此論文對於過往深度學習的反向傳播(backpropagation)提出質疑,因為雖然過去十年 Deep Learning 中使用了大量參數和 Gradient Descent 完成了許多任務,但是至今仍未證明人類的大腦真的存在『反向傳播』這一活動。
所以,作為人類大腦皮質學習的模擬,反向傳播顯然是不夠完美的。(這裡,我們暫時不討論 AI 是否真有必要『完全地』模仿人類)
過去的反向傳播並不是沒有存在限制的。比方說,反向傳播需要對前向傳播的計算有完美的理解,才能正確地計算導數。也就是說,如果我們在前向傳播中存在著黑箱或霧區,我們就沒有辦法進行反向傳播的學習。
但是,黑箱對於 Forward-Forward Algorithm 毫無影響。
在沒有完美認知的前向傳播模型的情況下,現存有多種強化學習(Reinforcement Learning)的方法:此類方法不外乎隨機地改變權重或神經活動,並將這些變化與評估函數的結果進行關聯。
但是以研究、觀察的角度來說,強化學習 (RL) 具有高度的變異性。因為當許多變量都同時在變化時,我們難以觀察到『單一變量變化的效果』。
而 Forward-Forward Algorithm(以下簡稱 FF)的優缺點如下:
優點
- 前向計算的細節未知,仍能進行訓練
- 將序列資料(series data)通過類神經網路時可以同時進行學習,無需儲存神經活動資訊或停止以傳播誤差導數
缺點
- 速度與反向傳播相仿或稍慢
- 在本篇論文中所研究的問題上泛化能力沒有反向傳播來得好
FF 模型細節
評估方式: goodness 計算
Forward-Forward Algorithm 是一種 greedy 的多層學習過程,受到
- Boltzmann machines(Hinton and Sejnowski, 1986)
- Noise Contrastive Estimation(Gutmann and Hyvärinen, 2010)
啟發。
正向傳播在真實資料上運行並調整權重以增加每個 hidden layer 的 goodness。負向傳播(並非反向傳播)則調整權重以降低每個 hidden layer 的 goodness。
論文中探討了的 goodness 評估方法 —— 神經網路的平方和以及平方活動的負和。並且,論文中也提到了目前僅測試了一部分的簡單任務如 MNIST 和 CIFAR-10,所以仍然有許多其他可能的評估方式,當前的評估方式不一定就是最佳解。
假設一個層的 goodness 函數僅僅是該層中『線性整流神經元活動的平方和』,學習的目標是讓真實資料的 goodness 高於某個閾值(threshold)、而負面資料的 goodness 低於該值。
具體來說,目標是當輸入向量為真實資料的概率由應用邏輯函數於 goodness 提出,正確地區分輸入向量為正面資料或負面資料。
每一層中的正規化
在 FF 模型的每一層隱藏層中,我們是將神經元的活躍值平方後加總,然後透過計算跟期望的活躍數值之間的差距得到梯度,並更新單層的權重。
並且,這個期望值是根據我們的資料屬性而變化的,如果是正面資料(真實資料)則希望神經元活躍數值較高、如果是負面資料(合成的虛假資料、錯誤標籤資料)則希望神經元活躍數值較低。
所以,FF 模型並不是就不用計算梯度了,只是把原本從最後一層(輸出層)的結果反向傳播給每一層神經網路這一過程移除,改為每一層在進行前向傳播的同時就調整權重。
但這又引出了另外一個問題:如果將第一個隱藏層的活動數值直接傳遞給第二個隱藏層作為輸入,則第二個隱藏層就可以透過第一個隱藏層中的活動向量直接判斷出是正面資料或是負面資料,進而學習不到資料中的重要特徵。
為了防止這樣的狀況,我們需要將前一層的輸出進行標準化。這樣就會消除特別高峰的活躍神經元現象,讓第二層隱藏層只能看到相對的活躍程度而較為無法直接從前一層的輸出直接判斷出資料是正面或負面,進而影響第二層的神經元去學習輸入資料中的重要特徵。
備註:個人的一些想法是,這是在激活函數(activation function)使用 ReLU 的情況,所以會將負數值設為零而正數值不變,不確定要是採用如 sigmoid 或 tanh 之類的激活函數是否就不需要進行正規化?然而,被壓縮的正數也可能會影響效果,可能之後要做實驗測試。
MNIST 實驗
論文中的實驗資料大部分都是基於知名的手寫數字辨識資料集 MNIST。在一個輕量且有效率的 CNN 模型中,MNIST 大約會得到 0.6% 的測試誤差(test error rate),而在 FF 模型中,通常大概約會得到 1.4% 的測試誤差,若是使用各種標準工具(如 dropout)或是 label smoothing,可以將其降低到大約 1.1% 的測試誤差。
另外,還可以透過將無監督式學習與有標籤的監督式學習結合,進一步提升 FF 模型的效果。
負面資料合成
為了使 FF 模型專注於學習圖像中的長距離的特徵形狀關聯,我們可能有必要創造一些錯誤合成的圖片,而這種破壞圖片的方式可以有非常多種形式。
論文中提到了,我們可以通過隨機將兩個圖片進行合成,或是用過濾器的方式來模糊圖像。
這種資料可以用於沒有標籤的無監督式學習。
監督式學習
如果我們只對特定一個任務感興趣,我們自然會採用監督式學習的方式來完成任務。以 MNIST 資料集來說,我們可以將原本的圖片當作正面資料,並將錯誤標籤的圖片當作負面資料。
在圖片中放入標籤的方式,以 MNIST 舉例,每種標籤都可以被轉換成 one-hot encoding 的格式,比方說 1 這個數字,就可以被表示成:
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
而這個數值,看是否要做 label smoothing,之後就可以取代圖片的前 10 個像素。也就是說正面資料跟負面資料唯一的區別就在於標籤。
而我們每次輸入時,可以同時輸入正面資料跟負面資料。
最後做預測時,其方法是把除了第一個隱藏層以外的所有隱藏層輸出的 goodness 加總,並且同時做 10 種標籤的預測,最後取標籤中 goodness 最高者為預測答案。
論文實驗復現
由於對論文內的 Forward-Forward Algorithm 感到興趣,我嘗試復現了論文的模型,並在論文中提到的兩個資料集上進行了訓練。
我復現的 FF Model GitHub 連結:https://github.com/ccs96307/forward-forward-algorithm-pytorch-implemented
我在 MNIST 上取得了 0.96 的分數、在 CIFAR-10 上取得了 0.67 的分數。
除此之外,我還多做了一個 IMDB 的情感分析任務。因為論文中提到的都是 CV 的任務,而我個人比較常接觸 NLP。
而在 IMDB 上,我也取得了 0.92 的 Accuracy。
待補充。
References
- 論文連結
- Forward-Forward Algorithm - Medium
- Using the Forward-Forward Algorithm for Image Classification