조은기록

IT 개발 일지와 일상의 공유

개발일지/ETC

[완강 후기] 패스트캠퍼스: 김기현의 딥러닝을 활용한 자연어 생성

은기조아 2023. 12. 6. 05:51

1. 강의 수강 배경

  문과 학부생으로서 재학하던 중, 운좋게 지도 교수님의 자연어처리 랩실의 학부 연구생으로 참여할 기회를 얻으면서부터 AI 개발자의 길로 들어서게 되었다.

자연어처리는 커녕 자연어처리, 딥러닝가 무엇인지에 대해서도 알지 못했던 시작점에서, 주먹구구식으로 맨땅에 헤딩하며 하나부터 열까지 공부를 했었던 것 같다. 다행히도 지도교수님께서는 N사 자연어처리 연구소에서 꽤 오래전부터 전통적인 자연어처리 기법을 연구하신 경험이 있으셔, 그 도움을 받아 다른 학습자에 비해 손쉽게 학습의 방향성을 잡을 수 있었다. 다만, 조급했던 마음에 개념을 다잡고 완벽히 이해하기도 전에 겉핥기 식으로 공부한 부분도 있어, 늘 그러한 부분들이 마음 속에 아쉬움이란 이름의 응어리처럼 남아 나를 괴롭혔다.

  졸업 전 운이 좋게도 Data Scientist 직무로 한 유니콘 스타트업에서 인턴을 하게 되었는데, 복잡한 실무를 접하니 저 아쉬움은 나날이 커졌던 것 같다. 단적인 예로, 카테고리 분류를 위한 딥러닝 모델을 개발하기 위해서는 일반적으로 Softmax + Cross Entropy를 줄곧 사용해왔었다. 그러나 재직했던 회사에서는 이와 달리 LogSoftmax + NLLLoss를 사용하여 Training을 진행하는 모습을 보게 되었고, 지금 생각해보면 매우 기초적인 상식이었지만 그때 당시에는 겉핥기 식 공부 법의 한계를 맛보게 되었다. 이러한 찝찝함을 더 이상 견딜 수 없어 양질의 강의를 찾던 도중, 직장 동료로부터 패스트캠퍼스의 김기현 자연어 처리 강의를 들어보라는 권유를 받게 되어 수강을 시작하게 되었다.

 


2. 강의 내용

  김기현의 강의는 자연어처리 입문(초급)부터 자연어 생성(중급), 그리고 PLM을 활용한 자연어 처리(고급)까지 상당히 체계적인 커리큘럼으로 구성되어 있다. 기타 온라인 강의에서는 이토록 체계적인 과정을 모두 제공하는 경우는 드문데, 패스트캠퍼스의 다른 강의는 잘 모르지만 김기현님의 강의는 학습 과정이 매우 잘 설계된 케이스에 해당한다. 또한, 자연어처리 입문(초급)은 자연어처리뿐만 아니라, 딥러닝 초급에 관한 내용도 포함되어 있어 기초부터 다져가는데 큰 도움을 받을 수 있다. 나같은 경우 그때 당시 패키지로 초급과정과 중급과정을 한데묶어 구매했었는데, 초급과정을 모두 듣지는 않고 내가 생각하기에 부족했던 기초 지식들을 채우는 용도로만 선택적으로 수강했다. 

  아래 표는 각 강의 구성에 대한 요약이다.

Level 강의 과정 강의 내용
초급 김기현의 딥러닝을 활용한
자연어처리 입문
딥러닝 초급 확률통계, 신경망,
Pytorch, MNIST 실습 등
자연어처리 입문 Word2Vec, Tokenization,
Review Classification 실습 등
중급 김기현의 딥러닝을 활용한
자연어 생성
언어모델 전통 언어모델, 현대 언어모델
자연어 생성 Seq2Seq, Transformer,
Evaluation Metrics (BLEU),
Inference (Beam Search)
자연어 생성 심화 Reinforcement Learning,
Dual Learning
고급 김기현의 BERT,GPT-3를 활용한자연어처리 올인원패키지 PLM PLM, Huggingface PLM,
Fine-tuning

 

  위에서 언급했듯이 나는 초급과 중급 강의를 패키지로 구매를 했었고, 계속해서 부족한 기초 지식을 채우고자 했었던 욕구를 100% 해소할 수 있었다. 딥러닝 초급 강의 내용을 보면 확률통계에 대한 내용도 있는데, 기초 수학이 부족한 사람에게는 더할 나위없이 훌륭한 내용으로 구성되어 있다. 일반적으로 딥러닝 분야에서 수식은 어떤 식으로 쓰이는지, 딥러닝과 확률은 어떤 관계가 있는지 등에 대해 매우 쉽게 설명해주신다. 앞에서 LogSoftmax + NLLLoss와 Softmax + Cross Entropy는 어떤 차이가 있는지에 대한 해답도 초급 강의와 중급 강의를 통해 아주 명쾌하게 찾을 수 있었다. 이뿐만 아니라 KL-Divergence, Maximum Likelihood Estimation 등 딥러닝에서 반드시 알아야 할 기초 개념 및 수식에 대해서도 학습할 수 있어 기초를 채우기엔 안성맞춤이었다. 아래 사진은 제가 강의를 직접 들었을 때 찍은 사진이고, 화면에서 보실 수 있듯이, 특정 알고리즘에 대해 설명해주실 때 단순 개념뿐만 아니라 수식까지 상세히 설명해주셔서 이해하기 매우 수월하다. (물론, 이를 완벽하게 이해하기 위해서는 추가적인 공부 혹은 자료 서칭이 필요할 수도 있다^^...)

  그러므로, 자연어 처리를 '제대로' 배우고 싶은 사람, 특히 LLM이 대두가 되고 있는 현시대에서 LLM을 제대로 이해하고 싶은 사람은 김기현님의 패캠 강의를 !!반드시!! 시청하시길 권해드린다. 강의 수가 매우 많고, 쉽게 설명해주신다고 쉬운 내용은 결코 아니지만, 반드시 그 값어치를 할 것이라 장담한다. (효과를 못봤다고 환불은 해드릴 수 없습니다... ㅎㅎ)

실제 강의 수강 모습

 

  강의를 들을 때마다 나는 노션 혹은 README.md에 필기를 하는 것을 좋아하는데, 특히 딥러닝이나 데이터 사이언스, 코딩 등에 관한 필기를 할 때에는 이 두가지를 강력 추천한다. 코드뿐만 아니라 LaTeX도 인식하여 가독성 좋게 필기하는 게 가능하다. 실제 저는 아래와 같이 필기를 남겨두고, 생각이 나지 않을 때, 혹은 복습할 때마다 큰 도움을 받고 있다. 정리하는데 시간이 걸리는 건 사실이나, 정리하면서 습득하는 부분도 큰 것 같아 지금까지도 이러한 습관을 가져가고 있다. 다 듣고 나니, 뿌듯한 필기와 함께, 수강증도 제공되어 한 단계 성장을 이룬 듯한 느낌도 받아 더 나아가고자 하는 동기부여도 된다.

 

노션 필기 캡쳐 및 수강증 인증

 

 


3. 강의 수강 결과

 

  패캠의 해당 강의를 듣고 나서부터는 어느 정도 딥러닝 모델을 학습할 때 가지면 좋을 습관들을 체화할 수 있었다. 현재도 한 달에 수많은 논문, 알고리즘 등이 쏟아져 나오는데, 자연어처리 분야도 마찬가지다. 물론 LLM이 유행하면서 이전처럼 Machine Reading Comprehension, Multiple-Response Selection 등에 대한 연구는 많이 감소하였고, Transformer 구조의 무한 Layer 쌓기를 통한 성능 향상이 대세가 되어 개인적으로는 다소 재미가 없어졌다고 생각하기는 한다. 그럼에도 불구하고, 긍정적으로 생각해보면 Transformer 수식에 대한 이해가 있다면 현재 성행하고 있는 LLM이 동작하는 방식에 대해 그 누구보다도 잘 이해할 수 있으리라 생각한다. 또한, 자연어처리는 생성뿐만 아니라 MRC, Retrieval IR 등 다채로운 분야가 존재하는데, 이 강의를 기초삼아 다른 강의를 청취하든 독학을 하든 큰 문제없이 이해할 수 있으리라 믿는다. 아래는 이 강의를 듣고 난 이후, 스스로 Multiple-Response Selection 논문을 읽으며 공부한 내용을 README에 적어 놓은 것에 해당한다(좋은 습관을 가지게 되었다고 생각한다). 또한, 여기에 첨부하지는 않았지만, NER, Summarization, ERC 등 다른 자연어처리 분야에 대한 학습도 모두 이와 같이 진행하고 있다. 추후에 내용이 모두 정리되면, 하나씩 이 블로그에 포스팅을 해나갈 예정이다.

Multiple-Response Selection 필기

 

  이외에도 이전 회사에서 프로젝트를 진행하면서 "의존관계가 있는 분류 태스크"를 받아 고민하고 있었는데, 이를 자연어 생성 기법을 적용하여 분류 태스크를 해결하였다. 일반적으로 Multi-label Classification은 label 간에 의존관계가 존재하지 않는데, 주어진 태스크는 Label 간 의존관계를 고려해야 해서 난항을 겪었었다. 예를 들면 아래와 같다.

 

raw_data_1: "Jack, White"

output: {"Subject": "People", "Skin": "White"}

 

raw_data_2: "Pear, White"

output: {"Subject": "Fruit", "Flesh": "White"}

 

  이와 같이, 예측된 첫 번째 label이 사물인지 사람인지에 따라, 동일한 White라는 단어에 대해 각각 다른 label에 분류되어야 하는 경우에 해당한다. 이는 일반적인 Multi-label Classification으로 해결할 수 없다. 

  고심하던 중 강의를 수강하면서 생성형 모델의 원리를 떠올리게 되었고, 그 원리는 결국 Classification과 다르지 않기에 생성형 모델을 분류 모델로 적용해도 무방할 것 같다는 생각을 하게 되었다. Subject, Skin, Flesh 등과 같은 모든 Label을 fix된 token으로 인위 생성하고, 이를 단어 사전에 넣어 raw_data를 tokenization한 뒤 생성형 모델과 동일하게 Training 한다면 이를 해결할 수 있을 것이란 아이디어가 떠올랐다. Seq2Seq based 생성형 모델은 Auto-Regressive 성격을 가지고 있기에, input-feeding 방식이 적용되어 요구되는 의존관계를 학습할 수 있을 것이란 생각도 하게 되었다. 강의를 수강하면서 코드를 하나도 빠짐없이 실습을 익히고 나의 방식대로 Customize 해놓았기에, 구현 자체에도 시간이 많이 걸리지 않았다. 오히려 김기현 선생님이 말씀하셨던 데이터 전처리 부분에 대해 조금 더 신경쓰면서 모델의 성능을 향상하고자 했고, 결과적으로는 큰 성과를 낼 수 있었다. 물론 기업 프로젝트이기에 소스코드를 공개하지 못하지만, 아래는 README에 적어 놓았던, 성능 테스트에 대해 정리해놓은 일부를 담은 이미지이다. 

 

실무 프로젝트 적용

 

  위에서 소개한 실제 사례와 같이, 본 강의는 이론학습뿐만 아니라 실무에서도 충분히, 마음껏 수식을 가지고 놀며 적용할 수 있는 역량을 갖추게 할 정도로 세련되고 훌륭한 강의라고 생각한다. 딥러닝 입문자이든, 자연어 처리를 깊게 공부하고 싶은 현업자이든, 이 강의를 적극 추천하며 글을 마친다.

 


본 게시물은 패스트캠퍼스 후기 이벤트 참여를 위해 작성되었습니다.

 

'개발일지 > ETC' 카테고리의 다른 글

[AWS] Protocol & Load Balancer  (0) 2025.03.03