ITエンジニア ノイのブログ

ITエンジニアのノイです。 YouTubeで ITエンジニアのお勉強という学習用の動画を公開しています。チャンネル登録お願いします!https://m.youtube.com/channel/UCBKfJIMVWXd3ReG_FDh31Aw/playlists

ソフトマックス関数とクロスエントロピー誤差関数の逆伝播の実装

逆伝播の実装

逆伝播の実装について、以前、加算ノードと乗算ノードについて書きました。 https://engineernoi.hatenablog.com/entry/2023/06/17/131707

今回はソフトマックス関数とクロスエントロピー誤差関数の実装です。

ソフトマックス関数とクロスエントロピー誤差関数

ソフトマックス関数とクロスエントロピー誤差関数はセットで使われることが多いので、まとめて考えます。

ソフトマックス関数とクロスエントロピー誤差関数
クロスエントロピー関数から逆伝搬の方向には矢印がありますが、式は書いていません。この部分を計算すると非常に厄介になってしまい、ソフトマックス関数とクロスエントロピー誤差関数をまとめて考えると、中間の計算を省略できるのでシンプルに実装ができます。

class SoftmaxLoss:
    def __init__(self):

        self.loss = None
        self.y = None 
        self.t = None 

    def forward(self, x, t):
        self.t = t
        self.y = softmax(x)
        self.loss = cross_entropy_error(self.y, self.t)

        return self.loss

    def backward(self, dout=1):
        batch_size = self.t.shape[0]
        dx = (self.y - self.t) / batch_size

        return dx

バッチサイズの取り扱い

ここで注意が必要なのはバッチサイズで割ることです。計算ノードではバッチサイズ分だけ腕が増えることになります。そのため、バッチサイズで割る必要があります。

youtu.be