본문 바로가기
딥러닝&머신러닝/Paper Review

The Forward-Forward Algorithm: Some Preliminary Investigations 논문 리뷰

by David.Ho 2023. 3. 9.
728x90
반응형

Forward-Forward

Backpropagation을 완전히 대체하는 알고리즘을 소개한다는 의미보다는 딥러닝의 새로운 연구 방향을 제시함.

 

[Abstract]

논문의 목표: 뉴럴 네트워크의 새로운 학습 방법과
작은 문제(작은 데이터?)에 대해 잘 작동된 입증 결과를 소개

 

핵심 내용: The Forward-Forward algorithm(Two Forward passes)으로 forward와 backward로 이어지는 첫번째(순방향) 학습과 두번째(역전파(backpropagation))학습을 대체합니다.

- 각각 Positive / Negative pass라고 부르며, Positive pass는 Real data에 최적화되는 것(high goodness)을 목표로 하고, Negative pass는 False data에서 최대한 멀어지는 것(low goodness=적은 영향(?))을 목표로 합니다.


(Positive pass와 Negative pass를 분리할 수만 있다면 Negative pass는 오프라인에서 완료할 수 있어 Positive pass프로세스도 간단해지고 여러 저장활동을 없애서 연산량도 줄고 레이어 제곱합/빼기 등에서 발생할 수 있는 에러 가능성도 줄일 수 있다.)

 

1 What is wrong with backpropagation

[문제인식]

(딥러닝의 놀라운 성공은 지난 10년동안 확립된 효과적인 확률적 경사 하강법많은 매개변수 그리고 큰 데이터였습니다.)

- Gradients는 보통 Backpropagation을 사용하여 계산을 하는데 실제로 뇌의 학습과 유사한지 혹은 다른 방법이 있는지 궁금증이 있다.

(Backpropagation의 많은 노력의 결과에도 불구하고 실제 neurons이 학습하는 것과는 차이가 있다.)

실제로 Cortex(피질)은 명시적으로 오류에서 파생되는 어떠한 것도 neural activities(신경활동)을 할 때 후속으로 Backward pass를 하지 않는다.

 

The top-down connections from one cortical area to an area that is earlier in the visual pathway do not mirror the bottom-up connections as would be expected if backpropagation was being used in the visual system. Instead, they form loops in which neural activity goes through about half a dozen cortical layers in the two areas before arriving back where it started.

 

정말 뇌가 오차역전파 방식으로 학습을 한다면 있어야 할 backward pass는 존재하지 않고 대신에 시냅스의 처음으로 돌아가지 전에 Cortical layer를 지나는 과정에서 모종의 루프를 형성한다는 내용입니다.

 

 

Forward-Forward 방식은 위와 같이 Unit(layer) 단위로 Local Update가 진행됩니다.

-       인간의 뇌는 중단되는 시간이 따로 없이 다른 sensory processing stage을 통해서 sensory data을 전달할 필요가 있고

         즉각적으로 learning될 수 있어야 한다. (그런데, Error derivatives를 propagate하면 중단되는 시점이 생김)

-       Bacpropagation으로는 real time으로 inference와 learning이 불가함

-       Backprogation 모델의 forward계산의 정확한 knowledge 필요. , differentiable 없는 black-box 대해 forward-pass한다면 backpropatgation못하는 문제점이 있음(이에 대한 방안으로 강화학습이 있지만 강화학습은 high variance 가진다는 문제점을 가짐)

Black-box(블랙박스):
딥러닝에서 말하는 블랙박스란 결과는 인간과 유사하게 또는 원하는대로 도출할 수 있지만 어떻게, 무엇을 근거로 그러한 결과가 나왔는지 알 수 없는 것을 말합니다. 딥러닝이 학습하면서 하는 일은 절대적인 정답을 찾는 것이 아닙니다

 

[FF알고리즘 장/단]

장:

(1)   강화학습을 사용할 필요가 없다.

(2)     Neural activities 저장하지 않거나 error derivatives propagate하지 않고도 sequential data pipelining하면서 학습이 가능

 

:

(1)     경우에 따라 backpropagation보다 느림

(2)     Generalized되지 않았기 때문에 다양한 task, application 사용하지 힘듦.

(3)     데이터셋으로 학습된 model 학습능력을 내기위해서는 backpropagation 사용 해야함

 

 

2. The Forward-Forward Algorithm
[본론]

FF알고리즘의 저자는 볼츠만 머신과 Noise Contrastive Estimation로 모티브로 개발된 A greedy multi-layer learning procedure라고 밝히고 있습니다.

 

Two forward passes는 정확히 같은 작동을 합니다.


(but on different data and with opposite objectives.) 다른 데이터(Positive data, Negative data) - 다른 목표(최적화, 최대한 멀어지는 학습)를 가지고 학습을 진행합니다.

즉, positive pass와 negative pass를 가지고 나누어 weight를 update합니다.


Positive pass는 real(positive) data에서 작동하며 매 hidden layer에서 goodness을 향상시키기 위해 weight를 조절합니다. 반대로 negative pass에서는 negative data에서 작동하며 매 hidden layer에서 goodness를 낮추기 위해 weight를 조절합니다. (그래서, FF를 사용하기 위한 충분 조건은 different data와 opposite objectives를 가져야하는 것입니다.)

 

Goodness function 정의:
해당 레이어 안에서 rectified linear neurons activities 제곱(square)

 

FF learning real(positive) data 대해서는 특정 threshold보다 높게 goodness 출력되도록 하고 negative data 대해서는 threshold보다 낮게 측정되도록 하는 것이 목적입니다.

 

예를 들어 학습에 SSE(sum of squared)를 사용한다면, input vector가 positive data에 최적화될 확률 p(positive)는 다음과 같습니다.

σ= goodness (적합도, 로지스틱 함수)
θ= threshold (상수값)
y= layer norm을 하지 않은, 이전 레이어에서 넘겨받은 output
yj​= y의 j번째 unit (스칼라 or 벡터)
p(positive)=σ(j∑​yj2​−θ)

 

σ는 logistic function(i.e. sigmoid)이며 θ는 threshold이며 yj는 layer normalization 전의 j번째 hidden unit의 activity값입니다.
(위의 objective function이 loss function이 되고 Pytorch 기준으로 loss.backward, optimizer.step을 통해 weight update가 가능합니다.)


negative data는 외부에서 제공되거나 neural net의 top-down connection을 이용해서 predict되어 생성이 가능합니다.

 

 

2.1 Learning multiple layers of representation with a simple layer-wise goodness function


첫 번째 hidden layer의 activities를 두 번째 hidden layer의 input으로 사용하기 위해서는???
(1) first hidden layer의 activity vector length로 positive와 negative data를 구분합니다.
(2) 학습하는데 새로운 features은 필요가 없다.

 

위의 내용을 위해서,
FF는
length of the hidden vectornormalizes 하여 next layer에 사용합니다.
           ㄴnormalizes는 first hidden layer의 goodness를 결정했던 information을 제거한다.

 

next hidden layer는 first hidden layer의 relative activities의 정보만 사용합니다.

           ㄴ relative activities는 layer-normalization으로 영향받아 없어지지 않은 것

 

다른 표현으로는,

activity vector는 length와 orientation를 가지고 있습니다.

length는 goodness를 정의하는 사용되고, orientation는 오직 next layer에 전달되기 위해서 사용됩니다.

 

3. Some experiments with FF

FF algorithm이 상대적으로 작은 neural network에서 어떻게 작동되는지 소개할 것입니다. 그리고 후속 논문에서는 대규모 신경망에서의 적용을 연구하여 소개할 것입니다.(연구 방향성)

 

3.1 The backpropagation baseline

논문에서는 MNIST 데이터셋 위주로 실험했습니다. Backpropagation를 사용하는 잘 설계된 CNN이 평균 0.6% 정도의 오차를 보이는데, FF를 사용했을 때는 약 1.4% 정도의 오차를 기록했습니다. 기존에 제안되었던 backprop의 다른 대체재들이 2% 이상의 오차를 보이는 것에 비교하면 꽤 괜찮은 성능을 보여주는 셈입니다.

 

3.2 A simple unsupervised example of FF

FF를 사용할 때 고려해야 하는 점은 크게 2가지가 있습니다.

(1) 좋은 negative data를 사용하면 좋은 representation을 얻을 수 있는가?

(2) 좋은 negative data란 무엇이며, 어떻게 얻을 것인가?

 

참고로 본 논문에서는 직접 negative data를 만들어서 학습에 사용했습니다.

지도학습에서 Contrastive Learning 기법을 사용할 때는, 먼저 별도의 label 정보 없이 입력 벡터를 representation vector로 변환합니다. 이후 변환된 벡터들을 간단한 linear transform을 통해 logit으로 바꾸고, softmax에 넣어서 각 label에 대한 확률값을 얻는 구조로 되어 있습니다.

 

위에서 선형변환을 통해 logit을 얻는 과정에는 backprop이 필요 없습니다. 그냥 간단한 지도학습이죠. [a, b, c, d] 라는 벡터를 주고 [3] 값이 나오도록 변환하는 가중치 행렬을 구하기만 하면 되니까요.

 

FF는 real vector를 positive example로 주고, false vector를 negative example로 주어서 간단한 지도학습을 시킨다는 점에서 이와 유사한 학습 방식이라고 할 수 있습니다.

 

논문에서는 False data를 위와 같은 방식으로 직접 만들어서 넣어주었습니다.

(1) 먼저 positive data에 0과 1로 구성된 임의의 마스크를 만들어서 각 픽셀끼리 곱합니다.

(2) (1-mask) 값을 갖는 반전된 마스크를 만들어서 negative data에 곱합니다.

(3) 두 데이터를 더해서 hybrid image를 생성합니다.

 

4개의 FC 레이어로 구성된 네트워크로 100 epoch 학습 결과, 1.37%의 에러율을 보였다고 합니다. 단, 이는 마지막 3개 레이어의 출력값(activity vector)들을 normalize해서 softmax에 입력했을 때의 결과고, 첫 레이어의 출력을 나머지 3개 레이어에 입력으로 넣었을 때는 오히려 성능이 저하되었다고 하네요.

또, FC layer를 쓰는 대신 가중치를 공유하지 않는 local receptive field도 (=CNN) 사용해봤는데 성능이 향상되었다고 합니다. 60 epoch 학습 후에 1.16%의 오차를 보였고, 균등한 네트워크 활성화를 위해 peer normalization을 사용했습니다.

 

3.3 A simple supervised example of FF

Unsupervised case처럼 복잡한 마스킹이 필요 없습니다. label 정보를 각각 입력값에 추가해주면 됩니다.

 

구체적으로는 positive data에는 정답 레이블을 주고, negative data에는 오답 레이블을 줍니다.

이 경우, 두 data의 차이는 오직 레이블이기 때문에 추론에 필요 없는 feature를 무시하게 됩니다.

MNIST의 경우, Convolution 처리를 용이하게 할 수 있도록 검은색 경계선을 가지고 있습니다. 첫 10개의 픽셀값을 각 label의 one hot vector로 바꿔주면, 첫 레이어가 뭘 배우고 있는지 쉽게 확인할 수 있습니다.

 

[inference는 어떻게 하는가?]

학습이 끝나고 inference 시에는 값을 전부 0.1로 초기화한 one hot label vector를 붙여서 넣어주면 된다고 합니다.

논문에서는 학습한 네트워크에서 첫 번째 레이어를 제외한 나머지 3개 레이어의 active vector를 softmax에 넣으면 바로 추론이 가능하다고 합니다.

더했을 때 가장 큰 값을 가진 class index가 model의 최종 output class가 됩니다.

이 방법이 전체 네트워크를 거치는 것보다 빠르긴 하나, 어디까지나 (Sub-optimal)차선이고 정확도도 떨어집니다.


그래서 저자는input image에 특정한 하나의 label을 가진 input을 사용하는 것이 좋다고 합니다.


0 label을 가진 image,
1 label을 가진 image,
.
.
.
9 label을 가진 image,


를 개별적으로 넣어보고 더했을 때 가장 높은 goodness를 가진 label을 최종 output class로 선택하는 것입니다.
 즉, 레이블 개수만큼 inference 하는 작업이 필요합니다.

 

실험 결과 4개의 FC layer로 구성된 FF 네트워크는 60 epoch 후 약 1.36%의 오차율을 보였으며, Backprop을 사용했을 때에는 20 epoch만에 비슷한 성능에 도달했다고 합니다. learning rate를 2배로 늘려주었을 때는 40 epoch만에 약간 낮은 1.46% 오차율을 기록했다고 하네요.

 

 

추가적으로 해당 논문에서는 FF를 위한 augmentation방법인 imag jittering을 제안했습니다.

각 image마다 모든 방향으로 최대 2pixels까지 shifting하여 총 25개의 다른 image를 생성하게 됩니다.

image jittering

 

3.4 Using FF to model top-down effects in perception

지금까지 논문에서 살펴본 feed-forward 기반 방식은 한 번에 레이어 한 개씩만을 최적화합니다.

backprop을 사용하지 않기 때문에 나중 레이어에서 학습한 내용을 가지고 이전 레이어를 업데이트할 수가 없습니다.

 

그래서 논문에서는 이미지를 비디오처럼 처리하는 방식을 택합니다.

동일한 이미지가 계속해서 반복되는 영상 데이터를 다룬다고 생각하면 이해가 쉽습니다.

 

기본적인 네트워크 구조는 저자가 발표했던 Multi layer RNN과 비슷합니다.

 

 

가장 밑에 위치한 bottom layer는 pixel image를 입력으로 받고, 맨 위에 위치한 top layer는 각 클래스의 one hot vector를 입력으로 받습니다. 위 그림에서 파란색 화살표가 positive pass, 빨간색 화살표가 negative pass 입니다.

 

각각의 positive / negative pass는 동시에 흐르지만,

각 레이어의 activation vector는 바로 이전 time step의 위/아래 레이어의 normalized activity vector에 의해 결정됩니다.

 

각 pass의 흐름을 보면 t 레이어는 (t1)와 (t1) 값을 전달받고 있습니다. 논문에서는 넘겨받은 pre-normalized state 값에 0.3을 곱하고, 새로 계산한 state 값에 0.7을 곱해서 더하는 방법으로 가중치를 업데이트했다고 합니다.

 

식으로 나타내면 다음과 같이 되겠지요.

t​=0.3×st−1​+0.7×st

 

4 Experiments with CIFAR-10

실험 결과입니다.

Compute goodness for every label : supervised task
One-pass softmax : unsupervised task

 

전반적으로 BackProp의 성능이 더 좋습니다.

특히 training error rate를 보면, overfitting에는 BP가 압도적인 성능을 보여주고 있습니다.

다만 test error rate를 보면 FF도 크게 밀리지 않는 성능을 내고 있습니다. FF의 가능성을 보여줬다, 정도로 이해하면 될 것 같네요.

 


FF vs Backprop

Nebuly의 CTO Deigo Fiori가 FF와 Backprop을 비교한 포스트가 있습니다.
https://medium.com/mlearning-ai/pytorch-implementation-of-forward-forward-algorithm-by-geoffrey-hinton-and-analysis-of-performance-7e4f1a26d70f)

 

위의 내용에 따르면,

네트워크의 레이어 수가 많아질수록 FF가 Backprop보다 메모리를 덜 사용합니다. 하지만 20개 이하의 레이어를 가진 thin network에서는 FF가 backprop보다 훨씬 더 많은 메모리를 사용합니다.

 

새로운 방향성을 제시한 논문이라서 지속적으로 발전하는 후속 연구를 기대해볼 수 있을 것 같습니다^^

728x90
반응형

댓글