Efficient ML(6.5490) by Song Han (On-going)(~Part3)
딥러닝 모델을 Robot이나 Mobile등 hardware constraint가 있는 곳에서 활용을 할려는 추세가 점점 더 늘어난다고 느꼈습니다. 뿐만 아니라 , H100 같은 GPU의 가격은 굉장히 비싸기에 딥러닝 경량화에 대한 지식이 Research Enginner나 Researcher에게 필수적이게 된다고 생각했습니다. 따라서, 이에 대한 개인공부를 진행하기 위해서 MIT의 Song Han 교수님의 mit.efficient.ml 강의를 개인적으로 공부하였습니다. 이 강의에서 Pruning, Quantization , Knowledge Distalliation ,과 LLM,VIT , Video 같은 task-specific에 대한 경량화 방법, 그리고, Parameter Efficient Fine-tuning에 대한 지식을 쌓게 되었습니다. 강의를 들으면서 Song Han 교수님의 경량화에대한 insight를 습득하게 되었고, 실제로 Course에서 제공하는 lab을 수행하고, Todo 코드 뿐만 아니라 전체 code를 세부적으로 분석함으로써 실제 구현을 어떻게 하는지 알게 되었습니다 .다음과 같은 내용을 공부하게 되었습니다.
Pruning & Sparsity - Granularity, Criterion,Sparse Hardware & System Design
Quantization - K-means Quantization, Linear Quantization, Binary-Tenary Quantization, Quantization Granualrity- Per Channel, Per vector, Per Group, Post-training Quantization(Dynamic Clipping,Roundig) , Quantization-aware Training
Knowledge Distalliation - Criterion(logits,intermediate features,Relation),Self-Distilliation, Online-Distilliation,
Transformer Design and Optimization- Relative Position Embedding(Alibi,Rope) , Gate Linear Unit , KV Cache ,Multi-Query Attention, Group-Query Attention
LLM optimization - Quantization(SmoothQuant,AWQ), Pruning/Sparsity(SpAttn,H2O,MOE) ,Efficient Inference Systems(vLLM,StreamingLLM,FlashAttention,Speculative Decoding) ,
Vit self-supervised Learning - Contrastive Learning, Masked AutoEncoder
Vit optimization - Window Attention, Linear Attention, Sparse Attention
Multimodal LLM - Cross Attention(Flaming), Visual Token(Palm-2)
Video UnderStanding Optimization - I3D , Temporal Shift Modules
Point Cloud Optimization - Point Voxel CNN , SPVConv ,RPVConv
Parameter Efficient Fine-Tuning - Bitfit,Adapter,Prompt-Tuning,Prefix-Tuning,Lora ,Qlora,Longlora
딥러닝을 이용한 자연어 처리 by 조경현
Attention,Self-attention,Auto-regressive Modeling에 대한 이해도가 부족하다고 느껴져셔 조경현 교수님의 “딥러닝을 이용한 자연어 처리” 강의를 edwith에서 수강하였습니다.Attention Mechanism의 창시자인 조경현 교수님의 설명을 통해서 아래와 같은 내용을 학습했습니다.
Word Embedding,Sentence Embedding에 대한 특징 ,
CBow,RN,RNN,Attention 같은 arhictecture의 특징과 공통점 및 차이점 그리고 발전과정
N-gram Modeling,Neural N-gram Modeling,Auto-regressive Modeling,Machine Translation
이를 통해, Attention mechanism 뿐만 아니라 자연어 처리의 역사와 특징 같은 기초에 대해 자세히 알게 되었습니다.
DeepLearning Specialization by Andrew Ng
Andrew Ng 교수님의 DeepLearning Specialization 코스를 Google MLBootCamp시에 수강을 하였습니다. 하지만, 이 때에는 빠르게 수강하는 과제가 주어졌기에 , 한 번만 수강하고 복습기간을 따로 주어지지 않았습니다. 따라서, Andrew Ng 교수님의 DLS 코스를 다시 복습을 하기로 결정하였습니다. DLS Course는 세계적인 석학인 Andrew NG 교수님의 Insight를 볼 수 있을뿐만 아니라 , 수많은 교수님들의 조언을 받아 코스의 내용을 구성했기에 , 딥러닝에 대한 추상적인 지식을 얻기에 적합하므로 , 다시 복습할 가치가 높다고 판단했습니다. 저는 복습을 할 때에는 Active Learning 과 Spaced Repetition 사용하였고, Andrew Ng교수님의 개념 추상화 과정 및 논리 전개과정을 그대로 Simulate하였습니다. 그리고, 제공되어진 실습들을 미리 Local에 백업하여 실습과제들도 직접 코드들을 다 분석하였습니다. 실습 과제에서는 Low-level에서 어떻게 DeepLearning Algorithm이 작동하는지를 알 수 있었기에 ,다른 framework에서도 parameter와 api name을 안다면 바로 알고리즘을 적용하고, Documentation의 내용을 수월하게 이해할 수 있게 되었습니다.
Part 1 : Neural Net Training with back-propagatioin
Part 2 : Optimization Method(Gradient Descent,Momentum,RMsProp,Adam),Batch Normaliztion
Part 3 : Machine Learning Project Design and Continuous Training and Monitoring
Part 4 : CNN basics , CNN Principal Architecture and Computer Vision Application(Object Detection,Segmentation,Face-Reocgnition)
Part 5 : Sequence Models(RNN,LSTM,GRU,Bi-directional RNN) , Word Embedding(One-hot,Matrix,Word2Vec,SkipGram,Glove),Attention,Self-Attention
덕분에 , 시간은 오래 걸렸지만 DeepLearning에 대한 Strong Background를 가지게 되었습니다.
Learning Python by Mark Lutz (On-going)(~Part4)
Python이라는 언어의 본질을 이해하고 싶어서 Mark Lutz의 Learning Python 이라는 책으로 공부를 하고 있습니다. Mark Lutz의 책은 Python Best Sellor중 하나이며 , Amazon 리뷰의 대부분은 Python에 대한 Detail한 내용을 다룸으로써 Intermediate Level의 책이라 합니다. 또한, Mark Lutz는 Graduate Degree Thesis로 Compiler와 Object Programming Language Theory에 관해서 작성하였기에 저자는 책을 Compiler와 Programming Language Theory 관점에서 서술해나갑니다.Low-level에서 설명하기에 Python의 본질을 이해하게 되었습니다. 특히, Formal한 Terminology를 사용하기에 Python Document를 읽고 해석하는 능력을 키우게 되었습니다. 제가 공부한 내용은 아래와 같습니다.
Built-in Types : Numeric,String,Dynamic Typing,Tuples,List,Dictinoary 같은 Built-in Type을 Programing Language Theory관점에서 바라봅니다.
Statements Sytnax : Assignment,ConditionExpression, Loop Expression, Iteration Context, List Comprehension의 formal한 syntax로 공부합니다. Statement를 Expression Level에서 공부하여 , 각 Statement의 원리를 이해하게 됩니다.
Function : Function의 Argument,Scope 에 대해 Detail하게 공부합니다. 일반적인 Programming Language Theory 관점에서 공부하므로 다른 Language에도 전이 가능한 지식을 습득합니다.
Berkely CS162 by John Kubiatowiz(On-going)(~lec 8,lec 24)
학부 시절 Operating System 과목을 수강하긴 했지만, 스스로 부족함을 많이 느꼈습니다. Operating System도 단순히 면접용 지식에서 끝나는게 아니라 이를 실제 개발에 응용을 하고 싶었기에 Berkely의 cs162 강의를 수강중입니다. 담당 교수님이 실제로 Os와 네트워크 기술들을 개발하시던 분이시기에 강의 중에 상당히 detail한 설명을 해주셨습니다. 이 내용들을 그저 한귀로 듣고 흘리기 보다는 detail한 내용들을 전부 pdf파일에 메모하느라 실제 강의 수강시간 보다 공부시간이 더 오래 걸렸습니다. 강의내용을 세세하게 정리하고 교수님이 언급해주신 text book을 follow up하면서 수강을 하니까 Operating System의 큰 틀인 Abstraction과 Threads에 대하여 포괄적인 이해가 쌓이기 시작했습니다. 지금까지 공부한 내용은 다음과 같습니다.
OS Four Fundamental Concepts - Process, Threads,Address Space,Dual Mode
File Descriptor vs File Description
Socket
Context Switch
Semaphore
Lock Implementation
Reliable Packet Communication
이러한 지식을 나중엔 CUDA프로그래밍 같은 병렬 프로그래밍이나 Software Engineering에 응용할 수 있으리라 기대됩니다.
Algorithm-MIT 6.006 by Erik Demaine,Jason Ku,Justin Solomon
Algorithm의 경우 학부 시절 수업을 들었지만, 수업시간에는 코딩테스트 테크닉 위주에 치우쳐져 있었기에 좀 더 깊은 이해를 하고 싶어서 MIT의 6.006 수업을 자체적으로 수강하게 되었습니다. 2020 버전을 수강하게 되었는데 왜냐하면 2020버전이 알고리즘이 어떻게 발전했는지를 스토리텔링 형식으로 자세하게 설명해 주셨습니다. 가끔씩 , 설명이 난해한 부분들이 있었습니다.특히, Bellman-ford algorithm의 경우 설명이 난해하였지만 , 이 부분을 정확히 이해하게 되면서 Bellman-ford algorithm이 왜 정확할 수 밖에 없는지를 자세하게 이해하게 되었습니다. 저는 이 수업에서 다음과 같은 내용들을 수학적인 관점에서 배우게 되었습니다.
Data Structure vs API - Static Operation, Dynamic Operation, Build,
Hash function- Comparision Model , mod function model, chaning, universal hash function
Linear Sort - Compairsion Sort Lower Bound , Direct Access Array Sort, CountSort, Radix Sort
Graph - DFS,BFS , DAG relxation,Bellman-Ford,Dijkstra ,Johnson's Algorithm
Dyanmic Programming - SRTBOT FrameWork , subproblem expansion , Problem as DAG
이를 통해 , Machine Learning 알고리즘을 해석할 때 Algorithm과 Data Srucuture관점에서 해석이 용이해 졌으며 , 추가적으로 코딩테스트 능력도 증가하였습니다.
Prompt Engineering Survey by Lilian Weng
Prompt Engineering 기법들을 어떻게 분류할지 알아야 한다고 생각해서 OpenAI의 Lilian Weng 님의 survey article을 참조하게 되었습니다.Prompt Engineering의 핵심은 weight의 update 없이 new task에서 잘하는 것임을 알게 되었습니다. 이를 통해, 다음과 같은 내용들을 알게 되었습니다.
Basic Prompt - zero shot, few shot prompt
Instruction Prompt
Chain-of-Thought
Automatic Prompt Design
Augmented LLM
Prompt Engineering이 Research에서 중요한 역할을 함을 깨닫게 되었습니다.
Linear Algebra by 3blue1brown
Math의 경우에는 DeepMind에서 Curation 한 강의 리스트에서 리소스를 선정하여 학습을 진행하였습니다. Math의 경우 Linear Algebra와 Statistics에 우선적으로 집중하기로 하였습니다. Linear Algebra의 경우 학부시간에 수강을 하였지만, 학교에서 연산위주로 공부를 하게 되었습니다. 저는 이에 대한 기하적인 관점에서의 해석을 원했기에 3blue1brown이라는 유튜브 채널을 통해서 공부를 하게 되었습니다. 3blue1brown에서 Linear Algebra의 주요 개념인 Determinant,Inverse,Inner Product, Cross product, Eigen vector, abstract vector space에 대해 기하적인 관점에서 이해를 하게 되었습니다. 하지만, 딥러닝 이론등을 Linear Algebra관점에서 해석을 할려면 좀 더 체게적으로 공부를 해야겠다는 생각이 들어서 Gilber Strang 교수님의 MIT 18.06 course를 수강을 시작하였습니다.시간이 오래걸리지만, 체계적으로 학습하여 깊은 이해를 쌓고 있는 중입니다. 3blue1brown을 통해서 Linear Algebra의 Geometrical Interpretation을 공부하였기에 강의 수강에 큰 도움이 되고 있습니다. 딥러닝은 Matrix 연산으로만 이루어져 있기에 Linear Algebra에 대한 Strong Background는 앞으로의 커리어에 있어서 큰 도움이 될 것이라 생각합니다.
Probability and Statistics by Khan Academy(~Unit 5)
네이버 BootCamp를 하면서 EDA작업을 자주 하게 되었는데 EDA를 할 떄 어떻게 해야할 지에 관한 기초적 이해를 하고 싶었습니다.따라서, Khan Acadaemy의 Statistics Unit 1~5의 강의를 수강중입니다. 이 강의에서 EDA의 핵심인 Descriptive Statistics에 대하여 공부를 하게 되었고 Data의 Central Tendency와 Spreadibility , 그리고 Data Distribution을 나타내는 다양한 방법에 대한 지식을 더 단단하게 쌓게되었습니다.이를 통해, activation이나 weight 혹은 gradient같은 model의 statistics나 data의 statistics를 분석할 때 , 적절한 descriptive statistics와 plot 방법의 선택에 대한 기준을 마련하였습니다.
GitPro(~Git 브랜치)
다양안 협업의 기회에서 프로젝트를 하면서 git이라는 도구를 사용합니다. 여러명이서 사용을 할 때 발생하는 이슈들을 대응하는데 시간이 많이 소요됨을 알았습니다. 이러한 사태를 미연에 방지하고자 GitPro라는 책으로 Version Control System의 본질에 대해 공부하고자 하였습니다. 저는 아래와 같은 항목들을 자세히 알게되었습니다.
Version Control System이란
Git의 File State
Git의 Commit과 Branch
Git의 Merge pattern and Conflict
Git의 Remote Branch 와 remote Tracking Branch , Git Push의 formal syntax, Git Fetch vs Git Pull
이론과 더불어 , 스스로 git repository를 임시로 만든 후 다양한 scenario를 실험을 해보았습니다. 덕분에 , 개인 repository를 git으로 관리하는게 익숙해졌습니다. 이 경험은 앞으로의 협업에서 뿐만 아니라 model version control이나 data version control같은 ml project cycle에서도 도움이 될 것이라 예상합니다.