フィードフォワード ニューラル ネットワーク (フィードフォワード ニューラル ネットワーク)、以前紹介した単層パーセプトロンと多層パーセプトロンはフィードフォワード ニューラル ネットワークに属します。入力から中間計算プロセスを経て、最終的に出力層に到達します。
出力層がどのように設計されているかを見てみましょう
機械学習の問題は大きく分類問題と回帰問題に分けられます。
分類問題とは、データがどのカテゴリーに属するかという問題です。たとえば、画像内の人物が男性か女性かを区別する場合
回帰問題は、入力に基づいて (連続的な) 値を予測する問題です 例: 人物の画像に基づいて人の体重を予測する分類
と回帰は教師あり学習に属し、このタイプのアルゴリズムは何を予測するか、つまりターゲット変数の分類情報を知っている必要があるため、教師あり学習と呼ばれます。
教師あり学習に相当する、データにカテゴリー情報がなく、目標値も与えられない教師なし学習です。教師なし学習では、データセットを同様のオブジェクトの複数のクラスに分割するプロセスはクラスタリングと呼ばれます。データを説明する統計値を見つけるプロセスは密度推定と呼ばれます。さらに、教師なし学習ではデータ特徴の次元を削減することもできるため、2 次元または 3 次元のグラフィックスを使用してデータ情報をより直観的に表示できるようになります。
恒等関数、シグモイド関数、ソフトマックス関数 恒等
関数は主に回帰問題を起動するために使用されます. この種の問題では、回帰の最終的な計算結果が最終的な出力結果に影響を与えるため、最終的な出力結果を最大限に保護する必要があることがよくあります。問題は特定の重みであることが多く、それが最終的な答えでもあります。もちろん、そのままの出力が最適です。したがって、恒等関数は単に何もしないことを意味し、
恒等関数は入力をそのまま出力します。
シグモイド関数は、 [0,1] の制約があるため、バイナリ分類に適しています。
ソフトマックス関数は、各出力ノードの重みの影響を十分に考慮するため、確率の記述がより正確になり、マルチクラス分類に適しています。
ソフトマックス関数は次の式で表すことができます。
ソフトマックス関数の分子は入力信号の指数関数であり、分母はすべての入力信号の指数関数の合計です。(ソフトマックスの値はすべて足すと1になります)
Python を使用してソフトマックスを実装する
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
ソフトマックスの欠点は、指数計算を使用すると値が非常に大きくなるため、オーバーフローの問題です。改善されたコードは次のとおりです。
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) #溢出对策
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
入力信号の最大値を減らすことでオーバーフローの問題を解決します。
Softmax 関数の特徴
Softmax 関数の出力は 0.0 ~ 1.0 の実数です。そして、softmax関数の出力値の合計は1になります。ソフトマックス関数の出力値の合計が1になるからこそ、問題は確率的(統計的)な手法で対処できるのです
機械学習の理解に関する質問機械学習のステップは、「学習」と「推論
」の
2 つの段階に分けることができます。ソフトマックス関数は学習時に使用され、推論フェーズでは使用されません。
次の例のように、softmax 関数を出力層に導入します。
def forward_net(network,x):
W1 = network['W1']
b1 = network['b1']
W2 = network['W2']
b2 = network['b2']
W3 = network['W3']
b3 = network['b3']
x = np.dot(x,W1)+b1
x = ReLU(x)
x = np.dot(x,W2)+b2
x = ReLU(x)
x = np.dot(x, W3) + b3
x = softmax(x)
return x
操作の結果は次のようになります。
[0.00196166 0.99803834]