Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
へっぽこAIをつくろう! NLP/ML 勉強会 @HUIT
Search
Xiupoς
August 16, 2024
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
へっぽこAIをつくろう! NLP/ML 勉強会 @HUIT
資料
https://gist.github.com/xiupos/f14c3250f306c79cd14ad9e7ce85f36a
Xiupoς
August 16, 2024
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
440
エンジニアに許された特別な時間の終わり
watany
108
250k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Odyssey Design
rkendrick25
PRO
2
770
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
The Pragmatic Product Professional
lauravandoore
37
7.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
The SEO Collaboration Effect
kristinabergwall1
1
520
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
470
Transcript
NLP/ML 勉強会 @HUIT へっぽこAIをつくろう! xiupos
自己紹介 宮本脩平 (@xiupos) xiupos.net 理学部 物理学科 3年; 北大言語学サークル Huling 物理とかできます
機械学習まるでわからん 自然言語処理まるでわからん HUITでは幽霊やってます... 2
言語当てあり〼 ゲーム「Languessr」 https://languessr.xiupos.net/ ランダムに表示される Wikipedia の要約記事からその表示言語を 当てるブラウザゲームです。 目指せ326言語マスター! ※これはCMです 3
本題 4
今日やること → へっぽこAIをつくる †AI† 「言語モデル」とか「文章生成AI」とか 「概論」「総論」「詳論」ではありません "Hello, world!" や "Lチカ"
ほどの入門を目指します。 ワークショップ形式でもありません! 5
そもそも言語モデルとは? → 「単語列」の生成確率 たとえば イタリア語を学びたい 学びたいイタリア語を という2文なら, 当然前者が「自然」=「生成される確率が高い」: 6
文章の生成 → 「条件付き確率」による選択のくり返し イタリアは ヨーロッパに アジアに ヨーロッパに あります ないです あります
イタリアはヨーロッパにあります 7
へっぽこAIの「仕様」 → 1文字をうけとって、次の1文字を返す! 8
機械学習の基礎 (入力, 出力)の組が与えられている「教師あり学習」 9
へっぽこAIを構成するパーツ 線形写像: "重み" 平行移動: アフィン変換 nn.Linear : は パラメータ 10
非線形写像 nn.ReLU : "活性化関数" 以上を合体: ← NNの基本単位 11
"ニューラル" ネットワーク? 12
へっぽこAIの「構造」 →2層(3層)の 順伝播型NN (LNN) 13
実装: へっぽこAI model model = nn.Sequential( nn.Linear(len(vocab), d_model), nn.ReLU(), nn.Linear(d_model,
len(vocab)), ) 14
ところで、 と って何? → 1文字と対応するベクトル e.g. "Hello, worl" を入力して "d"
を出力するとき 15
より詳しく ※ softmax 関数については後述 16
実装: 文字 int, 文字列 list[int] # {整数(番号): 文字} の辞書 itos:
dict[int, str] = {i:s for i,s in enumerate(vocab)} # {文字: 整数(番号)} の辞書 stoi: dict[str, int] = {s:i for i,s in enumerate(vocab)} # エンコード (文字列 -> 数リスト の関数) def encode(s: str) -> list[int]: return [stoi[s] for s in s] # デコード (数リスト -> 文字列 の関数) def decode(l: list[int]) -> str: return ''.join([itos[i] for i in l]) 17
実装: list[int] "one-hot" vec, "logits" list[int] # 数リスト -> 文字ベクトル
の関数 def ltov(l: list[int]) -> torch.Tensor: # ワンホットベクトルに変換 return torch.eye(len(vocab))[l] # logits -> 数リスト の関数 (確率分布に基づく) def vtol(v: torch.Tensor) -> list[int]: # 確率分布を計算 p = F.softmax(v, dim=-1) # 確率分布を基に return torch.multinomial(p, num_samples=1).view(-1).tolist() 18
完成! 動かしてみよう! ...まだ学習してなくない? 19
復習 : 機械学習 教師データの組 が与えられたとき, 20
モデルの学習 教師データ: The Adventures of Sherlock Holmes by Conan Doyle
← 文字列ならなんでもいい 文字目 に対し, 次の文字の確率分布は, 教師データ: モデル出力: この と の "距離" を測りたい ! 21
"距離"の測りかた 文字 の情報量: 情報量の期待値 = エントロピー: Kullback–Leibler 情報量 ( と
の "距離"=損失関数): 交差エントロピー エントロピー 一定 22
余談: softmax 関数を "導出" する 適当な要請から の表式を "導出" してみよう! 1.
確率の公理から . 2. 確率分布のエントロピー は最大値をとる. 3. logits の期待値は一定. つまり, ある定数 が存在して, 要請 2 のエントロピーを, 要請 1, 3 の条件下で最大化する. (Lagrange の未定乗数法) 23
, を Lagrange の未定乗数として, を最大化するために, で微分した式を と置く: ただし分配関数 とした. 規格化条件より,
分配関数は 24
適当な を選ぶことで とすることができる: 結局, 要請 1~3 を満たす確率分布は, であることがわかる! → 統計力学のカノニカル分布に相当「閉じた系」
25
気を取り直して: 学習のアルゴリズム 1. パラメータに関して交差エントロピーの勾配を計算する. 2. 1 の値をパラメータから引いて新しいパラメータとする. (1. に戻る) 交差エントロピーのパラメータ
方向の勾配: パラメータの更新: 26
実装: 学習の実行 簡単に実行できる。そう、PyTorchならね。 # 最適化手法に Adam を採用する optimizer = torch.optim.Adam(model.parameters())
# 損失関数を計算 loss = loss_fn(model(ltov(xs)), ltov(ys)) # 勾配を初期化 optimizer.zero_grad() # 誤差逆伝播 loss.backward() # 1回分の学習を実行(パラメータが更新される) optimizer.step() 27
今度こそ完成! 動かしてみよう! 薄目で見れば英語! へっぽこAIの完成! 28
大規模言語モデル(LLM)を目指して 脱へっぽこAIのためにできること 単語の単位: 1文字 → 単語など 単語ベクトル: one-hot → Embedding
モデルの構造: 順伝播NN → Transformer 教師データ etc. → 俺たちの戦いはこれからだ! 29
ご静聴ありがとうございました! 参考文献 鈴木 久男, 北 孝文.『演習しよう熱・統計力学』(数理工学社, 2018) 岡﨑 直観, 荒瀬
由紀, 鈴木 潤, 鶴岡 慶雅, 宮尾 祐介.『IT Text 自然言 語処理の基礎』(オーム社, 2022) Brian Kitano. (2023). "Llama from scratch (or how to implement a paper without crying". https://blog.briankitano.com/llama-from- scratch/ 30