20 ニューラル・ネットワーク
回帰および分類マイニング機能のニューラル・ネットワークについて学習します。
20.1 ニューラル・ネットワークとは
Oracle Data Miningのニューラル・ネットワークは、分類や回帰などのマイニング機能に向けて設計されています。
機械学習において、ニューラル・ネットワークとは、生物学的なニューラル・ネットワークから着想を得た人工的なアルゴリズムのことです。このアルゴリズムは、一般的に知られていない多数の入力に依存する関数を近似または推定するために使用されます。人工的なニューラル・ネットワークは、相互接続された多数のニューロンで構成されています。これらのニューロンが相互にメッセージを交換して、特定の問題を解決します。学習には例を使用して、学習プロセス中にニューロン間の接続の重みを調整します。ニューラル・ネットワークには、多様なタスク(コンピュータ・ビジョン、音声認識、各種の複雑なビジネス問題など)を解決する能力があります。
20.1.1 ニューロンと活性化関数
ニューロンは、ニューラル・ネットワークの構築要素です。
ニューロンは、重みの異なる1つ以上の入力を受け取り、その入力に依存する1つの出力を持ちます。出力は、重みを持つ各ニューロンを合計して、その合計を活性化関数の入力にすることで得られます。
通常、シグモイド関数が最も多く活性化関数として選択されますが、その他の非線形関数、区分線形関数または階段関数も使用されます。次に、活性化関数の例を示します。
-
ロジスティック・シグモイド関数
-
線形関数
-
双曲線関数
-
逆正接関数
-
双極シグモイド関数
20.1.2 損失関数またはコスト関数
損失関数またはコスト関数とは、1つのイベントまたは1つ以上の変数の値を実数にマップする関数のことで、そのイベントに関連付けられたなんらかの「コスト」を直感的に表します。
最適化の問題では、損失関数の最小化を目指します。損失関数の形式は、問題の性質および数学的なニーズに基づいて選択します。
次に、各種のシナリオに対応する様々な損失関数を示します。
-
2項分類: 交差エントロピ関数。
-
多クラス分類: ソフトマックス関数。
-
回帰: 平方誤差関数。
20.1.3 前方/後方の伝播
前方/後方の伝播について説明します。
前方伝播では、前層のニューロン値の重み付け合計と活性化関数の適用により損失関数の値を計算します。後方伝播では、ネットワーク内のすべての重みに関する損失関数の勾配を計算します。重みは、ユーザーが指定した領域(重みの境界の設定)の範囲内または調整層内のノード数(データ駆動)で定義される領域の範囲内で一様に分布する乱数値のセットで初期化されます。勾配は最適化メソッドに渡されます。最適化メソッドでは、損失関数が最小化されるように勾配を使用して重みを更新します。
20.1.4 最適化ソルバー
最適化ソルバーについて説明します。
最適化ソルバーは、損失関数の最適解を求めるために使用され、損失(コスト)関数の極値(最大または最小)を調べます。
Oracle Data Miningには、Limited-memory Broyden–Fletcher–Goldfarb–Shanno (L-BFGS)が直線探索とともに実装されています。L-BFGSは、準ニュートン法です。この方法では、ヘッセ行列を近似する勾配評価によって指定される1ランクの更新を使用します。この方法は、限定的な量のメモリーしか必要としません。L-BFGSは下降方向を調べるために使用され、直線探索は適切なステップ・サイズを調べるために使用されます。L-BFGSソルバーで保持される履歴コピーの数は、LBFGS_HISTORY_DEPTH
によって定義されます。反復回数が履歴の深さよりも小さいときに、L-BFGSによって計算されるヘッセは正確なものになります。反復回数が履歴の深さより多いときに、L-BFGSによって計算されるヘッセは近似値になります。そのため、計算に時間がかかりすぎることがあるため、履歴の深さは大きすぎたり小さすぎたりしないようにしてください。通常、この値は3
と10
の間にします。
20.1.5 正則化
正則化について説明しています。
正則化とは、不良設定問題の解決や過学習の防止のために追加情報を導入するプロセスのことです。不良設定や過学習は、統計モデルが基になるリレーションシップではなく確率的誤差やノイズを示すときに発生する可能性があります。一般的な正則化技法には、L1ノルム正則化、L2ノルム正則化、除外などがあります。
通常、除外は大規模なトレーニング・データセットに使用されます。L1ノルム正則化とL2ノルム正則化は主に小規模なトレーニング・データセットに使用されます。
20.1.6 収束判定
これにより、最適解に達したかどうかと、最適化の反復が終了したかどうかを確認します。
L-BFGSソルバーでは、収束基準に、最大反復回数、勾配の無限ノルムおよび相対誤差許容範囲が含まれます。除外正則化の場合、収束基準によって、テスト・データセットの損失関数の値と、これまでの学習の最適モデルが確認されます。トレーニングは、特定の反復回数(NNET_HELDASIDE_MAX_FAIL
で指定)でモデルが悪化するか、損失関数がゼロに近くなるか、テスト・データに対する相対誤差が許容範囲を下回る場合に終了します。
20.1.7 LBFGS_SCALE_HESSIAN
LBFGS_SCALE_HESSIAN
を定義します。
これは、各反復の開始時点で逆ヘッセの初期近似値を設定する方法を指定します。この値にLBFGS_SCALE_HESSIAN_ENABLE
を設定すると、Oren-Luenbergerスケーリングによって逆ヘッセの初期近似値が求められます。LBFGS_SCALE_HESSIAN_DISABLE
を設定すると、各反復の開始時点で逆ヘッセの近似値としてIDが使用されます。
20.2 ニューラル・ネットワーク用のデータの準備
ニューラル・ネットワークのデータの準備について学習します。
このアルゴリズムでは、質的データはカテゴリ値ごとに2項属性のセットとして自動的に展開されます。Oracle Data Miningのアルゴリズムでは、自動的に欠損値が処理されるため、欠損値の処理は不要です。
質的データの欠損値は最頻値に、量的データの欠損値は平均値に自動的に置換されます。ニューラル・ネットワークには、数値入力の正規化が必要になります。アルゴリズムでは、Z-スコア正規化を使用します。正規化は、(ネストされていない)2次元数値列に対してのみ行われます。正規化によって、量的属性の値が同じスケール上に配置され、元の大規模なスケールを持つ属性によってソリューションに偏りがでることが回避されます。ニューラル・ネットワークでは、ネストされた列の数値が対応する列にある最大値でスケーリングされます。
20.3 ニューラル・ネットワーク・アルゴリズムの構成
ニューラル・ネットワーク・アルゴリズムの構成について学習します。
層ごとのノードの指定
INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES
('NNET_NODES_PER_LAYER', '2,3');
層ごとの活性化関数の指定
INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES
('NNET_ACTIVATIONS', ' ' ' NNET_ACTIVATIONS_TANH ' ', ' ' NNET_ACTIVATIONS_LOG_SIG ' ' ');
例20-1 例
INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES
('ALGO_NAME', 'ALGO_NEURAL_NETWORK');
次のようにモデルを構築します。
BEGIN
DBMS_DATA_MINING.CREATE_MODEL(
model_name => 'model-name',
mining_function => dbms_data_mining.classification/regression,
data_table_name => 'test_table',
case_id_column_name => 'case_id',
target_column_name => 'test_target',
settings_table_name => 'settings_table');
END;
/