Machine Learning
Transformer
- 2017年 Alphabet (Google) 社 Transformer発表 (DeepLarning のモデル)
The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that include an encoder and a decoder. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.
- Recurrent Neural Network (再帰型(リカレント)ニューラルネットワーク:RNN)
- 自然言語処理の分野において使われていて、文脈を読むのに利用されていました。
- リカレントニューラルネットワークは後ろの単語を記憶して後続につないでいくので文脈を読み解くのに便利でしたが、あまりにも長文になると精度が下がってしまう点や時系列での学習になるので並列学習に向かず大規模データを学習するのには多大な時間がかかってしまうという課題がありました
- Convolutional Neural Network (畳み込みニューラルネットワーク:CNN)
- 従来の画像認識を解くタスクでは畳み込み層という特殊な層を用いた畳み込みニューラルネットワークという手法が主要でした。
- 畳み込み層とは3次元の画像情報を1次元に直すことなく位置情報を保持して次の層に渡すアプローチです。
- Attention層自体はTransformer登場以前から存在しました(Attention層は2015年に発表)
- RNNのあまりにも長文になると精度が下がってしまう課題を解決するためにAttention層が使われていた
- 簡単に言うと、「文の中で重要な単語には重み付けをして渡す」というもの
- OpenAI社が2020年に発表したScaling Law(スケーリング則)の論文により、Transformerの性能はパラメータ数、データセットサイズ、計算予測のべき乗に従うことが示されました。
Scaling Laws for Neural Language Models
Transformerによる学習処理の並列化(Multi-Head Attention)によって、自然言語学習の効率が大幅に向上しました。
これがBERT-LargeやGPTなどの高性能なLLMモデル登場の礎になっています。
Encoder, Decoder
- エンコーダーで処理しやすいベクトル形式にしてからそれをデコーダーでアウトプットに変換しています
Positional Encoding
- 単語の相対関係などをモデルに認識してもらうための処理
- RNNでは時系列的に学習していくので相対関係・位置関係が理解できましたが、リカレント層がなくなった構成だと理解できません
- 位置関係理解のために使われている
Masked (Multi-Head) Attention
- Multi-Head Attention : 同時に複数のAttention層の機能を有した層
- Attention層では単一の単語に注目していましたが、Multi-Head Attention層では複数の単語に注目して学習することが可能
Transformerの構成
エンコーダーで入力された重み付け単語ベクトルに対して、デコーダーでは特定の単語が隠された状態でそれより前の文章の重み付けベクトルが入力され、これらの情報から隠された単語には何が入りそうか確率値を出力するのが、このTransformerの構成です。
BERT (Bidirectional Encoder Representations from Transformers)
- BERT (Bidirectional Encoder Representations from Transformers) はTransformerの派生モデル
- 2018年にGoogleが発表し、2019年に英語版のGoogle検索エンジンに搭載されました Googleは2018年10月11日に論文を公開し、Google検索のアルゴリズムに2019年10月25日に適応
- Googleはより長く複雑な文章を理解できるようになり、文脈を読み取ることができるようになりました
BERT is conceptually simple and empirically powerful. It obtains new state-of-the-art results on eleven natural language processing tasks
LoRA (Low-Rank Adaptation)
- LoRAはファインチューニング後のモデルの品質を下げず、省時間、省メモリの手法を実現した軽量化手法
- Microsoftが2021年に発表した論文「LoRA: Low-Rank Adaption of Large Language Models」
LoRA: Low-Rank Adaptation of Large Language Models
- 機械学習(特に自然言語処理の分野)ではパラメーター数が大きく、ファインチューニングで全てのパラメーターを再学習するために多くの時間とコストを費やします。例えば GPT-2 では15億ほどのパラメーターがありそれらをすべて再学習させるのにはかなりの時間がかかります。さらに GPT-3 ではパラメーター数が1750億に上り、これを全て再学習させるのは現実的とは言えません。そこで多くの既存の手法として、パラメーターの一部のみを学習させることや、何か外部のモジュールによって学習(HyperNetworks のような)させるというものがありますが、これらは省時間、省コストをしている代わりに、モデルの品質低下が起こってしまいます。(多くの場合、学習効率と品質の間はトレードオフの関係である)。
- このような問題に対処するためにいくつか( 大きく2 つ 、① : Transformer に Adaptation 層を追加する、② : 入力のLayer activision の最適化(?))の解決策が出ており、今回はその中でも**「Transformer に Adaptation 層を追加する」**という手法について焦点を当てます。
- LoRA (Low-Rank Adaptation) では Transformer の層ごとに学習可能なランク分解行列(パラメーター)を挿入します。この新しく追加したパラメーターを学習することによって学習するパラメーター数を1万分の1にすることができ、必要な VRAM を3分の1にできます。これによって大幅な省時間、省メモリが可能となます。さらにファインチューニングしたときのモデルの品質が LoRA を使わなかった場合に比べて大きく劣化しないというのが特徴です。
- 実際に 自然言語モデルをファインチューニングするとき、勾配法を用います。学習途中では以下の式を繰り返し使い、条件を達成するためのパラメーター Φ をいい感じに調整する(最適化)ことが目標です.最終的に初期モデルのパラメーター Φ_0 にパラメーター増分(差分) ΔΦ を追加し、Φ_0 + ΔΦ となります。
- しかし、ただ**「Transformer に Adaptation 層を追加する」**だけでは推論時の入力から出力を出すまでの処理に時間がかかりすぎてしまうことがあります(レイテンシー)。というのも機械学習では大量ののパラメーターを扱うため GPU を使用した並列処理がなされています。これによって(全部 CPU で計算するより)比較的短時間で処理ができます。しかし Adaptation 層 は並列処理ではなく逐次処理のためいくら並列処理が早く終わってもこの Adaptation 層 の処理を待たなくてはいけないため、結果的にレイテンシーの増加につながってしまいます。
【インターンレポート】6.7B日本語モデルに対するLoRAチューニング
AI を自分好みに調整できる、追加学習まとめ ( その5: LoRA)|teftef|note
Flash Attention
GPU と FlashAttention をちゃんと理解したい
Flash Attentionを使ってLLMの推論を高速・軽量化できるか? - Qiita
Fine Tuning
Adapter
基盤モデルのような大きな事前訓練済みモデルに対し、小さなネットワークを差し込み、その部分のみ訓練することで任意の訓練データに対して適用させるものです。通常のファインチューニングとの違いは以下の通りです。
- Adapter
- 追加小さなネットワークのみ訓練、元モデルは訓練しない
- 訓練速度が速い
- 元モデルはそのままなので、破滅的忘却に悩まされるリスクが減る
- ファインチューニング
- モデルの全体ないし、末尾の特定層のみ訓練
- 特に元モデルが大きくなると、訓練速度がAdapterに比べると遅い
- 元モデルを変えてしまうので、破滅的忘却の問題が起こる
画像生成では、Stable Diffusionを特定データに適用させる際によく使われるLoRAがこのAdapterの一種です。LoRAの正式名称は「LoRA: Low-Rank Adaptation of Large Language Models」(元論文)とあるように、AがAdaptationで、元はNLPの(LLMの)論文です。Stable Diffusionで使われているのはこの応用というわけです(図はLoRAの論文より)。
Stable Diffusionの特定データセットへの適用というと、以前はDreamBoothが使われていましたが、LoRAのほうが訓練が速く、少ないGPUメモリでできるというのは、画像生成では経験的によく知られています。Redditのこの図がわかりやすいですね。
図のように、Stable DiffusionにおけるLoRAとは、拡散モデルに対して追加のレイヤー(Additional Weights)を挿入し、そこのみ訓練する(Gradient Update)するというものです。その何の通り、Adapterの代表例といえるでしょう。
CLIPもFew-shotや教師あり学習の文脈から活用したいという需要があります。よく使われるものでも600MB程度(ViT-B-32)、大きなものは10GBと膨大なサイズなため、ファインチューニングするのが大変です。また、CLIPとは膨大な事前訓練から細かなコンテクストを学習しているため、ファインチューニングをしてしまうと、破滅的忘却により学習した細かなコンテクストを忘れてしまうという問題があります。これに対してはいくつか解決法が考案されていますが、Adapterを使うというのが1つの大きな流れになっています。