5. ディープラーニングの要素技術

5.1 ネットワークの構成要素

畳み込みニューラルネットワークは、ディープラーニングの中で最も成功を収めているモデルです。その各層を構成する要素について、詳細な構造を見てみましょう。

1.畳み込み層

畳み込み層は畳み込みニューラルネットワークの重要な構成要素なので、処理を詳しく説明します。

1.1 畳み込み層の処理

畳み込み層では、フィルタ (またはカーネル) を用いて、特徴を特徴マップとして抽出する畳み込み処理 (convolution)を行います。例えば図5.1のような縦横の2次元に数値とフィルタがあったとします。畳み込み処理は、 図5.2のように、フィルタを画像の左上から順番に重ね合わせていき、画像とフィルタの同じ位置の値をかけ合わせて総和をとる処理になります。このフィルタは3×3など、小さなサイズのものが用いられることが多いです。

入力が、幅W×高さH×チャネルNだったとします。このとき、畳み込み層のフィルタは、3×3×Nのように、3次元の構造となります。


図5.1 画像とカーネル(フィルタ)


フィルタの値は、どうやって決めるのでしょうか。人が1つずつ値を決めるのではなく、それぞれのフィルタの値を学習により獲得します。この学習にも誤差逆伝播法が用いられます。


図5.2 畳み込み処理


1.2 パディング処理

畳み込み処理を適用すると、特徴マップのサイズは少し小さくなります。フィルタのサイズによりどれだけ小さくなるかは変わり、フィルタサイズ-1分小さくなります。入力と同じサイズの特徴マップにしたい場合は、パディング処理を適用します。パディング処理は、入力の上下左右に要素を追加し、0の値で埋めます。このとき、(フィルタサイズ-1)/2分を上下左右に追加します。


図5.3 パディング処理


1.3 ストライド

畳み込み処理は、フィルタを重ねる位置をずらしていきますが、そのずらし幅をストライドと呼びます。ストライドが1の場合は、1画素ずつずらしていきます。ストライドが2の場合は、1画素飛ばして畳み込み処理します。よって、特徴マップのサイズは小さくなります。


図5.4 ストライド


1.4 Atrous Convolution

通常の畳み込み層では、フィルタの値を特徴マップの値に対して、密にかけ合わせます。これにより、限られた範囲の情報のみが集約されます。では、広い範囲の情報を集約するにはどうしたらよいでしょうか。フィルタのサイズを大きくすると広い範囲の情報を集約できますが、計算量と学習するパラメータ数が増えてしまいます。そこで、Atrous Convolutionが用いられます。Atrous Convolutionは、図5.5のように、フィルタの間隔を空けて、広い範囲に対して畳み込み処理を行います。Atrous Convolutionは、特徴マップの注目する領域が広がるにもかかわらず計算量は増えません。Atrous Convolution は、Dilated Convolutionとも呼ばれています。


図5.5 Atrous Convolution


1.5 Depthwise Separable Convolution

通常の畳み込み処理の代わりに、Depthwise Separable Convolutionを用いることもあります。Depthwise Separable Convolutionでは、空間方向とチャネル方向に対して独立に畳み込み処理を行います。空間方向はDepthwise Convolution、チャネル方向はPointwise Convolutionと呼びます。Depthwise Convolutionは、特徴マップのチャネル毎に畳み込み処理を行います。Pointwise Convolutionは、1×1の畳み込み処理を行います。

図5.6のように、特徴マップのサイズがH×W×N、出力チャネル数がM、フィルタサイズがK×Kの場合、通常の畳み込み処理の計算量は○ (H×W×N×K²×M)です。一方、Depthwise Convolutionの計算量はO (H×W×N×K²)、Pointwise Convolutionの計算量はO (H×W×N×M) となります。通常の畳み込み処理をDepthwise Separable Convolutionに置き換えることで、計算量がO (H×W×N×K²×M) からO (H×W×N×K2+H×W×N×M) に削減できます。ただし、通常の畳み込み処理の近似計算なので、精度は一致しません。


図5.6 Depthwise Separable Convolution


2.プーリング層

プーリング処理は、特徴マップをルールに従って小さくする処理です。これをダウンサンプリングあるいはサブサンプリングと呼びます。プーリングには、ある小領域ごとの最大値を抽出する最大値プーリング (max pooling) や平均値プーリング (average pooling) があります。

図5.7 は最大値プーリングの処理を表したものです。プーリングするサイズを2×2の小領域に設定して、その中の最大値を抽出します。これでダウンサンプリングした特徴マップが得られます。これにより、特徴を集約して、特徴次元を削減する効果もあります。また、この処理も畳み込み処理同様、画像のズレに対する頑健性を持ち、不変性を獲得します。

プーリング層は、あらかじめ決めたルールに従って演算を行うだけです。畳み込み層と異なり、プーリング層には学習すべきパラメータは存在しません。


図5.7 最大値プーリング


3.全結合層

全結合層では、層に入力された特徴に対して重みをかけて、総和した値をユニットの値とします。これは、通常のニューラルネットワークと同じで、線形関数となっています。

CNN (LeNet) では、畳み込み層・プーリング層を繰り返した後、全結合層を積層します。このとき、図5.8のように特徴マップを1列(フラット) に並べる処理を行います。


図5.8 入力に用いる画像データ変換の例


4.スキップ結合

畳み込み層やプーリング層、全結合層を重ねていくことで非常に深いネットワークを作ることができます。しかし、ネットワークの層を増やし、「超」深層になると識別精度が落ちるという問題があります。「超」深層にすると、学習時に誤差を入力層近くまで逆伝播しにくくなることが原因です。 そこで、「超」深層となる深いネットワークを実現するために考えられたのが、「層を飛び越えた結合」であるスキップ結合です。この結合は、ResNetで導入されました。スキップ結合を導入することにより、

ことが、学習がうまくいく理由として挙げられています。


図5.9 スキップ結合


5.正規化層

学習するうえで、各層に伝わっていく特徴の分布は重要です。特徴の分布のバラツキを抑制するために、各層の特徴の平均値が0、分散が1になるように正規化処理を行います。

バッチ正規化(batch normalization)は、各層で活性化関数をかける前の特徴を正規化します。いわば無理矢理データを変形させているわけなので、どのように変形すればいいのかを学習によって決めます。学習時、ミニバッチで複数の入力データを用いています。各層において、データ間での特徴のバラツキをチャネルごとに正規化するよう学習しています。特徴の正規化する範囲を変えることで、レイヤー正規化(データごとに全チャネルをまとめて正規化)、インスタンス正規化(データごとに各チャネルを正規化)、グループ正規化(データごとに複数のチャネルをまとめて正規化)などがあります。

これらの正規化は非常に強力な手法で、学習がうまくいきやすくなるという利点以外にも、過学習しにくくもなります。


図5.10 正規化


5-2.リカレントニューラルネットワーク

時系列データを扱う場合に用いるネットワークがリカレントニューラルネットワークです。リカレントニューラルネットワークを構成する要素を見ていきましょう。

1.回帰結合層

ネットワークは入力から出力まで情報が一方向に流れていくものばかりでした。各入力が互いに独立しているならばこれで問題ありませんが、次の入力が過去の入力と関係するような場合、その関係性を次の入力の処理にも利用したいはずです。このような時系列データを扱うために、ネットワークの中間状態を次の入力の処理に利用する回帰結合層が考案されました。この回帰結合層を含むネットワークをリカレントニューラルネットワーク (Recurrent Neural Network, RNN) と呼びます。

RNNを使ってできることの代表例として言語モデル (Language Model、LM)があります。これは過去に入力された単語列から次に来る単語を予測するというもので、音声処理でも自然言語処理でも使われます。また後ほど紹介するPretrained Modelsの基礎にもなっています。 CNN同様、RNNもいくつかのモデルが考えられていますので、それぞれどういったものなのかを見ていくことにしましょう。

2.RNNの基本形

図5.11 はRNNの概略図です。通常のニューラルネットワークと比べると、過去の回帰結合層が追加されています。ここでは、回帰結合層と過去の回帰結合層を別で描いていますが、そのものは全ての時刻で共通です。回帰結合層は、過去の時刻の情報を反映した特徴をもっているだけであることに注意してください。


図5.11 RNNの概略図


図5.11 はRNNの中でも特にエルマンネットワーク (Elman Network) と呼ばれる構造で、回帰結合層の情報を伝播して、次の時刻の入力とともに利用します。これに対して出力層の情報を伝播して、次の時刻の入力とともに利用するモデルをジョルダンネットワーク (Jordan Network)と呼びます。前者が自然言語処理などで利用されるのに対し、後者はロボットの運動制御などで利用されます。

3.LSTM

一見するとRNNは時系列データを分析するのに十分と思えるのですが、実はいくつか厄介な問題を抱えています。まず1つ目は、通常のニューラルネットワークでもあった勾配消失問題です。RNNは時間軸を展開すると深いニューラルネットワークになりますから、誤差を逆伝播する際、過去に遡るにつれて勾配が消えていってしまうという問題が発生します。

また、時系列データを扱ううえでの固有の問題も発生します。ネットワークの重みがどうなるかを考えた場合、通常のニューラルネットワークでは、関係ある情報が入力された際は重みが大きくあるべきですし、関係のない情報が入力された際は、 重みは小さくあるべきです。しかし、時系列データを扱う場合は、「今の時点では関係ないけれど、将来の時点では関係ある」という入力が与えられた際、重みは大きくすべきであり、同時に小さくすべきであるという矛盾を抱えることになります。この問題は入力重み衝突と呼ばれ、RNNでの学習がうまくいかなくなる大きな要因となりました。同様に、出力に関しても出力重み衝突が発生し、学習を妨げることとなりました。

こうしたいくつかの問題を解決するために考えられたのがLSTM (Long Short-Term Memory)と呼ばれる手法です。通常のニューラルネットワークでは勾配消失問題を解決するために活性化関数を工夫するなどしましたが、LSTMでは、回帰結合層の構造を変えることで同様に問題を解決しています。また、同時に入力重み衝突といった問題も解決しています。

LSTMはLSTMブロックと呼ばれる機構を導入し、時系列情報をうまくネットワーク内に保持することを可能としています。図5.12 がLSTMブロックの概要図です。実線で書かれている矢印は現在の時刻のデータの流れを表しており、点線は一つ前の時刻のデータの流れを表しています。またはベクトルの要素ごとの積で、ƒは活性化関数を表します。

これはネットワーク全体ではなく、あくまでも通常のニューラルネットワークにおけるユニットの1つがこのLSTMブロックに対応しているということに注意してください。


図5.12 LSTMブロック


複雑なつくりをしているLSTMブロックですが、その構造はとても理にかなっています。大まかには2つの機構から成っています。

セルはCEC (Constant Error Carousel) とも言われ、その名前の通り誤差を内部にとどめ、勾配消失を防ぐためのものになります。一方、ゲートは入力ゲート、出力ゲート、忘却ゲートの3つからなり、入力ゲート、出力ゲートはそれぞれ入力重み衝突、出力重み衝突のためのゲート機構になります。そして忘却ゲートは誤差が過剰にセルに停留するのを防ぐために、リセットの役割を果たすためのゲート機構になります。

LSTMは時系列データを扱ううえではデファクトスタンダードになっているモデルとも言えます。一方、LSTMはセルやゲートそれぞれを最適化しなくてはならないため、計算量を多く要します。そのため、LSTMを少し簡略化したGRU (Gated Recurrent Unit) と呼ばれる手法が代わりに用いられる場合もあります。図5.13 がGRUにおけるブロック機構です。GRUではリセットゲート更新ゲートというゲートが入力ゲート、出力ゲート、忘却ゲートの代わりを果たします。


図5.13 GRUブロック機構


4.Bidirectional RNN

扱う時系列データの種類によっては、RNNをさらに応用したモデルが用いられます。例えば時間情報の途中が欠けていてそれが何かを予測したい場合は、過去の情報だけでなく、過去と未来両方の情報を使って予測したほうが効果的と言えるでしょう。自然言語処理においては例えば単語の品詞を推定したい場合などは、過去の単語だけでなく未来の単語の情報も用いる方がより高精度に行えます。通常のRNNは過去から未来への一方向でしか学習をすることができませんが、RNNを2つ組み合わせることで、未来から過去方向も含めて学習できるようにしたモデルのことを Bidirectional RNN (BIRNN)と言います。

図5.14 がBiRNNの概要図です。横方向は、時間軸に沿って展開しているものであることに注意してください。2つのRNN を組み合わせると言っても、それぞれは過去用と未来用とで独立しているので、取り立てて複雑なところはありません。


図5.14 BiRNN


5.エンコーダ-デコーダ

ここまでで見てきたモデルはいずれも入力が時系列で、出力が1つでした。例えば言語モデルにおける入力は過去の単語列で、出力は次に来る単語1つです。一方、入力が時系列なら出力も時系列で予測したいという場合も往々にしてあることでしょう。そうした問題に対処したモデルをsequence-to-sequence (Seq2Seqと書かれることもあります)と言い、自然言語処理分野を中心に活発に研究されてきました。その代表例が機械翻訳です。機械翻訳では入力文の長さとその翻訳である出力文の長さは必ずしも一致しません。

とは言え、こちらも土台となるアプローチは2つのRNNを組み合わせることです。RNN エンコーダーデコーダという名前の手法になりますが、入力も出力も時系列ならば、それぞれにRNNを対応させればいいという考えに基づいています。

名前の通り、モデルは大きくエンコーダ (encoder) とデコーダ (decoder) の2つのRNNに分かれており、エンコーダが入力データを処理して符号化(エンコード)し、符号化された入力情報を使ってデコーダが復号化 (デコード)します。もちろん、出力も時系列なため、全出力を一気に行うことは不可能です。そのため、デコーダは自身の出力を次のステップで入力として受け取って処理することになります。

なお最近ではRNNに限らず、入力されたデータを処理するニューラルネットワークをエンコーダ、出力を生成するニューラルネットワークをデコーダと呼びます。例えば画像を入力としてその画像の説明文を生成する Image Captioningと呼ばれるタスクでは、エンコーダは画像を処理するためCNNが用いられ、デコーダでは自然言語文を出力するためRNNが用いられます。

6.RNNの学習

RNNには、通常のニューラルネットワークと同様に、入力層から回帰結合層に情報が伝播する経路があります。そこに加えて、過去の回帰結合層から(現在の) 回帰結合層にも情報が伝播する経路を持つことが大きな違いです。すなわち、これまでに与えられた過去の情報をどの程度現在の情報に反映するかを学習することになります。ですので、誤差を過去に遡って逆伝播させます。これには、時間軸に沿って誤差を反映していく、BackPropagation Through-Time (BPTT) を用います。

なお、回帰結合層からの出力を次層の回帰結合層に入力することで、回帰結合層を何層も積み重ねた深いリカレントニューラルネットワークを構成することもできます。

また、ある時刻の情報をRNNに入力するとその時刻に対する出力が得られます。n時刻分の情報を逐次入力すると、各時刻の出力が得られるので、入力数と出力数は一致します。

RNNの学習も基本的には他のネットワークと同様で、出力層の値をSoftmax関数で確率に変換し、正解との誤差を計算して誤差逆伝播法によりパラメータの調整を行います。例えば言語モデルにおいては、いくつかの単語を順に入力したときに次に来る単語を予測し、これを正解の単語と比較して誤差を計算します。ここで、次に入力する単語について考えてみましょう。 次に入力する単語は、一つ前の単語を入力したときの正解データそのものです。このように、正解データを次の入力データとして利用することを教師強制 (Teacher Forcing) と呼びます。機械翻訳においても、デコーダへの入力として正解の翻訳文を利用しますので、教師強制を用いています。

訓練時には正解データが与えられるので教師強制が使えますが、テスト時には正解データを利用することはできませんので、教師強制は使えません。テスト時には一つ前の出力を次の入力に利用することになります。ここで、訓練時とテスト時で入力データの傾向に違いが出てしまい、テスト時では訓練時ほどのパフォーマンスが出ないという問題が発生することがあります。これを露出バイアス (Exposure Bias) と呼び、言語生成AIにおける繰り返し(repetition)、矛盾(incoherence)、ハルシネーション (hallucination) などのエラーの原因の一つとされています。

なお教師強制はRNNだけでなく、入力系列と出力系列が同じ場合には利用することができますので、次章のトランスフォーマーなどの学習においても同様に利用されています。

7.Attention

RNNの応用によって、様々な時系列タスクで高い精度を達成するようになりました。一方で、RNNは(LSTMにしろ、 GRUにしろ) 1つ前の状態と新たな入力から次の状態を計算するだけであり、過去の(BiRNNでは過去と未来の) どの時刻の状態がどれだけ次の状態に影響するかまでは直接求めていません。

そうした背景から、「時間の重み」をネットワークに組み込んだのがAttentionと呼ばれる機構です。過去の各時刻での回帰結合層の状態を保持しておき、それぞれの重みを求め、出力を計算する際に回帰結合層の状態の重み付き和を利用することで、時間の重みを考慮したモデルを実現します。このAttentionも時系列タスクで精度の向上に多大に貢献しました。

機械翻訳を例に取ると、Attention機構のないsequence-to-sequenceモデルでは入力文全体の情報はエンコーダを通ることでただ1つのベクトルに押し込められるため、入力文が長くなればなるほど全体の情報を適切に保持することができなくなり、正しい翻訳を出力することが難しくなるという問題がありました。Attention機構を導入することで過去の情報 (入力文の各単語をエンコーダで1つずつ読み込んだ際の隠れ層の情報)を適切に重み付けして用いることが可能となり、長い文であっても正確な翻訳が出力できるようになりました。

Attentionは入力と出力の間を「時間の重み」によって対応づけていると考えることもできるため、入力と出力の対応関係を可視化することができます。例えば図5.15は、英語からフランス語への翻訳タスクにおいて、Attentionの重みをヒートマップ状に表現したものです。モデルはフランス語の単語をひとつずつ出力していくわけですが、該当の単語を出力する際、入力となる英文のどの単語に重みが付いているかを表しています。


図5.15 Attentionの重み


Attentionは「出力から見た時の各入力の貢献度 (重み)」を表しているので、こうした入出力の対応関係を可視化できるわけです。例えば前述のImage Captioningにおいても、入力された画像のどこに注目して説明文を生成しているかを可視化することができます。もちろんこうした可視化だけで予測の根拠が説明できるわけではありませんが、少なくとも全然関係のない対応関係が学習されてしまっていないかを確認することができるという意味では有用であることに変わりありません。

5-3. トランスフォーマー

RNNによって、時系列データを扱う様々なタスクにディープラーニングが利用できるようになりました。しかし、RNN にはいくつか欠点があります。その欠点を解決したトランスフォーマーの特徴を見てみましょう。

1.トランスフォーマーの基本形

トランスフォーマーはニューラル機械翻訳の新たなモデルとして提案されました。トランスフォーマー登場前の機械翻訳モデルでは、それぞれRNNで構成されたエンコーダとデコーダをAttention機構により橋渡ししたような構造を持っていました。なお入力文 (source) と出力文 (target) の橋渡しに使われるAttention機構は特にSource-Target Attention もしくはEncoder-Decoder Attentionと呼ばれています。トランスフォーマーはエンコーダとデコーダからRNNを排除し、代わりにSelf-Attention(自己注意機構)と呼ばれるネットワーク構造を採用している点が最大の特徴です。ネットワーク全体がSelf-Attention と Source-Target Attentionという2種類のAttention機構のみから構成されているため、並列計算がしやすく、RNNと比べて高速にモデルの学習が行えます。またSelf-Attentionのおかげで遠い位置にある単語同士の関係もうまく捉えることができるようになり、機械翻訳の精度もさらに向上しました。今ではGoogleが提供している機械翻訳サービスにもこのトランスフォーマーが部分的に取り入れられています。

2.RNNの問題点

RNNのおかげで時系列データを扱う様々なタスクの精度は大きく向上しました。しかし、RNNにはいくつか欠点がありま す。1つ目は入力データを時間軸に沿って必ず1つずつ順番に読み込む逐次処理が必要になる点です。そのため、並列計算ができず、処理速度が遅くなります。2つ目は時系列の最初の時刻に入力した情報の影響が時間の経過とともに次第に薄れてしまう点です。時系列で与える入力データの長さが長くなると、遠く離れた単語間の関係が捉えきれません。これにより、精度が向上しない場合があります。これらの問題を解決した新たなニューラルネットワーク構造として、2017年にトランスフォーマ - (Transformer) が提案されました。

3.Self-Attention(自己注意機構)

Source-Target Attentionが入力文と出力文の単語間の関連度を計算したものであるのに対し、Self-Attentionは入力文内の単語間または出力文内の単語間の関連度を計算したものです。自分と他の全ての単語との関係を重み付きで考慮することで、 各単語がその文内でどのような役割を持つかをうまく捉えることができます。RNNで入力文内の単語間の関係を計算するにはその間にある単語数分のステップが必要でした。一方でSelf-Attentionでは入力文内の全ての単語間の関係を1ステップで直接計算することが可能です。また、ある単語と他の単語との間の関係計算は、別のある単語とその他の単語との間の関係計算とは独立ですので、全ての計算が並列に行え、高速に処理できます

Self-Attentionは文内の単語間の関係を直接計算できるのですが、一方で語順の情報が失われてしまっています。トランスフォーマーではこれを回避するために、位置エンコーディング (positional encoding) と呼ばれる単語の出現位置に固有の情報を入力に付加します。これによりニューラルネットワークは間接的に単語の位置情報や単語間の位置関係を考慮することができます。

トランスフォーマーではエンコーダもデコーダもSelf-Attentionを用いているのですが、仕組み上の違いが2点あります。1点目は、デコーダはSource-Target Attentionにより入力文の情報も利用するという点です。2点目は、エンコーダでは入力文の全ての単語を見ながら計算を行いますが、デコーダでは先頭から順に出力を生成するため、まだ出力していない未来の情報は使えないという点です。このためデコーダが翻訳文を生成するプロセスは並列化することができません。なお、少し細かい話になりますが、モデルの訓練時は正解の翻訳が与えられており、これを利用することで並列計算を行うことができるため、訓練時はデコーダも高速に計算することができます。

4.クエリ、キー、バリューによるAttentionの計算

トランスフォーマーで使われている2種類のAttention (Source-Target Attention と Self-Attention)は、どちらもクエリ (Query)、キー (Key)、バリュー (Value) という3つの値を用いて計算されます。それぞれの値はベクトル、もしくはベクトルをまとめた行列です。これらの値の使われ方のイメージとしては、データベースにキーベクトルとバリューベクトルのペアがいくつか格納されており、与えられたクエリベクトルに対して各キーベクトルを用いて各ペアの重要度を計算し、バリューベクトルの値を重要度で重み付けして足し合わせたものを出力する、という流れになります。 図5.16のトランスフォーマーのネットワーク構造に、クエリ・キー・バリューがどのように入力されるかを示していますので参考にしてください。


図5.16 トランスフォーマーのネットワーク構造の概念図


図5.16 は簡略化したものですので、正式な構造は元論文("Attention Is All You Need" https://arxiv.org/abs/1706.03762) を参照してください。

Source-Target Attentionではクエリとしてデコーダの中間状態を利用し、キーとバリューはエンコーダの最終出力を利用します。これによりデコーダの状態に応じて、次の出力を決める際に必要となる入力の情報が適切に参照できるようになります。一方のSelf-Attentionでは、これら3つの値は全て自分自身をコピーして利用します。これにより例えば各単語のベクトル表現を、同じ文内の他の単語との関係性を考慮して計算することができます。

5.Multi-Head Attention

上記のAttentionの計算では、クエリとキーとの関係を1種類のパターンでしか捉えることができません。しかし実際には、 視点の異なるいくつかのパターンでクエリとキーとの関係を見る方が良いこともあるでしょう。これを実現するために、上記のAttentionの計算を複数並列に行うことを考えます。これをMulti-Head Attentionと呼び、各Attentionの計算をHeadと呼びます。ただ、クエリ、キー、バリューの値が同じならばAttentionの計算も同じになってしまいます。そこでこれら3つの値をそれぞれ異なる全結合層に通して変形します。さらにHeadの数だけ異なる全結合層を用意します。こうすることで各 Headがそれぞれ視点の異なるパターンでクエリとキーとの関係を見ることができるようになります。

5-4. オートエンコーダ

ディープラーニングでデータを生成する深層生成モデルの研究が活発に行われています。その基礎となるオートエンコーダについて見てみましょう。

1.基本的なオートエンコーダ

オートエンコーダは、可視層と隠れ層の2層からなるネットワークです。可視層は入力層と出力層がセットになったものだ と考えてもらって構いません。図5.17が概要図になります。


図5.17 オートエンコーダの概要図


オートエンコーダに与えられる入力は、可視層(入力層)→隠れ層→ 可視層 (出力層) の順に伝播し、出力されることになります。これが意味することは、オートエンコーダは「入力と出力が同じになるようなネットワーク」ということになります。図5.17の可視層を、入力層と出力層にあえて分けて描くと、図5.18のようになります。形だけ見ると、普通の多層パーセプトロンのように見えます。


図5.18 オートエンコーダの可視層


入力と出力が同じ、ということは、例えば手書き数字の“3”という画像データを入力したら、同じく“3”という数字画像を出力するようにネットワークが学習をするということになります。一見すると意味がないようにも思えてしまいますが、この学習により、隠れ層には「入力の情報が圧縮されたもの」が反映されることになります。ここで注意すべき点は、入力層(可視層)の次元よりも、隠れ層の次元を小さくしておくことです。これにより、文字通り入力層の次元から、隠れ層の次元まで情報が圧縮されることになります。感覚的には、情報が「要約される」とでも思っておけばよいでしょう。一度入力された情報を要約し、それを元に戻すように出力するわけですから、大事な情報だけが隠れ層に反映されていくことになります。この入力層→隠れ層における処理をエンコード (encode)、隠れ層→出力層における処理をデコード (decode) と言います。 オートエンコーダ自体は教師なし学習に分類されるもので、例えば画像のノイズ削減などに応用されています。オートエンコーダ自体は古くに考えられていますが、このオートエンコーダを応用したディープラーニングの手法が色々考案されています。

2.積層オートエンコーダ

オートエンコーダを応用して、ディープラーニングの黎明期に考えられた手法が積層オートエンコーダ (stacked autoencoder) です。ディープラーニングの祖であるジェフリー・ヒントンが考えたもので、文字通りオートエンコーダを 「積み重ねる」ことによってできたディープオートエンコーダと言えます。現在はこの手法が使われることはまずないですが、参考のために中身を見ていきましょう。 積層オートエンコーダは、オートエンコーダを順番に学習させ、それを積み重ねていくというアプローチを取りました。 例として、オートエンコーダを2つ積み重ねる場合を考えてみましょう。1つめのオートエンコーダをオートエンコーダA、 2つめをオートエンコーダBと名前を付けておきます。

まず、オートエンコーダAは可視層←→隠れ層の学習をそのまま行います。これでオートエンコーダAの重みが調整されることとなります。今度は、このオートエンコーダAの隠れ層が、オートエンコーダBの可視層になります。オートエンコーダAを通ってやってきた情報をもとに、今度はオートエンコーダBで学習が行われます。図5.19がこの流れを描いたものになります。図の左をオートエンコーダA、図の右をオートエンコーダBに対応させて見てもらえば、イメージしやすいのではないでしょうか。


図5.19 積層オートエンコーダの学習


オートエンコーダの数が増えても、この流れは同じです。どんなに層が積み重なっていっても、肝心なのは、順番に学習していくこと。これにより、それぞれで隠れ層の重みが調整されるので、全体で見ても重みが調整されたネットワークができることにつながるのです。このオートエンコーダを順番に学習していく手順のことを事前学習 (pre-training)と言います。

ただし、現在はこの「事前学習」は転移学習の文脈で用いられることが大半です。

3.変分オートエンコーダ

変分オートエンコーダ (Variational Auto-Encoder, VAE)は、モデルの名前にも含まれている通り、オートエンコーダを活用します。従来のオートエンコーダは、入力と出力を同じにするような学習を行います。隠れ層は入力データ (の特徴)をうまく圧縮表現したものになります。

変分オートエンコーダは入力データを圧縮表現するのではなく、統計分布に変換します。すなわち、平均と分散で表現するように学習します。入力データ (画像)が何かしらの分布に基づいて生成されているものだとしたら、その分布を表現するように学習すれば良いという考えから、こうしたアプローチが取られました。入力データはこの統計分布のある1つの点となります。変分オートエンコーダは、図5.20のように、エンコーダが入力データを統計分布のある1点となる潜在変数に変換します。デコーダは、統計分布からランダムにサンプリングした1点を復元することで、新しいデータを生成します。


図5.20 変分オートエンコーダ


変分オートエンコーダは色々な応用手法も考えられており、潜在変数を連続値ではなく離散値にしたVQ-VAEや、潜在変数とデータの相関を高めることで生成の精度を上げたinfoVAE、VAEの目的関数において正則化を工夫することにより画像の特徴を潜在空間上でうまく分離し、画像生成を行いやすくしたβ-VAEなどがあります。


章末問題

問題1

Random Erasingについての説明として、最も適切なものを1つ選べ。

  1. 画像処理に用いられるデータ拡張の1手法である。画像の一部分の画素をランダムに決定した値に変更することで、新しい画像を生成する。
  2. ディープニューラルネットワーク (DNN) の学習を行う際、過学習に陥るリスクを軽減するため、学習の繰り返しごとに、ランダムにニューロンを除外して学習を進める手法である。
  3. 自然言語処理において用いられる手法で、文中の一部の単語をランダムにマスクして見えないようにした状態で入力し、マスクされた単語を予測させることで学習を進める手法である。
  4. 学習済のネットワークにおいて、推論に与える影響が少ないニューロン間の接続をランダムに取り除く手法である。

📝 解答

1

🔍 解説

データ拡張についての理解を問う問題です。Random Erasingは画像処理に用いられるデータ拡張手法です。


問題2

ResNetにおいて、1つ下の層だけでなく、層をまたぐ結合の構造が導入されており、これにより誤差の逆伝播を行いやすくなるという特徴がある。この結合の名称として、最も適切なものを1つ選べ。

  1. サブ結合
  2. スキップ結合
  3. ドロップ結合
  4. リカレント結合

📝 解答

2

🔍 解説

スキップ結合についての理解を問う問題です。スキップ結合は、勾配消失問題を解消するResNetの重要な構成要素です。


問題3

畳み込みニューラルネットワーク (CNN) において、フィルタを移動させる幅の呼称として、最も適切なものを1つ選べ。

  1. ストローク
  2. パディング
  3. ストライド
  4. スライド

📝 解答

3

🔍 解説

畳み込み層についての理解を問う問題です。移動させる幅はストライド、入力データの周囲に領域を追加するのがパディングです。ストロークやスライドは畳み込み層とは関係ありません。


問題4

データ拡張の目的として、最も不適切なものを1つ選べ。

  1. 学習データの水増し
  2. 未知のデータに対する汎化性能の向上
  3. 過学習の抑制
  4. 学習時間の短縮

📝 解答

4

🔍 解説

データ拡張についての理解を問う問題です。データ拡張によりデータを水増しすることで汎化性能が向上し、過学習を抑制できますが、その分学習時間は増えます。


問題5

畳み込みニューラルネットワーク (CNN) において畳み込み層の処理を行う前に、入力データの周囲に0など固定のデータを埋める処理の名称として、最も適切なものを1つ選べ。

  1. パディング
  2. ストライド
  3. ドロップアウト
  4. プーリング

📝 解答

1

🔍 解説

畳み込み層についての理解を問う問題です。パディングとストライドの処理を理解しておきましょう。ドロップアウトやプーリングは畳み込み層の処理に関係ありません。


問題6

以下の文章を読み、空欄 (A) (B) に最もよく当てはまるものを1つ選べ。

畳み込みニューラルネットワーク (CNN) の畳み込み層においては、(A) と呼ばれる小領域を1画素または複数画素ずつ動かしながら、画像と重なった領域において演算を行う。このとき動かす画素数のことを (B) といい、この処理のことを畳み込み処理という。

  1. (A) フィルタ (B) エポック
  2. (A) フィルタ (B) ストライド
  3. (A) レイヤー (B) ストライド
  4. (A) レイヤー (B) エポック

📝 解答

2

🔍 解説

畳み込み層についての理解を問う問題です。フィルタまたはカーネルの役割、ストライドの意味を理解しておきましょう。


問題7

畳み込みニューラルネットワーク (CNN) に関する説明として、最も適切なものを1つ選べ。

  1. CNNは、自然言語処理と強化学習のみに適したニューラルネットワークである。
  2. 畳み込み処理は、生物の視覚の情報処理にヒントを得たニューラルネットワークの処理法の1つである。
  3. CNNに、スキップ結合を加えると学習速度が低下する。
  4. CNNには、プーリング処理が必ず必要である。

📝 解答

2

🔍 解説

畳み込みニューラルネットワークについての理解を問う問題です。どのようなアイデアで生まれたのか理解しておきましょう。


問題8

ゲートの数を削減することでLSTMにおける高い計算コストの削減を実現した手法の名称として、最も適切なものを1つ選べ。

  1. LSTNet
  2. Adam
  3. GRU
  4. BPTT

📝 解答

3

🔍 解説

リカレントニューラルネットワークについての理解を問う問題です。LSTMはメモリセルと3つのゲートがあるため、学習するパラメータ数が多いです。GRUはメモリをなくし、ゲート数も減らしたため、学習するパラメータ数が少なくなっています。


問題9

ニューラルネットワークの中間層の値を再帰させることによって、時系列データや言語などのデータに対応できるようにしたものをなんと呼ぶか、最も適切なものを1つ選べ。

  1. DNN
  2. RNN
  3. CNN
  4. DCNN

📝 解答

2

🔍 解説

リカレントニューラルネットワーク(RNN) についての理解を問う問題です。時系列データに対応する再帰構造がRNNの特徴です。


問題10

以下の文章を読み、空欄に最もよく当てはまるものを1つ選べ。

自然言語処理の文脈において、複数の単語ベクトルにどのベクトルを重要視するかをも含めて学習させる仕組みを () という。

  1. Attention
  2. オートエンコーダ
  3. ボルツマンマシン
  4. 敵対的生成ネットワーク (GAN)

📝 解答

1

🔍 解説

Attentionについての理解を問う問題です。Attentionにより単語ベクトル間の関連性を捉えることができます。


問題11

TransformerはEncoder-Decoderモデル構造を持っているが、Encoder側の計算に利用されるAttentionの種類として最も適切なものを1つ選べ。

  1. Source-Target Attention
  2. Encoder-Decoder Attention
  3. Self-Attention
  4. Encoder-Attention

📝 解答

3

🔍 解説

TransformerとAttentionについての理解を問う問題です。TransformerではいくつかのAttention構造が採用されています。各Attention構造がどのようなものなのか理解しておきましょう。


問題12

Transformerの説明として、不適切なものを1つ選べ。

  1. リカレントニューラルネットワーク (RNN)を一切排除し、かわりにAttention機構を採用したEncoder-Decoderモデルである。
  2. 並列計算ができないため、データの処理に時間がかかる。
  3. 入力系列の中で遠い位置にある要素間の関係も直接考慮することができる。
  4. Transformerの応用として様々なPretrained Modelが開発された。

📝 解答

2

🔍 解説

Transformerについての理解を問う問題です。RNNの課題を解決するためのAttention構造や並列処理が可能な構造について理解しておきましょう。


問題13

自然言語処理における位置エンコーディングに関する説明として、最も適切なものを1つ選べ。

  1. 時系列分析を可能とするために用いられる。
  2. 埋め込むことで計算コストが小さくなる。
  3. モデルの解釈可能性を高めるために用いられる。
  4. 汎化性能を確認する指標として用いられる。

📝 解答

1

🔍 解説

位置エンコーディングについての理解を問う問題です。位置エンコーディングにより、時系列データの並列処理が可能となりますが、計算コストは小さくなりません。