В процессе вычисления производной tanh dout является восходящим градиентом.
tanh (x) = (exp (2 * x) - 1) / (exp (2 * x) +1)
# this will encounter overflow in multiply
d_tanh = dout * 4 * np.exp(2*x)/((np.exp(2*x)+1) * (np.exp(2*x)+1))
# this will not, why?
d_tanh = dout * (1 - np.tanh(x) * np.tanh(x))