Table of Contents

  1. TODO
  2. 11일차
  3. 12일차
  4. 13일차
  5. 14일차
  6. 15일차
  7. 3주차 후기

TODO

TODO
  • 블로그 intro
  • 블로그 Works 탭(포폴)
  • 공부의 족적 정리(PCA 내용 정리하기)
  • → 차원감소법 정리하기
  • [ChatGPT](https://www.assemblyai.com/blog/how-chatgpt-actually-works/)와 RLHF 블로그 글
  • 1주일에 코테 문제 1개
  • Diffusion Note
  • GNN 소개
  • GNN의 convolution에 대해
  • https://www.assemblyai.com/blog/an-introduction-to-poisson-flow-generative-models/
  • https://www.assemblyai.com/blog/recent-developments-in-generative-ai-for-audio/
  • GraphSage
  • Mamba

토요일

  • 블로그 SNS 아이콘 정리작업
  • 코테 1문제(스택/큐)

How RLHF Works

How RLHF Works 후기

일요일

How ChatGPT Works

How ChatGPT Works 후기

GNN 소개(Intro만 읽음)

이 글에서 하려고 하는 것 4가지

  1. 어떤 데이터가 그래프로 표현되는지? 예시
  2. 이게 다른 데이터랑 어떤 차별점이 있어서 쓰는건지?
  3. 현대 GNN 모델 찬찬히 뜯어보기, 역사적으로 어떤 모티브로 나온건지
  4. 독자가 직접 갖고 놀 수 있는 GNN 놀이터. 여기서 직관을 얻어가길

블로그에 등장하는 대부분의 figure가 interactive하게 짜여있는 것 자체가 좀 신기하고 놀랍다. 글을 읽고 이해함에 있어서 여러모로 신경 쓴 게 돋보인다.

11일차

데일리 트렌드

  • DeepSeekProverV1.5에서는 수학적 언어 모델 위에 SFT와 RL을 적용시키려는 노력을 하는 것으로 보인다. 특히 RLPAF(Proof assistant feedback)은 휴먼 피드백에 대한 의존 없이 강화학습을 하려는 노력으로 보이는데, 흥미롭게 보여서 읽어보고 싶단 생각이 든다
  • 대단히 nice한 AI 프로그래밍 툴을 찾았다. 이런 걸 함부로 써도 되는 걸까? 안 쓰는 사람이 바보라곤 하는데..일단 현재 직장 일을 하는 것은 아니니 쓸 필요는 없어보인다.
  • 멘토님께서 공유해주신 SAMBA 논문 abstrct도 흥미롭다. 무한한 길이의 sequence를 입력으로 받을 수 있다? LLM이 이런 길이가 긴 인풋과 아웃풋에 대해 한계점이 있는 걸로 아는데, recurrent하게 이런 부분을 해결할 수 있는지 궁금하다.
  • JPEG-LM: LLM으로 이미지 코덱 파일을 직접 만들게 시키는 식으로 이미지를 생성할 수 있다

개인 공부

Diffusion 공부 계획

  • 총 43, 34,25,41,46,38쪽 6챕. 하루 2챕을 뺄 수 있는지 시도해보고 진도를 결정

Diffusion chapter 0:

  • Residual neural net의 층을 time index로 연속적으로 보면 상미분 방정식으로 해석할 수 있다는 게 놀라울 따름. 또한 비슷하게 chain rule을 써서 backprop의 해를 항상 구할 수 있다는 것이 보장됨
  • 이를 뉴럴 네트워크로 해석하려면 gradient의 계산이 필요한데, input에 대한 미분값은 구할 수 있으나 parameter에 대한 미분값을 구하기가 어려움. 따라서 parameter도 시간에 따라 변하는 것으로 조작하여 문제를 해결함. Neural ODE는 이에 따라, ODE solver를 2번 호출하는 것으로 항상 계산할 수 있음
  • Flow model이란 IID Gaussian 분포를 어떤 invertible한 함수를 통해 보낸 값으로 데이터를 샘플링하고 생성하는 생성형 모델임.
  • Flow model에 위의 Neural ODE를 결합하여, FFJORD(Free-Form Jacobian Of Reversible Dynamics) 모델을 만들 수 있음. 이 모델은 가우시안 분포를 시간에 따라 변화시켜 최종적으로 원하는 데이터로 샘플링되는 분포로 보내는 것을 목표로 함. 이것은 전에 부캠 프리코스에서 들었던 디퓨전 모델 구조와 유사하며, DALL-E2 모델에서 이해했던 결과물과 유사한데, 현대 diffusion 모델의 근간이 아닐까 예상 중
  • 다 읽고 나니 FFJORD의 학습 방법을 이해했다. 다만, FFJORD는 데이터셋의 분포를 역으로 보내서 어떤 분포를 찾고 그 분포 기반으로 학습하기는 하는데, 이건 내가 아는 diffusion과는 거리가 있다.
  • FFJORD를 정리하자면,
    1. 우선 flow f가 주어지고, 데이터 X를 이 flow를 따라 역으로 보낸 Neural ODE를 계산한 원래 분포 z(0)를 계산
    2. 이를 바탕으로 loss값인 로그가능도를 최대화하는 방향으로 gradient descent를 진행(여기서 미분을 쉽게 하기 위해 Hutchinson estimator에 활용될 랜덤 보조 벡터를 사용한다)
  • 이것은 데이터를 역으로 흘려 보낸 분포를 사용하는 것이지, gaussian에서 먼저 보낸 분포를 데이터와의 분포와 가깝게 한다는 개념과는 차이가 있어보인다. SDE 쪽을 내일 추가로 공부하면서 다시 생각해봐야겠다.

12일차

데일리 트렌드

  • 최신 LLM 논문을 읽어보던 도중, 최근 LLM들은 PPO의 약점을 극복하기 위해 DPO를 대신 사용한다는 사실을 알게 되었다. PPO에서 보상모델을 학습하는 과정 없이 바로 Finetuning을 해주는 모양이다.

개인 공부

  • 씻으면서 생각해봤고 이후 다시 확인해봤는데, FFJORD와 diffusion 모델 둘 다 flow model에 근간을 두고 있다. flow model이란 쉬운 분포 $z$를 데이터의 분포 $x$로 접근시키는 parametric flow $ h_{\theta}(z) $ 를 학습시켜 랜덤한 노이즈로 원래 데이터와 유사한 데이터를 생성하는 것이 목적인 모델이다. FFJORD는 여기서 $h_{\theta}$로 neural ODE를 사용한 것이고, diffusion model은 랜덤성을 추가하는 SDE를 사용한 것이 큰 차이점이다.(논문에서도 neural SDE라고 언급한다) 다만 Diffusion에서는 접근을 달리하여, $Z$를 $X$로 보내는 것이 아니라, $X$에 SDE flow로 noise를 추가하여 $Z$로 보내는 식의 접근 방법을 취하고 있다. 그리고 학습 방법이 논문마다 차이가 있는 것으로 보여, 우선은 이 정도로만 정리하고 각 이론을 마저 학습한 뒤에 다시 정리하는 과정이 필요하다.

Diffusion chapter 1:

  • Wiener process는 분산이 time difference가 되므로, Gaussian distribution에 sqrt of time diffrence를 곱한 것을 Wiener process로 보는 것은 당연하다.
  • Intergration by parts: product rule for divergence
    Let $\varphi:\mathbb{R}^d\rightarrow\mathbb{R}^d$ and $f:\mathbb{R}^d\rightarrow\mathbb{R}$ Assume $\varphi$ and $f$ are sufficiently smooth and decay sufficiently quickly as $x\rightarrow\infty$. Then \(\int_{\mathbb{R}^d}\varphi(x)\cdot\nabla f(x) dx=-\int_{\mathbb{R}^d}(\nabla\cdot\varphi(x))f(x)dx\)

  • SDE의 해….가 아니라 SDE의 해가 되는 distribution은 Fokker-Planck equation을 따른다 (해를 완전히 찾는 Joint distribution을 구하기 어려울 뿐더러, 각 해에 대한 marginal distribution만 구해도 충분하다)
  • ODE는 앞뒤로 1대1 대응되므로, 그냥 수식을 음수로 쓰는 것 만으로 Reverse flow 연산을 구할 수 있다.
  • SDE는 그렇지 않다. Wiener process등이 그대로 뒤집어지는 것이 아니며, 역으로 계산할 경우 Anderson’s theorem에 따른 추가적인 계산식이 필요하다. 왜? 뒤에 빼주는 항도 가우시안 노이즈인데, 부호가 뒤집어져도 대칭이며, $gdW$ 항을 더해주는 것 자체가 forward 처럼 noise를 추가해주는 행위 자체와 동일하기 때문. Noise를 제거하는 것은 좀 더 다른 방향의 노력이 필요하다.
  • 다만 Anderson 정리로 계산하려고 해도, 계산이 안되는 부분이 생긴다. 이 항을 score function이라고 하며, 다음 강의자료에서 학습한다. 구글링으로 찾은 글도 추가로 읽어봐야겠다.
  • Reverse SDE에서 얻어지는 marginal distribution과 동일한 분포를 가지는 Reverse ODE를 고려할 수 있다. 이를 활용하면 Reverse 생성 과정에서 추가되는 $Z$의 랜덤성을 없애면서도 생성값이 원래의 분포를 따르도록 할 수 있다. 다만 이 경우에도 score function이 발목을 잡는다. 좀 찾아보니 이 경우를 DDIM이라 하고 랜덤한 경우를 DDPM이라 하는 것으로 일단 보이는데, 좀 더 공부해봐야할듯

13일차

데일리 트렌드

multimodal model에 대한 연구가 어제도 그렇고 활발히 진행되는 것 같다. 아무래도 궁극의 foundation model 하나로 모든 것을 해결할 수 있다면 여러가지 측면에서 이점이 있으니 그러는 것으로 보인다. 또한 long context에 대한 언급이 나오는데, 이는 long intput, long output과는 차이가 있고 아마도 진짜 긴 문맥을 기억하는 능력에 관한 이야기로 보인다.

부캠 강의

  • matplotlib.pyplot의 다양한 툴들을 익힐 수 있어서 좋았다. 평소에 subplots와 fig, ax 등의 객체 개념에 대해서 혼동이 많았고 헷갈렸는데, 이번 기회에 머릿속에 깔끔하게 정리할 수 있어서 도움이 많이 되었다. 앞으로도 객체 위주로 visualize하는 연습을 해야겠다.
  • 범주형 데이터를 딥러닝 모델에서 처리하는 것에 대해 깊게 생각해본 적이 없었는데, 여러 관점의 해결 방안을 생각해보는 계기가 되어 좋았다.
  • 클러스터링과 차원 감소법에 대해 배웠는데, 예전에 공부한 적이 있는 만큼 이번에 다시 확실히 내용들을 따로 블로그 글로 남겨서 정리해봐야겠다.

멘토링

취업 및 대학원 진로에 대해 준비하는 여러가지 꿀팁들을 알려주셔서 도움이 많이 되었다. 이력서와 포폴을 다시 한 번 빠르게 깎아야할 필요성을 느꼈다.

깃헙 스터디

cherry-pick과 rebase, merge의 충돌을 해결하는 법에 대해 배우고 직접 git branch를 짜서 실습을 진행하였다.

개인 학습

Score matching에 대해서 학습하였다. Loss를 변형하는 방식에 따라 DSM과 SSM으로 나뉘며, 최종적으로는 둘 다 score function을 학습하는 네트워크를 구축하여 학습을 진행한다는 점을 이해했다.

또한 score function의 학습이 결과적으로 noise function의 학습과 유사하단 해석을 가지는 것도 직관에 도움이 되는 것 같다. 내일은 이렇게 score function이 학습된 이후 sampling을 SDE로 하는지 ODE로 하는지에 대해 짧게 알아보고 이번 주 diffusion 공부를 마무리할 것이다.

14일차

데일리 트렌드

LLM에 코드 형태 데이터를 학습 전에 넣는 게 관례였던 모양이다. 이 논문에서는 그 관례가 실험적으로 성능이 좋고, 25%까지는 포함시키면 성능이 계속해서 좋아진다는 점을 입증했다. 다만 그 이유를 설명해주지는 않는 것 같다.

부캠 강의

  • 기존에 seaborn의 존재는 알고 있었고 코드에서 자주 접했지만, 시각화 작업을 자주 안하다보니 모르고 살고 있었다. matplotlib도 물론 자세하게 사용하려면 알고 있어야겠지만, seaborn의 편의성과 간결함이 압도적이며 자주 사용해야겠다는 생각이 든다.

개인 학습

Chapter 1 마무리

  • 학습된 DSM score를 통해 SDE sampling을 실시하는 것을 DDPM sampling이라고 한다.
  • 학습된 DSM score를 통해 ODE sampling을 하는 것을 DDIM sampling이라고 한다.
  • ODE는 랜덤성이 없고 flow model로 해석할 수 있으며, 이를 통해 image interpolation 작업에 활용될 수 있다.
  • FFJORD는 stochastisity가 없었는데, 이제야 좀 이해가 갈 것 같다. 시작점인 데이터셋 자체가 random variable이므로 random state에서 출발했다고 이해할 수 있다. 다만 그 움직이는 과정은 forward와 reverse 둘 다 deterministic한 ODE를 따라간다. 반면, forward SDE를 사용하면 random한 state가 random process를 따라간다. path에도 랜덤성이 생기는 것이다. 이 이후 reverse step에서 SDE를 활용하는지 ODE를 활용하는지에 따라 sampling 방법과 과정이 바뀌는 것으로 이해할 수 있다.

CS231A 스터디

15일차

데일리 트렌드

부캠 강의

다양한 시각적 효과를 줘서 시각화를 효과적으로 할 수 있는 방법을 배울 수 있어서 좋았다. 특히 보조선은 항상 격자 형식이라고 생각했는데, 사선 원형 등을 쓰면 있어보이는 시각화를 만들기 좋은 것 같다.

개인 학습

  • github blog에 mathjax 수식 서포트를 추가

스페셜 피어세션

다양한 사람과 다양한 팀의 이야기를 들을 수 있어서 정말 좋은 자리였고 생각해볼만한 주제들을 많이 듣고 올 수 있었다.

  • 사람들은 과연 조용하지 않은 분위기를 좋아할까? 조용한 분위기면 억지로 그걸 깰 필요가 있는 걸까?
  • 다른 사람들에게 열정을 강요해도 괜찮은가?
  • 친해지고 싶다고 반드시 만나야 할 필요가 있을까? 말을 놓는 것도 방법이다

등등 여러가지 의견을 듣고 이해하는 시간을 가질 수 있어서 좋았다.

특히 AI 논문 전반을 정리해둔 글 2개 링크:

는 꼭 읽어볼 계획

3주차 후기

  • 좋았던 점:
    • 부트캠프 강좌+개인 공부(디퓨전)+CS231 스터디 3종 스케줄로 매주 빡빡하게 채워져서 만족감이 든다
    • 공부하는 내용들이 재밌어서 AI에 대한 열정이 타오르는 느낌이 좋다
  • 아쉬운 점:
    • 스케줄이 빡빡해지니 하고자 했던 이력서 다듬기 작업을 못하고 있다. 두려움에 도망치고 있는 것 같은데, 다음주엔 반드시 시간투자해서 시작이라도 할 것
  • 도전할 점: 시간 관계상 주말을 활용해서 추가로 진행하고 싶다
    • 이력서 다듬고 옛날에 공부한 내용 정리하기
    • 1주일에 코테 문제 1개씩 풀기(아마 주말?)
  • 알게된 점:
    • 생각보다 CS231A 강의 난이도가 어렵지 않았다. 다른 수업들도 좀 찾아서 공부하면 도움이 되지 않을까?