溜池トランスフォーマー【第1話】

お気付きの点がありましたらご指摘いただけますと幸いです。

第1話のまとめ

  • トランスフォーマー内のエンコーダ層の連なる箇所を交互に乱数初期化のまま固定したとしても、さまざまなタスクや事前学習モデル(BERT,RoBERTa)で性能が出た/向上したそうです。無論、訓練コストやモデルサイズ面でも有利です。乱数にしたエンコーダ層は乱数のシードだけで復元できますから。このトランスフォーマーはリザバーコンピューティングとみなせることからリザバートランスフォーマーと名付けられました。
    • トランスフォーマー内の層の一部を乱数初期化のままにする発想はリザバーコンピューティングから得られますが、Random Projection が識別性能を高めるのでランダムな行列は興味深いというところにも動機をおいているようです。
  • 乱数初期化のまま固定するエンコーダ層のアーキテクチャは何もトランスフォーマーでなくとも FFN, CNN, RNN でもよいのでそれらも試されていますが(特に FFN)、状況によるようにみえます。計算効率を含めると FFN がよい場合もありそうです。
  • "backskipping" なる手法を導入し訓練の効率化を図っているようですが、詳細は未確認のためわかりません。
f:id:cookie-box:20211106181951p:plain:w120
f:id:cookie-box:20211229152003p:plain:w60

ACL 2021 に「リザバートランスフォーマー」というタイトルがありました[1]。気になってみると、「トランスフォーマーの層の一部を乱数で初期化した状態から更新しなくても性能が出る」と主張しているんです。むしろ「性能が向上する」とまで……そしてそのインスパイア元は「機械学習分野で伝統ある『リザバー』」であるというのですが、「リザバー」とは何ですか?? 寡聞にして存じ上げません……。

f:id:cookie-box:20211229162343p:plain:w60

リザバーコンピューティング[2]の「リザバー」だね。リザバーコンピューティングでは入力値を固定のランダムな非線形写像でとにかく高次元にする。その高次元な中間層――リザバー――から出力層への変換をこそ学習する。中間層では何も学習せず、出力層の学習に委ねるんだね。

f:id:cookie-box:20211229165400p:plain:w60

なるほど。「後の人がちゃんと見てくれるだろうからヨシ!」ということですね。

f:id:cookie-box:20211229162343p:plain:w60

それ後の人がちゃんと見てくれないやつじゃないか。それで、今回トランスフォーマーの層のうちいくつかを乱数で固定するんだろうけど、固定した層を「リザバー」ととらえることもできるといっているね。まあそこからリザバートランスフォーマーと名付けたんだろうし。元々 "reservoir" は「溜池」という意味だけどね。

f:id:cookie-box:20211229165400p:plain:w60

「溜池」……ということは、東京メトロ溜池山王駅はリザバーコンピューティングの先駆であったということに

f:id:cookie-box:20211229162343p:plain:w60

ならないよね。

f:id:cookie-box:20211229151958p:plain:w60

[1]のイントロダクションでは、トランスフォーマーの効率化はテクノロジー民主化につながるのだと意気込まれていますね。だから一部の層を乱数初期化のまま固定するぞと!? 単刀直入に何をやったかからきましたね……なぜそうするかの心は続きに綴られているのでしょうか。第3パラグラフに色々ありますが、その最後にはトランスフォーマーの理論的な理解にもつながるのだともありますね。確かに、乱数初期化のまま固定してもよい層とそうでない層がどれなのか気になります。ときに、分散学習やエッジコンピューティングも容易になるというくだりで「1つの数を伝送するだけでよいからだ」といっているのはどのような意味でしょうか? 1つの数とは??

f:id:cookie-box:20211229162334p:plain:w60

その前の文と合わせると「乱数のシード」だと思う。分散学習でもエッジコンピューティングでも、訓練済みネットワークを他のマシンにデプロイするとき、普通はネットワークの各層についてその層のパラメータの次元数だけの数値を伝送する必要がある。でも、その層のパラメータが単に乱数値なら乱数のシードを送るだけでよい、といっていると思う。まあ乱数値なら何も伝送しなくてよいじゃんって気はするけど、実務的にシードは同期しないとマシンごとに推論がぶれるからそれを強調しているのかなあ……。

f:id:cookie-box:20211229152003p:plain:w60

なるほど? 第4パラグラフは、引き続き乱数初期化の理由付けですね? 「random projection は古くから研究されている」……random projection って何ですか? ランダムな射影??

f:id:cookie-box:20211229162343p:plain:w60

プレ処理でやっているのをみるよね。scikit-learn にもあるし[3]、特徴量エンジニアリングの本に載っているんじゃないかな……あっ載ってないわ。まえがきに「本書に含めませんでした」ってあった。

f:id:cookie-box:20211229152003p:plain:w60

載っていなかったんですか……まあ scikit-learn のドキュメントをあらためると、random projection とは次元削減の目的でやるものなのですね? いくつかの流儀で生成したランダムな行列で元データを変換することで次元削減すると。それで元のデータにおける点どうしの距離がある程度(?)保てることが保証されていると……興味深いです。しかし、この第4パラグラフではまず Cover の定理――高次元に非線形写像すると線形分離できるようになる可能性が高い――に言及していますね? 元のデータの次元を減らしたいのか増やしたいのかどちらなんです?

f:id:cookie-box:20211229162334p:plain:w60

あー、scikit-learn のページを示したのが悪かったけど、たぶん random projection には次元を減らすという含意はないよ。次元を増やす方向でも random projection。次元を増やす方向のモチベーションは次元を増やして活性化すると線形分離可能になる可能性が高い(だって Cover の定理があるから)ということだと思う。ニューラルネットの中間層がそんなものだよね。

f:id:cookie-box:20211229152003p:plain:w60

はあ……確かに、続きにはうってかわって次元削減の話がありますね。雑にまとめると「random projection、次元を増やしても次元を減らしても面白い」ということでしょうか。とにかくランダムな行列は素晴らしいものなのですね。いまいち腑に落ちてはいませんが……その次の random kernel methods とは? これも次元を減らすか増やすかするのですか?

f:id:cookie-box:20211229162334p:plain:w60

これは非常にサイズが大きいデータにカーネル法を適用するときの計算量削減手法のはず[4]……データサイズが大きいとグラム行列が巨大になるよね。だからグラム行列は一旦放棄して、カーネル関数をその逆フーリエ変換(Bochner の定理によりできる)のフーリエ変換の形にして、フーリエ変換を周波数のサンプリングして端折るみたいなやつ……たぶん。直接入力データの次元を減らすとか増やすとかではない。周波数空間全体の積分をサンプル平均で近似するという話だから。サンプル点たちがランダム行列だと思うけど、この文脈ではランダム行列がよい性質をもつというより Bochner の定理が便利という話のように思えるけどわからないな……。

f:id:cookie-box:20211229152003p:plain:w60

ランダム行列を売り込まれましたが、今回は次元削減やカーネル法をしたいわけではないので、Cover の定理が一番関連しているのでしょうか? ランダムな写像であってもそれが非線形で次元を増やしているならば表現力に寄与しているぞということですよね?? であれば次元を増やす層はランダム固定でもよい??? ……第5パラグラフにいきましょう。ここはリザバーコンピューティングの話ですね。これは今回の研究の動機として一番わかりやすいですね。層をランダムにしてその後の学習に委ねる手法の直接的な先例なわけですから。その次のパラグラフは……言語処理の文脈でも「文章をランダムに埋め込んでもクラス分類などさまざまなタスクで性能が出る」という研究があったのですね? しかしそれらはトランスフォーマーではなかったようですね。

ともかく、イントロダクションの最後の部分をかいつまむと、リザバートランスフォーマーの論文の内容は以下のようなものですね。

  • リザバー層でさまざまなタスクの汎化性能が向上したし、pre-trained model(BERT,RoBERTa)の性能も向上したと。
  • 異なるタイプ(RNN 式や CNN 式なども含む)のリザバー層を試した……? ああ、エンコーダ層レベルでリザバー化するので、もはやその固定化したエンコーダ層はトランスフォーマーでなくても FFN や RNN や CNN でもいいのではないかということですね。しかし、チューニングが足りていないかもしれないなどでこれといった結論が出ていないのですかね?
  • さらに "backskipping" なる手法を導入し誤差逆伝播を省いた? どのような内容かこれだけではわかりません……。
……あれ、どの層をリザバー化すべきかなどの提言は contributions に含まれないのでしょうか。2点目が含んでいるのですかね……?

f:id:cookie-box:20211229162334p:plain:w60

3.1 節の最後かな……連なるエンコーダ層を交互にリザバー層に置き換えるらしい。元々7層の LLLLLLL だったら LRLRLRL にするというように。Appendix C によると、交互に置き換えるのが一番よくて、リザバー層を連続させると駄目みたいにあるね。

第2話につづく


おまけ
どの画像パスがどの表情かわからないのでメモです。これらの画像ははてなフォトライフに CC BY で公開しています。
f:id:cookie-box:20211229151955p:plain:w90
20211229151955p
f:id:cookie-box:20211229152010p:plain:w90
20211229152010p
f:id:cookie-box:20211229151958p:plain:w90
20211229151958p
f:id:cookie-box:20211229152003p:plain:w90
20211229152003p
f:id:cookie-box:20211229152006p:plain:w90
20211229152006p
f:id:cookie-box:20211229165400p:plain:w90
20211229165400p
f:id:cookie-box:20211229162329p:plain:w90
20211229162329p
f:id:cookie-box:20211229162343p:plain:w90
20211229162343p
f:id:cookie-box:20211229162334p:plain:w90
20211229162334p
f:id:cookie-box:20211229162339p:plain:w90
20211229162339p