지난 주 딥마인드에서 내놓은 이 페이퍼는 이전 포스트에서 잠깐 언급했듯이 뉴럴 네트워크의 레이어간의 데이터 주입과 그래디언트 업데이트를 비동기적으로 처리하는 방식을 제안하고 있습니다. 이전에 이런 방식과 유사한 연구가 있었는지 배경 지식을 구하기는 힘들었지만 분명한 것은 이 페이퍼가 여러 사람에게 큰 관심을 끌고 있다는 점입니다.
뉴럴 네트워크의 한 레이어에서 데이터를 처리할 때 다른 레이어가 작업을 하지 않은 상태를 멈춰(locking)있다고 표현할 수 있습니다. 특히 레이어간의 연산이 다른 디바이스에 할당되어 있는 경우에는 물리적으로도 멈춰있는 형태가 됩니다. 이렇게 멈춰있게 되는 경우는 에러 그래디언트(gradient)를 역전파시킬 때도 마찬가지 입니다. 체인 룰(chain rule)의 특성상 이전 레이어에서 그래디언트가 전달되지 않으면 하위 레이어는 대기 상태에 있습니다. 이런 레이어간의 동기성은 거대한 뉴럴 네트워크의 학습 속도에 영향을 미치므로 레이어간의 데이터 전달을 비동기적으로 처리하는 모델을 제안하고 있습니다.
여기서 제안하는 방법은 한 레이어에서 데이터가 처리된 후 그 다음 레이어를 통과해 마지막 레이어에서 에러가 계산되어 역전파 되기를 기다리지 않고 데이터가 처리되자 마자 가짜 그래디언트(synthetic gradient)를 업데이트 하는 것입니다. 가짜 그래디언트로 레이어의 파라메타(가중치)가 업데이트 되면 다음 미니배치 데이터를 받아 들일 수 있게 됩니다. 가짜 그래디언트는 진짜 그래디언트가 앞 레이어로 부터 전달되면 이 값을 이용하여 보다 좋은 가짜 그래디언트를 만들기 위해 학습합니다. 즉 가짜 그래디언트를 위한 소규모의 뉴럴 네트워크가 레이어 사이 사이에 위치해 있습니다. 아래 그림은 이런 그래디언트의 비동기적인 업데이트 과정을 잘 보여 주고 있습니다.
위 그림의 두번째 섹터에서 볼 수 있듯이 모델 에서 전달되는 그래디언트
는 사실 진짜 그래디언트가 아니라 상위 레이어의 가짜 그래디언트 입니다. 이 값은 레이어
에 역전파 되어 타겟 그래디언트
를 만들고 모델
의 가짜 그래디언트
와의 차이를 가지고 모델
을 학습시키는 데 사용합니다.
가짜 그래디언트는 역전파 알고리즘의 체인룰 식에서 상위 레이어로 부터 전달되는 그래디언트를 가짜 그래디언트로 바꾸어 놓은 것입니다.
페이퍼에서는 모델 을 위한 뉴럴 네트워크가 0~2개의 히든 레이어를 가지고 있고 부가적으로 레이블(label)을 입력 데이터로 가질 수 있다고 합니다. 그리고 이 모델은 간단한 선형 모델입니다.
페이퍼에서는 이런 레이어 간의 비동기 인터페이스를 DNI(Decoupled Neural Interface)라고 명명하고 있으며 레이블을 모델 의 입력 데이터로 사용하는 경우를 cDNI(Conditional DNI)라고 부르고 있습니다. 완전연결(fully connected) 뉴럴 네트워크와 콘볼루션 뉴럴 네트워크의 테스트 결과를 보면 DNI를 쓴 경우가 조금 에러가 높지만 전반적으로 괜찮은 수준으로 보여집니다.

출처: 1608.05343 페이퍼
순환(recurrent) 신경망의 경우에는 비동기화 뿐만 아니라 BPTT(backpropagation through time)의 경계를 넘어서 그래디언트를 전파시킬 수 있는 부가적인 장점을 가질 수 있습니다. 아래 그림 (a)는 에서 그래디언트 역전파가 멈추지 않고 가짜 그래디언트
를 만들어 BPTT 경계를 넘어서 순환 신경망이 펼쳐질 수 있는 효과를 노리고 있습니다.
거기에 더불어 (b)에서는 미래의 가짜 그래디언트 을 만들기 위해
를 사용하여 예측할 수 있다고 언급하고 있습니다. 피드 포워드(feed forward)의 경우에서도 그렇지만 그래디언트가 그래디언트를 학습시키는 것이죠. 페이퍼에서는 RNN의 경우 학습속도가 빨라졌음을 표와 그래프로 보여주고 있습니다만 피드 포워드 네트워크의 경우에는 이런 자료를 제시하지 못해 아쉽습니다.
DNI가 완전한 비동기 네트워크를 고려한 것인지 궁금해서 저자인 맥스 제이더버그(Max Jaderberg)에게 문의를 해보았더니 타겟 그래디언트가 모델 M에 업데이트 되기 전에 여러번의 미니배치가 처리될 수 있다고 합니다. 만약 어떤 문제, 예를 들면 네트워크 레이턴시 등으로 인해 타겟 그래디언트가 늦게 도달한다면 가짜 그래디언트가 제때 업데이트 되지 않아 학습은 더 들쭉날쭉할 수 있을 것 같습니다. 페이퍼에서는 이런 부분에 대한 자세한 언급은 없습니다.
이 페이퍼에서 가장 놀라운 그림은 아래 처럼 입력도 가짜 입력(synthetic input)을 만들어 포워드 방향의 학습을 비동기화 시키는 것입니다. 모델 는 모델
와 마찬가지로 레이어 간에 위치해서 포워드 방향의 데이터 흐름을 비동기화시키도록 도와 줍니다. 레이어
는 레이어
에서 입력을 받지 않고 모델
의 출력
을 이용합니다. 그리고 모델
는
의 출력
과
의 차이를 이용해 학습됩니다.
현재로선 손쉽게 이런 네트워크를 구성할 수 있는 방법은 없습니다. 이 페이퍼를 위해 어떤 코드를 사용했는지는 알 수 없지만 텐서플로우가 이런 모델을 수용할 수 있더라도 많은 부분에서 수정이 필요하지 않을까 생각합니다. 학습시간을 단축시키기 위해서 레이어 사이를 비동기화 하는 것이 대중적인 모델이 될지 지켜봐야 될 것 같습니다.
잘못된 점이나 부족한 점은 댓글로 보완해 주세요.