Open GENZITSU opened 1 year ago
連日界隈を賑わせているChatGPTの学習方法方をその背景から丁寧に説明している記事。
コアとなるのはReinforcement Learning from Human Feedbackというテクニックで、Deep reinforcement learning from human preferencesというopenAIとgoogleの論文で提案されたものである。
その心は現在の状態価値を判断するpredictorを人間のFBによって学習させるというもので、具体的には2つの行動結果パターンを提示しより価値の高い方を人間に選んでもらうというもの。
この方法は評価者のバイアスや評価者をエージェントが騙してしまうリスクもあるが人間が設定した目的関数よりも良い性能を、少ないステップで到達することが可能。
これを大規模言語モデルに応用したのがInstructGPTでTraining language models to follow instructions with human feedbackというopenAPIの論文で提案されたもの。
ここでは以下のように事前に用意した対話データで学習したモデルにいくつかの回答候補生成してもらい、その回答候補を人間が順位付けしたものを元に報酬予測モデルを学習させるというアプローチをとっている。
こうすることで、通常のGPT3よりも性能も高く安全性の高いモデルを作成できるとのこと
これを対話に特化させたのがchatGPTということになる。
chatGPTにはいくつかの改善点が指摘されているが、これも今後改善さえれていくはずである。
人間のFeedBackを強化学習に取り入れる発想が天才的だし、そっちの方が学習が早く進むというのも驚きである。
Pytorch 2.0に追加された機能 torch.compile
を用いてbertの学習が1.2倍ほど高速化するよという紹介記事
huggingfaceではTrainingArguments
にtorch_compile=True
を渡すことで実現できる
Our absoulte training time went down from 696s to 596s. The train_samples_per_second value increased from 43 to 50. The f1 score is the same/slighty better than the training without torch_compile.
現在はベータ版だが2023年の前半ごろに正式版がでるとのこと。
Pytorchの公式では51%ほどの向上とされていたが、何か学習の方法ちがうのだろうか
NeurIPS2022にて発表されたテーブル・画像・自然言語を含む57種類の異常検知データセットに対して30種類のアルゴリズムの性能を評価した論文の公式レポジトリ
彼らの研究によれば、教師なし学習で常に性能の高い手法はなく、たとえ1%だとしても教師の情報は重要であるというらしい
- surprisingly none of the benchmarked unsupervised algorithms is statistically better than others, emphasizing the importance of algorithm selection;
- with merely 1% labeled anomalies, most semi-supervised methods can outperform the best unsupervised method, justifying the importance of supervision;
MITライセンスなのが嬉しい
Yahoo アプリに搭載されているスポット検索で利用されている画像認識モデルの作成方法とシステム構成を紹介しているブログ
プレフィルター処理、画像の特徴量抽出処理、認識処理の3つで構成
プレフィルター処理は小規模な二値分類モデルを用いてクエリ画像がランドマーク認識向けの画像かどうかを判定 特徴量抽出は特徴量モデルを用いて画像から512次元の特徴量を抽出 認識処理では、抽出した特徴量をクエリとして、予め作成してある特徴量インデックスを検索し、検索結果のTop-Kから最終的な認識結果を決定
プレフィルターモデルとして、入力された画像がランドマークかどうかを2値分類するモデルを開発
学習データには、ランドマーク画像としてGoogle Landmarks Dataset v2を抜粋したものと、ランドマークではない画像として内製したデータセットを組み合わせたものを利用
timmのfinetuningにより実装
モデルの学習にはGoogle Landmarks Dataset v2をベースにクリーニングを実施したデータセットとYahoo!ロコの画像等から構成される内製のランドマークデータセットを利用しています。
モデルtimmのeca_nfnet_l2のpooling層とクラス分類層を外して利用し、CurricularFaceLossを使って学習 (ArcFaceLossよりもよかったとのこと)
CurricularFaceとは
学習初期は簡単なサンプルに重み付けを行い、後半になるにつれて難しいサンプルに適応的に重み付けをしてくロス
対象ランドマーク以外のランドマークが同時に写り込んでいる画像 (東京タワー、富士山など)への対応
mage Matchingのモデルを用いて他のランドマークが写り込んでいる可能性が高い画像を除去しています。まず重要度が高いと考えられる国内の有名なランドマークを1,000クラス抽出し、それらに対して人手でインデックスする画像を30枚程度選択
Image MatchingにはkorniaのLoFTRを利用しています。比較したいくつかの手法の中で、この用途に関しては、LoFTRが精度、速度の両面で優れていました。
NVIDIAのtritron inference serverを利用
ちなみにtritron inference sercerは1つのGPUで複数のモデルを同時に実行できる機能を備えている。
画像検索システムの作成方法として参考になる。
ユーザーのサイト回遊行動をもとにアイテムのベクトル埋め込みを行うitem2vecの精度を、botのアクセス履歴を除外したことでで向上させた事例の紹介
サイト内の人気ブランドとマイナーブランドの類似度が不可解に高かったことから発覚し、マイナーブランドにアクセスしているユーザーの履歴をみると一定間隔で商品を遷移するbotの存在が判明したとのこと
前処理は大事という良い例だが、気づいたのもすごい
Flaskに標準搭載されているプロファイラーを用いて、各エンドポイントの処理時間のボトルネックを把握する方法を紹介
SNAKEVIZを用いることで、より直感的に可視化することが可能
flask標準にそんな便利なプロファイラーがあるなんて知らなかった。
道路標識検出パイプラインの高速化のために入力画像を効率的に縮小する方法を模索している記事
画像を小さくした時の精度劣化が抑えられることを発見
ただし、他の箇所を切り取ってみると精度が逆に下がるという事象に遭遇
HSV領域で以下のように抽出し、標識がなさそうな部分をカットする
青:100 ≦ H ≦ 195、90 ≦ S ≦ 255、100 ≦ V ≦ 255 赤:0 ≦ H ≦ 10、64 ≦ S ≦ 255、50 ≦ V ≦ 255
色抽出を行う処理に逆に時間がかかる & 精度自体は低下
Cutmixの要領で一枚の画像から不要な領域を削除し、元のアスペクト比を保つように貼り戻す
精度自体は低下してしまった
画像サイズの縮小に関してここまで色々アイデアが出せるのがすごい
教師なしクラスタリングによる投手の特徴分析をこれでもかというレベルまで掘り下げている
中でも目を引いたのはあるクラスターのある特徴量の平均値が他のクラスターの平均値とどれくらい異なるかを可視化したvolcano plotという分析手法
そして特徴量の大きさを比較できるように並べた以下のプロット
行われている分析はそこまで高度なものではないが、ここまでクラスタリングの分析を掘り下げている記事も珍しい
Viterbiアルゴリズムに基づいた高速な形態素解析器vibratoのpythonバインディングが公開
作者によるとmecab-python3の1.9倍ほど高速に動作するとのこと
# from https://github.com/daac-tools/python-vibrato
import vibrato
with open('path/to/system.dic', 'rb') as fp:
dict_data = fp.read()
tokenizer = vibrato.Vibrato(dict_data)
tokens = tokenizer.tokenize('社長は火星猫だ')
len(tokens)
#=> 5
list(tokens)
#=> [Token { surface: "社長", feature: "名詞,一般,*,*,*,*,社長,シャチョウ,シャチョー,," },
# Token { surface: "は", feature: "助詞,係助詞,*,*,*,*,は,ハ,ワ,," },
# Token { surface: "火星", feature: "名詞,一般,*,*,*,*,火星,カセイ,カセイ,," },
# Token { surface: "猫", feature: "名詞,一般,*,*,*,*,猫,ネコ,ネコ,," },
# Token { surface: "だ", feature: "助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ,," }]
期待
クニえもんさんがNLPコンペに頻出するテクニック達を一つに図にまとめたもの
初耳だったのは以下
めちゃ網羅的に整理されていて良い
DoWhyとEconMLによる因果推論の実装
Microsoftが開発している因果推論用PythonライブラリDoWhyとEconMLを用いて、どのように因果推論を実装するかを解説したスライド
因果推論そのものについての解説もありとてもわかりやすい。
スライドはこんな感じ
コメント
著者はzennにて因果推論に関する解説記事のシリーズを書かれているのでそちらも参照したい。
出典
DoWhyとEconMLによる因果推論の実装