python 求导实现_python – NumPy中的Softmax导数接近0(实现)

这是如何以更加矢量化的numpy方式计算softmax函数的导数的答案.然而,偏导数逼近零的事实可能不是数学问题,并且只是学习率或复杂深度神经网络的已知死亡权重问题.像

ReLU这样的图层有助于防止后一问题.

首先,我使用了以下信号(仅复制您的上一个条目),使其成为4个样本x 3个特征,因此更容易看到尺寸发生了什么.

>>> signal = [[0.3394572666491664, 0.3089068053925853, 0.3516359279582483], [0.33932706934615525, 0.3094755563319447, 0.3511973743219001], [0.3394407172182317, 0.30889042266755573, 0.35166886011421256], [0.3394407172182317, 0.30889042266755573, 0.35166886011421256]]

>>> signal.shape

(4, 3)

接下来,您要计算softmax函数的雅可比矩阵.根据引用的页面,对于非对角线条目(对于n_features> 2的矩阵的大部分),它被定义为-hi * hj,所以让我们从那里开始.在numpy中,您可以使用broadcasting有效地计算雅可比矩阵:

>>> J = - signal[..., None] * signal[:, None, :]

>>> J.shape

(4, 3, 3)

第一个信号[…,None](相当于信号[:,:,None])将信号重新整形为(4,3,1),而第二个信号[:,None,:]将信号重新整形为(4 ,1,3).然后,*只是将两个矩阵相乘. Numpy的内部广播重复两个矩阵,以形成每个样本的n_features x n_features矩阵

你可能感兴趣的:(python,求导实现)