Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
へっぽこAIをつくろう! NLP/ML 勉強会 @HUIT
Search
Xiupoς
August 16, 2024
120
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
Typedesign – Prime Four
hannesfritz
42
3.2k
Building Applications with DynamoDB
mza
96
7.2k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
470
Build your cross-platform service in a week with App Engine
jlugia
234
19k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
The browser strikes back
jonoalderson
0
1.7k
Designing for humans not robots
tammielis
254
26k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
610
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
We Are The Robots
honzajavorek
0
380
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