ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS25 6강] DeepMind's Perceiver and Perceiver IO: new data family
    ✨ AI/NLP 2023. 7. 28. 21:43

    DeepMind's Perceiver and Perceiver IO: new data family

     

    link : https://www.youtube.com/watch?v=wTZ3o36lXoQ&list=PLoROMvodv4rNiJRchCzutFw5ItR_Z27CM&index=6

     

    paper : https://arxiv.org/pdf/2103.03206.pdf

    딥마인드에서 최근 작업 중 Perceiver라는 아키텍처를 개발 중이라고 한다. 이 작업에 동기는 범용 아키텍처를 개발하는 것이다. 그 이유는 우리가 실세계에서 수집할 수 있다고 상상할 수 있는 모든 데이터는 기본적으로 터치, 고유 감각에서 반향 위치, 텍스트를 수집하기 위한 감각이나 인식 등의 sense modalities와 관련이 있다. 우리가 과학적 지각에 대해 생각할 때, 전체 데이터 셋과 각기 다른 modalities를 모델링에 대해 각각에 대해 작동하는 inductive bias(귀납적 편향)을 효율적으로 엔지니어링 하는 것은 intractable해 보이기 때문에 하나 하나씩 엔지니어링하는 것을 원하지 않기 때문이다. 그래서 서로 다른 문제를 위한 한번에 데이터를 pass하고 모든 것을 핸들링하는 새로운 아키텍처를 개발하려고 하는 것은 합리적일 것이다.

     

    또 다른 실질적인 논쟁거리가 있는데, 왜 general purpose architectures가 필요하냐, 이에 대한 대답은 좀 더 간단하고 좀 더 unified system을 만들 수 있다는 것이다. 특히 복잡한 멀티 모달 데이터가 일반적으로 어떻게 접근되는지 보면 sensory computer vision 또는 pattern recognition literature에서 효과적으로 접근하는 방법은, 개별 모달리티에 대해 알고 있는 inductive bias를 사용한 다음, 하위 시스템을 결합하는 방식으로 엔지니어링 하는 것이다. 즉, 각 특정 영역에 특정 head, 특정 입력 모듈을 구축해야 한다. 하지만 이는 작은 도메인 영역에서만 적용이 가능하고 이 쉽게 깨지기 쉬운 시스템을 유지하는 것은 input modalites에 대한 특정 processing assumption에 의존한다. 그래서 이렇게 하는 것 보다, unfied black box 아키텍처를 개발하는 쪽을 원했고, 이 아키텍처를 구축할 수 있으면 아키텍처 구축 프로세스를 추상화 할 수 있다는 것이 아이디어 였다. 이 작업을 수행하기 위해서 우리가 가장 general purpose 아키텍처로 사용하고 있는 transformer로 작업을 하였다.

     

     

    트랜스포머는 general purpose inductive bias를 사용해 non-local 즉 국소적인 패턴에 대해 모델링하지 않기 때문에 domain-specific 가정을 만들 필요가 없다. 하나의 포인트가 다른 것들과 비교되기 위해서 attentional focusing을 해서 global 모델링을 가능하게 하고, positon을 feature로 사용해 mlp기반이나 rnn, conv net과 같은 다른 아키텍쳐들과 달리 아키텍쳐에 대한 hard constraint가 필요하지 않다. 최종적으로 트랜스포머가 설계된 방식에는 extensive weight sharing이 있으며, matmul을 사용해 attention weight를 계산하므로 TPU나 GPU친화적이다. 하지만 트랜스포머 구조는 메모리 스케일링 이슈가 있다는 것이 단점이다. attention value를 계산하는 complexity는 quantdratic이고 입력의 크기가 커지거나 모델을 더 크게, 깊게 만들 수록 문제가 악화되기 때문이다. 일반적인 transformer는 선형 스케일링 조차 문제가 되기 때문에 문제 규모에 따라서 모델의 사이즈를 정해야 한다.

     

    일반적인 QKV attention work에 대해 간단히 얘기한다. 1d or 1 by 1 convolution으로 query, key, value를 계산하고 행렬 곱을 통해 attention score를 계산하고, 최종적으로 어텐션 모듈의 실제 output이 되는 weight를 계산한 뒤, 추가직인 mlp 레이어를 통해 결과 확률을 얻는다. 

     

    그리고 왜 standard transformer의 이러한 장점들을 얻고 싶어 하는지에 대해 설명한다. non-locality는 inductive bias principles 중 하나이다. 두개의 input 포인트의 함수를 얼마나 쉽게 표현하는지(인풋이 다른 인풋을 볼 수 있는지)는 function of depth로 볼 수 있는데, 그림의 점선으로 연결된 보라색 점과 노란색 점은 가능한 가장 멀리 떨어져 있는 input들이다. 우리는 두 인풋을 실제 process하기 전에 계산되어야 하는 computation의 효과가 얼마나 깊어야 하는지 질문할 수 있다. 3 by 3 convolution을 보면, 이 두 점을 처리하려면 네트워크의 맨 끝까지 살펴봐야 하고, 그렇게 되면 이것들은 지역성을 주는 매우 깊은 스택 위에 구축되어야 하기 때문에 이 두 점 사이의 함수는 shallow하다. 예를 들어 ResNet의 경우, 초기에 7*7 블록이 있고, 마지막 3*3블록까지 피처가 전달되고, 이미지의 모든 224*224* 픽셀은 서로를 보기 전에 3*3 convolution을 거치게 되므로, 픽셀의 가장자리에 있는 점은 실제로 서로를 보지 못한다는 것이다.

    반면 전체 인풋에 대한 global 아키텍처를 사용하는 경우, 즉 트랜스포머 구조를 적용하는 경우 모든 픽셀이 상호작용할 수 있으므로 모델이 기본적으로 모든 것에 대해 캡쳐하게 되어 두 인풋 사이의 함수를, locality에서 표현할 수 있는 것보다 훨씬 쉽게 표현할 수 있다.

     

    트랜스포머의 다른 흥미로운 속성은, postion이 featurized 된다는 점이다. 때문에 다른 아키텍처와 다르게 다른 input에 관한 위치에 대해 architectural location을 인코딩하지 않아도 되며, 푸리에 혹은 sinusoidal로 표현되는 어떤 positional information이라도 적용될 수 있다.

     

    그리고 ConvNet과 Transformer를 비교하면, Scalability와 Generality의 trade-off를 볼 수 있다. ConvNet는 피처 차원과 locality 구조를 알고 있는 Grid-structured data에 적용이 가능하지만 트랜스포머는 Generic sets에 적용할 수 있다. 하지만 input point에 대해 quadratic scaling이 되므로 선형으로 스케일링되는 ConvNet 보다 Scalability는 떨어진다고 볼 수 있다.

     

    그래서 딥마인드에서는 Scaling 속성을 가지면서 Generic set에 적용가능한(Generality 속성을 유지하는) architecture를 만들고자 했고 이름은 Perceivers이다. 

     

    Transformer를 스케일링하면서 Generality 속성을 잃지 않게 하기 위해, 딥마인드에서는 Self-attention을 수정하였다. 일반적인 트랜스포머는 input array를 받고, Query, Key, Value를 계산하기 위해 1D convolution을 계산하고, Q, K의 행렬 곱을 통해 attention map을 생성하고 이때 input size M의 quadratic scaling을 따르게 되며, 마지막 feature를 계산하기 위해 Attention map과 Value를 행렬곱 해주고 이때도 마찬가지로 quadratic scaling을 따른다. 이는 224*224 이미지가 인풋이 되더라도 아주 많은 양의 계산이 필요하다는 것을 의미한다. 

     

    Perceiver에서는 Self-attention을 어떻게 변경했나면, 먼저 Key는 그대로 두고 Query를 latent learnable component로 변경했다. Query는 N차원의 latent feature로 M보다 작은 수이다. 이를 구현하기 위해서 learned initial state for RNN과 같은 것을 적용할 수 있다고 한다(이부분은 잘 모르겠음). Query를 learning한다는 것은 여러개의 인풋들을 하나의 cluster로 만드는 것과 같은 효과를 내며 어떤 input(e.g. token, or pixel)이 어떤 cluster에 들어가는지는 learning을 통해 알게되고 비슷한 feature를 가지는 input을 하나로 모으는 것이다. 이렇게 되면 square matrix였던 attention matrix는 직사각형 행렬이 되고, 행렬곱 견산시 complexity를 줄일 수 있게 되고 N이 충분히 작다면 complexity가 linear가 되는 효과가 있고, 트랜스포머에서 input, output 사이즈는 같지만 여기서는 output의 사이즈는 N으로 작아지고, input size와 독립적으로 complexity를 hyperparameter를 통해 control할 수 있게 되므로 이는 중요하다.

     

    이 그림은 전체적인 Perceiver 구조이다. learned latent query(means an rnn initial state or a set of weights)가 주어지면, cross attention layer를 통해 latent attention map을 계산한다. 그리고 이 latent array는 모든 요소끼리 interaction을 할 수 있다. 그리고 input size의 quadratic scaling을 따르는 것이 아닌 latent size N에 대한 quandratic scaling을 따르게 된다. 그리고추가적인 cross attention layer가 존재하는데 이는 bottleneck이 심할경우 모든 information을 유지할 수 없기 때문에, 현재 과거에 대해 일종의 조건부 인 쿼리가 입력 지점을 다시 볼 수 있도록 하기 위함이었다고 한다.  더 많은 조건부 query를 원할 경우 새로운 입력에 대해 cross attention 할 수 있기를 원한다면 사용할 수도 있지만, 이를 붙이면 모델이 더 헤비해지기 때문에 더이상 권장하지 않는 사항이라고 한다.

    그리고 또 도움이 되는 속성은, 제한된 양의 데이터셋의 context에서 depth weight sharing이다. 이는 서로 다른 cross-attention과 self-attention을 위한 weight이고 RNN에서 depth를 enrolling하는 것과 유사하다. 이는 imagenet에서 사용되는 이미지 구조에 대한 가정 같은 것이 필요 없으므로 이미지데이터 외에도 적용될 수 있고 positional encoding(여기서는 2D 푸리에 피쳐 positional encoding을 적용했는데 signal이나 language일 경우는 그림에 설명된 다른 방법들이 좀 더 효과가 좋았다고 함)을 가짐으로써 input의 spatial structure에 대한 정보를 준다.

     

    그리고 이와 유사한 작업 중 ViT와 비교하자면 ViT는 이미지를 transformer에 적용하기 위한 구조이고, 이미지를 토큰으로 나눠 펼친 후 입력으로 받게 된다. 하지만 이는 non-grid data일 경우 적절하지 않으므로 도메인에 구애받게 되고 non-local보다 local을 선호하기 때문에 bias learning으로 보인다고 한다.

     

    이미지를 Permute하여서 다른 baseline과 비교해보자 저자들이 emphrically 놀라운 사실을 발견했다고 한다. 첫번째 버전에서는 기본적을 2d위치를 사용해 피쳐를 계산하므로 2d 위치가 픽셀에 대한 위치로 고정된 후 셔플한 것이다. 그랬더니 ResNet과 ViT는 성능이 크게 떨어지는 것을 확인할 수 있었고, 이는 다른 baseline들은 이미지 구조에 의존하고 있다는 것을 보여준다. 따라서 architecture에 대한 어떤 가정도 만들지 않는 다는 것은 cool thing이라고 말한다.

     

     

    후기

    시간정보나, 이미지의 구조 정보 등의 가정, 일종의 bias를 사용하는 구조보다 Transformer를 사용하면 이런 가정 없이 어떤 Generic dataset에 대해서도 모델링할 수 있다는 장점이 있다. 하지만 Transformer는 input size에 대해 quadratic scaling을 따르기 때문에 모델을 scaling(input 사이즈를 키우는 것, 데이터 양이 아니고 nlp에서는 vocab 갯수 등의 output의 종류를 늘리는 것)하는 것은 쉽지 않다. 딥마인드에서는 이 문제를 해결하기 위해 Perceiver라는 구조를 제안하고 이는 Query를 leanable latent로 치환하게 되고 input size가 아닌 latent의 사이즈의 quadratic scaling을 가능하게 했다. latent size를 하이퍼파라미터로 조정함으로써 우리는 스케일링을 쉽게 할 수 있게 되는 것이다. 하지만 이미지 같이 input을 shrinking해도 정보를 잘 유지할 수 있는 데이터 도메인이면 괜찮겠지만 text generation 같은데서도 잘 동작할지는 모르겠다. 논문을 보니까 대부분 실험도 이미지 기반 task로 보인다.

     

    댓글

Designed by Tistory.