[NeurIPS 2020] Gradient Surgery for Multi-Task Learning

이번 방학동안 원조 연구원이 진행하던 multi-task learning 에 대해 이어나갈 것 같습니다. 따라서 원조 연구원이 사용한 pcgrad 방법론을 발표한 논문 리뷰를 시작해보도록 하겠습니다.


Multi-task learning 이란 무엇인가?

우선 인간의 행동에 비유해봅시다. 많은 연구들이 인간의 행동에서 영감을 얻어 시작되었으니까요.

인간은 동시에 여러 개의 작업에 대해 학습을 할 수 있고, 그 과정에서 하나의 작업이 다른 작업의 학습을 도와주기도 합니다. 또한 새로운 것을 학습할 때 이전에 학습 했던 유사경험에 접목시켜 더 빨리 학습하기도 합니다.

즉, Multi-task learning 이란 “연관된 두 가지의 작업을 동시에 학습하여 일반적인 성능을 올리자” 에서 착안이 되었습니다.

따라서 모든 작업의 성능을 향상시키도록 여러 작업을 동시에 학습시키는 것을 Multi-task Learning 이라고 합니다. 그러므로 Multi-task Learning 에서는 한 개의 input에 대해 여러 개의 Output을 반환합니다.

[NeurIPS 2020] Gradient Surgery for Multi-Task Learning

앞에서 제가 얘기했던 것처럼 저자도 마찬가지로 단일 태스크보다는 multi-task learning 으로 효율성과 성능을 달성하는 것이 중요하다고 강조합니다.

하지만.. 여러 개의 태스크를 동시에 학습한다는 것은 생각만큼 쉬운 일은 아닙니다. 우선 최적화가 어렵다는 것이 가장 큰 한계인데요, 각 태스크 별로 학습 난이도가 다를 경우 오히려 개별적으로 학습한 모델보다 성능이 저하되기도 합니다.

이런 최적화 문제를 해결하기 위해 기존에는 독립 모델을 multi-task learning 으로 보내기 전 서브 루틴으로 독립적으로 학습을 진행하는 방식으로 이를 해결하고자 하였습니다. 그런데.. 말만 들어도 효율성이 떨어질 것 같다는 생각이 듭니다. 멀티태스킹 러닝 자체가 여러 개의 태스크를 동시에 한 번만 학습해서 성능도 올리고 효율성도 향상시키자는 것인데.. 따로 개별 태스크를 또 학습한다는 것이 명쾌한 해결책 같아보이지는 않습니다.

따라서 저자는 태스크마다의 최적화 이슈를 가장 큰 문제점으로 지적했습니다.

그렇다면 왜 최적화가 제대로 되지 않는 것인가? 에 대한 질문에 대해서 저자는 Conflicting Gradient(충돌하는 기울기)가 그 원인이 될 수 있다고 답변하였습니다.

저자가 Conflicting Gradient에 대해 설명하기 위해 아래 그림을 제시하였는데요.

Visualization of PCGrad on a 2D multi-task optimization problem.

그림 (a)가 바로 멀티 태스킹 최적화 문제를 시각화한 것입니다. 그리고 (b), (c)가 (a)에 대한 각각의 태스크에 대한 objective를 등고선 그래프로 나타낸 것입니다. 즉, (a)에 나타난 계곡과 같은 부분을 형상화 했다고 생각하시면 좋을 것 같ㅅ브니다. 각 계곡의 바닥은 높은 양의 curvature를 가지며, 태스크 그래디언트 magnitude 가 서로 큰 차이가 있다는 것이 특징입니다.

두 태스크를 한번에 최적화해야하는 멀티태스크 러닝에서는 최적화 진행 시 하나의 task gradient 에 지배되어 오히려 다른 하나의 성능을 저하시키는 결과를 발생하게 됩니다. 또한 high curvature로 인해 지배하는 태스크는 오히려 과적합이, 그리고 지배되지 않는 태스크는 오히려 과소적합이 될 수 있죠.

결과적으로 그림 (d)에서의 optimizer는 task 1에 대한 최적화는 성공하더라도, task 2의 경우 그러지 못하게 됩니다.

따라서 해당 논문에서는 이러한 conflict gradient를 정의하고, 이를 해결하기 위해 Gradient Surgery 방식을 채택 후 새로운 수술(?) 방식을 제안하였습니다.

생각보다 아이디어는 간단합니다. 하나의 태스크에 지배되지 않도록 각각의 그래디언트를 다른 그래디언트의 normal plane에 Projection 시킴으로써 그래디언트를 변경하였습니다. 따라서 Projection 기법을 사용하여 그래디언트 수술 기법을 제안하였다고 하여 PCGrad 라고 정의하였습니다.

특히, 이 방식은 특정한 모델에 의존하지 않다는 점이 굉장히 인상적입니다. 다른 멀티태스크 방법론에도 추가하여 적용될 수도 있는 것이죠.

Multi-Task Learning with PCGrad

The Tragic Triad: Conflicting Gradients, Dominating Gradients, High Curvature

저자는 멀티 태크스 러닝에서의 핵심 최적화 문제가 바로 “서로 다른 작업에 대한 그래디언트가 서로 달라 충돌”하기 떄문이라고 가정하였습니다.

그런데 사실, Conflict Gradient 가 항상 성능을 저하시키는 것은 아니라고 합니다. 실제로 두 개의 그래디언트를 평균화 했을 때, 둘 다 성능이 저하되는 경우도 있기 때문입니다.

그렇다면 저자가 정의하는 문제가 되는 Conflict Gradient 상황은 무엇이냐? (1) 기울기가 서로 충돌하는데 (2) large different magnitude of gradient (3) High Positive Curvature 일 경우입니다.

하나의 태스크의 그래디언트의 크기가 다른 태스크보다 훨~씬 클 경우에 두 개의 평균 그래디언트를 지배하게됩니다. 그와 동시에 curvature까지 양의 값으로 클 경우, 지배적인 태스크의 성능 향상은 과적합되고 다른 태스크는 오히려 과소적합이 되어버립니다.

따라서 저자는 이 상황을 수식을 통해 정의하였습니다. 위에서 설명한 것 같은 세 가지 조건이 공존할 때를 말이죠.

(1) 그래디언트 충돌은 각 그래디언트를 g_i, g_j라고 할 때, 그 사이의 각도를 사용하여 정의합니다. 즉, \phi_{ij} < 0일 때, 충돌이라고 정의합니다.

(2) 기울기 크기가 많이 차이나는건? cos similarity를 사용하였습니다. 두 그라디언트의 크기가 같을수록 1에 가까운 값을 반환하게 됩니다.

(3) 마지막으로 multi-task curvature을 확인하는 H는 상단 수식을 통해 정의하였습니다. 일 때, 현재 모델의 파라미터 \theta, \theta^’가 양의 상수 C보다 클 때, 높은 곡률을 가진다고 정의하였습니다.

PCGrad: Project Conflicting Gradients

저자는 3가지 조건을 만족하는 경우, 그래디언트를 직접 변경하는 Gradient Surgery 방식을 제안하였다고 하였는데요. 저자는 Gradient Projection 기법을 사용한 PCGrad를 제안하였습니다.

참고로, 저자가 열심히 그래디언트 충돌에 대해 정의한 만큼, 3가지 조건을 만족하는 경우에만 이 PCGrad를 적용하였습니다. 충돌이 발생하지 않을 때에는 평범하게 그래디언트끼리 서로 상호작용(?)하면서 업데이트하게 되는 것이죠.

그렇다면 PCGrad는 어떻게 적용되었을까요?

PCGrad를 사용한 업데이트 룰은 아래 수도 코드를 통해 확인할 수 있습니다. 저자는 Projection 방식을 사용하여 그래디언트 conflict 가 발생했을 때 이를 조정하여 업데이트하고자 하였습니다.

Experiment

저자는 실험을 통해 다음과 같은 3가지를 확인하고자 하였습니다.

  1. 정말로 PCGrad를 써서 서로 다른 멀티 태스킹 러닝에서 최적화 문제를 더 쉽게 만드는지?
  2. 다른 멀티 태스크에 추가로 적용할 수 있는지, (그래서 성능을 향상시키는지)ㄹ

(1) 과 (2) 질문에 답변하기 위해 다음과 같은 실험을 진행하였습니다. MultiMNIST, CityScapes, CelevA, 멀티태스킹 CIFAR-100 및 NYUv2. 그 중 MultiMNIST에 대한 결과는 아래 테이블과 같습니다.

53번 페이퍼와 동일한 조건에서 PCGrad만 추가했을 때 아래와 같은 성능 향상을 가져왔다고 합니다. 해당 실험은 MNIST 에서 랜덤하게 두 개의 이미지를 추출한 다음, 두 개의 이미지를 각각 분류하는 것입니다.

Conclusion

PCGrad는 멀티 태스킹 러닝 중 특정 모델과 특정 방법론에 최적화된 것이 아니라는 게 가장 인상적입니다. 저자가 정의한 3가지 조건을 만족시키는 그래디언트 충돌이 발생하는 다양한 도메인에서 이를 적용할 수 있다는 점이 가장 큰 contribution이 아닌가 싶습니다.


PCgrad, 그리고 multi-task learning에 대해서도 처음 알아보았습니다. 아직 후속 연구에 대한 팔로업은 시작하지 않았는데요, 최근 multitask learning 에서의 이슈는 무엇인지 지금까지도 PCgrad가 명쾌한 해결책인지, 혹은 한계는 무엇인지 한번 서베이를 통해 본격적으로 알아봐야겠습니다.

Author: 홍 주영

2 thoughts on “[NeurIPS 2020] Gradient Surgery for Multi-Task Learning

  1. 안녕하세요 주영님
    좋은 리뷰 감사합니다

    다름이 아니라 PCGrad에서 그래디언트를 합성하는 방법이 궁금해서 여쭤봅니다. A 벡터와 B 벡터를 합성하는 과정에서 연산의 방향성은 크게 고려되지 않나요?

    감사합니다

  2. 굉장히 흥미로운 논문 입니다. 최적화 논문은 재밌네요.

    Conflicting Gradient에 대해 설명을 위한 그림을 보면

    Multi-Task Objective는 Task1 Objective와 Task 2 Objective가 그대로 합쳐진듯 한 모습을 보여주고 있습니다 이유가 뭘까요? 일반적으로 Multi-Task Learning에서 서로 다른 두 Objective는 그냥 덧셈으로 계산이 되나요? 서로가 서로에게 영향을 주는게 아니라 독립적으로 존재하는 것 같아 질문드립니다.

    또한 multi-task curvature를 계산하는 수식에 적분이 들어가고 적분 구간이 0~1 사이로 잡혀 있는데 이 부분에 대한 detail을 설명해주실 수 있을까요? (개인적으로 정말 궁금하니 꼭 부탁 드립니다. ^^)

    논문의 핵심 아이디어인 Projection은 결국 어떤 목적을 가지기에 conflict gradient 문제를 해결할 수 있나요? 그 부분에 대한 설명은 없는 것 같아 질문드립니다.

    감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다