ニューラルネットワーク:Matlabはレイヤーごとに異なる活性化関数を使用します-なぜですか?

Aug 20 2020

私はmatlabで、1つの入力層、1つの隠れ層、1つの出力層を備えた人工ニューラルネットワークをトレーニングしました(私の出力は0から1の間の値であり、しきい値0.5に従って0または1になります)。

デフォルトでは、matlabは非表示レイヤー「tansig」伝達関数を使用し、次に出力レイヤーに「logsig」伝達関数を使用していることに気付きました。誰かが私にこれについて説明できますか?

前もって感謝します!

回答

2 Sycorax Aug 19 2020 at 22:40

大きなアイデアは、ニューラルネットワークのすべての層が同じ活性化関数を使用するという特別な要件はないということです。必要に応じて組み合わせることができます。とはいえ、使用することを好むいくつかの理由があります$\tanh$ 隠れ層の活性化関数として $\sigma$ 出力関数として。

  • ザ・ $\tanh(x)=\frac{\exp(x)-\exp(-x)}{\exp(x)+\exp(-x)}$関数は標準の活性化関数です。ニューラルネットワークでそれを使用することは、回帰タスクの目的関数として最小二乗法を使用することと同じくらい驚くべきことではありません。

  • 関数 $\sigma(x)=\frac{1}{1+\exp(-x)}$は、実数を(0,1)の実値にマップする標準的な方法です。したがって、確率をモデル化するために一般的に使用されます。タスクは0または1を予測することなので、このモデルを使用すると、サンプルに1のラベルが付けられる確率をモデル化することをお勧めします。

  • を使って $\tanh$ 最後の層の関数は、サンプルに1のラベルが付けられる確率のモデル化と明確な関係がないため、妥当ではありません。関数 $\tanh$ -1から1までの値を返すため、確率ではありません。

  • 必要に応じて、 $\sigma(x)$活性化関数として。だが$\tanh$勾配が強く、正と負の出力を与えると最適化が容易になるため、が推奨されます。参照:tanh活性化関数とシグモイド活性化関数

  • ただし、隠れ層の活性化関数として、ReLUおよび同様の関数が一般的に好まれることにも注意してください。参照:ディープニューラルネットワークにおけるシグモイド関数に対するReLUの利点は何ですか?

  • 使用する選択 $\tanh$デフォルトはおそらくより多くのソフトウェア開発プラクティスに関する数学的な原則より:ソフトウェアのデフォルトの動作を変更すると、既存のコードを破り、予期しない動作を引き起こす可能性があります。ReLUユニットは、MATLABの時代に比べて、最近人気が出てきました。Neural Network Toolboxアドオンは1992年に最初に公開されました(それ以来、「Deep LearningToolbox」としてブランド名が変更されました)。1992年、ニューラルネットワークの構築は単層ネットワークとほぼ同義でした。$\tanh$ または $\sigma$ 活性化関数。

    しかし、MATLABがこの選択の正当性を公表しない限り、MATLABがこのデフォルトを選択した理由についての明確な説明はありそうにありません(リリースノートやドキュメントなど)。