2024-10-29 機械学習勉強会

今週のTOPIC


@Naoto Shimakoshi

[blog] gradient accumulation stepsのバグを理解する

  • transformersやunslothでGradient Accumulationの挙動にバグがあったため、それを修正したとの報告。
    • ちなみにunslothは軽量なLLM fine tuningライブラリ
  • gradient accumulationすると損失が大きくなってしまっていた
  • 仮説としては以下の二つ
      1. 累積ステップで数値エラーが発生
      1. 損失計算にバグがある
  • 1については、わずかな累積エラー
  • 2については、実際にバグが存在
    • クロスエントロピーは以下のように計算されており、Paddingなどを無視した数になっている。
    • これをとすると以下のように書ける。
    • 要するに以下のように書けるが、これに対して平均を取っても、分母分子でキャンセルされる。
    • よって最終的にはpaddingを無視したトークン列の長さの平均とロスの平均の比になる。
    • これを勾配累積するので、購買回数だけ、損失が大きくなってしまう。(それはそう)
      • じゃあ、各バッチを計算するときにで割ればいいとなるのだが、バッチごとに長さが違う(が違う)と、破綻してしまう
    • 実際に、正規化部分を消して勾配累積とフルバッチで損失遷移を確認すると完全に一致したため、ここのNormalize部分に問題がありそうなことがわかった
    • これに対しての対策の式は書かれていないが、恐らく有効なトークン数も累積しておいて正規化するような形で修正を加えてるのではないかと考えられる。
    • 実際に、Hugging Faceの修正はそうなっている
    • まあ小難しく書いているが、1/2 + 1/3 = 1/5 じゃないよという単純な話な気がする。

    @Yuya Matsumura

    [論文]Bootstrapping Conditional Retrieval for User-to-Item Recommendations

    • RecSys2024 Industry Talk by Pinterest(論文は短いです)
    • レコメンドにおけるフィルタリングの課題に向き合う。
      • 普通に学習して推論した結果を特定のルールでフィルタリングするというのが一般的だが、フィルタリングを考慮した学習にはなっていない。
      • 特定のフィルタリングごとに学習しようとしても学習データが少ない。
      • そもそも、フィルタリングされてしまったが実は良いアイテムを逃してしまう。
    • two-towerモデルにおいて、itemの特徴からフィルタリング条件を表すcondition embeddingを作成(Condition Extraction Module)
      • two-towerとは独立した item-to-topic featureを利用
    • condition embedding をUser Towerに入力して学習、推論する(Conditional User Tower)
      • 学習方法は通常のtwo-towerと同様
    • 性能マシマシ。フィルタリングしなくても高い性能。コストも低い。
     
    ZOZOさんのRecSys参加ブログを読んで興味を持ちました!

    @Yuta Kamikawa

    [repo] avante.nvim

    • NeovimをCursorのようなAI IDEに進化させるプラグイン
    • v0.0.1のリリースが2024/9/3
      • 既にstarが6.5k
      • リリースが最近のためか一部エラーが出たりするが普通に使えた
    • AI IDEとしての最低限の機能は一通り使える
      • 開いているファイル(カレントバッファ)に対してチャットによるコード生成
      • オートサジェスション
      • カスタムプロンプト
      • ワークスペース(コードベース)でのチャットによるコード生成
    • 使えるモデル
      • Claude
        • Claude-3.5-Sonnet (公式のおすすめ)
        • Claude-3-Opus
        • Claude-3-Haiku
      • OpenAI
        • gpt-4o
        • gpt-4o-mini
      • Google
        • gemini-1.5-flash
        • gemini-1.5-pro
      • Azure
        • gpt-4o
      • Cohere
        • CommandR+
      • Copilot
        • gpt-4o
        • gpt-4o-mini
      • LocalLLM
        • Ollamaなど
    • avante.nvimでできないこと
      • avante.nvimは開いているファイルの拡張子を元にワークスペース内のファイルを検索するので、pythonファイルを開いているときにtypescriptのファイルの情報について回答することができない
    • Github copilot for businessが使える場合、追加の課金がなくともCursorライクなエディタとして利用できる(gpt-4o)
      • 個人的にはgithub copilot chatでo1 previewがそろそろ使えるようになるらしいので楽しみ

    @Shun Ito

    [論文] DocGraphLM: Documental Graph Language Model for Information Extraction

    • SIGIR2023
    • 文書からの情報抽出・質問応答
    • レイアウト情報をグラフで表現し、グラフニューラルネットを用いる
      • 各ノードから360度を8つの45度のセクターに分け、各セクター内で最も近いノードを隣接ノードとして設定
      • GNNでグラフ再構築を解くことで学習
        • 距離予測:2つのノード間の(対数変換した)ユークリッド距離を回帰タスク
        • 方向予測:8つの方向のいずれかを分類するタスク
      • 言語モデルで得た表現と組み合わせてトークン単位の表現に変換し、後続タスクHeadと接続する
        • 具体的な集約方法は書いていなかった
    • 実験
     

    @Ryosuke Fukazawa

    [blog] Welcome, Gradio 5

    Streamlit と双璧をなす?Gradio のメジャーバージョンアップが少し前にあったので共有。
    今回のバージョンアップは production-ready machine learning web applications を狙ったものだそうです
     
    1. 高速化とパフォーマンスの向上
        • サーバーサイドレンダリング(SSR)の導入により、アプリが瞬時にロードされ、スピナー表示が不要になった。
    1. デザインの刷新とテーマの追加
        • 各種UIコンポーネントがモダンデザインにアップデートされ、新しいテーマが導入。
    1. リアルタイムアプリへの対応
        • WebRTCやストリーミング対応により、リアルタイム音声や動画処理が可能になった。
    1. AI Playgroundの導入
        • AIを活用してGradioアプリを生成・編集でき、ブラウザ上でプレビューできる。
    1. セキュリティ強化
        • サードパーティによるセキュリティ監査を実施し、より安全なアプリケーション構築を実現。
     
    今後に向けては、複数ページにわたるアプリが作れるようになったり、PWAのサポートがされたりなどと、素早くアプリケーションを立ち上げるときの選択肢もより積極的に拡充されていきそうです。

    @Yosuke Yoshida

    [blog] よくわかるcontextの使い方

    • Goの標準パッケージのcontextについてまとまっている記事
    • Contextの主な役割
      • 処理の締め切りを伝達
      • キャンセル信号の伝播
      • リクエストスコープ値の伝達

    メインTOPIC

    Introducing computer use, a new Claude 3.5 Sonnet, and Claude 3.5 Haiku

    Anthropic社は「Claude 3.5 Sonnet」と新モデル「Claude 3.5 Haiku」を発表。
    • Claude 3.5 Sonnet
      • 従来のモデルよりも全体的に性能が向上し、特に優れているとされていたコーディング分野でさらに大きな性能向上が見られた
    • Claude 3.5 Haiku
      • Claude 3.5 Haikuは、これまでの最も大きいモデルであったClaude 3 Opusに匹敵する性能を、これれまでのHaikuモデルとほぼ同等の速度とコストで実現。
    新機能として「computer use」をパブリックベータで公開
    • Claudeによって個別のタスクを効率化するツールを作成のではなく、一般的なコンピュータスキルを身につけさせることで、人間が使う標準的なツールやソフトウェアを幅広く活用し、繰り返しのプロセスの自動化、ソフトウェアの構築・テスト、研究などのオープンエンドなタスクに展開していくことを目指している。

    How it works?

    • Claudeがコンピュータのインターフェースを認識し操作できるAPIを構築。
    • 開発者はこのAPIを統合することで、自然言語による指示(例:「コンピュータとオンラインデータを使ってこのフォームに入力する」)をコンピュータ操作に変換できるようになり、スプレッドシートの確認、ブラウザの操作、関連ページへの移動、データのフォーム入力など一連の作業を実行可能にする。

    評価

    • コンピュータ操作のスキルを評価する「OSWorld」では、Claude 3.5 Sonnetがスクリーンショットのみのカテゴリーで14.9%のスコアを記録し、次点のAIシステムの7.8%を大きく上回った。
    • さらに多くのステップを許可した場合には、Claudeのスコアは22.0%に達した。

    課題

    • 人間にとって簡単なスクロールやドラッグ、ズームといった操作はまだClaudeで実現するには難易度が高い
    • また、スパムや詐欺などを区別できず意図しない操作をしてしまうリスクもある
     

    実装demo

    • 自律的にtry and errorを繰り返していてすごい
    • リサーチする→計画を立てる→カレンダーに予定を入れるまで全て自律的に実行しててすごい

    感想

    • カーソルの動きやクリックの操作権限PC上でできることほぼ全てができてしまうので強力である一方、悪意のあるプロンプトが渡された時のリスクが測りしてれないので、分類器による判定以上のガードレール的なものの整備が必要不可欠。
    • パッと思いつく例だと、slackやmail、SNSで不適切な発言をしまくるような悪意のあるプロンプトが渡されたりしたらやばそう。

    Developing a computer use model

    Why computer use?

    • コンピュータ上での作業が主流である現代において、AIが人と同じ方法で直接ソフトウェアを操作できるようになれば、これまでのAIでは実現できなかった幅広い用途に適用できる。
    • これまでAIは論理的な推論や画像の理解といった重要な進歩を遂げましたが、次のフロンティアは「computer use」であり、今後は特別なツールに頼ることなくユーザーの指示に応じてあらゆるソフトウェアを使いこなすことができる能力が求められるようになる。

    The research process

    • これまでのツールの使用やマルチモーダルの技術に関する研究が、今回のcomputer useの基盤となっている。computer useには画面画像の視覚認識や操作方法の推論が求められるため、Claudeには画面上の情報を理解し、作業を遂行するための訓練が行われた。
    • 具体的には、Claudeがスクリーンショットを見ながらピクセル数を数え、カーソルを正しい位置に移動してクリックできるようにするなどのトレーニングなどを実施。
    • Claudeはシンプルなソフトウェアでの訓練(電卓やテキストエディタの操作)だけで予想以上に汎化し、事前にstep-by-stepで考えた上で操作方法を決定したり、複雑な操作を自動的に自己修正やリトライをしながら試行錯誤を重ねるといった挙動が見られた。
    • OSWorldという評価基準でClaudeは14.9%を達成。これは人間の性能(70-75%)にはまだ程遠いが、次点のモデルの7.7%を大きく上回っている。

    Making computer use safe

    • AIの進化とともに新たな安全リスクも生じるため、コンピュータ操作スキルの提供にあたり、スパムや誤情報、詐欺といった既存のリスクに対応するための対策を講じている。
    • 例えば、AIがどのようにcomputer useを使用しているかを監視し、潜在的な害が生じていないかを識別する分類器の開発を行った。特に最近は米国の選挙が控えているため、選挙プロセスへの信頼を損なう可能性がある操作を警戒し、選挙関連の活動にClaudeが関与しようとした際に監視するシステムを導入している。
    • また、スクリーンショットなどがインターネットと繋がることになるため、「プロンプトインジェクション」(AIに意図しない動作をさせる攻撃)によってデータが意図しない使われた方をされないように防御策を講じている。

    The future of computer use

    • modelに合わせてツールを作っていた時代から、ツールに合わせてモデルを作る時代に。
    • Claudeのcomputer useはまだ遅く、エラーが発生しやすい状況。また、drag & dropやズームなど人間日常的に行う操作は多岐にわたるが、Claudeはその多くにまだ対応できてない。
    • 現在のスクリーンショット方式は、短時間のアクションや通知を見逃すこともあり、改善が必要だが、将来的には開発経験の少ないユーザーでも簡単に実装できるようになることが目標。

    Highlight AI

    概要

    • Highligh AIはLLM OSにinspireされ、caputreベースのインターフェイスを搭載したOSとLLMを仲介するレイヤーを担う。
    • ブラウザは何度も同じことを入力する必要があるし、周辺の環境の状況やPC内のファイルするアクセスできず人間のcontextをcaptureできない。よってブラウザにLLMが組み込まれたとてできるようになることは限定的になってしまうという課題がある。
    • Highligh AIはクロスプラットフォームのデスクトップアプリであり、画面、音声、ファイルをコンテキストに含めることが可能で、自由に質問をすることができる。
    • 許可する操作
      • more about privacy
        • 検証可能なセキュリティ
          • カスタマイズ可能なプライバシー
            • ユーザーは自分のプライバシーニーズに応じてシステムをカスタマイズ可能。
          • Electron Debuggerの利用
            • すべてのネットワークリクエストをElectron Debuggerで監視可能。不審なリクエストがあればDiscordで報告可能。
          • 推論サーバーの選択
            • 設定→開発者モードから推論サーバーを変更可能。必要に応じて自社サーバーに切り替え可能。
        • データの非保存方針
          • 録画データの即時破棄
            • スクリーン録画はアップロードも保存もされない。録画されたフレームは即座に破棄される。
          • 音声データの管理
            • 音声トランスクリプトはオプションで保存可能。保存された場合も、ローカルに保持され、設定した期間で自動削除されます。
        • サーバーへのデータ送信
          • 2つの例外
              1. Highlight Chatでの送信
                1. メッセージやファイルを添付する場合
              1. クラウドトランスクリプト
                1. 「Allow Cloud Transcripts」を有効化した場合、ローカルモデルが失敗した際にサーバーで処理を継続。
        • 暗号化とアクセス制限
          • すべての会話と添付ファイルを暗号化
            • エンジニアであっても会話内容へのアクセスはできません。
          • 内部承認プロセス
            • 会話へのアクセスには、CEOとCTPの承認が必要。両者が唯一の復号鍵保持者です。

    できること・強み

    • 議事録機能
      • 音声入力を通じて勝手に議事録を取ってくれ、要約や共有も可能。
    • 画面上の情報に対して、質問可能
      • chatGPTではテキストや画像を転記してから質問する必要があるが、Highlight AIではいきなり質問ができる
      • また、アプリが常時起動しているのでHighlight AIを起動する必要もない。ショートカットキーさえ押して質問すれば良い。
    • Highlight AI上でpromptやアプリの公開が可能
      • 便利アプリやプロンプトが公開されている
      • 例:TODO app
        • 画面上でそのタスクが完了したと判断できたら、完了にしてくれる(試したけど私の環境だとうまく動かなかった
        • アプリはnext.jsとかでリッチに作ることができる
    • デモ