以下、本発明の実施形態について図面を用いて詳細に説明する。なお、以下の説明において、同一又は相当要素には同一符号を用い、重複する説明は省略する。
図1は、実施形態に係るニューラルネットワーク学習装置の構成を示すブロック図である。図2は、図1のニューラルネットワーク学習装置におけるニューラルネットワークの構造を説明する図である。図1に示すように、ニューラルネットワーク学習装置100は、入力又は予め設定された初期構造の階層型のニューラルネットワークを、学習させて最適化する装置である。
ニューラルネットワークは、人間の脳の情報処理機構を模した数理モデルであり、学習というプロセスを介して、必要とされる情報処理を実現する。ニューラルネットワークは、例えば、パターン認識及び連想記憶等の処理に適用することができる。ニューラルネットワーク学習装置100で得られる最適化したニューラルネットワークとは、対象とする問題に対する答えを出力する、適切なネットワーク構造を有するニューラルネットワークを意味する。まず、ニューラルネットワーク学習装置100が対象とする階層型のニューラルネットワークの一例について説明する。
図2に示すように、ニューラルネットワーク1は、入力層2、1又は複数の中間層4及び出力層6を備え、各層にそれぞれ、ni,nm,no個のニューロン8を含む。図示する一例では、例えばパターン認識として4クラスに識別すべく、出力層6が4つのニューロン8を含む4次元のものとされている。
ニューロン8とは、ニューラルネットワーク1を構成する一素子である。ニューロン8は、生体の神経細胞を厳密に模倣したものではなく、神経細胞の特定の機能を抽出して単純化した数理モデルである。ニューロン8は、素子、ユニット、又はニューロンモデルとも称される。中間層4は、隠れ層とも称される。
中間層4の数及び中間層4のニューロン数n
mは、後述するように、適応的に変化する。入力データxの各成分を受け取った入力層2のニューロン8は、入力データxをそのまま出力する。中間層4のニューロン8は、入力データxのベクトルを受け取り、下式(1)で表される反応強度Bb(x)を出力する。ここで、Sa(x)は、中間層4のニューロン8が単体時に出力する単体反応強度であり、下式(2)で与えられる。μaは、ニューロン8の反応中心、σaはニューロン8の反応幅である。中間層4の各ニューロン8は競合関係にあり、それらの反応強度の和は全ての入力に対して1に保たれる。
出力層6のニューロンcは、中間層4のニューロン8との間の結合荷重wによって重みづけられた中間層4の各ニューロン8の反応強度を受け、その線形和を出力する。ニューラルネットワーク1の出力データyは、下式(3)で表すことができる。なお、以下では、反応中心μ、反応幅σ及び結合荷重wをパラメータξでひとまとめに表現する場合がある。結合荷重は、例えば、結合係数、結合重み、又は重みとも称される。
図1に示すように、ニューラルネットワーク学習装置100は、CPU[Central ProcessingUnit]、ROM[Read OnlyMemory]、RAM[RandomAccess Memory]等を有する電子制御ユニットである。ニューラルネットワーク学習装置100では、ROMに記憶されているプログラムをRAMにロードし、CPUで実行することで、各種の制御を実行する。ニューラルネットワーク学習装置100は、複数の電子制御ユニットから構成されていてもよい。ニューラルネットワーク学習装置100は、例えば汎用コンピュータにより構成できる。
ニューラルネットワーク学習装置100は、初期構造取得部10と、演算部12とを有している。初期構造取得部10は、初期構造を有するニューラルネットワーク1を取得する。例えば初期構造取得部10は、初期構造のニューラルネットワーク1を、外部からの入力により、又は、予め設定することにより取得する。例えば初期構造のニューラルネットワーク1においては、中間層4は1層とされ、中間層4のニューロン数は複数とされ、各ニューロン8の結合荷重wは、予め設定された初期荷重値とされている。演算部12は、初期構造取得部10で取得した初期構造のニューラルネットワーク1を最適化する演算を行う。
本実施形態において、演算部12は、データベース20、学習部30及び中間層生成部40を備えている。データベース20は、複数の学習データ(学習サンプルとも称される)を予め記憶して格納する。学習データは、ニューラルネットワーク1を学習するためのデータである。学習データは、入力データと結果の規範としての教師データとの組で表されるデータである。学習データは、例えば実測又はシミュレーション等により得ることができる。データベース20は、学習部30の処理に用いられる後述の第1閾値th_e、基準変化量th_d、基準回数th_c、基準合計値th_w、及び、基準ニューロン数th_nを予め記憶して格納する。データベース20は、中間層生成部40の処理に用いられる後述の第2閾値th_e2、及び、基準追加数N1を予め記憶して格納する。
学習部30は、複数の学習データによりニューラルネットワーク1を学習させる学習処理を行う。学習処理は、データ読込処理、結合荷重修正処理、ニューロン生成処理、及びニューロン消滅処理を含む。学習部30は、学習データ読込部32と、結合荷重修正部34と、ニューロン生成部36と、ニューロン消滅部38と、を有している。
学習データ読込部32は、データ読込処理を実行する。データ読込処理は、データベース20から学習データを読み込む処理である。例えばデータ読込処理では、データベース20に記憶された複数の学習データの1つを読み込む。学習データ読込部32は、読み込んだ学習データを結合荷重修正部34へ出力する。
結合荷重修正部34は、結合荷重修正処理を実行する。結合荷重修正処理は、学習データ読込部32のデータ読込処理で学習データを読み込んだ場合、当該学習データを用いてニューラルネットワーク1の損失関数を算出し、算出した損失関数に応じてニューラルネットワーク1の結合荷重wを修正する。例えば結合荷重修正処理では、誤差逆伝播法(バックプロパゲーション法)により結合荷重wを修正する。
誤差逆伝播法は、ニューラルネットワーク1を学習させる学習法の一つであり、学習データを用いてニューラルネットワーク1の結合荷重を決定する。誤差逆伝播法は、入力データに対しての教師データを、ニューラルネットワーク1から得られる実際の出力データと照らし合わせ、その誤差を基に各結合荷重wを出力層6側から入力層2側へ変化させていく手法である。損失関数は、複数の学習データによるニューラルネットワーク1の各損失の総和に基づく値として求めることができる。例えばニューラルネットワーク1の出力データは2乗誤差によって評価できることから、1つの学習データに着目した場合の損失関数rは、下式(4)により求めることができる。zは教師データである。損失関数は、例えば損失係数、誤差関数、学習誤差、又はエラーとも称される。
損失関数は、ネットワークにおけるパラメータξによって微分可能である。例えば2乗誤差を極小とする学習則として確率的降下法を採用すると、パラメータξの更新則は、各学習データに対して、下式(5)で与えられる。εは、学習係数であり、十分に小さい正の定数である。
∇ξは、パラメータξについてのグラジエントであり、∇ξycを書き下すと下式(6)〜(8)が与えられる。下式(6)〜(8)で示されるように、中間層4の1つのニューロン8が支配的である学習データによっては、主にそのニューロン8の結合荷重wの学習が進む。中間層4の複数のニューロン8が出力に影響を及ぼす学習データによっては、それらの複数のニューロン8の結合荷重w、反応中心μ及び反応幅σの学習が進む。なお、損出関数の算出及び結合荷重wの修正については、上述した手法に限定されず、種々の公知手法を用いることができる。損失関数としては、2乗誤差に基づく関数以外に、例えば交差エントロピ誤差に基づく関数を用いることもできる。
結合荷重修正処理では、後述するニューロン生成処理でニューロン8を新たに生成した場合、及び、後述するニューロン消滅処理でニューロン8の一部を消滅させた場合のうちの何れかの場合、読み込んだ学習データを用いてニューラルネットワーク1の損失関数を再度算出し、この損失関数に応じてニューラルネットワーク1の結合荷重wを再度修正する。
ニューロン生成部36は、ニューロン生成処理を実行する。ニューロン生成処理は、結合荷重修正部34による結合荷重修正処理の実行後、算出した損失関数が第1閾値th_eよりも大きい場合に、ニューラルネットワーク1の中間層4にニューロン8を新たに生成する処理である。ニューロン生成処理では、結合荷重修正処理の実行後、当該結合荷重修正処理で算出した損失関数が第1閾値th_eよりも大きく、損失関数の変化量が基準変化量th_dよりも小さく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定する。当該判定結果がYesの場合に、ニューロン8を生成する対象の1又は複数の中間層4において、予め設定された値のパラメータξを有するニューロン8を1つ生成する。
例えば、新たに追加するニューロン8のパラメータξは、下式(9)〜(11)と設定することができる。y
(nm)は、中間層4のニューロン数がn
m個である出力データであり、B
(nm+1) nm+1は、中間層4のニューロン数が(nm+1)であるニューラルネットワーク1の(nm+1)番目の素子の反応強度である。γは反応幅の局所性を定める正の定数である。
ニューロン生成処理では、ニューラルネットワーク1に存在する中間層4が1つの場合には、その中間層4をニューロン8を生成する対象の中間層(以下、「生成対象中間層」という)としてもよい。ニューラルネットワーク1の中間層4が複数存在する場合には、複数の中間層4のうち任意の少なくとも1つを生成対象中間層としてもよい。後述の中間層生成処理で追加中間層が新たな中間層4として生成されている場合には、この新たに生成された追加中間層を生成対象中間層としてもよい。生成対象中間層の選定については限定されず、公知の手法を用いることができる。
なお、ニューロン生成処理により生成するニューロン数は1つに限定されず、複数のニューロン8を生成してもよい。また、ニューロン生成処理によるニューロン8の生成については、上述した手法に限定されず、種々の公知手法を用いることができる。
ニューロン消滅部38は、ニューロン消滅処理を実行する。ニューロン消滅処理は、結合荷重修正部34による結合荷重修正処理の実行後、ニューラルネットワーク1の中間層4における複数のニューロン8の結合荷重wの合計値が、基準合計値th_wよりも小さい場合、当該中間層4のニューロン8の一部を消滅させる処理である。ニューロン消滅処理では、結合荷重修正処理の実行後、ニューロン8を消滅させる対象の1又は複数の中間層4において、各ニューロン8の結合荷重wの合計値が基準合計値th_wよりも小さく、ニューロン数が基準ニューロン数th_nよりも大きく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定する。当該判定結果がYesの場合に、当該中間層4における1又は複数のニューロン8を消滅させる。
例えば、消滅させるニューロン8は、消滅させた場合に下式(12)を満たすものとすることができる。ただし、θはニューロン8の削除されやすさを定める正の定数である。ニューロン8の消滅による出力データの変化を小さくするために、結合荷重wを下式(13)に従って修正してもよい。
ニューロン消滅処理では、ニューラルネットワーク1に存在する中間層4が1つの場合には、その中間層4をニューロン8を消滅させる対象の中間層(以下、「消滅対象中間層」という)としてもよい。ニューラルネットワーク1の中間層4が複数存在する場合には、複数の中間層4のうち任意の少なくとも1つを消滅対象中間層としてもよい。後述の中間層生成部40で追加中間層が新たな中間層4として生成されている場合には、この新たに生成された追加中間層を消滅対象中間層としてもよい。消滅対象中間層は、ニューロン生成処理の生成対象中間層と同じ中間層としてもよい。消滅対象中間層の選定については限定されず、公知の手法を用いることができる。なお、ニューロン消滅処理によるニューロン8の消滅については、上述した手法に限定されず、種々の公知手法を用いることができる。
上記において、損失関数の変化量とは、繰り返し実行される結合荷重修正処理において、前回算出された損失関数と今回算出された損出関数との差異である。損失関数の変化量は、例えば、連続する複数回の結合荷重修正処理における各損出関数を、結合荷重修正部34に記憶することで求めることができる。構造不変回数とは、繰り返し実行される結合荷重修正処理の回数のうち、ネットワーク構造(ニューロン数)の変化がない状態が続いている回数である。構造不変回数は、例えば、結合荷重修正部34において、結合荷重修正処理の実行の都度にカウントアップすると共に、ニューロン生成処理及びニューロン消滅処理でニューロン数を増減した場合に当該カウントをクリアすることにより求めることができる。
第1閾値th_e、基準変化量th_d及び基準回数th_cは、ニューロン生成処理でニューロン8を生成するか否かを適切に判定するために予め設定された値である。基準合計値th_w、基準ニューロン数th_n及び基準回数th_cは、ニューロン消滅処理でニューロン8を消滅させるか否かを適切に判定するために予め設定された値である。これらの値は、固定の値であってもよいし、変動する値であってもよく、例えば経験又は理論等に基づき得ることができる。
中間層生成部40は、中間層生成処理を実行する。中間層生成処理は、学習部30による学習処理の実行後、算出した損失関数が第2閾値th_e2よりも大きい場合に、少なくとも1つのニューロン8を含む追加中間層を、ニューラルネットワークの中間層4として新たに生成する処理である。中間層生成処理は、学習処理の実行後、結合荷重修正処理で算出した損失関数が第2閾値th_e2よりも大きく、且つ、当該中間層生成処理で既に生成している追加中間層の数が基準追加数N1よりも小さいか否かを判定する。当該判定結果がYesの場合に、追加中間層を1層新たに生成し、中間層4の総レイヤー数を増やす。追加中間層の数は、例えば、中間層生成部40において、中間層生成処理により追加中間層を生成する都度、生成する追加中間層の数をカウントアップすることにより求めることができる。
中間層生成処理では、例えばニューラルネットワーク1において最も出力層6側の中間層4と出力層6との間に、追加中間層を中間層4として新たに生成する。追加中間層におけるニューロン8の数は、1つでもよいし、複数でもよい。追加中間層のニューロン8の結合荷重wは、予め設定された初期荷重値とされている。ニューラルネットワーク1において追加中間層を生成する位置は、特に限定されず、複数の中間層4の間に生成してもよいし、最も入力層2側の中間層4と入力層2との間に生成してもよい。生成する追加中間層の数は、1つでもよいし複数でもよい。
本実施形態において、学習部30は、中間層生成処理で追加中間層を中間層4として新たに生成した場合、この追加中間層が生成されたニューラルネットワーク1にて学習処理を再度改めて実行する。すなわち、学習部30は、中間層生成処理により追加中間層を中間層4として含む新たなニューラルネットワーク1を構築した場合、当該新たなニューラルネットワーク1において、上述したデータ読込処理と結合荷重修正処理とニューロン生成処理とニューロン消滅処理とを再度改めて実行する。
次に、ニューラルネットワーク学習装置100で実行される学習処理及び中間層生成処理の一例について、図3に示すフローチャートを参照して説明する。
まず、演算部12は、初期構造取得部10で取得した初期構造のニューラルネットワーク1を有している。データベース20には、上述したように、複数の学習データ、第1閾値th_e、基準変化量th_d、基準回数th_c、基準合計値th_w、基準ニューロン数th_n、第2閾値th_e2、及び、基準追加数N1が予め記憶されている。初期構造のニューラルネットワーク1では、中間層4が1層とされ、各ニューロン8の結合荷重wが初期荷重値とされている。
ニューラルネットワーク学習装置100では、図3に示すように、学習データ読込部32により、データベース20から学習データを読み込む(S1)。結合荷重修正部34により、学習データを用いて損失関数を算出し、当該損失関数に応じて結合荷重を修正する(S2,S3)。
ニューロン生成部36により、算出した損失関数が第1閾値th_eよりも大きく、損失関数の変化量が基準変化量th_dよりも小さく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定する(S4)。上記S4でYESの場合、ニューロン生成部36により、生成対象中間層である中間層4に新たなニューロン8を1つ生成する(S5)。上記S5の後、上記S2に戻り、結合荷重修正部34により、学習データを用いて損失関数を再度算出し、当該損失関数に応じて結合荷重wを再度修正する。
上記S4でNOの場合、ニューロン消滅部38により、消滅対象中間層である中間層4において、結合荷重wの合計値が基準合計値th_wよりも小さく、ニューロン数が基準ニューロン数th_nよりも大きく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定する(S6)。上記S6でYESの場合、ニューロン消滅部38により、消滅対象中間層である中間層4のニューロン8の一部を消滅させる(7)。上記S7の後、上記S2に戻り、結合荷重修正部34により、学習データを用いて損失関数を再度算出し、当該損失関数に応じて結合荷重wを再度修正する。
上記S6でNOの場合、データベース20に記憶された複数の学習データの全てを学習データ読込部32で読み込んだか否かを判定する(S8)。上記S6でNOの場合、上記S1に戻り、学習データ読込部32により、複数の学習データのうちの未だ読み込んでいない学習データの読込みを行う。
上記S8でYESの場合、損失関数が第2閾値th_e2よりも大きく、且つ、追加中間層の追加数が基準追加数N1よりも小さいか否かを判定する(S9)。上記S9でYESの場合、中間層生成部40により追加中間層を中間層4として新たに生成し、新たな構造のニューラルネットワーク1を構築する(S10)。上記S10の後、上記S1に戻り、学習部30により、追加中間層が生成されたニューラルネットワーク1にて学習処理を改めて再度実行する。上記S9でNOの場合、処理を終了し、ニューラルネットワーク1の最適化が完了する。
以上、ニューラルネットワーク学習装置100によれば、ニューロン8の数を損失関数及び結合荷重wに応じた最適な数となるように調整できる。さらに、中間層4の数を損失関数に応じた最適な数となるように調整できる。よって、ニューラルネットワーク1の構造を最適化することが可能となる。
上記S1〜S8が学習処理に対応し、上記S1,S8がデータ読込処理に対応し、上記S2,S3が結合荷重修正処理に対応し、上記S4,S5がニューロン生成処理に対応し、上記S6,S7がニューロン消滅処理に対応する。上記S9,S10が中間層生成処理に対応する。
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されることなく様々な形態で実施される。
上記実施形態において、データベース20は、ニューラルネットワーク学習装置100と通信可能な他のコンピュータが有していてもよい。初期構造取得部10は、ニューラルネットワーク学習装置100と別途に設けられていてもよいし、場合によっては設けられていなくともよい。
上記実施形態では、ニューロン生成処理において、損失関数が第1閾値th_eよりも大きく、損失関数の変化量が基準変化量th_dよりも小さく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定した(上記S4参照)。当該判定条件は限定されず、要はニューロン生成処理では、損失関数が第1閾値th_eよりも大きい場合にニューロン8を生成すればよい。なお、損失関数の変化量が基準変化量th_dよりも小さいか否かをニューロン生成の判定条件として含むことにより、通常の学習による収束を待ってから、通常の学習ではできない部分を、ニューロンの生成による構造の修正により補うことができる。構造不変回数が基準回数th_cよりも大きいか否かをニューロン生成の判定条件として含むことにより、同様に、通常の学習による収束を待ってから構造の修正を行うことができる。
上記実施形態では、ニューロン消滅処理において、結合荷重wの合計値が基準合計値th_wよりも小さく、ニューロン数が基準ニューロン数th_nよりも大きく、且つ、構造不変回数が基準回数th_cよりも大きいか否かを判定した(上記S6参照)。当該判定条件は限定されず、要はニューロン消滅処理では、結合荷重wの合計値が基準合計値th_wよりも小さい場合にニューロン8の一部を消滅させればよい。なお、ニューロン数が基準ニューロン数th_nよりも大きいか否かをニューロン消滅の判定条件として含むことにより、ニューロン数が異常に小さくなる(例えば0になり層が消失してしまう)ことを防ぐことができる。構造不変回数が基準回数th_cよりも大きいか否かをニューロン消滅の判定条件として含むことにより、構造不変回数が基準回数th_cよりも大きいか否かをニューロン生成の判定条件として含む上述の場合と同様に、通常の学習による収束を待ってから構造の修正を行うことができる。
上記実施形態では、中間層生成処理において、損失関数が第2閾値th_e2よりも大きく、且つ、追加中間層の追加数が基準追加数N1よりも小さいか否かを判定した(上記S9参照)。当該判定条件は限定されず、要は中間層生成処理では、損失関数が第2閾値th_e2よりも大きい場合に追加中間層を生成すればよい。
図3に示す学習処理では、ニューロン生成部36のニューロン生成処理(S4,S5)の後にニューロン消滅部38のニューロン消滅処理(S6,S7)を実行したが、これとは逆に、ニューロン消滅処理の後にニューロン生成処理を実行してもよい。図3に示す学習処理では、複数の学習データの全てを読み込むまで学習データの読込みを繰り返したが、複数の学習データの全てをN回(Nは1以上の整数)読み込むまで学習データの読込みを繰り返せばよい。