본문 바로가기

NLP/논문이해

[논문이해] Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned

논문명: Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned

논문 링크: https://arxiv.org/abs/1905.09418

 

Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned

Multi-head self-attention is a key component of the Transformer, a state-of-the-art architecture for neural machine translation. In this work we evaluate the contribution made by individual attention heads in the encoder to the overall performance of the m

arxiv.org

 

저자께서 잘 정리해둔 블로그가 있어 블로그 의역을 중심으로 정리합니다.

 

https://lena-voita.github.io/posts/acl19_heads.html

 

The Story of Heads

Model trained on OpenSubtitles EN-RU

lena-voita.github.io


왜 갑자기 2019년 논문을 읽는가

  • 최근 모델 병합(model merge) 관련 논문들이나 트랜스포머 구조 자체를 활용한 추론 논문들이 쏟아지고 있다
  • 대부분이 layer-wise, 즉 레이어별로 분석하는 논문들은 많으나 head-wise 논문은 잘 보이지 않는다
  • 그래서 head 기준으로 해석하는 논문들은 어떻게 분석하는지 보고 싶어 정리한다

(2019년임을 감안해서 보자)

 

본 논문에서 무엇을 배울 수 있는가

  1. 어떻게 헤드의 중요도를 측정하는가
  2. 가장 중요한 헤드들은 어떤 역할을 하는가
  3. 성능 저하 없이 어떻게 헤드를 제거할 것인가 (pruning)
  4. 어떤 종류의 어텐션이 가장 헤드와 레이어 수에 영향을 많이 받는가 (encoder self-attention, decoder self-attention, encoder-decoder attention)

 

1. Head Importance

A. Head Confidence (신뢰도, 확신도, 자신감)

  • 가장 전형적으로 중요도를 측정하는 방법은 자신감/신뢰도다
  • 여기선 자신감이라는 단어가 더 직관적인 표현이다. 헤드가 자신감이 있다는 것은 골고루 어텐션 점수를 부여하는 게 아니라 특정 토큰에게 높은 점수를 부여하는 헤드를 말한다. 비유하자면, 분산투자하는 A보다 특정 종목에 전액 투자하는 B가 자신감이 넘치는 것처럼 말이다.
  • 여기서는 validation set 을 활용해서 각 문장별 어텐션 점수 중 최고를 평균낸 결과를 히트맵으로 나타냈다.
  • 위 그림에선 1번째 헤드가 대체로 확신을 갖고 어텐션 점수를 측정하고 있는 걸 확인할 수 있다.
  • 이 방법은 쉽지만, 중요도를 대변하기엔 뭔가 아쉽다.

 

B. Layerwise Relevance Propagation (LRP)

: 자세한 건 본 논문을 참고하세요

  • 이 방법은 컴퓨터 비전 분야에서 XAI를 위해 사용한 기법 중 하나라고 한다.
  • 이미지에서 어떤 픽셀이 결과에 어느 정도 영향을 미치는지 측정할 수 있다.
  • 간단히 말하자면, 거꾸로 연산해서 영향력을 계산하는 기법이다.

 

위 방법을 transformer 구조에 활용한 건데, 기존과 2가지가 달라진다고 한다

  • 입력이 아니라 뉴런/파라미터/헤드의 중요성을 측정한다
  • 하나의 예측이 아닌 평균을 내서 중요도를 측정한다

 

구체적인 측정법은 이러하다

  • 헤드의 중요도를 측정하니 연산을 끝까지 할 필요는 없다
  • 예측할 때, top-1 logit 에 대해서만 중요도를 측정한다고 한다
  • 헤드의 중요성은 헤드를 이루고 있는 뉴런의 기여도 합으로 평가하되, 레이어별로 정규화를 진행한다
  • A에서 측정했던 것처럼 dev set 의 평균을 구해서 최종 중요도를 구한다

 

 

 

저자는 2가지를 발견했다고 한다

  • LRP가 더 적은 수의 헤드가 중요하다고 판단했다 (내 눈엔 confidence 가 더 적어보이는데....차이가 사실 없어)
  • 둘이 어느 정도 유사한 분석을 한다, 즉 중요도와 확신성은 관련이 있는 것 같다고 함

 

유일한 차이는 1번째 레이어에 대한 결과다. LRP는 첫번째 레이어에 1번째 헤드가 중요하다고 뽑았다. 하지만 확신도 측면에서는 낮다. 이 말은 1번째 레이어의 1번째 헤드는 어텐션 점수는 골고루 주지만, 결과를 내는데 중요한 역할을 하고 있다는 것을 의미한다. 자신감은 없지만 중요도는 높은 헤드가 있음을 나타낸다.

 

2. Head Functions

: 1번을 통해서 중요한 헤드를 측정하고 찾아냈다. 여기선 중요한 헤드들을 분석하여 어떤 역할을 하는지 조사했다. 조사 결과, 3가지 규칙을 띄고 있다고 말한다.

 

A. Positional heads

  • 가장 높은 어텐션 점수가 위 그림처럼 자기 자신 혹은 주변(-1, +1)인 경우가 90%를 넘어서면 positional head 라고 부른다
  • 이건 위 그림만 봐도 알 수 있으니 넘어가자

 

B. Syntactic Heads

  • 문법적인 구조를 파악하는 역할을 한다

 

C. Rare tokens

  • 빈도가 낮은 토큰들에 집중한다

 

  • 총 정리해서 표현하면 위와 같이 표현할 수 있다

 

3. Pruning Attention Heads

: 위에서 중요한 역할을 하는 헤드를 찾아봤다. 그렇다면, 나머지 헤드들은 어떨까? 제거해도 될까? 혹은 동등하게 중요한 역할을 하고 있을까? 이 단락에서는 어떻게 헤드를 제거하는지에 대해 소개한다.

 

 

A. 학습을 통해 제거하자

  • attention head 마다 g 를 곱하자. i번째 헤드에는 g_i 를 곱하자.
  • 게이트 방식과 같은데, 0을 곱하면 해당 헤드는 버리고 1을 곱하면 해당 헤드를 사용한다는 이야기다.
  • 사람이 직접 0, 1을 넣어보며 가장 좋은 성능을 측정하는 게 아니고 학습을 통해서 좋은 헤드는 남기고, 나쁜 헤드는 버리자는 말이다.

 

B. L0 정규화를 사용하자

  • L2 나 L1은 들어봤는데 L0 는 뭐지?
  • L2는 거리의 개념이고, L1은 절댓값의 개념이었다. L0 은 0이 아닌 개수를 의미한다.
  • 여기서 L0을 사용하는 이유를 생각해보자. 최대한 많은 헤드를 버리는 게 목적이다. 그런 점에서 g 값이 0이 많아야 유리하다. L0의 정의는 0이 아닌 요소의 개수다. 즉, 0이 많아야 헤드를 많이 버리니 L0 정규화는 목적에 부합하다.
  • 하지만 단점이 있다. 바로 미분이 불가능하다는 점이다. 개수를 세서 정규화를 하니 당연히 미분 불가능한 함수다.

 

C. Hard Concrete Distribution 을 활용하자

  • 위에선 0 아니면 1이 나오길 원했다. 즉 굳이 따지자면 이산확률 분포였다. 하지만 이산확률 분포는 미분 불가능하다는 명확한 단점을 가진다.
  • 그렇다면 어떻게 해야 할까? 느낌이 왔겠지만 연속확률변수로 바꿔야 한다.
  • 0과 1을 연속확률분포로 바꾸는 논문이 바로 Concrete Distribution 이라고 한다. 자세하게 읽기엔 배보다 배꼽이 커지니까 어쨌든 확률분포 바꿔서 미분가능하게 했다 정도로만 받아들이자.

 

처음엔 L0 없이

  • 일단 fine-tuning 된 모델을 가져온다
  • 그 후에 그 모델부터 학습을 시작하는데, L0 정규화를 집어넣는다
  • 이렇게 해야 우선 어느 정도 헤드별 역할이 학습이 된 후에 제거하기 시작하기 때문이다

  • 위 그림처럼 학습이 진행될수록 몇몇 헤드가 제거되는 걸 볼 수 있다
  • 하얗게 변하는 헤드가 바로 제거되는 헤드다

 

4. 실험

 

A. 사실 헤드를 많이 제거해도 성능은 비슷하다

  • 놀랍게도 전체 헤드가 48개인데 4개만 남기고 다 제거해도 BLEU score 가 0.25 정도밖에 안 떨어진다
  • 위 실험은 인코더 헤드만 제거했다고 한다

 

B. 학습 후에 제거하는 게 더 효과적이다

 

  • 위 실험은 from trained 와 from scratch 의 차이를 아는 것이 중요하다
  • from trained: 학습하고 나서 헤드 제거에 들어간 경우
  • from scratch: 헤드를 제거하고 난 뒤 학습을 진행한 경우
  • 저자는 학습 후에 제거하는 게 성능이 더 좋으며, 제거하고 학습하면 성능을 따라잡을 수 없다고 말한다. (근데 그렇게 말하기엔 큰 차이가 없는데? 적은 파라미터로 애초에 좋은 성능을 내는 것 같은데...?)

 

C. 살아남는 헤드들은 무슨 역할을 하는가

  • 차례차례 제거하면서 어떤 역할을 하는 헤드가 살아남는지 분석했다고 한다
  • 보니까 구조 분석 헤드와 위치 헤드가 가장 중요한 것 같기도...?

 

D. 어떤 종류의 헤드부터 제거되는가

 

  • encoder self attention 부터 제거되는 걸 볼 수 있다
  • 가장 마지막까지 남는 것은 encoder-decoder attention 이다

 

  • 자, 이번엔 색깔의 의미가 다르다. 무슨 색이든 다 그림 위에 적힌 decoder attention 이다.
  • 색깔이 의미하는 바는 attention 종류가 아니라 레이어 위치다.
  • 많이 제거하려고 하니, decoder self attention(왼쪽)에서는 5,6번째 레이어의 헤드들이 먼저 제거되는 걸 볼 수 있다.
  • 반면, 오른쪽에서는 encoder decoder attention 이 1,2번째 레이어에서 먼저 제거되는 걸 볼 수 있다.
  • 이는 트랜스포머 디코더의 하위 계층은 언어 모델링을 주로 담당하고 있었고, 상위 계층이 source sentence 를 주로 담당하고 있음을 의미한다고 한다.

 

(제대로 된 해석은 논문을 참고하는 것이 좋아보인다)

 

 

소견

  • head 역할을 분류하는 기준이 모호하다
  • 번역 태스크에 한정된 분석이다
  • 다양한 모델, 특히 LLaMA와 같이 요즘 모델들도 통용되는지 의문이다

 

이에 대한 반박 논문들도 많은데 아래 남기면서 마치겠습니다.

 

https://arxiv.org/abs/1902.10186

 

Attention is not Explanation

Attention mechanisms have seen wide adoption in neural NLP models. In addition to improving predictive performance, these are often touted as affording transparency: models equipped with attention provide a distribution over attended-to input units, and th

arxiv.org

 

 

https://aclanthology.org/2022.acl-long.269/

 

Is Attention Explanation? An Introduction to the Debate

Adrien Bibal, Rémi Cardon, David Alfter, Rodrigo Wilkens, Xiaoou Wang, Thomas François, Patrick Watrin. Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2022.

aclanthology.org