連載
» 2015年11月30日 07時00分 公開

SYSTEM DESIGN JOURNAL:畳み込みニューラルネットワークの使い方、分かりますか? (4/6)

[Ron Wilson,Altera Corporation. MONOist]

トレーニング

 肝心な問題を不用意に飛ばしていました。それは、畳み込みカーネルの係数、つまりカーネルが識別するパターンを定義する数値をどこから得るかという問題です。同様に、ニューロン入力に対する重みをどこから得るかという問題もあります。

 CNNの性能はこれらのパターンの選択に大きく左右されます。さもなければ、巨大な部屋にサルとタイプライターを詰め込んで打鍵させても、シェークスピア作品が打ち出されることはありません

 ルールベースシステムでは月並みな性能しか得られないという経験から、研究者たちはかなり極端で、とても直感的と言いがたい考え方を試すことにしました。それは、「アプリケーション・エキスパートにとって適切なカーネルの選択がそれほど困難ならば、純粋なニューラル・ネットワークに使用される反復トレーニングプロセスで改善が得られるのではないか?」というものです。その答えは「イエス」です。

 原理上、ニューラルネットワークのトレーニングは非常に簡単で、必要なことは4つだけです。まず、CNNに解決させたい状況を表すトレーニング画像セットが必要です。次に、それらの画像ごとに理想的な正しい出力が必要です。さらに、所期の出力と実際の出力との差を定量化する誤差関数が必要です。そして、CNN 内の畳み込みカーネル係数およびニューロン入力重みごとに初期状態が必要です。原理上、これらは簡単明瞭ですが、実際にはいずれもある種の課題を示します。

 まずはトレーニング画像です。前出のCompton氏は、「トレーニング画像は現実の世界を表すものでなければなりません」と警告します。単純すぎると、CNNの結果も極端は単純化されたものとなる可能性があります。逆に複雑すぎると、トレーニングの効果が得られないかもしれません。また、重要なケース(例えば、異なる筆跡や大きな箱を抱えた人間)を除外すると、そうした入力に遭遇した場合の CNN の挙動が予測不能になります。残念ながら、トレーニングセットの規模や画像の選択は、経験や判断に頼るしかありません。同様に、CNN が各トレーニング画像から下すべき結論を明確にしておくことも必要ですが、これは特に問題にはならないと思います。

 次に初期値が必要です。この値は、CNN の一部を事実上、遮断することがないように選択する必要があります。例えば、全て0または全て1は見当外れということになります。経験上、特定の統計的分布からランダムに値を選択するとうまくいくことが分かっています。

 その次に誤差関数です。CNN を所与のトレーニング画像で評価し、所期の出力がわかっている場合、差を多数の積和と双曲線正接で式として記述することが可能です。誤差のサイズは、入力画像ピクセル、畳み込み係数、およびニューロン重みの関数とwして表されます。

 さて、ここからが興味を引く部分です。この情報を使用して、CNNの最終層で全てのニューロン重みにする誤差関数の偏微分を全て計算することができます。その勾配から、次の試行で重みをどう調整すればよいかが分かることになります。さらに、この処理を前層に伝えて、重みを調整するといったことも可能です。

 CNNの本当に革新的なところは、畳み込み層に達した後、各カーネル係数に対する誤差関数の偏微分係数を計算、係数にわずかな差分を加えるといった同じプロセスを使用して、処理を続けることができる点にあります。そのため、CNN が探索する必要がある特徴に基づいて係数を推測しようとする必要はありません。

 誤差が十分小さくなるまで、トレーニングを繰り返し続けます。その後、次の画像に移り、繰り返します。収束または最終的な精度を数学的に予測することはできませんが、通常はプロセスが収束し、精度も許容範囲内に収まることが経験上分かっています。

Copyright © ITmedia, Inc. All Rights Reserved.