2024-11-05 機械学習勉強会
今週のTOPIC[slide] 日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system[blog]flat layoutとsrc layoutについてAI Analysts forcorporate finance teams[OSS] docling[論文] Human-AI Collaboration in Decision-Making: Beyond Learning to Defer[slide] 自然言語処理を役立てるのはなぜ難しいのか - Speaker Deck[doc] What’s New In Python 3.13メインTOPICDifferential Transformerサマリー1. Introduction2. Differential Transformer3. Experiments3.1. 様々な下流タスクにおけるLLMとしての性能3.2. モデルサイズと学習トークンサイズ3.3. 大きなコンテキスト長(64k)における性能3.4.(a)コンテキストからの情報抽出タスク(Key Information Retrieval)3.4.(b) In-context learning3.4.(c) ハルシネーション3.5. 活性値の異常値(Activation Outliers)の低減3.6. Ablation Study4. 感想
今週のTOPIC
※ [論文] [blog] など何に関するTOPICなのかパッと見で分かるようにしましょう。
出典を埋め込みURLにしましょう。
@Naoto Shimakoshi
[slide] 日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
- 日経電子版におけるリアルタイムレコメンドを行った事例
- 有料登録者数のアクティブ率が翌日には数十%低下するグラフとか記事の閲覧数分布が公開の半日~一日に集中してるグラフとか、割と赤裸々に載ってて面白かった。
- 要するにバッチレコメンドだと間に合わないということが言いたい。
- (バッチレコメンドして古い記事も見せるようにしたら、分布変わりそうだがどうなんだろ)
- モデルはTwo-towerモデル
- 実際推薦するときのArticle候補を何かしらで絞らないと、過去の記事とか推薦されそうだと思ったが、Time Featuresを入れてるっぽい。
- アーキテクチャは以下のような感じで、リアルタイムな推論はSagemakerでやっているっぽい。(AWS Batchでの処理がされていない記事は推薦されなそうだが、頻繁に推論してるっぽい)
- 近似近傍探索はESを使用
- 時系列で区切ってCTRが+15%、ABテストして既存ロジックより+5%、+XXXX万円のLTVアップになった。
@Yuya Matsumura
[blog]flat layoutとsrc layoutについて
- Pythonプロジェクトのディレクトリ構成について、flat layout と src layout を比較した記事
- flat layout: パッケージフォルダをルート直下に配置
- e.g. pytorch, django, tensorflow
- src layout: src(などの)サブディレクトリにパッケージフォルダを配置
- e.g. transfomers, flask, black
- 結論、パッケージ開発するなら src layout が良いとのこと
- why
- ソースコードを実行するために、src layoutはインストールステップが必要となるが、flat layoutはインストールステップが不要
- Pythonインタープリタがカレントワーキングディレクトリをインポートパスの先頭に含むため、flat layoutでは開発中のコードを使用してしまう危険があるが、src layoutではインストール済みパッケージを使用することが保証されている
- 上記を実際に検証しながら確かめてくれている良記事でした。
@Tomoaki Kitaoka
AI Analysts forcorporate finance teams
- 財務分析を自動化してくたり、アドホックな質問に回答してくれるるSaaS
- Concourseはタスクのスピードや効率を向上させるツールではなく、個別のタスクを完全に自律的に遂行できる
- Concourseが他と異なる点は、「複雑な多段階のオペレーション」を伴う財務ワークフローを実行できること
- 例えば、NetSuiteのダッシュボードからデータを取得してCSVファイルをダウンロードし、そのデータをExcelスプレッドシートにコピーすることが可能
@Yuta Kamikawa
[OSS] docling
- 文書ファイルの解析と変換に特化したOSS
- できること
- 🗂️ Reads popular document formats (PDF, DOCX, PPTX, Images, HTML, AsciiDoc, Markdown) and exports to Markdown and JSON
- 📑 Advanced PDF document understanding incl. page layout, reading order & table structures
- 🧩 Unified, expressive DoclingDocument representation format
- 📝 Metadata extraction, including title, authors, references & language
- 🤖 Seamless LlamaIndex 🦙 & LangChain 🦜🔗 integration for powerful RAG / QA applications
- 🔍 OCR support for scanned PDFs
- 💻 Simple and convenient CLI
- 一般的なドキュメント形式(PDF、DOCX、PPTX、画像、HTML、AsciiDoc)を読み取り、MarkdownおよびJSONに変換
- ページレイアウト、読み取り順序、表構造を含む高度な PDF ドキュメントの理解
- レイアウト解析はDocLayNetで学習した物体検出モデル
- 表構造認識にはTableFormer(Table Transformer)
- DoclingDocumentという統一的なyaml形式で文書構造を定義
- タイトル、著者、参考文献、言語などのメタデータ抽出
- LlamaIndexとLangChainとの統合
- PDFのOCR
- Tesseractらしい
- シンプルで便利なCLI
- poetryとかuvで簡単に入る
公式ドキュメント
Features
- レイアウト解析のDocLayNet物体検出、OCRのTesseractなど既存のOSSを集めて使いやすくしましたみたいな感じだが、表構造は使えそう
- ドキュメントファイル(PDF、PowerPoint、WORD、MarkDown等)をJSON(YAML)形式の構造化データに変換できるのが強み
@Shun Ito
[論文] Human-AI Collaboration in Decision-Making: Beyond Learning to Defer
- ICML2022 Workshop on Human-Machine Collaboration and Teaming
- 委譲学習(Learning to Defer)のサーベイ的な論文
- 委譲学習とは?
- 動機: AI・機械学習モデルが苦手(人間の方が得意)な問題は、人間の回答に委ねたい
- 医療や不正検知のドメインを想定
- どの問題を人間に委ねるべきかを学習する手法が委譲学習
- 手法について
- データ: (特徴量・正解ラベル・人間)の回答の3つ組 + モデルの予測値
- 3つの損失を含めて最小化するパターン
- モデルで予測した場合の損失
- 人間が予測した場合の損失
- 人間が予測する場合のコスト
- その他
- モデルの予測と委譲予測を同時に学習するパターン
- 公平性を考慮するパターン
- その他の拡張: マルチクラス・複数アノテーターへの拡張
- Challenges and Limitations(一部抜粋)
- 全ての学習データに人間による回答を付与するのはコストがかかる
- 先日紹介した Learning to Defer with Limited Expert Predictions (AAAI2023) のデータ生成など
- 回答を複数の人間が担当する場合の、専門性にばらつきがある場合への対応
- 過去手法 (Keswani, 2021) はそれぞれのインスタンスに複数人の回答を前提としていたが、現実的ではない。
- concept driftが発生し、データの性質(インスタンスや人間の回答)が変化する場合への対応
- データ作成コストが大きく、再学習しづらい
- コメント
- 人間の回答を集めるのは高コストなので、一部のデータからなんとかする(学習方法を工夫したり、生成したり) 方向になりそう
- 枠組み自体は人間をLLMに置き換えても使えそうなので試している研究はあるかも
@Ryosuke Fukazawa
[slide] 自然言語処理を役立てるのはなぜ難しいのか - Speaker Deck
研究も追いつつプロダクトを作っていく我々にとって、大事な考えの言語化だったので紹介
まとめスライドは本当に端的な内容なので少し補足
- LLMが出てきた後は、(人間が扱う自然言語に対して流暢性の面で人間を越えることは原理的にできないので)精度以外の部分で勝負するのも大事
- メモリ帯域が重要になり3D積層メモリなどプロセッサに求められる要件が大きく異なりつつあるので強い基盤技術の活用も重要に
- インターフェースとしての自然言語処理であると考え、背後の問題を解くための道具と割り切って特定のドメインに飛び込んでの課題解決を行うことも大事に
@Yosuke Yoshida
[doc] What’s New In Python 3.13
- 2024/10/7 Python3.13 リリース
- Free-threaded CPython
- GIL (global interpreter lock) を無効にした free-threaded mode を実験的にサポート
- デフォルトでは有効になっておらず別途ビルドされたバイナリを使う必要がある
- JITコンパイラ
- -enable-experimental-jit オプションでビルドすると使えるようになる
メインTOPIC
Differential Transformer
- 2024年10月にarXivに投稿されたMicrosoft Researchによる論文
- これだけ擦り続けられているTransformerのアーキテクチャを大変シンプルなアイデア・実装で改善できたという論文。
サマリー
- 従来のTransformerには、無関係なコンテキストに対しても過剰に注意(attention)を持ってしまう傾向があるという課題があった。
- 提案手法である Differential Transformer(DIFF Transformer) は、そのような課題を解決するために従来の Transformer の Attention機構を改良したアーキテクチャである。
- 手法はシンプルであり、2つの独立したAttention Scoreを計算し、その差(Differential Attention)を従来のAttentionと置き換えるというだけのもの。これにより、関連するコンテキストへの注意が増幅され、無関係なコンテキストへの注意(ノイズ)が減衰する。
- 実験の結果、長文を扱う際の精度低下の低減や、情報抽出タスクの精度向上、QAや要約タスクにおけるハルシネーションの低減、モデルサイズの削減などの効果が確認された。
1. Introduction
- Transformerは言うまでもなく大変注目を浴びており、近年のLLMモデルではTransformerのデコーダーのみを利用したアーキテクチャがデファクトスタンダートとなっている。そして、TransformerのキモはAttention機構である。
- 一方で、(長い)コンテキストから欲しい情報を抽出するというタスクにおいてAttention機構の課題への言及が増えている。
- 以下図1はAttentionがコンテキストのどの部分に集まっているのかを示したものであるが、従来のTransoformerでは一番左の図に現れているように、正解に対してのAttentionが最も大きいもののその割合は小さく、割合としては無関係な部分に当てられるAttentionのほうが圧倒的であることが分かる(AnswerへのAttentionが0.03と最も大きいが、Answerの前の無関係のコンテキストへのAttentionの和が0.18、後ろが0.34もある)。
- このようにAttentionの大きな割合が余計な部分、attention noise に当てられてしまっていることは、モデルの性能に悪影響を持つ。
- このような attention noise を削減するためにDifferential Transformer(DIFF Transformer) を提案する。
- Diff Transformerでは、従来のTransformerのAttention機構において2つの独立したAttention Scoreを計算し、その差(Differential Attention)を従来のAttentionと置き換えるというだけのもの。これにより、関連するコンテキストへの注意が増幅され、無関係なコンテキストへの注意(ノイズ)が減衰する。
- このアイデアは電気工学におけるノイズキャンセリングヘッドフォンや差動増幅回路(差動アンプ)のアナロジーとして考えられる。
- ref: ‣
- Attentionにおける同相ノイズ(コモンモードノイズ)を減衰させるというイメージ
- 上述した図2の中央は提案手法におけるAttentionの分布であるが、正解に対してのAttentionがかなり際立っており、attention noise が非常に小さくなっていることが見て取れる。
- また、右側はコンテキストからの情報抽出タスクの評価結果であるが、提案手法が大きく性能を改善していることが見て取れる。
- 他にも、従来のTransofomerと同等の性能を発揮するために、モデルサイズあるいは学習データは65%のもので良いということや、様々な下流タスクにおいても高い性能を見せることが分かった。
- 以上から、Diff TransformerがLLMのための効果的で特徴的なアーキテクチャになるのではないか。
2. Differential Transformer
- Differential Transformer(DIFF Transformer)は基本的に従来のTransformerと同様のアーキテクチャである。
- 一番のポイントは、従来のAttentionをDifferential Attentionに置き換えたことである。
- 他の細かい点としては、LLaMAに倣って pre-RMSNorm やSwiGLUを改良点として採用している。
- Differential Attention では、入力()に対して重み()をかけた後、QとKを2分割する。
- 2分割してQとKでそれぞれ(従来の)Attention Scoreを計算した上でその差を取る。 は学習パラメタ
- 実際の は学習のため以下のように再パラメタ化されている。
- (シンプルなスカラーパラメタと比べて)学習の安定化
- 初期値を制御することで、層ごとに適切な差分効果を狙う
- 論文中では以下の初期値が推奨
- Multi-Headにするのは従来のTransformerと同様
- 従来のTransformerと勾配の傾向を合わせるために、正則化(GroupNorm)した後 をかけているのが実はポイント
- DiffAttnの勾配は従来のAttentionの 程度になる。
- GroupNormで正規化されるので、再度 をかけることで元のTransformerと同程度の勾配の大きさになる。
- この性質により、従来のTransformerのハイパラをそのまま利用しても学習が安定するとのこと。
- GroupNormというのは、シンプルにheadごとに独立してnormalizationしているだけ。
3. Experiments
- 以下のような観点でDifferential TransformerをLLMに適用して評価
- 様々な下流タスクにおけるLLMとしての性能
- モデルサイズと学習トークンサイズ
- 大きなコンテキスト長(64k)における性能
- コンテキストからの情報抽出タスク(Key Information Retrieval)、ハルシネーション、in-context learning
- 活性値の異常値(Activation Outliers)の低減
- Ablation Study
3.1. 様々な下流タスクにおけるLLMとしての性能
- モデルの基本設定
- モデルサイズ:3B(2.8B パラメータ)
- レイヤー数:28
- 隠れ層サイズ:3072
- FFNサイズ:8192
- 語彙サイズ:100,288
- アテンションヘッドの設定
- ヘッドの次元(d):128
- Transformer:24ヘッド
- DIFF Transformer:12ヘッド
- 計算量を合わせるため半分のヘッド数にしている
- 学習設定
- トレーニングシーケンス長:4096
- バッチサイズ:4M
- トレーニングトークン数:1T
- トークナイザー:tiktoken-cl100k_base
- オプティマイザ設定
- オプティマイザ:AdamW
- β値:(0.9, 0.95)
- 最大学習率:3.2e-4
- 最小学習率:1.28e-5(線形減衰)
- ウォームアップステップ:1000
- 重み減衰:0.1
- ドロップアウト:0.0
- その他
- 学習データ:StableLM-3B-4E1Tと同じデータセット
- 評価方法:LM Eval Harness ベンチマークを使ってzero-shotの設定
- ベースライン:OpenLLaMA-v2-3B, StableLM-base-alpha-3B-v2, StableLM-3B-4E1T
- 結果は以下の表
- すべてのタスクで提案手法(DIFF-3B) が他のLLMを上回る。
3.2. モデルサイズと学習トークンサイズ
- DIFF Transformerと従来のTransformerのスケーリング性を比較
- (a) 様々なモデルサイズにおいてDiffは性能が高く、同じ性能を出すのに38%小さなモデルでもよい。
- (b) 様々な学習トークン数においてDiffは性能が高う、同じ性能を出すのに36%小さな学習データセットでもよい。
3.3. 大きなコンテキスト長(64k)における性能
- 64Kのコンテキスト長における性能評価を行う。
- 前述の3Bモデルを利用し、追加で1.5Bトークン分学習を進めて検証。
- 実験結果は以下の図であり、Diffが従来のTransformerをコンスタントに上回っている(NLLは小さいほうが良い)
3.4.(a)コンテキストからの情報抽出タスク(Key Information Retrieval)
- コンテキスト内の重要な情報を抽出する能力を評価する Needle-In-A-Haystackテスト(直訳:干し草の中の針探し)
- ”Tokyo has magic number 7425.” や “Paris has magic number 3891.”といったフレーズが埋め込まれた長文を受け取り、”What is the magic number for Paris?” と聞かれた際に “3891” と正しく回答することを期待されるタスク。
- N: 差し込まれている都市と数字の組み合わせの数(上の例だとN=2)
- R: 質問される都市の数(上の例だとR=1)
- 結果は以下の表の通り
- NやRが大きくなり問題が難しくなるほど性能が落ちるのは変わらないが、Diffは性能悪化の程度が小さいことが見て取れる。
- → 無関係なコンテキストがたくさんある中でも必要な情報にきちんと注意を払えている。
- N=8, R=1の設定でコンテキスト長と回答がコンテキストのうちどの深さにあるのか(0だと頭、100だと後ろ)の関係が性能に与える影響を表に示したのが以下
- Diffは異なるコンテキスト長に対して安定した成果を見せる。
- 正解が存在する位置にもある程度ロバストである。
- 特に、正解がコンテキストの前半におかれた際の従来のTransformerとの差が大きい。
- 以下は正解へのアテンションとattention noise(正解以外へのアテンションの和)を表にしたもの。
- 圧倒的にDiffが欲しい情報に注意を向けており、attention noise が小さい。
3.4.(b) In-context learning
- many-shot分類とロバスト性の観点でIn-context learningの性能を比較評価する。
- 以下はmany-shotの評価結果であり、一貫してDiffが高い性能を示す。
- 横軸は入力サンプル数であり、1shotから入力長が64Kになるまでshot数を増やしていっている。
- (無闇にサンプル数増やしても精度が頭打ちってのも見えていて良い。)
- 4種類のタスクで実験しており、それぞれ分類するクラス数が異なる。
- ロバスト性の評価に際して、同じサンプルが与えられた際に、順序のばらつきによる性能差を検証したのが下図
- サンプルの並び替えの方法によらず、Diffの性能のばらつきが小さいことが読み取れる。
- 逆に従来のTransformerは分散大きいな。
3.4.(c) ハルシネーション
- (コンテキスト)ハルシネーションの程度を、文書要約および質疑応答タスクで評価する。
- 入力に正しい情報が含まれる際に、正しい出力を生成できるのかという観点での評価
- 出力はGPT-4oで評価する。出力が正確でハルシネーションがないかどうかをboolで出力させる。
- (これだけだとハルシネーションというか、シンプルな文書要約やQAタスクの評価では?どのような間違い方をしているのかが気になった。)
- 以下は要約タスク(a) および質疑応答タスク(b)の例(精度は100サンプル平均)
- DIFFが概ね高い性能を発揮している。
3.5. 活性値の異常値(Activation Outliers)の低減
- LLMにおいて活性値異常値(Activation Outliers)、つまり極端に大きい活性値が発生することがよくある。
- Activation Outliers は学習と推論においてモデルの量子化を困難にさせてしまう。
- 小さいbit数で表現できなくなるということ。
- 以下の表は、Attention層と隠れ層における活性値の統計である。
- 中央値は大きくは変わらないが、DIFFは相対的にかなり小さな活性値を保つことができており、外れ値が少ないことが読み取れる。
- 以下はAttention層のパラメタを量子化した実験結果であるが、Diffは量子化を行なっても精度の劣化が小さいことが見て取れる。
3.6. Ablation Study
- GroupNormがDIFFに効果的であることが見て取れる(DIFFの1行目と2行目比較)。
- 一方で、従来のTransformerでは効果はほぼないように見える(Tの2行目と3行目)。
- また、従来のTransformerのhead数を16→8に変更しても性能の変化ほぼないように見える(Tの1行目と2行目)。
→ DIFFの性能が、head数を減らしたことやGNを追加したことによるものだけではないことが分かる。
- の初期値を変えても性能は大きく変わらず、ロバストである。(最後の2行)
4. 感想
- 長年、特に最近は改めてすごく注目を浴びていてめちゃくちゃ研究されてきたTransformer機構において、こんなシンプルなアイデアで大きな改善ができるというのがかっこいい。
- ノイキャンの技術の応用というのは納得感があった。気持ちとしてはアンサンブル的な話なのかな。他領域の技術のアナロジーで課題解決するってのかっこいいですね。
- SNS等ではあんまり目立ってなかった(?)が、量子化が効きやすくなるという点も素晴らしいですね。
- 従来のTransformerで利用していたハイパラをそのまま利用して、AttentionだけDifferential Attentionにアップデートするので問題ないということが実験的にも、理論的にも証明されていて素晴らしい。すぐに使える。