human
5.5 活性化関数レイヤの実装
計算グラフの考え方をニューラルネットワークに適用していく。ここでは、ニューラルネットワークを構成する「層(レイヤ)」をひとつのクラスとして実装する。活性化関数であるReLUとSigmoidレイヤを実装する。
5.5.1 ReLUレイヤ
活性化関数してとして使われるReLU(Rectified Linear Unit)は次式で表される。
$$
y
= \begin{cases}
 & x \.
(x>0)  \
 & 0 \.
(x\leq0)
\end{cases}
$$
xに関するyの微分は以下のようになる。
$$
\frac{\delta y}{\delta x}
= \begin{cases}
 & 1 \.
(x>0)  \
 & 0 \.
(x\leq0)
\end{cases}
$$
順伝播時入力のxが0より大きければ、逆伝播は上流の値をそのまま下流に流す。逆にxが0以下であれば下流への信号はストップする。
実装は以下となる。

What is a the Python code you requested?
assistant
#Here is the Python code you requested.
class Relu:
    def __init__(self):
        self.mask = None

    def forward(self, x):
        # maskはxが0以下の場合false、それ以外はtrueを保持。xの配列の形で保持
        self.mask = (x <= 0)
        out = x.copy()
        # maskでtrueである要素(xが0以下)は0を代入
        out[self.mask] = 0

        return out

    def backward(self, dout):
        dout[self.mask] = 0
        dx = dout

        return dx