Skip to content

Commit

Permalink
Updated 2024.11.07
Browse files Browse the repository at this point in the history
  • Loading branch information
pervin0527 committed Nov 7, 2024
1 parent c2915a2 commit 198763c
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 44 deletions.
2 changes: 1 addition & 1 deletion _posts/2024-06-27-first.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
layout: single
title: "Github Blog 만들기"
categories: TIL
categories: github-blog
tag: GitHub Blog
use_math: true
---
Expand Down
4 changes: 2 additions & 2 deletions _posts/2024-07-19-Seoul-House-Price.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
layout: single
title: "Seoul House Price Regression"
categories: Machine-Learning
title: "[Upstage Ai-Lab]Seoul House Price Regression"
categories: Competition
tag: [Machine-Learning, Competition]
use_math: true
---
Expand Down
2 changes: 1 addition & 1 deletion _posts/2024-08-12-CV-competition.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
layout: single
title: "AiLab 3기 - 문서 이미지 분류 경진대회"
title: "[Upstage Ai-Lab]Document Type Classification"
categories: Competition
tag: [Deep-Learning, ComputerVision, Competition]
use_math: true
Expand Down
47 changes: 7 additions & 40 deletions _posts/2024-09-11-NLP-competition.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
layout: single
title: "AiLab 3기 - 대화 요약 경진대회"
title: "[Upstage Ai-Lab]Dialogue Summarization"
categories: Competition
tag: [Deep-Learning, Natural-Language-Processing, Competition]
use_math: true
Expand Down Expand Up @@ -62,54 +62,21 @@ train, dev 데이터는 위와 같이 두 명이상의 사람들이 대화한

# 5.시도한 방법들

## 5-1.R3F

<img src="{{site.url}}/images/240911/0009.png" width="1200" height="300">

- input에 noise를 적용하고 얻은 추론과 noise를 적용하지 않은 추론간 KL-Divergence를 loss로 사용하는 방식입니다.
- 두 예측 분포간 발산을 계산하므로 전체적인 문장의 차이를 손실로써 반영할 수 있을 것이라 생각했습니다.
- 리더보드 점수는 39로 오히려 감소했는데, noise가 없는 input의 분포가 어느정도 좋은 성능을 보여야 의미가 있을 수 있는 방법이라 해석하고 있습니다.

## 5-2.Rouge loss와 Reinforcement Learning

- 대회 평가 지표인 Rouge score를 손실함수로 사용할 수는 없을까라는 생각이 있었습니다.
- Rouge-1은 단어, Rouge-2는 bigram이다 보니 rouge를 손실로 반영한다면 어느정도 문장 관점 손실을 계산할 수 있을 것이라 생각하고 실제로 학습을 시도했습니다.
- 학습 로그 자체는 준수했지만, 점수 향상은 이루어지지 않았고, 조사 끝에 rouge는 미분이 불가능하며 보통은 rouge를 reward로 해서 강화학습을 하는게 일반적이라고 합니다.
- 따라서 해당 방식을 시도해봤는데 학습 속도가 굉장히 느리면서 수렴도 이루어지지 않아서 기각했습니다.


## 5-3.영어 데이터 활용하기

<img src="{{site.url}}/images/240911/0011.png" width="1200" height="300">

- 한국어 자체적으로 갖는 여러 특성들로 인해 성능의 한계가 있을 것이라 생각되었으며, Back Translation 데이터를 확보할 수 있고, Pretrained weight 선택폭도 넓어지니 일석이조입니다.
- 대회 규정상 오리지널 데이터는 사용이 불가능합니다. 따라서 SoLA, Gpt4 API를 이용해 train, dev를 영어로 다시 번역했습니다.
- 영어로 학습시 더 빠르게 수렴되고 rogue score가 증가하는 양상을 보였습니다.
- 테스트 데이터에 대한 예측을 만들고, LLM 모델로 다시 한국어로 번역해 결과를 제출합니다.
- 하지만 리더보드 점수는 향상되지 못했습니다. 그 이유는 번역된 단어가 동의어 또는 유의어로 생성되서 정답 단어와 다르기 때문입니다. 즉, 요약문의 퀄리티는 꽤 괜찮았지만 리더보드 점수 향상으로 연결되지 못했습니다.

## 5-4.LLama3 + LoRA
## 5-1.LLama3 + QLoRA

[https://llama.meta.com/docs/how-to-guides/fine-tuning/](https://llama.meta.com/docs/how-to-guides/fine-tuning/)

Bart, T5 모델들은 이런저런 시도들을 하더라도 점수가 향상되지 못했기 때문에 LLM 모델을 사용해보기로 했습니다.

모델은 LLama3-8B를 사용했는데, 전체를 fine tuning하기엔 컴퓨팅 자원이 턱없이 모자랐기 때문에 LoRA를 채택해서 소량의 파라미터만 학습했습니다.

결과적으로 리더보드 점수가 43점을 달성할 수 있었습니다.

## 5-5.Back Translation + Data Generation
모델은 ```LLama3-8B-int4```를 사용했는데, 전체를 fine tuning하기엔 컴퓨팅 자원이 턱없이 모자랐기 때문에 QLoRA로 finetuning을 했고, 43점을 달성할 수 있었습니다.

<img src="{{site.url}}/images/240911/0012.png" width="1200" height="300">
## 5-2.Data Augmentation

멘토링 시간에 받은 피드백은 train과 test간 어체의 불일치였습니다. 따라서 멘토님은 다음과 같은 피드백을 주셨습니다.
- 이전에 만든 영어 데이터를 한국어로 번역할 때 문어체, 구어체, 번역체를 반영할 것.
- 기존 한국어 데이터에서 topic을 기준으로 가장 많은 비중을 차지하는 것들을 선별하고 그에 대한 샘플들을 뽑아 fewshot으로 제공.
- 이를 기반으로 dialogue를 입력해 summary를 생성 또는 summary를 입력해 dialogue를 생성하면서 다양한 어체를 반영하도록 프롬프트 엔지니어링.
train과 test간 어체 불일치가 있는 것을 파악할 수 있었습니다.

데이터는 SoLA보다 Gpt4가 더 좋은 퀄리티로 생성할 수 있었습니다. 다만 멘토링을 받은 시점이 월요일 밤이었기 때문에 사실상 학습할 수 있는 기간은 화요일 하루 뿐이었고, 7시 이전까지 열심히 학습했지만 데이터 양이 증가했기도 하고 기본적인 모델 학습 시간도 길었기 때문에 3epoch 정도만 학습했습니다.
- SamSum 데이터셋을 한국어로 번역해 추가하고 대회 데이터를 Back translation해서 동의어 데이터 생성하고 학습시 44.6으로 1%개선.
- train(구어체)과 test(문어체)간 어체차이를 통일 시키기 위해 dialogue-to-summary, summary-to-dialogue 데이터 생성하고 학습시 45.72로 2%개선.

결과적으로 점수 향상은 이루어지지 못했으나, 길게 학습했다면 유의미한 성과를 보였을 것 같습니다.

# 6.후기

Expand Down
80 changes: 80 additions & 0 deletions _posts/2024-11-07-Ai-Lab-Epilogue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
layout: single
title: "Upstage Ai-Lab 3기 끝맺음"
categories: Upstage-Ai-Lab-3기
tag: [Upstage Ai-Lab 3기]
use_math: true
---

취업 준비에 대한 마인드셋과 수료..

# [Upstage]김다현 현직자님 취업 특강

## 1.Ai Research Engineer?

- Ai 분야 R&D, 연구 개발 직종.
- 고객의 문제를 이해하고 가장 효과적으로 해결하기 위한 가설 제시 및 검증 수행.
- 제품의 요구사항을 이해하고 이를 개발 목표 및 연구 과제로 변환.
- 모델 성능에 대한 객관적인 메트릭 정의 및 측정.

즉, AIRE 포지션으로 취업하고 싶다면 연구 능력과 문제 해결 능력을 모두 갖추고 있어야 한다.

## 2.대학원 진학과 Top-Tier 학회 논문 출간

<img src="{{site.url}}/images/241107/0000.png" width="1200" height="300">

많은 회사에서는 ML Engineer든, AIRE든 주어진 문제를 해결하면서 겪게 되는 수많은 문제들을 연구하면서 해결하는 능력이 핵심이라 생각하고 있는 것 같고, 이를 증명하는 것이 대부분의 채용공고(ML Engineer, AIRE)에는 위와 같이 탑티어 학회에 논문을 출간한 경험이 있으면 우대하고 있다.

- 문제의 원인이 무엇인지 가설을 논리적, 객관적인 근거를 기반으로 수립할 수 있다. 또한 수학적, 컴퓨터 공학적 등 다양한 이론들을 기반으로 문제 해결을 시도할 수 있는 역량이 있다는 것을 입증하는 자격증 역할을 하는 것 같다.
- 이전에 실무경험이 있다하더라도 이것이 과연 객관적으로 타당한 가설과 근거를 기반으로 개선 또는 해결이 되었는지 기업의 채용담당자 혹은 실무진이 평가하기는 번거로우나 탑티어 학회에 논문을 출간했다면 어느정도 그 경험의 퀄리티가 보장되는 느낌이다.
- 논리적인 글쓰기를 기반으로 작성되는 것이 논문이다.

그럼 당장 대학원에 등록할까?? 라고 생각할 수 있지만 연구에 관심이 없는데 순전히 개인적인 스펙을 위해서 대학원에 진학하고 연구, 논문 작성을하게 되면 굉장히 괴롭다고 한다. 또한 연구라는 것이 기본적으로 정답이 없는 문제부터 정의하고 해당 문제를 풀어가는 과정이기 때문에 연구에 뜻이 없으면서 대학원에 가는 것은 좋은 선택이 아니다.

## 3.문제해결 경험이 곧 자산이다.

그럼 취업을 위해서는 어떻게 해야하나?? 문제를 해결한 상황을 많이 만들어야 한다.

기술을 가져와 사용하는건 누구나 할 수 있다. 예를 들어 "OO 논문을 읽고 해당 기술을 적용했더니 성능이 오른 경험이 있었다."라는건 누구나 할 수 있는 경험이라는 것이다.

따라서 유행하는 기술을 공부하는 것은 좋은게 맞지만 워낙 빨리 바뀌기 때문에 특정 기술, 문제만 잘하는 것이 아니라 문제 해결 능력 그자체가 더 중요하다. 기술이 아닌 문제를 해결한 경험을 쌓자.

- "사람들이 재활용 쓰레기를 잘 버리는지 판별해주는 프로그램을 만들고 싶었고, 재활용 쓰레기의 이미지만 보고 잘 분류하기 위해..."
- Ai-Lab에 있으면서 이미 많은 문제들을 경험했고 해결하려고 노력했을 것이다.
- 그러니 문제 해결 위주의 서사를 하는 것이 중요하다.


문제에서 출발하면 경험에 깊이가 더해진다. 문제부터 출발해보면 보통은 데이터부터 시작하게 될텐데 데이터를 하나하나씩 살펴보는 것은 굉장히 번거로운 일인 것은 분명하다.

하지만 모델 학습, 새로운 기술 적용 등은 코드만 살짝 바꾸면 되니까 오히려 장점이 없다. 즉, 남들이 기피하는 부분에 대한 경험을 쌓으면 강력한 차별점이 될 수 있다.

## 4.딥러닝 코딩 테스트(파일럿 프로젝트)

채용절차 중 추상적인 요구사항을 문제로 환원시키고 해결하는 능력을 입증하는 단계.

- 문제가 주어졌을 때 문제 해결 능력을 확인하는 테스트.
- 데이터셋과 평가지표 등은 고정으로 주어지고 기간 내에 서능을 높이는 것이 주목적.
- 무작정 여러 방법들을 사용하는 것보다 가설 -> 실험 -> 결과 분석을 하나의 trial로 묶어서 여러 방법을 시도 후 결과 보고에 녹여내는 것이 중요하다.
- 점수를 향상 시키는 것도 중요하지만 주어진 자원/시간에 따라 실험 설계를 잘하는지 보여줄 수 있어야한다.
- TODO 또한 정리해서 결과 보고에 포함시키면 좋다.

## 5.기술 면접

기술 면접에서는 답이 정해져 있는 질문보다 특정 상황을 가정하고 그 상황에서 어떻게 문제를 해결할 수 있는 경우가 많다.(Open-Ended Questions)

- 분류기 모델을 납품해야한다.
- 고객사마다 그들만의 데이터로 모델을 만들기를 원한다.
- 그렇다면 매번 고객사마다 모델을 처음부터 학습하면 비효율적일 것 같은데 좋은 방법이 있을까??

즉각적으로 답을 하기보다는 추가적인 정보들을 면접관에게 물어보면서 조금씩 답을 하는 핑퐁이 핵심.

- 고객사별 데이터 크기는?
- 우리가 내부적으로 확보한 데이터의 크기는?
- 현재 학습 전략은??
- 내부적으로 확보한 데이터로 사전학습을 하고 고객사별 모델을 그들만의 데이터로 미세조정하는건 어떨까?로 제시.

이후 추가적인 질문들이 발생할 수 있음. 따라서 깊이 있게 문제를 고민해보는 연습과 경험이 중요하다.

- 고객사와 우리가 확보한 데이터의 분포가 다르다면?
- 사전학습 후 고객사별 학습을 따로 하는 단계에서 성능이 저하되지 않을까?
- 고객사의 데이터는 어느 범위까지 활용가능할까?
Binary file added images/241107/0000.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 198763c

Please sign in to comment.