ebook

第 3 章: データの前処理

第 3 章

データの前処理


ディープ ニューラル ネットワーク用にデータを慎重に前処理すると、モデルの精度に大きく差が出ます。この章では、前処理が特にディープラーニングで重要になる理由と、各種のネットワークやデータ型の考慮事項について説明します。

セクション

前処理が必要な理由

データの前処理には広範な意味が含まれます。基本的には、生データに対して特定の機械学習操作に入力する前に行う作業を指します。データの前処理が重要な理由として、少なくとも次の 2 つが考えられます。

  • データを低次元化し、パターンを明確化できる。
  • データをネットワーク アーキテクチャに適した形式に変換できる。

データの低次元化

ディープラーニングによって、ネットワークはデータのパターン認識を学習します。したがって、探しているパターンを認識するうえで必要のない情報は、削除しても分類全体に影響を与えることはありません。

dl-engineers-ebook-ch3-mug-comparison

余分なデータは不要なだけでなく、削除することにより残りのパターンをさらに明確化できます。基本的に、パターンが人間にとって分かりやすければ、ディープ ラーニング アルゴリズムにとっても分かりやすく、学習プロセスにも役立ちます。

データを低次元化するもう 1 つの理由は、いわゆる「次元の呪い」です。高次元のデータには特徴が多く、それぞれの特徴にもバリエーションが存在するため、解空間で生じ得る組み合わせのすべてを網羅するには、さらに多くの学習データが必要となります。つまり、高次元化すると、データ自体が肥大するだけでなく、ネットワークの学習データがさらに必要となり、全体としてネットワークの複雑度、データストレージの容量、学習時間が増加します。

低次元化の欠点は、問題なく実行するにはデータを理解しておく必要があるということです。効率的に低次元化することはできますが、誤ってデータセットから重要な情報を削除しないように注意しましょう。これは、ディープ ラーニング アプリケーションにおいて、特定のドメイン知識が依然として非常に重要である理由の 1 つです。

たとえば、六角ナットの製造上の欠陥を視覚的に識別できるようにネットワークを学習させる場合には、どのような欠陥を探しているのか、それがデータにどのように現れるのかを理解する必要があります。下のデータ画像の場合、単純に縮小することにより画像のサイズを小さくするのは得策ではありません。検出対象の傷やパターンはかなり小さいため、識別するための詳細が失われてしまいます。このような場合には、画像を切り抜きすることで低次元化することをお勧めします。

dl-engineers-ebook-ch3-hex-nut-images

ネットワーク アーキテクチャ向けのデータの前処理

多くの場合、生データは、ネットワーク アーキテクチャに適した形に修正する必要があります。つまり、データのサイズ、単位、信号の種類など、ネットワークが求める状態を確保するということです。以下の例では、各種のネットワークやデータ型と、それらに必要となる可能性のある各種のデータ前処理について説明します。

ネットワーク アーキテクチャの 2 つの一般的な例は、畳み込みニューラル ネットワーク (CNN) と長・短期記憶 (LSTM) ネットワークです。

CNN

CNN の主要な構成要素は、畳み込み層です。畳み込み層は、フィルター (カーネル) を入力ボリューム全体でスライドさせ、どの領域が活性化されたかを調べることで動作します。このような活性化された領域から、CNN はどの特徴がデータのどの領域に存在するかを学習します。これらの特徴を組み合わせることで、ネットワークは最も適した分類を決定できます。

LSTM (長・短期記憶)

LSTM ネットワークはリカレント ニューラル ネットワーク (RNN) の 1 種で、シーケンスデータのタイムステップ間の長期依存性を学習できます。LSTM ネットワークの主要な構成要素は、シーケンス入力層と LSTM 層です。シーケンス入力層は、テキストや時系列データなどのシーケンスをネットワークに入力します。LSTM 層は、シーケンスデータのタイムステップ間の長期的依存性を学習します。

この 2 つのネットワーク (他の多くのネットワークも同様) への入力は、入力する要素の数とデータの表す内容が固定されています。つまり、収集したデータのサイズやデータ型が統一されていない場合は、ネットワークが求める形式に前処理する必要があるということです。

データ型

データを前処理する方法は、扱うデータ型によって異なります。以下はデータ型の例です。

表形式データ: 表形式データはディープラーニングにはあまり利用されませんが、それでもある程度の用例はあります。表形式データのリストを、1 つのホットエンコーディングでスパース行列に変換したり、エンティティの埋め込みでより密な行列に変換したりすることが必要な場合があります。

画像と動画: ネットワークに入力する画像は、幅、高さ、色の層が同じサイズである必要があります。つまり、前処理の一環として、適切なサイズではない画像の切り抜き、パディング、サイズ変更を行います。

dl-engineers-ebook-ch3-mug-raw-data-crop-pad-resize

信号: 信号の長さやサンプルレートが一定していないと、切り抜きやパディング、リサンプリングが再度必要になります。

dl-engineers-ebook-ch3-graph-raw-data-crop-pad-resize
セクション

例: 短時間フーリエ変換を使用したオーディオ信号の前処理

これは、人が「allow」と言ったときのオーディオ波形です。44.1 kHzで録音され、長さは約 0.8 秒です。分類ネットワークは、長さが 1 秒のオーディオ信号を想定しているため、この場合の最初の前処理ステップは、信号の最初と最後を 0 で埋めることです。

dl-engineers-ebook-ch3-raw-padded-audio-signals

人間の声に含まれる重要な音声内容のほとんどは、8 kHz 以下の周波数で生成されるため、このオーディオ信号を 16 kHz でリサンプリングしても情報が失われることはありません。

短時間フーリエ変換を使用すると、オーディオ信号の周波数成分が時間の経過とともにどのように変化するかを可視化できます。これを行うには、信号全体よりも小さいウィンドウサイズを選択し、信号全体に渡ってそのウィンドウをジャンプさせながら、データのサブセットに対して高速フーリエ変換 (FFT) を実行します。

dl-engineers-ebook-ch3-graph-1st-2nd-3rd-window

ウィンドウ関数をウィンドウデータと乗算すると、データの始点と終点が 0 になります。これにより、繰り返されると不連続になる信号で FFT を実行したときに生じる人工的な高周波情報が削除されます。

dl-engineers-ebook-ch3-graph-scaled-windows

FFT を実行するたびに、スペクトル全体で数千個の値が生成されます。音声データ中の単語を個別に認識するには、このような粒度は必要ありません。周波数情報の量を減らす一般的な方法として、スペクトルをいくつかのビンに分割し、各ビンの周波数をメルフィルターバンクでスケーリングして合計するという方法があります。メルフィルターバンクは、低周波では間隔が狭く、周波数が高くなるにつれて徐々に間隔が広がる三角形のバンドパスフィルターのセットです。このタイプのフィルターバンクは、高周波よりも低周波に対して敏感であるという、人間の聴覚の感度を模倣したものです。

メルフィルターバンクを各ウィンドウのスペクトルに適用すると、結果として、三角ビンごとにそのビンの周波数成分量を表す 1 つの値が得られます。下の画像では、ビンの周波数成分が四角いマーカーでプロットされており、その値に応じて色付けされています。

dl-engineers-ebook-ch3-mel-filter-bank-applied

周波数ビンと時間枠によるこうした情報はすべて、スペクトログラムという 1 枚の画像にまとめられます。スペクトログラムは、時系列データを畳み込みニューラル ネットワークへの入力として使用できる画像に前処理する方法の 1 つです。

dl-engineers-ebook-ch3-spectrogram
セクション

前処理とキーワード検出に関する詳細を見る

パネルナビゲーション