one-hot ベクトル [ディープラーニングの文脈で]

1. one-hot ベクトルとは [概要]

one-hot ベクトル とは,K次元ベクトルのうち1つの次元だけが1であり,他の次元の値は全て0であるベクトル表現である.クラス識別の出力の「Kクラス分類の正解ベクトルと」して,機械学習モデルにおいてよく用いる表現である.また,自然言語処理では,ある言語の語彙K個 (※ K= 数千〜数万)のうち,どの1つの単語・トークンに相当するかを示す際にも,One-hot 表現のベクトルはよく用いられる

この記事では,ディープラーニングにおいて,どのモデルの入出力のどこに,one-hotベクトルを用いるかを,簡潔に整理することを目的としたい.それを,コンピュータビジョン(3.1節)とNLP(3.2節)の使用を,いっぺんに整理するかたちで示したい.2分野横断的にまとめるのは,Transformerモデルが,ビジョンのNLPの双方で頻繁に研究されるようになっているからである.Transformerは,入力でもSoftmax出力でも,Kクラストークン表現を用いる.

2節では,「one-hotベクトル と Kクラス-ラベル間の変換」を,基本事項としてまず説明する.それを踏まえて3節では,one-hotベクトルの入力から,低次元表現へ「埋込み」or 「符号化」する様子や,逆に識別器出力でone-hotベクトルを出力する様子を,コンピュータビジョン(3.1節)・NLP(3.2節)の例を通して,統合的に整理したい.

1.1 入力として用いる場合:低次元表現へ符号化・埋込みを行う.

高次元のone-hotベクトル入力は,埋込み層や位置符号化などで,低次元表現ベクトル(100次元~多くとも1000次元ベクトル程度)に変換したのち,マルチモーダルCNN終盤の識別層や,RNN, Transformerなどのモデルへ入力することが標準的である.

クラス数Kの値が,数千~数万語彙のオーダーである自然言語処理のone-hotベクトルや,画像入力CNNの順伝搬終盤で得られる特徴(例:終盤層のGAP前の4096次元ベクトル)を,そのあとの識別や予測を行うニューラルネット層や機械学習モデルへ入力する時のことを考える.

それらの4000~数万次元もの高次元ベクトルを,そのまま予測するのは計算負荷的にもモデル的にも厳しい.よって,識別性能が高い「低次元埋込み表現」へ,あらかじめ次元削減や単語埋込み・埋込み層などで変換しておくことが欠かせない.

※ one-hotベクトルを入力とした話ではないが,1 x 1 畳み込み層や,ネットワークのボトルネック設計といった話も動機はこれと同じであり,「低次元化」とそれによる「計算負荷削減および識別性能のよい表現の学習」である.

2. クラスラベルとone-hotベクトルの間の変換

one-hot符号化は,one-hot ベクトル$\bm{y} \in \mathbb{R}^K$ と,それに対応するクラスラベル$y$の間で,相互変換を行う:

  • one-hot エンコーディング:元のKクラスのラベル表現をもとに,$i=K$次元目の要素だけを1にした,K次元のone-hotベクトルを作成する.
  • one-hot デコーディング:モデルが推定したK次元 one-hot ベクトルをargmaxすることで,そのクラスが指すクラス番号$i$を確定する.

この2つの操作を用いることで,各種の機械学習モデルや,ディープニューラルネットワークにおいてK-クラス入力・出力の双方に取り扱いやすい「one-hotベクトル表現」を,データセットの入力と出力から得ることができる.

3. ビジョンとNLPでのone-hot表現の使用

ここまでは,既刊の機械学習むけ参考書や授業で学べる一般的な話であった.それを踏まえて,この節では,「one-hotベクトル表現」のどのネットワークの入出力で,どのように用いられるかについて,ビジョンの例(3.1節)とNLPの例(3.2節)の双方での,基本的な使用どころについて整理したい.

とりわけ両分野で用いるTransformerでの入出力に,One-hot表現がどのように組み込まれているかを理解することを,3節の最終目的としたい.

3.1 CNN画像分類モデルの出力

画像認識CNNの出力では,(ImageNet-1Kの)1000クラス識別や,物体検出ネットワークのクラス識別ヘッドでは,softmax関数を用いて,one-hot ベクトル(K=20~50クラス程度)を予測する.

ImageNet データセットを用いて,1000クラス物体画像分類を行うCNNを学習することを考える.学習の際は,ImageNetのクラスラベルから,one-hotベクトルによりK次元のone-hotベクトルを出力する.

一方,学習済みのCNNで予測をおこなうと,出力のsoftmax層では,K=1000次元の確率ベクトルを出力する.この出力ベクトルは,one-hotベクトル的な,確率ベクトル表現となっている(※ 予測した1000次元出力ベクトルは,様々なクラスに0以上の確率値が予測されており,正確にはone-hot表現になりきっていないことには注意).

この出力ベクトルをargmaxすると,最も高いクラス確率として「i 次元目の値 = クラス i」を確定でき,最終的なクラス予測結果を出力することができる(※ ここも,argmaxを適用して最大確率クラスを抽出しているのであって,ベクトル全体をone-hot表現に変換するわけではないことに注意).

3.2 NLPモデルの入力と出力

NLP向けの,主な深層学習系ネットワーク(例:双方向LSTM, RNNLM, seq2seq with attention, Transformerなど)の出力では,各フレーム(t)は,Kクラスの単語・トークンを,出力softmax層により,K次元one-hot表現の確率ベクトルを予測する.

一方,これらのモデルの入力においては,単語(or トークン)のK次元one-hot表現を使うが,こちらは埋込み層 or 位置符号化(Transformer)を用いて,低次元ベクトルへと変換(埋込み)を行ったのち,その低次元埋込み単語orトークンのベクトルをもとに,LSTMやTransformerでの毎フレームの処理を行う.

自然言語処理では,Bag-of-featuresや,単語分散表現ベクトル(word2vec, Glove)・などが登場する以前は,入力や出力の単語表現には,生のK次元 one-hotベクトルを用いていた.Kの数が数万以上の辞書だと,語彙数爆発してしまい計算・記憶量的負荷も高くて予測モデルを組むのが厳しくなる.そこで,K=1000程度以下に圧縮できる,(疎な)Bag-of-Features 表現や,それよりも更に次元数が低くできて,なおかつベクトルも密な(Bengio以降の)単語分散表現やword2vecへと,移行していった.

コンピュータビジョンでも,AlexNet登場以前の画像認識では,画像認識特徴をBag-of-Visual-Wordsで符号化していた時代は,上記のNLPと方向性がほぼ同じである.SVMへの入力ベクトルを,先に識別性能の良い低次元ベクトルへ変換しておきたいので,「k-mensによるコードブック化を用いたBag-of-Visual-Wordsベクトルへの変換」や,「多様体埋込みと連携した画像ベクトル符号化(FisherベクトルやSuperベクトル)」が,よく用いられていた ( この時代について詳しくは,原田先生の「画像認識」の4章『コーディングとプーリング』などを参照).

3.2.1 NLPモデルの出力:one-hot表現 (softmax確率ベクトル)

NLPで用いる予測モデルにおいて,LSTMのRNNLMでは,Kクラスの単語・トークン分類の結果としてOne-hotベクトル表現をsoftmax層で出力する.

seq2seq登場以降,LSTMを2個つないだ系列対系列変換モデル を,機械翻訳などで用いるようになって以降も,Decoder側において各フレームで出力するのは,Kクラスsoftmax出力のままである.系列対系列変換モデルの主役がTransformerになって以降も,Transformer-Decoderの各フレームにおける出力は,相変わらず(語彙中トークンの)Kクラス識別softmax出力である.

3.2.2 NLPモデルの入力:one-hot表現→低次元ベクトルへの埋込み

また,seq2seq with attentionでは,埋め込み自体も埋め込み層として学習する.また,Transformerだと埋め込み層ではなく,決め打ちのサイン関数による位置符号化を用いる(※ ただしNLP以外でのTransformer応用では,トークン埋め込み層を学習するケースも多い).

ちなみに,現在では,seq2seqの「埋め込み層」や,Transformerの「トークン」が,単語やサブ単語トークンの表現への入力埋め込みを担当している.もっと言えば,『(言語)変換モデル全体とともに,単語表現も同時に学習する時代』になっている.ただし,同じ単語はいつも同じベクトル値で固定あった,コンテキストフリー(context free)なword2vec・Glove時代の単語モデルと異なり,近年の事前学習言語モデルでは,周辺のトークン群のコンテキストに沿って各トークンのベクトル値が変化するコンテキスト(contextual)単語表現であることには注意である(この記事はOne-hot表現の記事なので,この話はこれ以上論じない).

3. まとめ

one-hotベクトル表現について,ディープニューラルネットワークの始点で紹介した.3節でビジョンの視点とNLPの始点で,それぞれモデル入出力のどこでどの場合にone-hot表現を用いるかを整理した.

モデルの出力としては,one-hot表現は,特に「softmax出力」として,CNNやRNN,Transformerなどで用いられる.要は「クラス識別のsoftmax層で,one-hot表現を用いる」ということである.

また,モデルの入力としては,かつてNLPのディープラーニングにおいて,単語埋込み(word2vec系)でone-hot表現が用いられていた.その近年の発展型である「Transformerによる系列対系列変換」や,「BERTなどの事前学習言語モデル」においても,入力トークンにOne-hotベクトル表現が用いられ,埋込み層もしくは位置符号化で,低次元のトークン表現へと写像することを整理した.

逆に言うと,コンピュータビジョンでは(NLP発の)Transformer隆盛になってきたことで,またBag-of-wordsでSIFT局所特徴をコードブック化した時と同じく,またも「Region 入力や局所パッチ入力を,トークン化 = code book化する」というNLPの後追い展開になっっているとも取れよう.まさに「歴史は繰り返す」である.

関連記事

関連書籍

References

参照外部リンク