(57)【要約】【課題】精度を劣化させずに早期に学習を終了する。【解決手段】訓練データセットについて学習器で学習を行い、検証データセットについて精度を算出する学習部と、学習部による精度に基づいて、過学習状態を検出する検出部と、学習部による精度に基づいて、学習の収束状態を判定する判定部と、検出部が過学習状態を検出した場合、学習部による学習率を変更して再び学習させるとともに、判定部が学習部による学習が収束したと判定した場合、学習部による学習を停止させる制御部とを有する学習装置。【選択図】図７
2019074947.tif 000002
【特許請求の範囲】
【請求項１】
訓練データセットについて学習器で学習を行い、検証データセットについて精度を算出する学習部と、
前記学習部による前記精度に基づいて、過学習状態を検出する検出部と、
前記学習部による前記精度に基づいて、学習の収束状態を判定する判定部と、
前記検出部が前記過学習状態を検出した場合、前記学習部による学習率を変更して再び学習させるとともに、前記判定部が前記学習部による学習が収束したと判定した場合、前記学習部による学習を停止させる制御部と、を有する学習装置。
【請求項２】
前記検出部は、
前記精度の複数のサンプルの移動平均線において、連続Ｎ（Ｎは複数）個の精度による傾きが負を示す場合、前記過学習状態を検出する、請求項１に記載の学習装置。
【請求項３】
前記判定部は、
前記精度の複数のサンプルの移動平均線において、連続Ｌ（Ｌは複数）個の精度間の変化量が第１の閾値未満になる場合、前記収束状態と判定する、請求項１に記載の学習装置。
【請求項４】
前記学習部はさらに、
前記精度の複数のサンプルを収集する収集部を有する、請求項１に記載の学習装置。
【請求項５】
前記検出部は、
前記収集部が収集した精度の連続Ｍ個（Ｍは複数）のサンプルに関する移動平均線において、連続Ｎ個の精度の変化量の平均が第２の閾値未満になり、かつ、前記複数のサンプルのうち最終サンプル点での精度の変化量が負である場合、前記過学習状態を検出する、請求項４記載の学習装置。
【請求項６】
前記制御部は、前記検出部が前記過学習状態を検出した場合、前記学習率の変更と共に前記第２の閾値を低下するよう変更して再び学習させる、請求項５に記載の学習装置。
【請求項７】
前記判定部は、
前記収集部が収集した精度の複数のサンプル間の変化量の二乗平均平方根が第３の閾値未満である場合、前記収束したと判定する、請求項４または５に記載の学習装置。
【請求項８】
訓練データセットについて学習率に基づき学習器で学習を行い、検証データセットについて精度を算出し、
前記精度に基づいて、過学習状態を検出し、
前記精度に基づいて、学習の収束状態を判定し、
前記過学習状態を検出した場合、前記学習率を変更して再び前記学習と前記精度の算出を行い、
学習の収束状態を判定した場合、前記学習を停止する、処理を有する学習方法。
【請求項９】
訓練データセットについて学習率に基づき学習器で学習を行い、検証データセットについて精度を算出し、
前記精度に基づいて、過学習状態を検出し、
前記精度に基づいて、学習の収束状態を判定し、
前記過学習状態を検出した場合、前記学習率を変更して再び前記学習と前記精度の算出を行い、
学習の収束状態を判定した場合、前記学習を停止する、処理をコンピュータに実行させる学習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，学習装置、学習方法及び学習プログラムに関する。
【背景技術】
【０００２】
学習、特に深層学習は、ディープニューラルネットワーク（Deep Neural Network: DNN）の入力層に訓練データの入力データを入力し、DNNの計算を実行して出力層の出力データを算出し、算出された出力データと訓練データの教師データとの差分を小さくするようにDNN内の変数（重み）の値を最適化する学習を繰り返し実行する。
【０００３】
変数の最適化は、例えば、勾配法により行われる。勾配法では、例えば、訓練データの入力データからDNNで算出した出力データの値と、訓練データの教師データの値との差分の二乗和を示す関数が、最小になる変数の値を求める。具体的には、あるサンプル点での変数xiから、関数ｆの勾配に学習率εを乗じた値を減じることで次のサンプル点xi+1の変数を求める。差分の二乗和が最小になると、出力データの値の精度（Accuracy）は最大になる。
【０００４】
一般に、ある学習率で上記の学習を行い、ある程度学習が進んだら学習率を減衰させ、減衰させた新たな学習率で学習を再開することを繰り返す。そして、学習率をある回数減衰し学習が進まなくなれば学習を終了する。
【０００５】
深層学習の終了方法については、以下の文献に記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−１１５１０号公報
【特許文献２】特開２０１７−１６４１４号公報
【非特許文献】
【０００７】
【非特許文献１】“Automatic early stopping using cross validation: quantifying the criteria,” Neural Networks 11 (1998) 761-767
【非特許文献２】https://www.tensorflow.org/get_started/monitors#early_stopping_with_validationmonitor
【非特許文献３】https://keras.io/ja/callbacks/#earlystopping
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一方、深層学習には、学習期間が長い、つまり学習量が多すぎることに起因して、訓練データセットの特定のランダムな特徴に過剰に適合する過学習（過剰適合（overfitting）ともいう。）の問題がある。過学習になると、例えば、白っぽい自動車を含む訓練データセット（Training set）で学習した結果、黒っぽい自動車を含む検証データセット（Validation set）に対して正しく車種を認識できなくなる。
【０００９】
そのため、学習量が多すぎて過学習になると、変数を最適化した学習モデルが汎化できない状態になり、訓練データセットに対しては精度が向上するが、訓練データに含まれなかった未知のデータである検証データセットに対しては逆に精度が悪くなる。したがって、過学習は無駄な学習といえる。逆に、学習量が少なすぎると、学習量が不十分であり高い精度を得ることができない。
【００１０】
そこで，本開示の第１の側面の目的は，過学習による無駄な学習を減らし、精度を劣化させずに早期に学習を終了する学習装置、学習方法及び学習プログラムを提供することにある。
【課題を解決するための手段】
【００１１】
本開示の第１の側面は，訓練データセットについて学習器で学習を行い、検証データセットについて精度を算出する学習部と、
前記学習部による前記精度に基づいて、過学習状態を検出する検出部と、
前記学習部による前記精度に基づいて、学習の収束状態を判定する判定部と、
前記検出部が前記過学習状態を検出した場合、前記学習部による学習率を変更して再び学習させるとともに、前記判定部が前記学習部による学習が収束したと判定した場合、前記学習部による学習を停止させる制御部と、を有する学習装置である。
【発明の効果】
【００１２】
第１の側面によれば，精度を劣化させずに早期に学習を終了することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態における学習装置の構成例を示す図である。
【図２】プロセッサが学習プログラムを実行することで実現されるＤＮＮの一例を示す図である。
【図３】深層学習の学習率に対する、学習量と精度の変化の例を示す図である。
【図４】過学習を説明する図である。
【図５】過学習の別の例を説明する図である。
【図６】本実施の形態における学習装置の構成を示す図である。
【図７】本実施の形態における学習方法または学習プログラムの処理を示すフローチャート図である。
【図８】図７の学習と検証処理S12のフローチャート図である。
【図９】過学習を検出するための過学習判定閾値と精度の低下状態との関係を示す。
【図１０】図７の最高精度のサンプル点imaxの取得について説明する図である。
【図１１】本実施の形態の学習方法で学習した精度曲線の一例を示す図である。
【図１２】第１の比較例の精度曲線を示す図である。
【図１３】第２の比較例の精度曲線を示す図である。
【図１４】第３の比較例の精度曲線を示す図である。
【図１５】各学習率での学習量を一定（２０万エポック（サンプル点））にして学習した例を示す図である。
【図１６】本実施の形態により学習した例を示す図である。
【発明を実施するための形態】
【００１４】
図１は、本実施の形態における学習装置の構成例を示す図である。学習装置１は、情報処理装置、またはコンピュータである。学習装置１は、プロセッサであるＣＰＵ（Central Processing Unit）１０、ＣＰＵがアクセス可能なメインメモリ１２、グラフィックプロセッサ１４、グラフィックプロセッサがアクセスするＧＰＵメモリ１６、外部ネットワークとのインターフェース１８、内部バス２８を有する。グラフィックプロセッサ１４は、例えば、画像を入力データとするＤＮＮに多く含まれる畳込み演算で必要な積和演算を並列に且つ高速に実行するプロセッサである。
【００１５】
但し、本実施の形態は、グラフィックプロセッサ１４とＧＰＵメモリ１６を設けず、グラフィックプロセッサの演算をプロセッサ１０で実行し、ＧＰＵメモリ１６内に記憶するデータをメインメモリ１２に記憶する構成であってもよい。
【００１６】
学習装置１は、ハードディスクやＳＳＤ（Solid State Device）などの大容量の補助記憶装置２０，２２，２４，２６を有し、補助記憶装置には、ＤＮＮの学習プログラム２０と、学習に使用する訓練データセット２２と、学習に使用する検証データセット２４と、学習プログラムが実行されて算出される学習モデルの精度データ２６とが格納される。訓練データセットと検証データセットは、共に、入力データとＤＮＮが出力すべき教師データとを含む。
【００１７】
学習装置１には、インターネットやイントラネットなどのネットワークＮＷを介して、クライアント端末装置３０，３２がアクセス可能である。クライアント端末装置３０，３２は、学習装置１にアクセスし、クライアントが準備した訓練データセット２２と検証データセット２４について、プロセッサ１０に学習プログラム２０を実行させる。
【００１８】
プロセッサ１０は、学習プログラムを実行し、訓練データセット２２の入力データに対するＤＮＮの出力データを算出し、その出力データと訓練データセットの教師データとの差分が最小になるようにＤＮＮの変数を最適化する。さらに、プロセッサ１０は、学習プログラムを実行し、検証データセット２４の入力データに対するＤＮＮの出力データを算出し、その出力データと検証データセットの教師データとの差分に基づき、検証データセットに対する精度を出力する。そして、プロセッサは、学習プログラムを実行し、精度データ２６に基づいて、後述するように学習方法を制御し、ＤＮＮの変数を最適化した学習モデルを、少ない学習量で生成する。
【００１９】
図２は、プロセッサが学習プログラムを実行することで実現されるＤＮＮの一例を示す図である。このＤＮＮは、例えば画像データを入力とする入力層INPUTと、入力層に入力される画像データに対してフィルタの係数（または重み値）に基づいて畳込み演算を行う複数の畳込みCNV1，CNV2と、畳み込み層で算出したデータから局所的なノードの最大値を抽出するマックスプーリング層MP1, MP2と、全結合層FC1, FC2と、全結合層FC2に接続される出力層OUTPUTとを有する。
【００２０】
入力層INPUTは、複数の入力ノードを有し、それぞれの入力ノードに例えば画像データの画素データが入力される。図中、入力層INPUTは画像を模擬的に示す１つの矩形だが、実際は画像データの画素データが入力される複数のノードである。畳込み層CNV1, CNV2やマックスプーリング層MP1, MP2も同様である。
【００２１】
入力層INPUTの複数の入力ノードと、畳込み層CNV1の複数のノードとの間は、それぞれ重み値（ＤＮＮの変数）を有するエッジで結ばれる。例えば、複数の入力ノードに入力された画素データと各エッジの重み値とで積和演算され、畳込み層CNV1の複数のノードが有する活性化関数により各ノードの値が出力される。上記の各エッジの重み値は、前述のフィルタの係数（または重み値）に対応する。
【００２２】
畳込み層CNV1の複数のノードと次のマックスプーリング層MP1の複数のノードも、上記と同様に、それぞれ重み値を有するエッジで結ばれ、畳込み層CNV1のノードの値とエッジの重み値との積和演算と、マックスプーリング層MP1の各ノードの活性化関数の演算が実行され、マックスプーリング層MP1の各ノードに値が出力される。他の畳込み層やマックスプーリング層も同様である。
【００２３】
全結合層FC1,FC2は、前の層のノードと自分の層のノードが全てエッジで結ばれる。全結合層のノードの値の計算も、前の層のノードの値とエッジの重み値とによる積和演算と、自分のノードの活性化関数とにより行われる。
【００２４】
出力層OUTPUTの複数のノードには、例えば、入力される画像に認識対象の画像が含まれる確率を示す確率ベクトルが出力される。例えば、認識対象の画像が１００種類の場合、出力層は１００の出力ノードを有する。そして、各出力ノードには、入力画像内に認識対象画像が含まれている確率が出力される。確率ベクトルは、全確率の合計が１になるベクトルであり、入力画像にどの認識対象画像が含まれるかを示す特徴ベクトルである。
【００２５】
図２のＤＮＮの場合、訓練データセットは、複数の入力画像である入力データと、それぞれの入力画像に対する確率ベクトルである教師データとを有する。また、評価データセットも、訓練データと同様に、複数の入力画像である入力データと、それぞれの入力画像に対する確率ベクトルである教師データとを有する。但し、評価データセットの評価データは、訓練データセットの訓練データと重複しない。これにより、訓練データセットで学習して変数が最適化されたＤＮＮに対し、検証データセットの入力データで算出したＤＮＮの出力データと検証データセットの教師データとの差分で、精度が評価される。
【００２６】
図２のＤＮＮの学習では、学習装置のプロセッサが学習プログラムを実行して、例えば以下の処理を行う。
（１）学習工程
まず、プロセッサが、Ｄ個の訓練データの入力データについて、ＤＮＮの入力層から出力層に向かってそれぞれ定義された演算を実行し、出力層に出力される出力データを算出する。Ｄ個は、例えば学習装置のコンピュータが一度に並列演算できる訓練データの数であり、バッチ数と呼ばれる。
次に、プロセッサが、算出した出力データと訓練データの教師データとの差分の二乗和を算出する。これが、前述した関数ｆの値である。そして、前述の勾配法により、関数ｆの傾き（∂f/∂x）に学習率εを乗じた値を現在のＤＮＮの変数（重み値）xiから減じて、新たな変数xi+1を算出する。すなわち、xi+1 = xi - ε*∂f/∂xである。
（２）検証工程
上記の（１）を所定回数（Ａ回）繰り返した後、検証データの入力データについてＤＮＮの演算を実行して出力データを算出し、検証データの教師データとの差分の二乗和に基づいて、精度を算出する。
（３）ある学習率εで上記の（１）（２）を所定回数（Ｂ回）繰り返したら、学習率εを減衰させ、再度（１）（２）を所定回数（Ｂ回）繰り返す。減衰させた学習率εで（１）（２）を所定回数（Ｂ回）繰り返すことを、予め決められた回数（Ｃ回）行って、つまり、Ｃ個の学習率について繰り返し、学習を終了する。
【００２７】
図２のＤＮＮは、一例であり、本実施の形態が適用される学習モデルは他のＤＮＮでも良い。
【００２８】
図３は、深層学習の学習率に対する、学習量と精度の変化の例を示す図である。横軸が学習量、縦軸が精度に対応する。横軸の目盛は、前述の学習処理の（１）（２）により精度が出力される単位であるエポック（Epoch）を示し、各エポック（またはサンプル点）に対して、精度がプロットされている。学習量は、学習した訓練データの総計である。したがって、上記の（１）での入力データ数がＤ個であれば、１エポックの学習量はＤ個*Ａ回となり、１つの学習率εで行う学習量は、Ｂ回のエポック分であるので、Ｄ個*Ａ回*Ｂ回となり、更に、全学習量は、Ｄ個*Ａ回*Ｂ回*Ｃ回となる。
【００２９】
図３の例では、１個の学習率εで行うエポック数は３０回（＝Ｂ回）であり、３個（＝Ｃ回）の学習率εに対して学習を繰り返し行っている。３個の学習率εは1/10ずつ減少している。上記（１）学習工程の訓練データの個数（Ｄ個）と、上記（１）学習工程を繰り返す回数（Ａ回）によって、１エポックの学習量（Ｄ個*Ａ回）が異なる。そこで、横軸は、総訓練データ数である学習量とエポックEpochに対応する。
【００３０】
図３の例では、
（ａ）ある学習率ε=0.01で複数のエポック数分、訓練データによる学習工程（１）の繰り返し（Ａ回）と検証データによる検証工程（２）を繰り返す間に、精度が最初は急上昇し、その後徐々に上昇する。
（ｂ）エポック数が３０回（Ｂ回）に達すると、図３の例では学習率εを１０分の１(1/10)に減少してε=0.001とし、再度学習（１）と検証（２）を繰り返す。ε=0.001での精度は、最初急上昇したあと少し減少している。この減少が過学習状態OFに対応する。
（ｃ）同様に、エポック数が３０回（Ｂ回）に達すると、学習率εを更に１０分の１（1/10）に減少してε=0.0001にし、再度学習（１）と検証（２）を繰り返す。
【００３１】
図３に拡大して左側に示したとおり、学習率εが大きいε=0.01では、精度の変動幅が大きい。図３の左側に拡大して示されている。これは、学習率が大きいため、変数の更新幅が大きくなり、精度の変動幅が大きくなるからである。一方、学習率が減少してε=0.001、0.0001になると、精度の変動幅は小さくなっている。
【００３２】
図４は、過学習を説明する図である。深層学習を含む機械学習では、学習期間（学習量）が長すぎると（多すぎると）、ＤＮＮである学習モデルが訓練データセットの特定のランダムな特徴にまで過剰に適合してしまう過学習が発生する。過学習は過剰適合（Overfitting)とも呼ばれている。過学習の例としては、前述したとおり、白っぽい自動車を含む訓練データセット（Training set）で学習した結果、黒っぽい自動車を含む検証データセット（Validation set）に対して正しく車種を認識できなくなるなどである。
【００３３】
過学習状態になると、ＤＮＮである学習モデルが汎化できていない状態になる。その結果、図４に示すとおり、訓練データセットの精度は実線のように向上するが、訓練データセットとは異なり、学習モデルには未知のデータである検証データセットに対する精度は、破線のように逆に悪くなる（低下する）。その結果、訓練データセットの精度と検証データセットの精度との差であるロス(Loss)が拡大する。図４の例では、訓練データセットによる学習量がＥ０の時点で、検証データセットに対する精度が最大になり、その後徐々に低下している。
【００３４】
一方、図４から分かるとおり、学習期間（学習量）が短い場合は、学習回数が不十分のため、訓練データセットの精度も検証データセットの精度も十分に向上していない。
【００３５】
したがって、十分な学習量まで訓練データセットによる学習と検証データセットによる検証を繰り返し、過去の検証データセットの精度の変化をチェックして過学習が検出されれば、過去の検証データセットの精度が最大のエポックでの変数を設定して、学習モデルを完成させるのが望ましい。但し、過学習による精度の低下を見極めるためには、長期にわたり学習と検証を繰り返し、過学習開始直前のサンプル点の変数を最適化変数と判定する必要がある。この場合、過学習状態の学習は無駄な学習になってしまう。
【００３６】
図５は、過学習の別の例を説明する図である。図５にも訓練データセットの精度（実数）と検証データセットの精度（破線）とが示される。過学習は、前述したとおり、訓練データセットでの精度は上昇を続けているが、検証データセットでの精度が上昇から下降に転じて下降し続ける現象である。
【００３７】
しかし、図５に示すとおり、学習量E1では、検証データセットの精度がピークになりその後下降しているが、その後再度上昇し、学習量E2でピークとなっている。さらに、検証データセットの精度が、学習量E2でピークとなった後下降し、その後再度上昇し、学習量E3で再度ピークとなっている。そして、その後は、検証データセットの精度が長期間にわたり下降をし続けている。
【００３８】
このように、検証データセットの精度は、下降と上昇を繰り返す場合があり、過学習を判定するのは単純ではない。図５の例の場合、学習量E4まで学習を継続し、学習量E3からE4まで長期にわたり検証データセットの精度が低下したことで真の過学習に入ったと判断し、学習を終了する。そして、過去の検証データセットの精度が最大ピークとなった学習量E3での変数を設定して、学習モデルを完成するのが望ましい。但し、その場合学習量E4まで学習を継続するため、学習量E3-E4の間の学習は無駄になる。
【００３９】
［本実施の形態の説明］
図３に戻り、同じ学習率εでの学習と検証を一定の学習量行うことを、学習率を減少しながら、繰り返す場合、モデルのＤＮＮの構成と、訓練データセット及び検証データセットに依存して、ある学習率で過学習が発生し始める学習量が異なる。
【００４０】
その結果、次のような現象が想定される。
（１）現象１：各学習率での学習量が多すぎると、それぞれの学習率で過学習が発生してしまい、目標とする検証データセットでの精度に達するまで学習期間（学習量）が長くなる（多くなる）。
（２）現象２：各学習率での学習量が多すぎると、それぞれの学習率で過学習が発生し、検証データセットでの精度が低下したまま、次の学習率での学習が再開され、最終的に達する検証データセットでの精度が、目標とする精度に達しない。
（３）現象３：各学習率での学習量が少なすぎると、それぞれの学習率での検証データセットでの精度が十分に向上する前に、次の学習率での学習が再開され、最終的に達する検証データセットでの精度が、目標とする精度に達しない。
【００４１】
そこで、本実施の形態では、学習装置は、各学習率での学習量を一定にせず、各学習率での学習と検証を繰り返す中で、所定の学習量の間（または所定の学習期間）検証データセットの精度が低下傾向にあることを検出すると、学習率を更新、例えば学習率を減衰させ、その学習率での学習と検証を再開する。所定の学習量の間（または所定の学習期間）検証データセットの精度が低下傾向にあることは、過学習が起こって精度が低下していることを判定することに対応する。
【００４２】
そして、学習装置は、好ましくは、所定の学習量の間（または所定の学習期間）精度が低下傾向にあることを検出するまでの過去の最大の精度の変数から、更新後の学習率での学習と検証を再開する。過学習により精度が低下した学習モデルの変数は適切でないからである。
【００４３】
また、学習装置は、好ましくは、検証データセットの精度が収束したら学習を終了する。この精度の収束の判定は、例えば、精度が低下傾向にあることを検出したタイミングで行う。
【００４４】
さらに、学習装置は、好ましくは、検証データセットの精度の変化量が大きいので、精度曲線を移動平均した移動平均線に変換し、移動平均線について、上記の所定の学習量の間にわたり検証データセットの精度が低下傾向にあることを検出する。特に好ましくは、学習率が大きい場合検証データセットの精度の変化量が大きいので、時間平均することで実質的にローパスフィルタを通過させ、高周波成分の変化を平滑化した移動平均線に変換する。検証データセットの精度の変化量が大きいことは、図３で拡大して示したとおりである。
【００４５】
上記の精度が低下傾向にあることの検出の条件は、例えば、検証データセットの精度の移動平均線における連続Ｎ個（Ｎは複数）の精度の変化量の平均が過学習判定閾値未満になることである。連続Ｎ個（Ｎは複数）の精度の変化量の平均をチェックすることは、精度の傾きをチェックすることである。
【００４６】
連続Ｎ個（Ｎは複数）の精度の変化量の平均が過学習判定閾値未満になることは、長期的に見て、学習により精度がまだ改善（上昇）しているのか、または、過学習が起こって精度が悪化（低下）しているのかを判定することである。過学習判定閾値を正に設定すると、前者の、学習により精度がまだ改善（上昇）しているのかの判定を行うことができ、ゼロまたは負に設定すると、後者の、過学習が起こって精度が悪化（低下）しているかの判定を行うことができる。
【００４７】
さらに、好ましくは、精度が低下傾向にあることの検出の条件に、最終サンプル点での精度の変化量が負であることを加える。
【００４８】
上記の精度の収束の判定の条件は、例えば、検証用データセットの精度の移動平均線における連続Ｌ個（Ｌは複数）の精度の変化量の二乗平均平方根が収束判定閾値未満になることである。Ｌ個（Ｌは複数）の精度の変化量の二乗平均平方根は、精度の変動量に対応する。連続Ｌ個（Ｌは複数）の精度の変化量の二乗平均平方根が収束判定閾値未満になることは、精度が飽和したことをチェックすることである。学習が十分に進み、かつ、学習率が小さくなってくると、精度が飽和し、精度が変動しなくなる。飽和していない間は、精度が上昇したり赤穂したりを繰り返し、精度の変動量が大きい。
【００４９】
この条件が満たされると、学習装置は、これ以上学習により精度が改善しないと判定し、学習を終了させる。
【００５０】
本実施の形態によれば、各学習率での学習量を最適な量に（学習期間を最適な期間に）適宜制御することができ、短い学習期間（少ない学習量）で目標とする精度に達することができる。
【００５１】
図６は、本実施の形態における学習装置の構成を示す図である。学習装置は、訓練データセット２２の訓練データについて学習を行い、検証データセット２４の検証データについて精度を算出する学習部４１を有する。さらに、学習装置は、学習部４１が算出した精度に基づいて、過学習状態を検出する検出部４２と、学習部４１が算出した精度に基づいて、学習の収束状態を判定する判定部４３とを有する。
【００５２】
そして、学習装置は、検出部４２が過学習状態を検出した場合、学習部４１による学習率を変更して再び学習部に学習させるとともに、判定部４３が学習部による学習が収束したと判定した場合、学習部による学習を停止させる制御部４０を有する。
【００５３】
図７は、本実施の形態における学習方法または学習プログラムの処理を示すフローチャート図である。学習装置のプロセッサは、学習プログラムを実行して、以下の処理を実行する。
【００５４】
プロセッサは、まず、初期値の設定として、学習率ε、過学習判定閾値Δth、収束判定閾値δthを設定する（S10）。そして、プロセッサは、訓練データセットと検証データセットを利用して深層学習を開始する（S11）。プロセッサは、学習では、訓練データセットによる学習と検証データセットによる検証を実行し（S12）、検証で算出した検証データセットの精度の所定の学習量の期間にわたる低下傾向があるか否かに基づいて、過学習状態を検出する（S13）。
【００５５】
上記の学習と検証工程S12は、前述のエポックEpochの１回分に対応する。
【００５６】
過学習状態が検出されない場合（S13のNO）、プロセッサは、学習と検証工程S12を繰り返す。過学習状態が検出されると（S13のYES）、プロセッサは、学習を一旦停止し（S14）、検証データセットの精度が収束しているか否かを判定する（S15）。
【００５７】
プロセッサは、検証データセットの精度が収束していないと判定すると（S15のNO）、学習率εと過学習判定閾値Δthを減衰して更新する（S16）。さらに、プロセッサは、更新前の学習率での検証データセットの最高精度のサンプル点imaxを取得する（S17）。最高精度のサンプル点imaxとは、更新前の学習率での検証データセットの精度の曲線の複数のエポックEpochの点（サンプル点）のうち、最高精度の点である。そして、プロセッサは、更新した学習率ε、過学習判定閾値Δthを設定し、学習を再開するＤＮＮの変数を工程S17で取得したサンプル点imaxの変数に設定し（S18）、学習を再開する（S11）。
【００５８】
一方、プロセッサは、検証データセットの精度が収束していると判定すると（S15のYES）、最後の学習率での検証データセットの請求項dの曲線の複数のエポックEpochの点（サンプル点）のうち、最高精度の点imaxの変数を設定して（S19）、学習を終了する。
【００５９】
次に、図７の学習と検証処理S12を説明し、その後、図７の過学習検出処理S13と、精度の収束検出処理S15について詳細に説明する。
【００６０】
[学習と検証処理S12]
図８は、図７の学習と検証処理S12のフローチャート図である。前述のとおり、図８の学習と検証処理S12は、１エポックEpochでの処理に対応する。学習と検証処理では、プロセッサは、学習プログラムを実行して、以下の処理を実行する。
【００６１】
プロセッサは、D個の訓練データセットの入力データについて、DNNの演算を実行し、出力データを算出する（S121）。この出力データは、DNNの現在の変数xiに基づいて算出される。そして、プロセッサは、算出した各出力ノードの出力データと訓練データセットの教師データとの差分の二乗和を算出し、差分の二乗和に基づいてDNNの新たな変数xi+1を算出する。
【００６２】
この新たな変数への更新では、例えば、誤差逆拡散法に従い、各出力ノードの値（出力データの値）と訓練データセットの教師データとの差分をDNNの入力ノードに向かって逆拡散し、各層の複数のノードでの差分を小さくするように前段の層の複数のノードとの間のエッジの変数を最適化する。
【００６３】
上記のDNNの演算では、前段の層の複数のノードの値とエッジの重み値との積和演算と、積和演算結果を入力とする後段の層のノードの活性化関数の演算などが含まれる。そこで、学習装置のGPUによる積和演算能力、例えば並列演算数、に基づいて、GPUが一度に処理できる最大数に前述の訓練データセットの数D個が設定される。このD個はバッチ数とも呼ばれる。
【００６４】
プロセッサは、上記の訓練データセットの入力データに対するDNNの演算S121と、変数の更新S122とを、予め決められたA回繰り返す（S123）。工程S121-S123が１つのエポックでの学習ステップである。したがって、前述のとおり、１つのエポックでの学習量は、バッチ数D個と繰り返し回数A回の積（D＊A）である。
【００６５】
次に、プロセッサは、学習ステップで最適化された変数のDNNにより、検証データセットの１つの又は少数の検証データの入力データについて、DNNの演算を実行して出力ノードの出力データを算出する（S124）。そして、プロセッサは、検証データの入力データから算出した出力データの値と検証データの教師データとの差分に基づいて、検証データによる精度を算出する（S125）。
【００６６】
精度は、最大精度1.0から上記の差分の二乗和の平均値の平方根（二乗和平均平方根）を減じて求められる。例えば、前述の入力データを画像の画素データとし、出力ノードの出力データを入力画像に含まれる認識対象画像が存在する確率ベクトルと仮定する。この場合、検証データの入力データから算出した出力データの値は確率値（0.0〜1.0）であり、一方、教師データの値は、入力画像に含まれる認識対象画像の出力ノードでは最大確率値1.0となり、入力画像に含まれない認識対象画像の出力ノードでは最小確率値0.0となる。よって、差分の二乗和平均平方根は、確率の誤差であり0.0〜1.0の値である。そして、精度は、最大精度1.0から差分の二乗和平均平方根を減じることで算出される。
【００６７】
上記の工程S124,S125が検証ステップである。
【００６８】
[過学習検出処理S13]
過学習検出処理S13では、プロセッサは、以下の演算により検証データセットの精度の所定の学習量の期間にわたる低下傾向があるか否かを判定する。
【００６９】
【数１】
2019074947.tif 000003
【００７０】
ここで、y(i)はサンプルiでの検証データセットの精度である。
【００７１】
プロセッサは、式１により、現在のサンプルiから過去のM-1個のサンプルでの精度の合計
y(i)+y(i-1)+y(i-2)+…+y(i-(M-1))をサンプル数Mで除して、現在のサンプルiから過去M-1個のサンプルの精度の移動平均値ΦM(i)を算出する。
【００７２】
次に、プロセッサは、式２、式３-1により、検証データセットの精度の移動平均線における連続N個の精度の変化量の平均値（式３-1の左辺）を算出する。すなわち、式２によるΔiがサンプルiとi-1との間の精度の変化量である。さらに、プロセッサは、式3-1の左辺により、サンプルiから過去のN-1個のサンプルでの精度の変化量の合計
Δi+Δi-1+Δi-2+…+Δi-(N-1)をサンプル数Nで除して、検証データセットの精度の移動平均線における連続N個の精度の変化量の平均値を算出する。
【００７３】
そして、プロセッサは、式3-1の不等号式に基づいて、精度の移動平均線における連続N個の精度の変化量の平均が、過学習判定閾値Δth未満か否か判定する。この判定では、上記の連続するN個の精度の変化量の合計が、別の過学習判定閾値未満かを判定してもよい。その場合、過学習判定閾値ΔthはN倍にされる。
【００７４】
過学習判定閾値Δthは、正、負のいずれでもよい。前述のとおり、過学習判定閾値を正に設定すると、精度が未だ上昇過程にあるか否かを判定できる。また、過学習状態では、精度が低下する傾向を示すので、過学習判定閾値Δthを、例えば、ゼロ、または負の値に設定すると、過学習状態にあるか否かを判定できる。
【００７５】
また、過学習を判定するための連続N個の精度の変化量の平均値でのＮ個は、上記の移動平均を求める場合のＭ個より十分に大きい。つまり、Ｎ＞Ｍである。
【００７６】
図９は、過学習を検出するための過学習判定閾値と精度の低下状態との関係を示す。実線が訓練データセットの精度、破線が検証データセットの精度である。検証データセットの精度は、3種類の過学習状態OF1,OF2,OF3が示される。３種類の過学習状態の傾きはOF1＞OF2＞OF3の順に大きい。例えば、学習開始時の学習率εが大きい場合は、精度の変動幅が大きくなり、過学習状態での精度の低下の程度が大きくなり、一方、学習の終了時での学習率εが小さい場合は、精度の変動幅が小さく、過学習状態での精度の低下の程度は小さくなる。したがって、学習率が大きい場合、過学習判定閾値をΔth = -Yに、次に学習率が大きい場合、Δth = -X (X<Y)に、学習率が最小の場合、Δth = 0に設定することの好ましい。
【００７７】
上記の理由から、図７のS17では、学習率を減衰するときに同時に過学習判定閾値Δthも減衰させて更新している。
【００７８】
過学習検出処理でのＮは、図５に示したように精度が上下した後に低下し続ける過学習状態を検出するために適切な値が選択される。経験的には、訓練データセットのデータ数をNdとすると、学習量が２*NdになるようにＮを設定するのが過学習判定に適切な最小のＮである。すなわち、全訓練用データセットを少なくとも２回学習した場合の精度の傾向が低下傾向にあれば過学習状態と判定することで、図５の精度が上下した後の低下し続ける過学習状態を検出できる。Ｎを大きく設定すれば過学習状態を確実に検出できるが、その場合は学習量が多くなり無駄な学習が発生するリスクが有る。
【００７９】
前述したとおり、バッチサイズをＤ個での学習をＡ回繰り返す毎に、検証データセットで精度を算出しているので、連続Ｎ個のサンプル点での精度の変化量の平均での学習量は、Ｄ*Ａ*Ｎであるので、以下の式を満たす最小Ｎを設定することが好ましい。
Ｄ*Ａ*Ｎ≧２*Nd
Ｎ≧２*Nd／（Ｄ*Ａ）
但し、Ｎ＞Ｍ
【００８０】
上記の代替案として、過学習検出処理S13で、プロセッサは、上記の式3-1に代えて、以下の式3-2で過学習の発生を判定してもよい。
【００８１】
【数２】
2019074947.tif 000004
【００８２】
式3-2は、式3-1の条件に、Δi<0の条件を加えている。すなわち、代替の過学習の発生の判定では、精度の移動平均線における連続N個の精度の変化量の平均が、過学習判定閾値Δth未満か否かに加えて、最後のサンプルiでの精度が前サンプルiの精度より低下しているか否かが判定される。この条件を加えることで、精度が再度上昇した場合は過学習の発生が検出されない。または、最後の所定の数（複数）のサンプルでの精度がすべて前サンプルの精度より低下しているか否かの条件を加えるようにしてもよい。
【００８３】
このように、プロセッサは、図７において過学習を検出すると（S13のYES）、精度が収束していなければ（S15のNO）、学習率を下げて学習を再開する。このとき、過学習判定閾値も学習率の減衰の程度に対応して下げる。
【００８４】
[精度の収束検出処理S15]
次に、学習の終わりを判定する精度の収束検出処理S15について詳述する。過学習検出処理S13では、プロセッサは、以下の演算により、検証データセットの精度が収束しているか否かを判定する。
【００８５】
【数３】
2019074947.tif 000005
【００８６】
ここで、y(i)は、前述と同様に、サンプルiでの検証データセットの精度である。
【００８７】
プロセッサは、式４により、検証データセットの精度の移動平均線におけるサンプルiとi-1との間の精度の変化量δiを算出する。さらに、プロセッサは、式５により、現在のサンプルiから連続する過去N-1個のサンプル(i-1)〜(i-(N-1))、つまり連続するN個のサンプル、それぞれの精度の変化量δi〜δi-(N-1)の二乗平均の平方根（式５の左辺）が、収束判定閾値δth未満か否か判定する。
【００８８】
上記式５の左辺のNは、精度の収束の判定の連続N個の精度の変化量の二乗平均平方根を意味するが、このN個は、過学習の判定の連続N個と同じである。但し、精度の収束判定における連続N個は、過学習の判定の連続N個と異なってもよい。
【００８９】
[過学習の判定S13と収束の判定S15のタイミング］
図７によれば、過学習が検出されると（S13のYES）、一旦深層学習を停止し、精度の収束の判定（S15）が行われる。つまり、過学習と収束が同時期に検出されると、学習が終了する。
【００９０】
例えば、学習開始時は、学習率が大きいので、過学習が検出されても、精度の収束が検出されることはない。一方、学習が進捗し、学習率が小さくなると、精度の収束が検出されやすくなる。そのため、学習率が小さいサイクルで、連続N個のサンプルの精度の変化量の平均が過学習判定閾値Δth未満になって過学習が検出されるとともに、同じ連続N個のサンプル点の精度の変化量の二乗平均平方根が収束判定閾値δth未満になって収束が検出されることがある。
【００９１】
具体的に言えば、学習率の減衰が進むにつれて、過学習は検出されるが収束は検出されない状況から、最後は、過学習が検出されると共に収束も検出される状況に変化する。この時、学習が終了する。一般に、収束状態は、過学習が発生する前の最高精度近辺での連続N個のサンプル点で発生すると、その後の過学習が発生している連続N個のサンプル点でも発生する。したがって、本実施の形態では、過学習が検出されてから（S13のYES）、収束を判定している（S15）。
【００９２】
過学習の判定S13と収束の判定S15の両方を、学習と検証の処理S12を実行する度に行っても良い。但し、その場合、学習率の減衰が進んだところで、収束は検出されるが未だ過学習は検出されない状況の後に、収束と過学習が同時に判定される状況になることが予測される。その場合、学習と検証の処理S12の度に行う収束の判定が無駄になる。したがって、図７のように、過学習を検出したときに学習を停止して収束を検出するようにするのが効率的である。
【００９３】
[更新前の学習率での検証データセットの最高精度のサンプル点imaxの取得（S17）]
図１０は、図７の最高精度のサンプル点imaxの取得について説明する図である。図１０には、３つの学習率ε1、ε2、ε3での検証データセットの精度曲線が示され、それぞれの学習率での学習で過学習OFが検出されている。図４，５などに示したとおり、過学習が発生すると検証データセットの精度曲線が低下傾向を示す。そこで、プロセッサは、過学習が検出された後、過去のサンプルの中で最高精度のサンプルimaxを取得し、その最高精度のサンプルでの変数で学習を再開する。これにより、学習が終了時の精度をできるだけ高くすることができる。
【００９４】
[本実施の形態の精度曲線]
上記の通り、本実施の形態の学習では、プロセッサは、ある学習率εと過学習判定閾値Δthと収束判定閾値δthを設定し、設定した学習率で訓練データセットによる学習と検証データセットによる検証とを繰り返しながら、各サンプル点（各エポック）で過学習状態に入ったか否か判定する。過学習状態に入ったことを検出すると、プロセッサは、学習率と過学習判定閾値とを減衰して更新し、最大精度サンプル点でのDNNの変数で、再度上記の学習と検証を再開する。さらに、過学習状態の検出とは独立して、精度が収束したか否かの判定を行い、収束したと判定されると学修を終了する。
【００９５】
図１１は、本実施の形態の学習方法で学習した精度曲線の一例を示す図である。横軸がエポック、縦軸が精度である。これによれば、学習率ε0, ε1, ε2, ε3（ε0＞ε1＞ε2＞ε3）それぞれでの学習と検証工程で、過学習状態になったか否かの判定を行い、学習量に対応するエポックE14で精度AC10に達している。過学習状態になったことを検出すると学習率を減衰させて次の学習と検証の繰り返し工程に移行させるので、各学習率での学習量E11-E10、E12-E11、E13-E12、E14-E13は一定ではない。
【００９６】
図１１の例では、過学習状態になったことを検出したら学習率を減少させて学習と検証を再会させているので、各学習率での学習量（エポック数）が適切に決められ、過学習状態により学習終了までの学習量が無駄に長くなることはない。
【００９７】
図１２は、第１の比較例の精度曲線を示す図である。第１の比較例は、前述の現象２に対応する。第１の比較例では、各学習率での学習量が多すぎるため、各学習率での学習中に過学習状態が発生し、学習終了までの学習量が無駄に多くなっている。図１１での総学習量E14に対して、図１２での総学習量はE24と長い。また、第１の比較例での到達精度は、過学習により精度が低下した時の変数で学習率を更新して学習を再開しているため、図１１での到達精度AC10より低い。
【００９８】
図１３は、第２の比較例の精度曲線を示す図である。第２の比較例は、前述の現象１に対応する。第２の比較例でも、各学習率での学習量が多すぎるため、各学習率での学習中に過学習状態が発生し、学習終了までの学習量が無駄に多くなっている。第２の比較例では、到達精度は図１１での到達精度AC10と同程度であるが、学習終了までの学習量が図１１の学習量E14より多くなっている。
【００９９】
図１４は、第３の比較例の精度曲線を示す図である。第３の比較例は、前述の現象３に対応する。第３の比較例では、各学習率での学習量が少なすぎて、精度が最高になる前に学習率が更新されている。その結果、第３の比較例では、総学習量がE44と図１１での総学習量E14より少なくなっているが、最終到達精度は図１１での到達精度AC10より低い。
【０１００】
図１１〜図１４から理解できるとおり、各学習率での学習量を長期にわたって過学習状態が発生する前の適切な量に制御することで、総学習量を抑えつつ目標の到達精度に達することができる。
【０１０１】
図１５は、各学習率での学習量を一定（２０万エポック（サンプル点））にして学習した例を示す図である。各学習率ε0, ε1, ε2, ε3（ε0＞ε1＞ε2＞ε3）での学習量を固定し、エポック数E50, E51,E52, E53でそれぞれ学習率ε0, ε1, ε2, ε3に設定した結果、特に、E52-E53とE53-E54で過学習状態が長期にわたり発生し、総学習量はE54と多くなっている。
【０１０２】
図１６は、本実施の形態により学習した例を示す図である。この例では、学習率ε2, ε3での学習量E62-E63、E63-E64が、図１５の例よりも特に少なくなっている。また、この例では、学習率ε1での学習量E60-E61も、図１５の例のE50-E51よりも若干少なくなっている。その結果、図１５と図１６とでは到達精度は0.5を少し上回り同程度であるが、総学習量は、図１５のE54の８０万回よりも、図１６のE64の５０万未満と大幅に少なくなっている。
【０１０３】
以上説明したとおり、本実施の形態によれば、各学習率での学習中に過学習が検出されたら学習率を更新して学習を再開するので、各学習率での学習量を少なくでき、無駄な過学習状態の発生を抑制できる。さらに、精度がさらに向上する前に学習率を更新することがなくなり、到達精度を高くできる。
【符号の説明】
【０１０４】
１：学習装置
１０：プロセッサ
１２：メインメモリ
１４：ＧＰＵ
１６：ＧＰＵメモリ
２０：学習プログラム
２２：訓練データセット
２４：検証データセット
２６：精度データ
４０：制御部
４１：学習部
４２：過学習の検出部
４３：収束の判定部
ＤＮＮ：深層学習モデル、ディープニューロンネットワーク
ＯＦ：過学習
ε：学習率
EPOCH：エポック
Δth：過学習判定閾値
δth：収束判定閾値
【図１】
2019074947.tif 000006
【図２】
2019074947.tif 000007
【図３】
2019074947.tif 000008
【図４】
2019074947.tif 000009
【図５】
2019074947.tif 000010
【図６】
2019074947.tif 000011
【図７】
2019074947.tif 000012
【図８】
2019074947.tif 000013
【図９】
2019074947.tif 000014
【図１０】
2019074947.tif 000015
【図１１】
2019074947.tif 000016
【図１２】
2019074947.tif 000017
【図１３】
2019074947.tif 000018
【図１４】
2019074947.tif 000019
【図１５】
2019074947.tif 000020
【図１６】
2019074947.tif 000021