5-6-1 スキップ結合とは何か

スキップ結合とは何か

ディープラーニングでは、たくさんの層を重ねることで、より複雑な特徴を学べるようになります。
浅いネットワークでは見つけられなかった特徴も、層を深くすることで見えるようになります。
それがディープラーニングの強みの一つです。
でも、層をどんどん増やしていくと、別の問題も出てきます。
それは、情報が奥まで伝わりにくくなることです。

大きな建物の中に、とても長い廊下がある場面を想像してみてください。
あなたは入口から入り、廊下をまっすぐ進みながら、いくつもの部屋を通り過ぎていきます。
普通の深いネットワークは、この廊下に似ています。

入力された情報は、

・1つ目の層
・2つ目の層
・3つ目の層
・さらにその先の層……

というふうに、順番に通りながら奥へ進んでいきます。
でも、廊下があまりにも長いと、入口から持ってきた情報は、途中で少しずつ薄れていったり、形を変えすぎてしまったりすることがあります。

もしこの建物に、廊下をずっと歩かなくても、途中を少し飛ばして先へ行ける近道があったらどうでしょう。

たとえば、

・1階から2階へ一気に抜けられる通路
・途中の部屋を通らずに先へ行ける連絡路

があると、必要な情報をもっとスムーズに奥へ運べそうですよね。
スキップ結合は、まさにこうした近道の通路のようなものです。

普通なら

入力

層A

層B

層C

と順番に流れる情報を、途中の層を飛び越して、先の層へ直接渡すのです。
これがスキップ結合です。

スキップ結合では、ある層の出力を、その次の層だけでなく、もっと先の層へも直接届けることがあります。
つまり情報は、

・いつもの道を通る流れ
・飛び越して届く流れ

の二つの道を持つことになります。

たとえば料理のレシピでいえば、途中の工程を全部たどるだけでなく、「この基本の味は、最後までそのまま残しておこう」と
別の器で取っておくような感じです。
あるいは、物語を読むときに、途中の細かな展開を追いながらも、最初に出てきた大事な設定をずっと手元に残しておく感じに近いかもしれません。

スキップ結合が必要になるのは、深いネットワークでは、情報が途中で変わりすぎたり、弱まりすぎたりすることがあるからです。
層をたくさん通るあいだに、

・元の情報が見えにくくなる
・勾配が伝わりにくくなる
・学習がうまく進まなくなる

ということが起きます。
そこでスキップ結合を使うと、元の情報を少しそのまま先へ届けることができるので、学習がしやすくなります。
つまりスキップ結合は、深いネットワークの中でも、情報が迷子にならないようにする工夫なのです。

ここで大事なのは、スキップ結合は単に途中をサボっているわけではない、ということです。
近道があるからといって、元の廊下がいらなくなるわけではありません。
普通の道では普通の道の役割があり、近道には近道の役割がある。
スキップ結合も同じです。

通常の層→ 情報を変換し、より複雑な特徴を学ぶ

スキップ結合→ 元の情報を保ちながら先へ届ける

この二つが組み合わさることで、深いネットワークでも無理なく学びやすくなるのです。

スキップ結合のいちばん大きな意味を、やさしく言い換えるとこうです。

スキップ結合は、ネットワークが元の情報を忘れにくくするための仕組み

深いネットワークでは、情報は何度も加工されます。
それはとても大切なことですが、加工されすぎると、最初に持っていた大事な手がかりまで薄れてしまうことがあります。
スキップ結合は、そうした手がかりを先へ渡しておくことで、ネットワーク全体を支えているのです。

スキップ結合の役割

前の節では、スキップ結合を長い廊下の途中にある近道にたとえて見てきました。
普通の深いネットワークでは、情報は一つひとつの層を順番に通りながら奥へ進んでいきます。
でも層が深くなると、その長い道のりの中で、情報は少しずつ変化し、ときには元の姿が見えにくくなってしまうことがあります。
そこで、途中を飛び越して先へ進める道――スキップ結合が役立ちます。
では、スキップ結合があると、実際にどんなよいことがあるのでしょうか。

まず大きな役割の一つは、情報を先の層まで伝えやすくすることです。
長い廊下をずっと歩いていくと、最初に持っていた荷物が少しずつ重く感じられたり、途中で形が崩れたりすることがありますよね。
深いネットワークでも、それに少し似たことが起こります。
入力された情報は、たくさんの層を通るあいだに何度も変換されます。
それは大切なことですが、変換が重なりすぎると、最初に持っていた大事な手がかりまで薄れてしまうことがあります。
スキップ結合があると、その手がかりを途中で失わずに、少しそのまま先へ届けることができるのです。
つまりスキップ結合は、深いネットワークの中で、元の情報を保ちながら進むための助けになるのです。

スキップ結合のもう一つの大きな役割は、勾配を伝えやすくすることです。
ディープラーニングでは、出力で生まれた誤差の情報を後ろから前へ伝えながら、重みを更新していきます。
でも層が深くなると、この勾配がうまく前の層まで届きにくくなることがあります。
これは以前学んだ勾配消失問題とも関係しています。

長い廊下のずっと奥から、入口に向かって大事な伝言を送る場面を想像してみてください。
途中の部屋をいくつも通るうちに、声が小さくなってしまったり、伝言があいまいになってしまったりするかもしれません。
でも、もし途中に近道の通路があれば、その伝言をもっと直接的に戻しやすくなりますよね。
スキップ結合は、勾配にとってもそうした「近道」になります。
つまりスキップ結合は、学習のための手がかりを、前の層へ伝えやすくする役割も持っているのです。

ディープラーニングでは、層を深くすることで、より複雑な特徴を学べるようになります。
でも単純に深くするだけでは、かえって学習が難しくなることがあります。

たとえば建物の階数をどんどん増やしたとしても、廊下が複雑すぎて移動しにくくなれば、全体としては使いにくい建物になってしまいますよね。
スキップ結合は、そうならないようにする工夫です。

深いネットワークの中に近道を用意しておくことで、

・情報が流れやすくなる
・勾配が戻りやすくなる
・学習が安定しやすくなる

という利点が生まれます。
つまりスキップ結合は、深いネットワークを深いまま使いやすくするための仕組みなのです。

少し面白いポイントもあります。
普通の層では、何かしらの変換を学ばなければなりません。
でも実際には、「この層では、あまり大きく変えないほうがよい」ということもあります。

たとえば文章の推敲でも、「ここはもう十分整っているので、あまり手を加えず次へ渡したほうがよい」ということがあります。
スキップ結合があると、ネットワークはそのように「大きく変えない」という選択もしやすくなります。変えたほうがよい部分だけを変える、そのままでよい部分はそのまま残す、ということがしやすくなるのです。
つまりスキップ結合は、ネットワークに無理のない学び方をさせる工夫でもあるのです。

ディープラーニングは、層を深くすることで力を発揮してきました。
でも深さには、それだけで学習しにくくなるという弱点もありました。
スキップ結合は、その弱点をやわらげます。
言い換えれば、深くすることの良さを活かしながら、深さの苦しさを減らすための仕組みです。
だからスキップ結合は、ただの便利な工夫ではなく、深層学習を本当に深くしていくうえで重要な技術だったのです。

next ▶ 代表的なスキップ結合のモデル