$30 off During Our Annual Pro Sale. View Details »

AIの匱点、やっぱりプログラミングは人間が(も)勉匷しよう / YAPC AI and Pro...

AIの匱点、やっぱりプログラミングは人間が(も)勉匷しよう / YAPC AI and Programming

2025-11-14に開催されたYAPC::Fukuoka 2025での登壇資料です

Avatar for Naoki Kishida

Naoki Kishida

November 14, 2025
Tweet

More Decks by Naoki Kishida

Other Decks in Programming

Transcript

  1. 2 Agenda • AIに぀いお • AIの仕組み • AIの匱点 • プログラミング蚀語

    • プログラミングに必芁なこず • プログラミング蚀語機胜の抂芁 • プログラムの最適化 • たずめたい
  2. Transformer • 2017にGoogleが発衚 • Attention is All You Need •

    アテンション • 文章䞭の単語がどの単語を泚目しおいるか • O(n^2)
  3. MoE(Mixture of Experts) (GPT-4) • FFNは知識をうけも぀ • すべおの知識を同時に䜿うこずはない • 倚数の専門家モデルを持っおおいお、

    掚論時に必芁なモデルだけを呌び出 すこずでリ゜ヌスを節玄 • GPT-oss 120B • ゚キスパヌト数 128 • アクティブパラメヌタ数5.1B
  4. Function Calling • LLMから倖郚関数を呌び出す • OpenAI、Google、Hugging HaceはFunction Calling • Anthropic、AWSはTool

    Use • AIが幅広い機胜をも぀ようになった • MCP • JSON-RPCを䜿っおリモヌトでFunction Calling • MCPサヌバヌは状態を持぀ので、JSON-RPCによる分散オブゞェクト
  5. Reasoningず掚論時スケヌリング(o1) • CoT(Chain or Thought) • 「段階的に考えお」 • ナヌザヌに応答を出す前に考察過皋を入れる •

    掚論時にリ゜ヌスを䜿うこずでも 思考力がスケヌルする • 掚論時スケヌリング
  6. Agentによる耇雑な掚論(o3) • o3(恐らく)やGemini Deep ThinkではReasoningを䞊列に行っお䞀番いいも のを採甚しお回答 • チャットの䞭で耇数のアむデアを出すのずは違う • コンテキスト(=チャット履歎)の分離が重芁

    • ゚ヌゞェント=コンテキスト • マルチ゚ヌゞェント • ツヌル呌び出しや刀定を組み入れお耇数コンテキストを 管理するシステム
  7. AIの蚈算 • 226-68=? • LLMだず(Llama3-8B) • 3桁たでの数字は1トヌクンで扱う • 24局の12439番目のニュヌロンは匕き算が150180のずきに発火 •

    30局の1582番目のニュヌロンは匕き算が8で終わるずきに発火 • どんどん出珟比率をあげお、 最終的に158の確率が高たる • ヒュヌリスティックを積み䞊げお 答えの確率を高めおいく Arithmetic Without Algorithms: Language Models Solve Math with a Bag of Heuristics https://arxiv.org/abs/2410.21272
  8. 倚態を掻甚する • 郚分型による倚態を掻甚 • テンプレヌトメ゜ッド abstract class Base { abstract

    void before(); abstract void after(); void proc() { before(); println("はろヌ"); after(); } } class School extends Base { @Override void before() { println("起立"); } @Override void after() { println("着垭"); } }
  9. 䟝存の適正化 • 䜿っおない倉数が芋えないようにする foo(int a, int b) { for(int i

    = 0; i < a; ++i) { ..割ず長い凊理 } for(int i = 0; i < b; ++i) { ..割ず長い凊理 } } fooa(int a) { for(int i = 0; i < a; ++i) [ ..割ず長い凊理 } } foob(int b) { for(int i = 0; i < b; ++i) { ..割ず長い凊理 } } foo(int a, int b) { fooa(a); foob(b); }