[DCAI] Special Topic 3. Encoding Human Priors: Data Augmentation and Prompt Engineering

Seonuk Kim·2024년 9월 22일
post-thumbnail

Encoding Human Priors: Data Augmentation and Prompt Engineering

이번 글에서는 머신러닝 모델에 인간의 선험 지식(human priors)을 인코딩하는 방법을 다룬다. 이를 위한 두 가지 대표적인 방법은 다음과 같다.

  1. 데이터 증강(data augmentation): 학습 데이터를 보강하여 모델의 일반화 성능을 향상시키는 방법
  2. 프롬프트 엔지니어링(prompt engineering): 대형 언어 모델(LLM)을 테스트할 때 입력을 조정하여 원하는 출력을 얻는 방법

ML 모델의 단순한 실패 사례

머신러닝 모델은 현실 세계에서 예상치 못한 방식으로 간단히 실패할 수 있다. 예를 들어, 직립한 개의 사진만으로 학습된 모델은 회전된 개를 인식하지 못할 수 있다. 이러한 문제는 모델이 우리가 알고 있는 상식을 알지 못하기 때문에 발생한다. 우리는 개가 직립한 상태 외에도 다양한 각도로 존재할 수 있다는 선험 지식(prior knowledge)을 가지고 있으나, 이러한 지식이 모델 학습 과정에서는 반영되지 않았기 때문에 문제가 발생한다.

이러한 사례에서 회전 불변성(rotation invariance)은 유용한 인간 선험 지식의 한 유형으로, 입력 데이터의 변화가 모델의 출력에 영향을 주지 않도록 하는 성질을 의미한다. 회전 불변성을 학습 데이터에 인코딩하면 추가적인 데이터 수집 없이도 모델 성능을 향상시킬 수 있다.

인코딩(Encoding)이란 무엇인가?

인코딩은 불변성을 나타내는 함수를 찾는 과정이다. 예를 들어, 이미지를 회전시키는 함수는 회전 불변성을 인코딩하는 방법의 하나이다.

데이터를 조정하는 방식은 아키텍처나 손실 함수를 변경하는 것보다 더 간단하고 효과적이며, 머신러닝 연구자와 실무자들이 널리 사용하는 방법이다. 예를 들어, 회전된 개 이미지를 추가로 학습 데이터에 포함시키면 모델은 회전된 개도 인식할 수 있게 된다.

과적합과 데이터 증강

데이터 증강의 주된 목적은 모델의 과적합(overfitting)을 방지하는 것이다. 과적합이 발생하면 모델은 자주 접한 특징에 과도하게 의존하여 패턴을 암기하는 경향이 생기며, 학습 및 일반화 능력이 떨어진다. 반면, 과소적합(underfitting)은 학습 데이터가 부족할 때 발생하며, 이때는 데이터를 추가하여 문제를 해결할 수 있다.


인간 선험 지식을 활용한 데이터 증강(Human Priors to Augment Training Data)

데이터 증강(data augmentation)은 충분한 데이터를 수집하는 것이 어려운 상황에서 모델 성능을 개선할 수 있는 효과적인 방법이다. 실제로 데이터를 충분히 가지고 있다고 생각해도, 특정 클래스에 대한 충분한 커버리지가 없을 수 있으며, 이를 클래스 불균형(class imbalance)이라고 한다. 또한, 많은 데이터를 보유하고 있더라도 데이터가 치우쳐 있거나 편향된 경우, 또는 시뮬레이션된 데이터일 경우, 테스트 세트에 일반화되지 않는 문제가 발생할 수 있다.

데이터 증강은 이미 가지고 있는 데이터를 변형하여 추가적인 데이터를 생성할 수 있는 방법이다. 이는 새로운 데이터를 수집하는 것이 어렵거나, 비용이 많이 들거나, 시간이 오래 걸릴 때 유용하다. 예를 들어, 의료 분야에서는 데이터 라벨링에 전문 의사가 필요하며, 이는 비용이 많이 들고 시간이 오래 걸리는 작업이다.

실제 사례: 데이터 라벨링의 어려움

특정 프로젝트에서는 전문의 자격이 있는 병리학자들의 라벨링이 필요한 경우, 이들 전문가조차도 항상 의견이 일치하지 않을 때가 있다. 병리학자들의 시간을 조율하는 것도 어려웠고, 라벨의 정확성을 지속적으로 확보하는 데 드는 비용 또한 매우 높다. 이러한 문제로 인해 프로젝트가 수개월 지연되기도 한다.

불변성 인코딩을 통한 데이터 증강

데이터 증강은 데이터에 내재된 불변성에 대한 인간 선험 지식(human priors)을 인코딩하여 데이터셋을 확장하는 방법이다. 예를 들어, 개 사진에서 뒤집기(flip)회전(rotation)과 같은 변형을 통해 더 많은 데이터를 생성할 수 있다.

이러한 기법은 비교적 간단하지만, 더 고급 기술들도 존재한다. 예를 들어, 모비우스 변환(Mobius transformations)을 활용한 방법이 있다 (Zhou et al., 2020). 또한, 클래스 불균형 문제를 해결하기 위한 Mixup이라는 기법도 효과적이다. 이 방법은 서로 다른 클래스의 데이터를 섞어 새로운 예제를 생성하는 방식이다 (Zhang et al., 2017).

Mixup 예시

Mixup 기법을 쉽게 설명하면, 개 사진과 고양이 사진을 섞어서 새로운 이미지를 생성하는 것이다. 예를 들어, 고양이 이미지의 알파 값을 60%, 개 이미지의 알파 값을 40%로 설정하면 개와 고양이가 섞인 이미지를 얻을 수 있다. 이때 클래스 라벨도 개 40%, 고양이 60%로 설정하여 모델이 이를 학습할 수 있도록 한다. 이러한 방법을 데이터 전반에 적용하여 더 많은 학습 예제를 생성할 수 있으며, 이는 현재 널리 사용되고 있는 매우 효과적인 기술이다.

합성 데이터 증강

데이터 증강은 합성 데이터 증강(synthetic data augmentation)으로 확장될 수 있다. 이는 이미 존재하는 데이터를 바탕으로 해당 클래스의 데이터를 더 생성하는 방식이다. 합성 데이터 생성은 자체적으로 모델을 학습하거나, 이미지 생성의 경우 DALL-EStable Diffusion과 같은 파운데이션 모델(foundation models)을 사용할 수 있다. 그러나 파운데이션 모델이 테스트 세트의 일부로 학습되었다면, 테스트 세트에 미치는 영향을 주의 깊게 고려해야 한다.

로보틱스와 데이터 증강
데이터 증강은 로보틱스 분야에서도 유용하다. 실제 환경에서 실험을 수행하는 것은 매우 비용이 많이 들기 때문에, 종종 시뮬레이션 환경에서 알고리즘을 학습시킨다. 이때 생성 모델(generative model)을 사용하여 시뮬레이션 환경의 스타일을 실제 환경의 스타일로 전이할 수 있다. 예를 들어, Google의 RetinaGAN은 이러한 목적으로 사용된 연구이다 (Ho et al., 2020).

다양한 모달리티에 적용되는 데이터 증강

데이터 증강은 이미지뿐만 아니라 다양한 모달리티(modality)에도 적용될 수 있다. 예를 들어, 텍스트의 경우 역번역(back-translation)이라는 기법을 사용할 수 있다. 이는 영어 문장을 다른 언어로 번역한 후 다시 영어로 번역하여 새로운 문장을 생성하는 방식이다. 예를 들어, "I have no time"을 프랑스어로 번역한 후 다시 영어로 번역하면 "I don’t have time"과 같은 문장을 얻을 수 있다. 이 방법을 통해 동일한 의미를 가지면서도 다른 표현을 사용하는 새로운 예제를 생성할 수 있으며, 이를 통해 모델이 다양한 표현을 학습하게 할 수 있다.

테스트 시점에서의 인간 선험 지식: Human Priors at Test-Time (LLMs)

지금까지는 학습 데이터에 인간 선험 지식을 인코딩하는 방법을 설명했지만, 테스트 시점(test time)에서 인간 선험 지식을 모델에 인코딩할 수도 있다. 이때 사용되는 대표적인 기법이 프롬프트 엔지니어링(prompt engineering)이다. 프롬프트 엔지니어링은 대형 언어 모델(LLM)을 대상으로 테스트 시점에 입력을 조정하여 원하는 출력을 얻는 기술이다.

프롬프트 엔지니어링의 간단한 예시

예를 들어, LLM에게 "학생을 위한 추천서를 작성해 주세요"라고 요청하면, 평범한 추천서를 작성할 것이다. 그러나 "MIT에 합격한 학생을 위한 추천서를 작성해 주세요"라고 요청하면, 더 세련된 추천서를 생성할 것이다. 이는 모델이 이 추천서가 MIT에 제출된다는 가정 하에 더욱 높은 수준의 답변을 제공하려 하기 때문이다. 작은 프롬프트 변화가 결과에 큰 차이를 만들 수 있다는 점이 매우 흥미롭다.

LLM의 특별한 점은 우리가 매우 자연스럽게 사용할 수 있는 인터페이스인 자연어로 모델을 프롬프트할 수 있다는 것이다. 과거에는 모델 내부에서 어떤 조절 변수를 통해 출력을 조작할지 연구하는 disentanglement에 초점이 맞춰져 있었다. 하지만 LLM은 자연어 기반 프롬프트를 사용함으로써 사용자와 모델 간의 상호작용을 보다 직관적으로 만든다.

서로 다른 모델들 간의 차이

프롬프트 엔지니어링은 사용되는 모델에 따라 매우 다르게 작동한다. 서로 다른 대형 언어 모델들이 각기 다른 방식으로 학습되었기 때문이다. 예를 들어, GPT-3는 다음 단어를 예측하는 방식으로 학습되었다 (Brown et al., 2020). 이 모델은 많은 양식 데이터를 학습했기 때문에, 프롬프트에 따라 양식 작성과 관련된 내용을 출력하는 경향이 있다. 반면, GPT-3.5(ChatGPT)는 추가적으로 대화 및 명령 데이터를 학습했기 때문에, 질문을 받으면 양식 작성 대신 실제로 질문에 답변하는 결과를 생성한다.

예시를 통한 모델 활용
프롬프트 엔지니어링에서 가장 강력한 기법 중 하나는 예시 제공이다. 예시는 모델이 주어진 상황에서 어떻게 행동해야 하는지에 대한 문맥을 제공하며, 모델이 더 정확하게 원하는 결과를 생성할 수 있도록 돕는다. 예를 들어, GPT-3에게 "질문에 답변해라"라는 문맥을 제공하면, 양식을 작성하는 대신 질문에 대한 실제 답변을 생성하게 된다.

Lab Session: 컨텍스트 템플릿 만들기

이 내용을 실습 과제를 통해 직접 탐구해 볼 기회가 있을 것이다. 실습에서는 확장성과 재사용성을 고려하여 컨텍스트 템플릿(context template)을 구축하게 될 것이다. 또한, 예시를 추가하여 모델의 성능을 향상시키고, 프롬프트를 미세하게 조정하여 출력이 어떻게 변하는지 확인할 수 있다.

이는 지금 우리가 구글을 사용할 때 쿼리를 조정하여 원하는 결과를 얻는 방식과 매우 유사하다. 이렇게 해서, 데이터를 통한 인간 선험 지식의 인코딩 방법에 대한 설명을 마무리하겠다. 데이터 증강(data augmentation), 즉 학습 전에 데이터 공간을 조작하는 방식과 프롬프트 엔지니어링(prompt engineering), 즉 테스트 시점에서 모델에 입력되는 데이터를 조작하는 방식을 살펴보았다. 이 두 가지 방법을 결합하면, 데이터를 통해 모델 성능을 향상시키는 데 인간 선험 지식을 인코딩하는 매우 유용한 인터페이스를 제공할 수 있다.

References

profile
Content Creator and Researcher with AI technology

0개의 댓글