25 ニューラル・ネットワーク

回帰および分類の機械学習機能のニューラル・ネットワーク・アルゴリズムについて学習します。

25.1 ニューラル・ネットワークについて

Oracle Machine Learning for SQLにおけるニューラル・ネットワーク・アルゴリズムは、分類や回帰などの機械学習機能のために設計されています。

機械学習では、ニューラル・ネットワークは生物学的なニューラル・ネットワークからヒントを得た人工アルゴリズムであり、多数の一般的な未知入力に依存する関数を推定または近似するために使用されます。人工ニューラル・ネットワークは、相互に接続された多数のニューロンで構成され、これらのニューロンは、特定の問題を解決するために相互にメッセージを交換します。これらは例によって学習し、学習過程の間にニューロン間の接続の重みを調整します。ニューラル・ネットワーク・アルゴリズムでは、コンピュータ・ビジョン、音声認識、およびビジネス上の複雑な各種問題など、様々なタスクを解決できます。

関連項目

25.1.1 ニューロンと活性化関数

ニューロンは、ニューラル・ネットワークの構成要素です。

ニューロンは、様々な重みを持つ入力値を1つ以上取得し、その入力値に依存する出力値を持ちます。出力は、各ニューロンの入力値に重みを付けて加算し、その和を活性化関数に供給することで実現されます。

通常はシグモイド関数が活性化関数の最も一般的な選択肢ですが、区分線形関数やステップ関数などの他の非線形関数も使用されます。正規化線形ユニット関数NNET_ACTIVATIONS_RELUは、大きなニューラル・ネットワークでの勾配消失問題に対応する、一般的に使用される活性化関数です。

活性化関数の例を次に示します。

  • ロジスティック・シグモイド関数

  • 線形関数

  • tanh関数

  • 逆正接関数

  • バイポーラ・シグモイド関数

  • 正規化線形ユニット

25.1.2 損失関数またはコスト関数

損失関数またはコスト関数は、1つのイベントまたは1つ以上の変数の値を、そのイベントに関連付けられたいくつかの「コスト」を直感的に表す実数にマッピングする関数です。

最適化問題では、損失関数を最小化することを目指します。損失関数の形式は、問題の性質と数学的な必要性に基づいて選択されます。

様々なシナリオにおける損失関数の違いは次のとおりです。

  • 2項分類: クロス・エントロピ関数。

  • 多クラス分類: ソフトマックス関数。

  • 回帰: 2乗誤差関数。

25.1.3 順伝播と逆伝播

順伝播と逆伝播について理解します。

順伝播は、前の層のニューロン値を加重加算し、活性化関数を適用することによって、損失関数の値を計算します。逆伝播は、ネットワーク内のすべての重みに関する損失関数の勾配を計算します。重みは、ユーザーによって(重みの境界を設定することで)指定された領域内、または隣接する層内のノード数によって定義される(データ駆動の)領域内で均一に分布する乱数の集合で初期化されます。勾配は最適化手法に提供され、損失関数を最小化するために重みを更新するために使用されます。

25.1.4 最適化ソルバー

最適化ソルバーは、損失関数の最適解を検索し、損失(コスト)関数の極値(最高か最低)を求めるための機能です。

Oracle Machine Learningには、記憶制限ブロイデン・フレッチャー・ゴールドファーブ・シャンノ(L-BFGS)が直線探索およびAdamソルバーとともに実装されています。

記憶制限ブロイデン・フレッチャー・ゴールドファーブ・シャンノ・ソルバー

L-BFGSは準ニュートン法です。この手法では、勾配評価によって指定されたランク1の更新を使用してヘッセ行列を近似します。この手法は、限られた量のメモリーしか必要としません。L-BFGSは降下方向を検索するために使用され、直線探索は適切なステップ・サイズを見つけるために使用されます。L-BFGSソルバーに保持されている過去のコピーの数は、LBFGS_HISTORY_DEPTHソルバー設定によって定義されます。反復回数が過去の深度よりも少ない場合、L-BFGSによって計算されたヘッセ行列は正確です。反復回数が過去の深度よりも多い場合、L-BFGSによって計算されたヘッセ行列は近似値です。そのため、計算速度が遅くなりすぎないようにするために、過去の深度を小さすぎる値や大きすぎる値にはしないでください。通常、この値は3から10の間です。

Adamソルバー

Adamは、ミニバッチ最適化を使用する確率的勾配降下の拡張機能です。L-BFGSソルバーはより安定性の高いソルバーですが、Adamソルバーでは、確認するデータがより少なくなることで進行速度が向上する可能性があります。Adamは、メモリー要件が少なく、計算効率が高いため、データまたはパラメータ(あるいはその両方)の観点から大きな問題に特に適しています。

25.1.5 正則化

正則化について理解します。

正規化とは、不良設定問題を解決するため、または過剰適合を防止するための追加情報を導入するプロセスのことです。不良設定または過剰適合は、統計モデルで、基礎となる関係のかわりにランダムな誤差やノイズが記述される場合に発生する可能性があります。一般的な正則化技法には、L1ノルム正則化、L2ノルム正則化、保持などがあります。

保持正則化は通常は大規模なトレーニング・データセットに使用され、L1ノルム正則化とL2ノルム正則化は、主に小規模なトレーニング・データセットに使用されます。

25.1.6 収束判定

これは、最適解に達したかどうか、および最適化の反復が終了したかどうかを検査します。

L-BFGSソルバーでは、収束基準に最大反復数、勾配の無限ノルム、および相対誤差の許容範囲が含まれます。保持正則化の場合、収束基準は、テスト・データセットの損失関数の値に加えて、これまでに学習された最良のモデルを検査します。特定の回数の反復(NNET_HELDASIDE_MAX_FAILで指定)に対してモデルが悪化したり、損失関数がゼロに近くなったり、テストデータの相対誤差が許容範囲よりも小さくなると、トレーニングは終了します。

25.1.7 LBFGS_SCALE_HESSIAN

LBFGS_SCALE_HESSIANを定義します。

これは、各反復の開始時に逆ヘッセ行列の初期近似を設定する方法を指定します。値がLBFGS_SCALE_HESSIAN_ENABLEに設定されている場合は、Oren-Luenbergerスケーリングで初期逆ヘッセ行列を近似します。LBFGS_SCALE_HESSIAN_DISABLEに設定されている場合は、各反復の開始時に逆ヘッセ行列の近似値としてIDを使用します。

25.1.8 NNET_HELDASIDE_MAX_FAIL

NNET_HELDASIDE_MAX_FAILを定義します。

検証データ(保持)は、検証データのネットワーク・パフォーマンスが改善されないか、行のNNET_HELDASIDE_MAX_FAILのエポック数と同じである場合に、トレーニングを早期に停止ために使用されます。

25.2 ニューラル・ネットワーク用のデータの準備

ニューラル・ネットワーク・アルゴリズム用のデータの準備について学習します。

このアルゴリズムでは、質的データはカテゴリ値ごとに2項属性のセットとして自動的に展開されます。Oracle Machine Learning for SQLのアルゴリズムでは、欠損値が自動的に処理されるため、欠損値の処理は必要ありません。

質的データの欠損値は最頻値に、量的データの欠損値は平均値に自動的に置換されます。このアルゴリズムでは、数値入力の正規化が必要であり、それにはz-スコア正規化が使用されます。正規化は、(ネストされていない)2次元数値列に対してのみ行われます。正規化によって、量的属性の値が同じスケール上に配置され、元の大規模なスケールを持つ属性によってソリューションに偏りがでることが回避されます。ニューラル・ネットワークは、ネストされた列の数値を、対応する列の最大絶対値でスケーリングします。

25.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''');

例25-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;
/

関連項目:

使用可能なモデル設定のリストと解説は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

注意:

モデル設定と同じ意味でハイパーパラメータという用語も使用されます。

25.4 ニューラル・ネットワークを使用したスコアリング

ニューラル・ネットワーク・アルゴリズムを使用したスコアリングについて学習します。

ニューラル・ネットワークによるスコアリングは、他の分類アルゴリズムまたは回帰アルゴリズムと同じです。次の関数がサポートされています: PREDICTIONPREDICTION_PROBABILITYPREDICTION_COST PREDICTION_SETPREDICTION_DETAILS