AI 15

HuggingFace Transformers에서 Zero-shot Classification의 원리

HuggingFace Transformers 라이브러리에서는 다양한 파이프라인들을 제공한다. 그 중 하나로 ZeroShotClassificationPipeline 이라는 것이 있는데, 미리 학습되지 않은 라벨들에 대해서 분류를 하는 기법이다. 알다시피, 모델 학습에는 다양한 공수와 리소스가 소요되기 때문에 현업에서는 필요에 따라 ZeroShot 혹은 FewShot 모델들을 잘 활용해야 하는 경우가 많이 있다. GPT-4와 같은 생성형 모델에서는 LLM의 성능을 통해 이러한 Zero Shot Classification을 수행하게 되는데, BERT와 같은 임베딩 모델 기반 환경에서는 Zero Shot Classification을 어떻게 다루게 될까? 허깅페이스 트랜스포머 소스코드 (transformers/s..

AI/Transformers 2024.03.06

텐서에서 Top-K 결과를 받아오는 방법

최근 RAG(Retrieval Augmented Generation)과 같은 반환 기반의 솔루션들이 많이 사용되면서 정보 반환의 중요성이 더 강조되어지고 있다. 물론 벡터 데이터베이스 등의 다른 솔루션을 사용해서 문제를 해결할 수도 있으나, 상황에 따라 상위 K개의 결과를 반환하는 알고리즘 및 기능을 직접 구현해야 하기도 할 것이다. FAISS나 ChromaDB도 좋은 툴이지만, 개인적으로는 torch.topk() 메소드를 사용하는 유사도 반환 방식 역시 알아둘 필요가 있다고 본다. 가장 큰 이유는, FAISS나 ChromaDB 등의 솔루션의 경우에는 상당한 양의 메모리를 소모한다. 더 빠른 결과의 반환을 위해 인덱싱을 하다보니 그만큼 많은 메모리를 사용하게 된다. 이는 다시 말해, 물리적 한계로 인해 ..

AI/PyTorch 2023.10.26

Transformers Decoder의 "past_key_values"에 대하여

허깅페이스 Transformers를 통해 생성 모델을 사용하다보면 생성 결과 자료구조 내에 "past_key_values"라는 값이 있는 것을 확인할 수 있다. 이를 보면 아마 두가지 의문점이 들 것이다: 1) 왜 과거의 key, value 값들이 중요한가 2) 왜 query는 포함되지 않는가? 이에 대해서 자세히 알아보기 위해서는 Transformer Decoder의 Causal Masking Self Attention에 대해서 알아야 한다. 기본적으로, transformer는 모든 단어를 병렬적으로 처리하기 때문에 autoregressive 한 특성이 없다. 따라서, Causal Masking을 사용해서 목표하는 문장의 일부를 가려서 인위적으로 연속성을 학습하게 한다. Vanilla Transform..

AI/Transformers 2023.10.26

Multi-Query Attention 설명

효율적인 Inference 요약, 질의응답(Q&A), 검색 증강 생성 등 언어 작업에 효과적인 기술로 Transformer 아키텍처에 기반한 대규모 언어 모델(LLM)이 부상했다. 하지만 이러한 모델을 사용하려면 계산 비용이 매우 많이 들며, 주로 NVIDIA GPU와 같은 컴퓨팅 가속기를 통해 실행된다. LLM에 대한 입력과 출력은 토큰 시퀀스(예: 단어)로 표현됩니다. 긴 시퀀스(즉, 컨텍스트 창이 긴)를 처리할 수 있는 LLM을 훈련하거나 미세 조정하는 것은 활발히 발전하고 있는 분야이다. 대부분의 OSS LLM 기본 모델은 2K 컨텍스트 창으로 사전 학습된다. 문서 요약이나 컨텍스트 기반 질문 답변과 같이 점점 더 많은 사용 사례에서 LLM이 처리하는 시퀀스 길이는 수천에서 수만 개의 토큰으로 상..

AI/LLM 2023.10.25

cuDNN benchmark 활성화를 통한 최적의 알고리즘 선택

PyTorch 프레임워크 내에는 다양한 CUDA 커널들이 있다. 이로 인해 다양한 환경에서도 최적의 성능을 낼 수 있게 하지만, 어떤 의미로 보면 너무 복잡하게 느껴질 수도 있다. 실제로, CNN에서 Conv2D 레이어의 forward pass에 대한 cuDNN 알고리즘만 하더라도 하나가 아니다. 물론, 모두 충분히 빠르다고 할 수 있지만, 그럼에도 현재 실행되는 환경에 더 최적화된 커널이 존재하는 법이다. 파이토치의 백엔드 cudnn API에는 benchmark라는 플래그가 있는데, 이 플래그를 활성화시키면 파이토치에 내장된 auto-tuner가 활성화되면서 가장 최적화된 cudnn 알고리즘을 자동으로 선택해주게 된다. import torch.backends.cudnn as cudnn # type: i..

AI/PyTorch 2023.10.14

LLM 연구의 주요 과제들

본 글은 https://huyenchip.com/2023/08/16/llm-research-open-challenges.html라는 포스트를 해석 및 요약한 글입니다. 환각(Hallucination) 감소 및 측정 - 회사에서 LLM을 채택하는데 가장 큰 장애물은 환각 - 환각을 완화하고 측정하기 위한 지표를 개발하는 것은 인기 있는 연구 주제로 많은 스타트업들이 집중하고 있음 - 환각을 줄이기 위한 임시 팁으로 프롬프트에 컨텍스트 추가하기, Chain-Of-Thought, Self-Consistency, 모델에게 간결한 답을 요청하기 등이 있음 컨텍스트 길이 및 컨텍스트 구성 최적화 - 대부분의 질문에는 컨텍스트가 필요함 - SituatedQA 논문에 의하면 정보 검색 질문의 상당부분이 컨텍스트에 따라..

AI/LLM 2023.10.14

Kaggle Writeup: NBME - Score Clinical Patient Notes

주요 과제 2022년 2/1 ~ 5/3까지 진행되었던 대회로, 자연어 처리 기반의 대회였다. 해당 대회는 기본적으로 의료 진단 노트에 대한 피드백의 자동화를 위한 AI 모델의 학습이 주요 목적이었다. 기본적으로, 의사를 방문할 때 의사가 증상을 어떻게 해석하는지에 따라 진단이 정확한지 여부가 결정될 수 있다. 의사들은 면허를 취득할 때까지 환자의 증상, 신체 검사 결과, 가능한 진단 및 후속 치료를 기록하는 환자 메모를 작성하는 연습을 많이 해왔다. 환자 기록 작성 기술을 학습하고 평가하려면 다른 의사로부터 피드백을 받아야 하는데, 이는 시간이 많이 걸리는 과정이다. 이러한 현실적 어려움을 극복하기 위해서 자동화된 AI 기반 솔루션을 구축하기 위해서 NBME(National Board of Medical..

AI/Kaggle Writeups 2023.10.09

Precision과 Recall

Precision과 Recall 자신이 어떤 기술을 개발하였다. 예를 들어 이미지에서 사람을 자동으로 찾아주는 영상 인식 기술이라고 하자. 이 때, 사람들에게 "이 기술의 검출율은 99.99%입니다"라고 말하면 사람들은 "오우...!!!" 하면서 감탄할 것이다. 반면에 "이 기술의 검출율은 50%입니다"라고 말하면 사람들은 별 관심을 보이지 않거나 "그것도 기술이라고..." 생각할 것이다. tl;dr - precision은 검출된 결과의 정확도를 나타낸다 - recall은 실제 물체를 얼마나 덜 빠뜨리고 검출하였는지에 대한 지표이다. 자신이 어떤 기술을 개발하였다. 예를 들어 이미지에서 사람을 자동으로 찾아주는 영상 인식 기술이라고 하자. 이 때, 사람들에게 "이 기술의 검출율은 99.99%입니다"라고 ..

AI/Machine Learning 2023.10.09

Knowledge Distillation

Knowledge Distillation = 지식(Knowledge) + 증류(Distillation) - 지식 : 어떤 대상에 대하여 배우거나 실천을 통하여 알게 된 명확한 인식이나 이해 - 증류 : 액체를 가열하여 생긴 기체를 냉각하여 다시 액체로 만드는 일. 여러 성분이 섞인 혼합 용액으로부터 끓는점의 차이를 이용하여 각 성분을 분리할 수 있다. 그렇다면 지식 증류란 무엇인가하면, 큰 모델(Teacher Network)로부터 증류한 지식을 작은 모델(Student Network)로 transfer하는 일련의 과정이라고 할 수 있다. Knowledge Distillation은 도대체 왜 등장했을까? 지식 증류를 처음으로 소개한 논문은 모델 배포(model deployment) 측면에서 지식 증류의 필..

AI/Machine Learning 2023.10.09

PyTorch에서 이미지 데이터에 대해 normalize를 할 때, mean=[0.485, 0.456, 0.406]과 std=[0.229, 0.224, 0.225]를 쓰는 이유는?

PyTorch vision 모델 페이지에 가보면, "All pre-trained models expect input images normalized in the same way, i.e. mini-batches of 3-channel RGB images of shape (3 x H x W), where H and W are expected to be at least 224" 라는 내용을 볼 수 있다. 그 다음에 아래와 같은 코드를 볼 수 있을 것이다. normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 보다시피, mean과 std 값으로 뭔가 이상한 값들이 세팅되어 있다. 많은 사용자들이 이 값들을 ..

AI/PyTorch 2023.10.09