深層学習ことはじめ その6

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.前回の記事を読んでいない方は先にそちらを見てください.

******

バイナリ分類

私たちの単純なシグモイドネットワークの最後の層は単なるロジスティック回帰層です。出力は、Xに対してY = 1となる確率として解釈できます。もちろん、バイナリ分類では0または1しか出力されないため、Xに対してY = 0となる確率は、P(Y = 0 | X)= 1 です。 P(Y = 1 | X)、合計すると1になるはずです。

Softmax

2つ以上のものを分類したい場合はどうしますか。たとえば、有名なMNISTデータセットには0〜9の数字が含まれているので、10個の出力クラスがあります。このシナリオでは、softmax関数を使用します。これは、次のように定義されています。
softmax(a [k])= exp(a [k])/ {exp(a [1])+ exp(a [2])+… + exp(a [k])+…+ exp(a [K])}
“ little k”と“ big K”は異なることに注意してください。これは常に1になるので、確率として考えることもできます。今すぐコードに!既にNumpy配列にデータをロードしていると仮定すると、このセクションで行うように出力yを計算できます。上の式では1つの入力サンプルの出力しか計算されないため、少し複雑さが増します。これをコード内で実行している場合、通常、この計算を多数のサンプルに対して同時に実行します(つまり、完全なN×D行列)。

def sigmoid(a):
return 1 / (1 + np.exp(-a))

def softmax(a):
expA = np.exp(a)
return expA / expA.sum(axis=1, keepdims=True)

X,Y = load_csv(“yourdata.csv”)
W = np.random.randn(D, M)
V = np.random.randn(M, K)
Z = sigmoid(X.dot(W))
p_y_given_x = softmax(Z.dot(V))

ここで「M」は隠れユニットの数です。これが「ハイパーパラメータ」と呼ばれるもので、交差検証などの方法を使用して選択できます。もちろん、ここでの出力はランダムに初期化されるのであまり役に立ちません。 P(Y | X)の予測を行ったときにそれらが実際のラベルYに非常に近くなるように、最適なWとVを決定します。WとVをランダムに初期化しますが、bとcを0に設定します。隠れ層でシグモイド活性化関数を使用します。生成した出力は、N = Kのサイズになります。ここで、K = 10です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です