end-to-end学習 (端対端学習)

1. end-to-end 学習 (端対端学習) とは [概要]

end-to-end学習 (端対端学習) とは,ディープラーニングにおいて,1つの問題やタスクに対して,ネットワーク中の入力層(端)から出力層(端)までの全の重みを,いっぺんに学習することを言う.逆に,1つの問題を,2つ以上のモデルで手分けして,それぞれ個別にモデルを学習し,それらを連結して力を合わせて解く場合は,End-to-End 学習と言わない.

end-to-end 学習は,日本語圏だと,たまに「一貫学習」と翻訳されることがある.しかし先に使われていた「end-to-end」から派生した「A-to-B 学習」という呼び名 (1.3節) と統一する形をとり,「末端対末端学習」と翻訳したい.

※「端対端学習」の読み方は,「はし・たい・はし」学習としておく

ただし,この見慣れない「端対端学習」の呼びかたを使いすぎると,慣れないと読みづらいと思うので,しばらくは,英日ミックスしたend-to-end 学習 を基本的に用いる.そして,end-to-end 学習が可能なネットワークのことをend-to-end モデル (端対端モデル)end-to-end ネットワーク(端対端ネットワーク)と呼ぶ.

※ 「一貫(consistent)」と翻訳すると,Cycle GANの 循環一貫性損失(cycle consistency loss)のような意味あいに聞こえてしまうと思う.

1.1 end-to-end 学習という呼び方が登場した経緯

そもそもなぜ,このend-to-endという呼び名が登場したかについて経緯を述べたい.初期の時代(特にAlexNet登場以前)のディープラーニングでは,大規模モデルを深い多くの層数で,一気に学習しきるのは不可能で,とても難題であった.その当時は「とても深いネットワークは学習できるようにはなりそうにないぞ…」という壁に,ぶち当たっていた時代である.

CNN初期の頃は,(精密調整をしたとしても)層の深い大規模ネットワークを,うまく学習しきる技術がまだ確立されていなかった.従って,序盤の(1) 特徴抽出ネットワークと,終盤の(2)予測モデルを,分割して,それぞれ個別に(なんとか)学習することが普通であった.例えば物体検出の初期モデルのR-CNN(2014)では,2ステージ処理のうち,前半の画像特徴抽出モデル(CNN)と,後半の予測モデル(SVMと線形回帰)を,個別に学習していた.

その後,ResNet登場までは,層数を多くに増やそうとしても,大規模データに対してスケール化できなかった.ImageNet事前学習済みのCNNを,目標タスクのデータセットにファイン・チューニング(fine-tuning)することで,やっと予測精度がそこそこ良いCNNが学習できていた(例:VGGnet をバックボーンに用いる,Faster R-CNNなど).

しかし,2015年,バッチ正規化ResNetの登場のおかげで,深いCNNもきちんと学習できるようになった.これまでは分割して個別にモデルを学習していたタスクでも,結合した大きな1つのモデルを,一気にend-to-end学習でうまく学習できるようになった (ただし,まだ直接スクラッチの学習するのではなく「事前学習→精密調整」で行う).この時期に,当初の「あまり深いネットワークは学習できなさそうだぞ」という暗い未来予想は外れることになり,かなり深い大規模ネットワークでも,end-to-end学習できるようになっていった.

1.2 各タスクでの例

1.2.1 物体検出での例

例えば,先ほども例を出した,物体検出Faster R-CNNシリーズ 3部作が,合体モデルとして発展していき,end-to-end化していった例である. Faster R-CNNは,前半ステージのRPN(領域提案ネットワーク)も,後半ステージのFast R-CNNも,end-to-endで同時学習する.

1.2.2 Vision-Languageで,2モーダル両方から入力を受け取る例.

また,Vision -Language などマルチモーダル・クロスモーダルな問題でよくある「2モーダルの両方からを入力受け取るタスク」についても,学習手順の典型例を述べておきたい.Image GroundingやImage-Text Embeddingなど,画像EncoderもテキストEncoderも用意する問題での,ディープネットワーク構造を例として考える.

このマルチモーダルフュージョン的な構成では,以下に述べるように (1)2つのEncoderは,事前学習済みからフリーズさせて精密調整しないパターン (2) Encoder2つも精密調整するパターン,の2つがある

※ (1), (2)のどちらの方が良いかは時と場合によるので,2通り存在することを紹介するだけに留める

(1) Encoder2つはフリーズするパターン

入力画像から画像表現をEncodeするCNNバックボーンや,文章表現を計算するLSTM・BERT Encoderは,それぞれ事前学習済みの物を,重みをフリーズしてそのまま用いることも多い.

この場合,画像ブランチと言語ブランチで計算した2表現をフュージョンし,最終出力を予測する後半ネットワーク部分だけを学習することになる.

(2) Encoderも精密調整するパターン

逆に,前半2つのEncoderネットワークはフリーズせず,画像CNNやText埋め込み層も精密調整(fine-tuning)する場合は,全体でend-to-end な学習を行うパターンであると言える.

1.3 「end-to-end 」から派生した呼び方の例

seq2seqの論文で初めて登場した「系列対系列変換(sequence-to-sequence translation)」も,end-to-end 学習の呼びかたに習って造られた用語である.end-to-endは学習の入出力全体一貫性であるが,系列対系列変換では,推論時の「入力(系列)-to-出力(系列)」がA-to-Bのイメージで同じであることによる.同じく,pix2pixやCycleGANから始まった,「画像対画像変換(Image-to-Image translation)」も同様であある.

つまり,A-to-B と端から端に学習する場合にならって,データAからデータBに変換する場合も,ディープラーニング業界では,(一般化されて)「A-to-B 変換」といずれも呼ばれるようになった.

2. まとめ

以上,簡単にであるが end-to-end 学習 について,登場した過去の状況(1.1),モデル例(1.2),および派生した呼び名の例(1.3)について紹介した.

関連書籍