MLP 双层 梯度计算

首先明确问题,这里是一个两层的多层感知机(MLP)模型,输入层有d个单位(x1到xd),输出层有一个单元y。给出的forward公式表示二元交叉熵损失函数(binary cross entropy loss)以及Sigmoid激活函数。现在要求输出层的backward梯度计算。

根据以上描述,我们首先列出相关公式:

  1. Sigmoid激活函数:y = σ(a) = 1 / (1 + exp(-a))
  2. 二元交叉熵损失函数:L = -(y^ * log(y) + (1 - y^) * log(1 - y))
  3. 线性组合:a = Σ(w_j * x_j) (j从1到d)

下面我们来计算损失函数关于各个参数的梯度:

求L关于y的梯度:

dL/dy = - (y^ / y - (1 - y^) / (1 - y))

求L关于a的梯度(链式法则):

dL/da = (dL/dy) * (dy/da)

dy/da = σ(a) * (1 - σ(a)) = y * (1 - y)

dL/da = (dL/dy) * (dy/da) = - (y^ / y - (1 - y^) / (1 - y)) * y * (1 - y)

对于每个权重参数 w_j,求L关于w_j的梯度(链式法则):

dL/dw_j = (dL/da) * (da/dw_j)

da/dw_j = x_j

所以,

dL/dw_j = (dL/da) * (da/dw_j) = - (y^ / y - (1 - y^) / (1 - y)) * y * (1 - y) * x_j

现在我们已经得到了损失函数关于各个权重参数的梯度。这些梯度可以用于更新权重,从而优化模型。在二元分类问题中,二元交叉熵损失函数和Sigmoid激活函数常常一起使用,因为它们可以很好地衡量模型预测概率和真实概率之间的差距。计算出梯度之后,可以使用梯度下降或其他优化算法来更新权重,从而最小化损失函数。

猜你喜欢

转载自blog.csdn.net/qq_22815083/article/details/130325546
MLP