HyperParameter

本章では、ハイパーパラメータの一覧と設定の目安を紹介します。

パルスエンコーダ(入力層)の設定

設定対象クラス/メソッド

基本的に、説明変数の数と一致させます。 たとえば、8x8の白黒の画像を分類したい場合、64になるように設定します。

入力層のノード数と、設定する値の関係はEncoderごとに異なります。詳細は、EncodeLayer を参照してください。

Caution

この数値は正の値の入力を想定しています。


デコードする対象(出力層)の設定

設定対象クラス/メソッド

分類問題の場合

分類数と一致するように設定します。 たとえば、画像をアラビア数字(0-9の10種類)として分類したい場合、10になるように設定します。

Caution

この数値は正の値の入力を想定しています。

回帰予測の場合

目的変数は1つであることを前提としています。 1つの目的変数をいくつのニューロンで表現するのかを設定します。 多い方がより高い精度で数値を表現できますが、解空間が複雑になる、回路規模が増える、というデメリットがあります。

オートエンコーダの場合

入力層(エンコーダ)で利用するニューロン数と同じ数を指定します。


中間層(最初と最後以外の層)のノード数

設定対象クラス/メソッド

多いほどモデルの表現能力が向上する傾向がありますが、 回路実装時の面積や、学習/推論速度が遅くなります。

実験により探索的に変更するパラメータになります。

Caution

この数値は正の値の入力を想定しています。


データごとのユニットタイム数 tC

設定対象クラス/メソッド

SAMACTはRateCodingをベースとしたエンコード方式を採用しているので、 1つのデータをN回のユニットタイムに時分割して解釈しています。 このハイパーパラメータでは、このNを設定できます。(ネットワーク全体で一括設定)

多いほど入力するデータの解釈の解像度が上がりますが、学習/推論速度が遅くなります。 実験により探索的に変更するパラメータになります。

Caution

この数値は正の値の入力を想定しています。


減衰係数 a

設定対象クラス/メソッド

数式 (1)(9) で利用される減衰係数aです。 該当数式の注意点でも明示した通り、aは \((1-2^{-n})\) で表されます。 ここで設定できるaはこの式のnの部分です。

Tip

たとえば、a=2を設定すると、該当数式で0.75が乗算されます。

サンプルシナリオで設定している通り、a=3, a=4にすると経験上良い結果になりやすいです。

a=10などの大きな値を設定すると、減衰時に乗算する値が0.999程度になり、 現時刻の電位が前のユニットタイムの影響を受けすぎて、あまり良い結果にならない可能性が高いので非推奨とします。

Caution

この数値は正の値の入力を想定しています。


減衰定数 p

設定対象クラス/メソッド

数式 (5) で利用される減衰定数pです。

この値を小さくした場合(p=0.1など)、ニューロンが連続してパルスを出力しやすくなります。
この値を大きくした場合(p=0.9など)、ニューロンが連続してパルスを出力しづらくなります。

SAMACTは数値をパルスの頻度で表すため、パルスの出力しやすさに偏りがあることは不都合になります。

そのため、p=0.5付近の値を設定することを推奨します。

Caution

この数値は正の値の入力を想定しています。


重みの学習率 eta

設定対象クラス/メソッド

数式 (7) で利用される重みの学習率etaの初期値です。

上記で言及している通り、etaは \(2^{-n}\) で表され、右シフト演算によって実現されます。 この設定値では、この数式のnを設定します。

Tip

たとえば、eta=2を設定すると、該当数式で0.25が乗算されます。

ここで設定する値は初期値で、学習率の減衰率 の頻度で、設定値が1加算されます。(半減)

この数値が32を超える場合、学習のための補正値が0になります。 これ以上の数値で学習を行っても学習が進まないのでご注意ください。

Caution

この数値は正の値の入力を想定しています。


発火閾値の学習率 iota

設定対象クラス/メソッド

数式 (10) で利用される発火閾値の学習率iotaの初期値です。

上記で言及している通り、iotaは \(2^{-n}\) で表され、右シフト演算によって実現されます。 この設定値では、この数式のnを設定します。

Tip

たとえば、iota=2を設定すると、該当数式で0.25が乗算されます。

ここで設定する値は初期値で、学習率の減衰率 の頻度で、設定値が1加算されます。(半減)

この数値が32を超える場合、学習のための補正値が0になります。 これ以上の数値で学習を行っても学習が進まないのでご注意ください。

Caution

この数値は正の値の入力を想定しています。


学習エポック数

設定対象クラス/メソッド

学習するエポック数を設定します。

何エポック学習するのが適切かは課題によって異なるので実験で探索するものになります。

学習率の減衰率

設定対象クラス/メソッド

重みの学習率 eta発火閾値の学習率 iota の減衰周期を設定します。

decayPeriod epoch学習されると、上記の学習率が、1加算されます。(半減)

SAMACTは小規模なネットワークとして定義されることが多いため、 学習データ数が十分に確保できる場合は、このパラメータは1を設定しても良いでしょう。

逆に、学習データが十分に確保できない場合は、このパラメータを多めに設定することを推奨します。

Caution

この数値は正の値の入力を想定しています。


活性化関数Stepの微分時のパラメータ alpha

設定対象クラス/メソッド

(8)(11)(13) で利用される活性化関数の微分値のパラメータです。

\(2^{-n}\) で表され、右シフト演算で実現されます。

Fig. 2 に表される通り、 alphaはStep関数の微分値の山にあたる部分なので、0を設定することを推奨します。(Step関数の微分値の谷は本来は正の無限大)

Caution

この数値は正の値の入力を想定しています。


活性化関数Stepの微分時のパラメータ beta

設定対象クラス/メソッド

(8)(11)(13) で利用される活性化関数の微分値のパラメータです。

\(2^{-n}\) で表され、右シフト演算で実現されます。

Fig. 2 に表される通り、 betaはStep関数の微分値の谷にあたる部分なので、6などの小さな値を設定することを推奨します。(Step関数の微分値の谷は本来は0)

Caution

この数値は正の値の入力を想定しています。


活性化関数Stepの微分時のパラメータ gamma

設定対象クラス/メソッド

(8)(11)(13) で利用される活性化関数の微分値のパラメータです。

\(2^{-n}\) で表され、右シフト演算で実現されます。

Fig. 2 に表される通り、 gammaはStep関数の微分値の山の幅にあたる部分なので、18などの微小な値を設定することを推奨します。(Step関数の微分値の山の幅は本来は0)

Caution

この数値は正の値の入力を想定しています。