안녕하세요.
HuggingFace 9기 파트너 정정민입니다.
이전 포스팅에서는
허깅페이스에 업로드 된 데모 사이트도 살펴보고, - 링크
허깅페이스에서 제공하는 여러 모델을 살펴봤고, - 링크
그 모델을 가져다가 추론하는 과정도 이야기했고, - 링크
연구자들이 업로드 한 데이터도 가져다가 살펴봤죠? - 링크
하지만 딥러닝 모델 구현의 꽃은 뭐니뭐니해도 학습입니다.
이번 포스팅에서는 학습에 관한 과정을 살펴보려해요.
전공자가 아니라면, 학습이라는 과정이 생소하고 복잡합니다.
그래서 이번 과정에서 대략적으로 학습이라는 부분이 어떻게 진행되고
HuggingFace에서는 어떤 방식으로 진행되는지 살펴보죠 .
학습
(참고로 쉽게 읽어볼만한 링크를 남겨봅니다~)
머신러닝 필드에서 학습이란,
목적하는 문제를 풀기위해, 제공된 데이터를 살펴 패턴을 찾아내는 자동화 과정을 의미합니다.
이를 위해 당연히도 양질의 데이터를 넣어줘야겠죠??
또한 그 양질의 데이터가 딥러닝 모델에 입력되기 위해 적절한 형태로 변환 되어야 합니다.
(우리가 많이 들어본 Tokenize, embedding과 같은 과정이 이에 해당합니다.)
‘적절한’이라는 단어는
풀고자 하는 문제와, 제공된 정보, 학습 환경 등에따라 상이할 수 있습니다.
chatGPT와 같이 글을 분석한다면 글을 token으로 쪼개야하고
이미지를 보는 모델이라면 이미지를 적절하게 처리해줘야 합니다.
이를 전처리 과정이라고 합니다.
전처리 된 데이터가 학습 대상인 딥러닝 모델에 입력되면 본격적인 학습에 들어옵니다.
학습은 한번에 빡! 되지 않습니다.
(물론 한번에 되는 머신러닝 모델이 존재합니다. Linear Regression의 정규 방정식 같은게 그 예입니다)
우리가 학창시절 1차 함수 수학 문제를 처음 보고, 개념을 익히고, 문제를 풀고, 틀려서 원인을 분석하고, 개념을 다지는 과정등이 필요했죠?
딥러닝 모델도 마찬가지입니다.
학습을 시작하기 전, 엉터리 상태의 딥러닝 모델이 일단 문제를 풉니다.
당연히 잘 못하겠죠?
이때, 딥러닝 모델이 잘못한 정도를 측정합니다. (마치 수학 시험을 채점해서 72.6점이 나온것 같이요)
측정하는 방법은 데이터에 따라, 목적인 문제에 따라 다릅니다.
측정된 수치는 딥러닝 모델이 개선해야 할 방향을 의미하고 학습의 방향이 됩니다!
그런 뒤 이제는 딥러닝 모델이 더 잘 할수 있는 방향으로 변화를 만들어줍니다.
(틀린 문제를 오답노트해서 지식을 더욱 잘 만드는 것 처럼요!)
문제 풀기 → 잘못한 정도를 측정 → 잘할 수 있는 방향으로 변화
위 과정은 1회로 끝나지 않습니다.
몇 십번, 몇 백번을 반복합니다. 원하는 성능에 도달할 때까지요!
그렇게 되면 이제 잘 학습된 모델이 생성됩니다.
이 모델은 전처리 된 데이터를 받아 문제의 정답을 출력합니다.
그런데 대부분의 경우 이 정답은 사람이 알아보기 어려운 상태입니다.
따라서 사람이 이해할 수 있는 형태로 후처리 변환을 해야하죠.
딥러닝 모델 입장에서
위에서 밑줄 친 부분을 다시 살펴보면 아래와 같습니다.
이걸 딥러닝 입장의 단어들로 표현하면 아래와 같아요.
이 과정은 여러분들이 아시는 대부분의 AI 모델이 겪는 과정입니다.
(AlphaGo는 좀 다릅니다 ^^;;)
위의 모든 과정을 하나하나 구현해야 학습 코드가 완성되는 겁니다!
뿐만 아니라,
학습을 어떤 방식으로 할건지
전 / 후처리는 구체적으로 어떻게 해야하는지
딥러닝 모델의 구조 특징은 어떻게 잡을건지
등등
추가적으로 고민할 부분이 매우 많죠!
HuggingFace로 학습하기
전통적(?)으로 딥러닝 모델 구현은 Pytorch 혹은 TensorFlow 와 같은 패키지로 구현을 했습니다.
학습(뿐만 아니라 추론, 평가 등등)에 필요한 여러 함수들을 미리 만들어 제공하거든요.
그럼 HuggingFace는 학습에 어떤 방식으로 사용되는걸까요?
이는 Pytorch를 기반으로 만들어진 Wrapper(포장지)라고 이해하시면 편합니다.
앞서, Pytorch가 편리한 함수를 미리 만들었다고 하지만 사실 코드를 보면 엄청 괴랄하거든요..
그래서 그 마저도 더 쉽게 사용할 수 있도록 더욱 추상화 한 패키지 입니다.
데이터를 가지고 오는 파트는 이전 포스트에 살펴본 datasets에서 역할을 합니다.
그리고 실제 모델 학습이 이루어지는 Loop 과정은 Trainer 라는 모듈이,
모델을 불러오거나 학습의 세팅을 하는 과정은 Model Loader와 TrainArguments 모듈이 그 역할을 지원합니다.
이런 Wrapping package는 큰 장점이 있습니다.
추상적으로 코드를 작성할 수 있고,
시간 단축,
이미 세세한 부분까지 신경 쓴 장인의 코드를 쉽게 사용할 수 있다
등등
하지만 단점도 있죠.
결국 더욱 심화해서 모델을 만들려면, 혹은 내부 구조를 보려면 pytorch에 의존해야 합니다.
사용법을 익혀야하구요.
갑자기 결론
사실 코드 레벨로 보려고 했지만
코드를 전부 완성하지는 못했네요.. ㅠㅠ (다음부터 좀 더 미리 준비해야겠네요..)
오늘은 이론적인 부분을 다뤄보고
다음 포스트에서 조금 더 깊이 코드 레벨로 다뤄보면 좋을 것 같습니다 ^^
위에서 언급한 HuggingFace의 모듈 사용 코드와,
각 모듈의 중요 argument를 같이 보도록 하겠습니다.
감사합니다.
#9기HuggingFace
작성자 : 정정민
블로그 : 링크