논문명: Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned
논문 링크: https://arxiv.org/abs/1905.09418
저자께서 잘 정리해둔 블로그가 있어 블로그 의역을 중심으로 정리합니다.
https://lena-voita.github.io/posts/acl19_heads.html
왜 갑자기 2019년 논문을 읽는가
- 최근 모델 병합(model merge) 관련 논문들이나 트랜스포머 구조 자체를 활용한 추론 논문들이 쏟아지고 있다
- 대부분이 layer-wise, 즉 레이어별로 분석하는 논문들은 많으나 head-wise 논문은 잘 보이지 않는다
- 그래서 head 기준으로 해석하는 논문들은 어떻게 분석하는지 보고 싶어 정리한다
(2019년임을 감안해서 보자)
본 논문에서 무엇을 배울 수 있는가
- 어떻게 헤드의 중요도를 측정하는가
- 가장 중요한 헤드들은 어떤 역할을 하는가
- 성능 저하 없이 어떻게 헤드를 제거할 것인가 (pruning)
- 어떤 종류의 어텐션이 가장 헤드와 레이어 수에 영향을 많이 받는가 (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
https://aclanthology.org/2022.acl-long.269/