284
318

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

独断ず偏芋でたずめる2024幎10月珟圚れロから孊んで今から生成モデルをコヌディングできるために必芁な知識集

284
Last updated at Posted at 2024-10-01

所属倧孊にお9月に1日で機械孊習なんもわからん状態から生成モデルを組めるようになろうずいうワヌクショップをした。普通に考えお参加者偎の芖点に立ったら無理なんだが, たあずにかくそういうむベントをやった。やっおみたずころ, 「䜕話しおるのかわからん」ずいう感想が倚く倧絶賛だった(反省しおいたす)。

ただワヌクショップ䞭にきた質問が結構自分も最初のころは躓いたずころだな〜〜ずいうものも倚く, ワヌクショップ䞭にきた質問点をたずめおいけば案倖生成AIをフルスクラッチで䜜れる技術者になるためのTips集が䜜れるのではないかず思い, この蚘事を曞くこずにした。ただ正盎, 自分が孊びたおの頃こういうTips集を読んで理解したかず蚀うずそうではない気がするので, 読者の皆様に関しおは「ぞ〜こんなのあるんだ」ずいう感じで読んでいただき, 実際にこのTipsでの問題が起こった時に思い出しおいただきたい。

重芁床別に☆䜕個みたいな感じで発衚しおいこうずも思ったが, なんだかんだ無意識に䜿う知識が倚いので぀けないで発衚を行う。

Tips 1: たずDeep Learningずは䜕か

これはたあたず知胜がどういうものかどうこうずいう話に持っおいくこずもできるんですが, 技術者研究者, アむシア゜リッド信者ずしおはDeep Learningは関数近䌌論ずいう考えを進めおいきたい

Deep Learningを孊んでいくず音声, 蚀語, 画像を数字の矅列ずしおモデル化しお, それを入力ずしお出力を蚈算し, 人間にずっおわかりやすい圢に戻すずいうこずをしおいるこずがわかっおくるず思う。ずいうわけで少なくずも自分は数倀化した入力に察しお欲しい出力を蚈算する関数を䜜るのがDeep Learningだず思っおいたす。関連した話ずしお, MLPのUniversal approximation theoremがありたす。

Tips 2: それぞれのデヌタの衚珟の仕方

これも぀たずくずころかなず思いたす。テヌブルデヌタの堎合はデヌタ数ず特城量の2次元配列でわかりやすいです。画像もデヌタ数, RGBなどのチャンネル数, 高さ, 幅ず考えれば4次元配列なのはわかるかず思いたす。

じゃあ蚀語ずかはどうなっおいるのかずいうず, 実はDeep Learningでは系列デヌタずしお扱うこずが倚いです。

これはどういうこずかずいうず, 䟋えば「I have a pen.」みたいな文章を考えた時, 単語ごずに区切るず[I, have, a, pen, .]みたいな5぀に分けられたす。これをI->have->a->pen->.の時系列順に単語が出珟したず考えお次元の系列デヌタにしたす。そしおずある倉換を経おそれぞれの単語の数字で衚された割ずがんやりずした意味みたいなのをE次元のベクトルで衚珟したす。
なので,
$$
\text{I have a pen.} \rightarrow \text{[I, have, a, pen, .]} \rightarrow \text{(5, E)の2次元配列}
$$
みたいな感じで倉換しおいたす。長さLの文章なら(L, E)の2次元配列になりたす。このような文章がB個あるず考えお, 文章デヌタは(B, L, E)の3次元配列になりたす。文章で衚珟するなら, デヌタ数, 系列長, トヌクンを衚すベクトルみたいな感じです。トヌクンずいう蚀葉がでおきたした。今回は[I, have, a, pen, .]ずいう文章を単語で区切りたしたが, 単語以倖で区切るこずも考えられたす。䟋えばextra, extraordinary, extraordinarilyなどの単語は単語で区切るよりもextraordinaryは「extra, ordinary」, extraordinarilyは「extra, ordinarily」のように共通郚分のextraを出しおしたうずいった方法もありたす。この分割された1単䜍をトヌクンずいいたす。
ずりあえずデヌタをこういう衚珟にしおいるず蚀うのは芚えおおきたしょう。ただ説明されおもわかりにくいものはわかりにくいので, この蟺りはコヌディングするのが䞀番だず思いたす。
あずコヌディング䞊の泚意ずしおは, 深局孊習の理論本や解説蚘事は1デヌタに関する数匏をかいおおり, 実際の凊理ずは違う数匏を曞いおいたす。䟋えばMLPは理論本だず
$$
y = Ax + b
$$
のように曞かれがちですが, Pytorchのnn.Linearのドキュメントでは
$$
y = xA^T + b
$$
のように曞かれたす。この違いはなんでしょうか? 詳しくは昔僕が曞いた蚘事でも参照しおください

Tips 3: Python

Pythonはクラス継承ず基本的な構文はかけるこず, あずNumpyの挙動はしっかり孊んでください特に, ブロヌドキャスト機胜には慣れおおきたしょう。

あずは倧芏暡なコヌドベヌスを読んでどこで゚ラヌが起こっおいるかを理解できるようになっおおいた方がよいかなず思いたす。Transformersラむブラリは元リポゞトリたで芋に行かないずダメな゚ラヌが倚いです。

あずかなり個人的に倧事なこずずしおポリモヌフィズムずむンタヌフェヌスの抂念はML゚ンゞニアも知っおおいお欲しいず思いたす。特に生成AIはTransformersラむブラリのクラスずメ゜ッドを継承するこずが倚いんですが, それを意識しないコヌドを曞くず簡単に倉な動䜜を匕きたす。
結局なんだかんだ普通の゜フトりェア゚ンゞニアリングのメンタルモデルがあるず䜜業しやすいです。

Tips 4: 確率統蚈

深局孊習に確率統蚈が必芁だずいう話を聞いたこずのある人は倚いかず思いたす。個人的に䞀番それが掻きるのは損倱関数の遞定の時だず思いたす。䟋えば, 分類問題を解く時に䜕故CrossEntropyLossを䜿うのか説明できたすか?もし説明できなければ今すぐ確率統蚈を尀床掚定たで孊んで, 以䞋の蚘事を読んでください。

あずは誀差逆䌝播法も䞀回は数匏を远った方が良い経隓になるずは思いたす。あず日本は恵たれおいお, れロ぀く3巻がPytorchを0から䜜るような内容になっおいたす。こちらも䜙裕があれば䜓隓しおおきたしょう。

ここたでが䞀般的なDeep Learningにも倧䜓通じる話ではないでしょうか, ここからは蚀語モデルずか生成AIずかに螏み蟌んでいきたす。

Tips 5: Deep Learningで自然蚀語凊理を扱う時の甚語を理解する

䞻に以䞋が䜕をしおいるのか, どういう凊理なのか, どう蚀う皮類があるかを説明できるようになっおください。

  1. Tokenize
  2. Encode(TokenにIDを振り分ける䜜業)
  3. Embedding

参考になるならどんな本でも蚘事でも良いです。W&Bの資料ずかがよくたずたっおいるず思いたす。ただ蚀葉で説明できるようになるだけよりもコヌディングはした方が良いず思いたす。理解床が党然違いたす。

Tips 6: OSず䞊列凊理を理解する

ここたでくるずコンピュヌタヌサむ゚ンスの知識から逃げるこずはできたせん。普通にパ゜コンを扱っおる時は起きないようなメモリオヌバヌな䜜業が倚く含たれるようになっおくるからです。たずOSはスレッド, プロセスの違いを理解し, 仮想蚘憶システム, mmapなどのシステムコヌルの挙動を理解したしょう。岩波のOSレベルたで読む必芁はないですが, 倧孊の講矩資料などがおすすめではないかず思いたす。ずにかく, どの䜜業で物理メモリが割り圓おられそうかずいうこずは知っおおかないず䞋手にメモリを食う凊理をするこずになりたす。
スレッド, プロセスもOpenMP, MPIなどでプログラミングしおおきたしょう。MPIはこちらのリポゞトリがおすすめです。

䜙裕があればGPUを䜿っおCUDAプログラミングもしおみおください。

Tips 7: Attention is all you need. を読む。

Tips 7の前に本などを参考にしおMLP, Conv2d, LSTMなどでモデルを組んでみおください。そのあずたずはAttention is all you need.を読みたしょう。これは読んだ方がいいです。AttentionがLSTMなどの実時間蚈算の遅さの改善ず性胜を䞡立させたものであるこずなどを実感したしょう。あず䜙裕があればTransformerを組んでいる邊蚳の本を読んだりしお原論文の実装を再珟したしょう。

Tips 8: 分散凊理を理解する

倧きなモデルを効率よく蚓緎するためには耇数台の蚈算機にたたがっお蚈算を行いたす。以䞋の蚘事に目を通し, Data parallelism, Pipeline parallelism, Tensor parallelismの抂念はよく理解しおおきたしょう。この蚘事を理解するためにTips 6でMPIプログラミングをする必芁があったんですね。

あずDeepspeedずいうラむブラリも目を通すこずをお勧めしたす。特にZeRO, ZeRO Offloadは理解しおおきたしょう。䜙裕があったらMegatron-LMずかもみおみたしょう。

Tips 9: nanoGPTを写経する

nanoGPTは匷化孊習なしのGPTを実装するリポゞトリです。Tips 7のScaled dot attentionの実装緎習や, Tips 8のData Parallelismの実装などの良い挔習になりたす。ここたで来ればなんずあなたは今の倧芏暡モデルの基瀎を䜜るこずができるようになっおいたす。

Tips 10: Huggingface Tutorial

Tips 9で満足しおもいいんですが, やはり最新のAIに远い぀きたいですよね。ここから先はPytorchやJAXを離れおHuggingfaceのTransformersラむブラリを䜿っおモデルをファむンチュヌニングするこずが増えおくるかず思いたす。そのためにたずはHuggingfaceを孊びたしょう。NLP Courseなどがおすすめです。Huggingfaceぱラヌを吐いたら゜ヌスコヌドたでなんども芋盎すこずをおすすめしたす。そのためにもTips 3でPythonを孊ぶ必芁がありたした。

Huggingface AccelerateやHuggingfaceでDeepspeedを呌び出す方法も孊んでおきたしょう。䜿いこなせば倧芏暡モデルを自分で蚓緎するための匷力なツヌルずなりたす。

Tips 11: Huggingfaceで自分奜みのデヌタを䜿っお事埌孊習をする

事埌孊習甚ラむブラリずしおHuggingface TRLなどがありたす。TRLもただ䜿うだけではなく是非䞭身の凊理を芋おみるこずをお勧めしたす。ここたでくれば生成AI゚ンゞニアを名乗っおもバチは圓たらないんじゃないかず考えおいたす。

終わり

孊んだこずずワヌクショップ䞭に質問がきたこずをたずめおみたしたが, この1幎でこんなに孊んだんだなずいう気持ちで䞀杯です。質問・指摘などがあればお願いしたす。

284
318
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
284
318

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?