일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- djangorestframework
- ai 캠프
- django
- pandas
- Python
- mifare
- 파이썬
- pytorch
- streamlit
- ML
- 로컬 런타임
- finpilot
- EC2
- seaborn
- team_project
- chromeextention
- ollama
- Jupyterlab
- sLLM
- 오블완
- ai_캠프
- aws
- Github
- lightsail
- 정치기 필기
- mysql
- 티스토리챌린지
- 머신러닝
- conda
- ai캠프
- Today
- Total
greatsangho의 이야기
DACON 대회 출전 - 2024 생명연구자원 AI활용 경진대회 : 인공지능 활용 부문 본문
https://dacon.io/competitions/official/236355/overview/description
2024 생명연구자원 AI활용 경진대회 : 인공지능 활용 부문 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
데이콘에서 진행하는 AI 경진대회의 결과가 나왔다.
3명이서 팀으로 대회에 출전하였고, 대회 기간이 초반에 머신러닝, 딥러닝을 배울 때와 딱 맞아 공부를 겸하여 나갈 수 있었다. 대회를 한 결과는 38등으로 1등수 차이로 4%안에는 들지 못하여 브론즈 등급을 받게 되었다.
https://dacon.io/competitions/official/236355/codeshare/12083
2024 생명연구자원 AI활용 경진대회 코드 공유 - 아기 돼지 삼형제 팀
2024 생명연구자원 AI활용 경진대회 : 인공지능 활용 부문
dacon.io
우리 팀은 아미노산의 변이를 극성, 무극성 여부, 변이 된 유전자의 아미노산 종류 등을 고려하여 치명적일 것으로 보이는 순서대로 치환하여 이를 점수화 하였다. 그리고 알려진 암종별 변이 데이터를 활용하여 이를 학습에 활용하였다.
데이터의 불균형을 해결하기 위해 SMOTE 방식을 시도하거나, 데이터를 정규화 하기 위해 MinMaxScaler나 StandardScaler를 활용하기도 하였다.
학습은 개별 모델들을 학습시켜 Linear, Logistic, SVM 부터 추가적으로 부스팅 모델을 공부하여 XGBoost, LightGBM, AdaBoost, CatBoost를 전부 적용해 보았다.
그 다음 모델 별로 앙상블을 진행하여, Voting과 Stacking을 진행하였고, 기존 모델들 대비 스태킹에서 성능이 크게 오르는 것을 확인할 수 있었다.
다양한 모델들을 찾아보고 외부 데이터에 따른 매핑을 더 진행해 보았지만 리더보드 스코어가 크게 오르지 않았다.
추가적으로 이런 기법들을 자동으로 해주는 AutoML이 있다는 것을 알게 되었다.
AutoML을 활용해 성능을 최적화 해보았지만 최종적으로 스태킹 모델에서 크게 벗어나지 않았고, 최종 성적은 34.17%의 정확도를 보이는 모델을 개발하였다.
대회를 하며 주로 생명과학에 대한 사전 지식이 풍부한 형이 전처리를 하고, 나와 다른 친구는 주로 모델을 개발하는데 주력하였다. 대회가 끝나고 우승자들의 코드를 볼 수 있었고, 전처리의 중요성을 다시 한 번 느낄 수 있었다. 모델은 나와있는 모델을 활용하는 것에서 크게 벗어나지 않고, AutoML과 같은 자동화된 프로세스로 인해 전처리를 잘하는 데이터 엔지니어의 필요성이 더 부각된다는 것을 깨달았다. 다음은 참고할 만한 우승자들의 코드이다.
https://dacon.io/competitions/official/236355/codeshare/12083
2024 생명연구자원 AI활용 경진대회 코드 공유 - 아기 돼지 삼형제 팀
2024 생명연구자원 AI활용 경진대회 : 인공지능 활용 부문
dacon.io
여기서 배울 수 있는 점은 데이터 분석을 시각화하고 아이디어를 하나씩 적용했다는 점이다.
데이터 분석을 할 때 여러 방식을 시도하고 그 중에서 성능이 잘 나오는 것을 선택하는 방법이 논리적으로 완전한지에 대한 의문이 있었는데 대회에서 적용되는 것을 보고 그런 접근이 괜찮다는 것을 알 수 있었다.
여기서는 암종별로 유전자 돌연변이가 다르게 나타남을 확인하고, 전처리 방식에 따라 성능의 변화 여부로 전처리 방식을 선택하였다.
이 대회가 아닌 다른 대회에 참가하였을 때 LightGBM(이하 LGBM)의 성능이 높았는데, 여기서도 LGBM을 사용하였다. 대신 Focall loss를 사용하였다.
GPT에서 설명은 다음과 같다.
Focal Loss는 클래스 불균형 문제를 해결하기 위해 고안된 손실 함수로, 특히 **객체 탐지(Object Detection)**와 같은 분야에서 많이 사용됩니다. 이는 Cross Entropy Loss의 확장판으로, 쉽게 분류되는 샘플보다는 어려운 샘플에 더 집중하여 학습할 수 있도록 설계되었습니다.
Focal Loss는 Cross Entropy Loss에 modulating factor를 추가하여, 쉽게 분류되는 샘플에 대한 손실을 줄이고, 어려운 샘플에 대한 손실을 상대적으로 더 크게 부여합니다. 다음과 같은 수식으로 정의됩니다:
여기서:
pt 는 모델이 예측한 클래스 확률입니다.
α는 클래스 불균형을 보정하기 위한 가중치입니다.
γ는 focusing parameter로, 값이 클수록 쉽게 분류되는 샘플의 손실을 더 많이 줄여줍니다.
Focal Loss는 Cross Entropy Loss의 한계를 극복하고, 클래스 불균형 문제를 해결하기 위해 고안된 강력한 손실 함수입니다. 이를 통해 모델은 어려운 샘플에 더 집중하여 학습할 수 있으며, 특히 객체 탐지와 같은 분야에서 성능 향상에 중요한 역할을 합니다.
즉, 모델이 어려운 샘플에 집중하여 클래스 불균형을 전처리가 아닌 모델학습에서 활용한다는 것을 알 수 있었다.
https://dacon.io/competitions/official/236355/codeshare/12084
2024 생명연구자원 AI활용 경진대회 코드 공유 - GIGO 팀
2024 생명연구자원 AI활용 경진대회 : 인공지능 활용 부문
dacon.io
다른 우승 팀에서도 Focal loss를 활용하였음을 알 수 있었다.
이 팀은 언어 모델에서 활용되는 TF-IDF를 활용하여 가중치를 조절하였다. 라벨 인코딩으로 인한 마스킹이 유전체 정보에 대한 손실을 야기한다고 해석하였다. 트랜스포머를 활용하여 해석한 점이 새로웠으며, LLM을 배우기 전에 대회가 진행되어 해당 컨셉을 적용해 보지 못했던 것이 아쉬웠다.
xTransformer
xTransformer는 Transformer의 변형 중 하나로, 주로 멀티모달(Multimodal) 학습을 위한 구조입니다. 멀티모달 학습이란 텍스트, 이미지, 오디오 등 서로 다른 유형의 데이터를 동시에 처리하는 모델을 의미합니다. xTransformer는 이러한 다양한 입력 데이터를 처리하기 위해 설계되었습니다
SAINT (Self-Attention and Interaction Networks Transformer)
SAINT는 주로 표 형식 데이터(Tabular Data) 처리를 위해 설계된 Transformer 기반 모델입니다. 표 형식 데이터는 일반적으로 머신러닝에서 자주 다루는 데이터 유형으로, SAINT는 이 데이터를 효과적으로 처리하기 위한 구조적 변형을 도입했습니다. 주로 금융 데이터 분석, 생물학적 데이터 분석, 그리고 기타 표 형식 데이터를 다루는 다양한 머신러닝 작업에서 사용됩니다.
요약
xTransformer: 멀티모달 데이터를 처리하기 위한 Transformer 변형으로, 텍스트와 이미지 같은 서로 다른 유형의 데이터를 동시에 학습할 수 있는 구조입니다.
SAINT: 표 형식 데이터를 처리하기 위해 설계된 Transformer 변형으로, 행과 열 간의 상호작용을 효과적으로 학습하여 복잡한 관계를 모델링합니다.
두 모델 모두 Transformer의 강력한 셀프 어텐션 메커니즘을 기반으로 하여 특정 유형의 데이터를 더 잘 처리할 수 있도록 변형된 버전들입니다.
셀프 어텐션을 활용한 방법이 독특하였고, 단백질 변이보다 코돈 변이를 활용하여 분류하는 것이 더 많은 정보를 포함했다는 것을 알 수 있었다. 또한 BERT와 같은 인간의 언어를 학습한 무거운 모델보다 생물 데이터를 학습하기 위한 방법이 LLM 활용에 더 유용할 수 있다는 것을 알 수 있었다.
우리 팀이 시도한 다른 방식은 유전체 정보를 이미지로 생각하는 것이었다. 각 유전체에 대한 값을 숫자로 치환하고, 변이가 없는 WT만 있는 행만을 삭제하였다. 이를 이미지처럼 하나의 행렬을 만들고, 전체 유전체 변이에 대한 이미지를 하나씩 만들었다.
이 방식 외에도 각 변이 정보를 가운데 두고 이를 변이 위치를 표시하는 8개의 항을 두어 유전체 정보당 3x3 행렬을 만들고 이를 모든 유전체에 대해 적용하였다. 즉 앞서 설명한 행렬의 가로, 세로가 3배가 되는 이미지를 생성하여 유전체 변이 위치와 변이 정보를 담는 이미지로 만들어 해석하고자 하였다. ResNet 등에 적용을 시도하였으나 성능이 나오지 않았다.
팀원들과 아이디어 탐색 및 모델 적용에 대한 부분을 맡아서 하였는데, 모델 학습 및 적용에 대한 부분을 공부함과 동시에 전처리를 하는 것에 더 집중하도록 해야겠다.
대회를 준비하면서 실력이 빠르게 늘어 공부를 할 때 대회 참가를 하는 것이 정말 좋다는 것을 느꼈다. 앞으로는 상황에 맞는 전처리와 그에 따른 분석 방법을 찾는 연습을 더 하도록 해야겠다.
함께 힘낸 우리 팀원들에게 감사의 말을 전한다.
'프로그래밍 > SK AI 캠프' 카테고리의 다른 글
캠프54일차 - LLM 파인튜닝 개념과 기본 준비 (2) | 2024.11.12 |
---|---|
캠프53일차 - 프롬프트 엔지니어링 응용 (Chain of Thought(CoT), Tree of Thought(ToT), Automatic Prompt Engineer(APE)) (8) | 2024.11.11 |
윈도우 DirectX12와 WSL을 이용한 모든 GPU에서 tensorflow와 pytorch 사용하기 (1) | 2024.11.09 |
캠프52일차 - 프롬프트 엔지니어링 응용(랭체인, RAG(검색 증강 생성)) (1) | 2024.11.08 |
캠프51일차 - 프롬프트 엔지니어링 응용(랭체인) (9) | 2024.11.07 |