Upgrade to Pro — share decks privately, control downloads, hide ads and more …

へっぽこAIをつくろう! NLP/ML 勉強会 @HUIT

Xiupoς
August 16, 2024
38

へっぽこAIをつくろう! NLP/ML 勉強会 @HUIT

Xiupoς

August 16, 2024
Tweet

Transcript

  1. 自己紹介 宮本脩平 (@xiupos) xiupos.net 理学部 物理学科 3年; 北大言語学サークル Huling 物理とかできます

    機械学習まるでわからん 自然言語処理まるでわからん HUITでは幽霊やってます... 2
  2. 実装: 文字 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
  3. 実装: 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
  4. モデルの学習 教師データ: The Adventures of Sherlock Holmes by Conan Doyle

    ← 文字列ならなんでもいい 文字目 に対し, 次の文字の確率分布は, 教師データ: モデル出力: この と の "距離" を測りたい ! 21
  5. "距離"の測りかた 文字 の情報量: 情報量の期待値 = エントロピー: Kullback–Leibler 情報量 ( と

    の "距離"=損失関数): 交差エントロピー エントロピー 一定 22
  6. 余談: softmax 関数を "導出" する 適当な要請から の表式を "導出" してみよう! 1.

    確率の公理から . 2. 確率分布のエントロピー は最大値をとる. 3. logits の期待値は一定. つまり, ある定数 が存在して, 要請 2 のエントロピーを, 要請 1, 3 の条件下で最大化する. (Lagrange の未定乗数法) 23
  7. 実装: 学習の実行 簡単に実行できる。そう、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
  8. 大規模言語モデル(LLM)を目指して 脱へっぽこAIのためにできること 単語の単位: 1文字 → 単語など 単語ベクトル: one-hot → Embedding

    モデルの構造: 順伝播NN → Transformer 教師データ etc. → 俺たちの戦いはこれからだ! 29
  9. ご静聴ありがとうございました! 参考文献 鈴木 久男, 北 孝文.『演習しよう熱・統計力学』(数理工学社, 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