gpt4 book ai didi

python - 在深度全连接神经网络中进行二元分类反向传播的正确方法是什么

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:43 26 4
gpt4 key购买 nike

我尝试使用 python 和 numpy 实现用于二元分类的深度全连接神经网络,并使用梯度下降作为优化算法。

事实证明,即使在1000 epochs之后,我的模型仍然严重拟合不足。我的损失从未改善超过0.69321,我尝试检查我的权重导数并立即意识到它们非常小(小至1e-7) ,如此小的梯度导致我的模型永远不会有更大的梯度下降更新并且永远不会达到全局最小值。我将详细介绍前向和后向传播的数学/伪代码,请告诉我我是否走在正确的轨道上。我将遵循 Andrew Ng 所著的 DeepLearning.ai 中使用的命名约定。

假设我们有 4 层神经网络,输出层只有一个节点来在 0/1 之间进行分类。

X -> Z1 -> A1 -> Z2 -> A2 -> Z3 -> A3 -> Z4 -> A4

前向传播

Z1 = W1 dot_product X + B1
A1 = tanh_activation(Z1)

Z2 = W2 dot_product A1 + B2
A2 = tanh_activation(Z2)

Z3 = W3 dot_product A2 + B3
A3 = tanh_activation(Z3)

Z4 = W4 dot_product A3 + B4
A4 = sigmoid_activation(Z4)

向后传播

DA4 = -( Y / A4 + (1 - Y /  1 - A4 ) ) ( derivative of output activations or logits w.r.t to loss function )

DZ4 = DA4 * derivative_tanh(Z4) ( derivative of tanh activation, which I assume is ( 1 - (Z4 ) ^ 2 ) )
Dw4 = ( dZ4 dot_produt A3.T ) / total_number_of_samples
Db4 = np.sum(DZ4, axis = 1, keepdims = True ... ) / total_number_of_samples
DA3 = W4.T dot_product(DZ4)


DZ3 = DA3 * derivative_tanh( Z3 )
DW3 = ( DZ3 dot_product A2.T ) / total_number_of_samples
DB3 = np.sum( DZ3, .. ) / total_number_of_samples
DA2 = W3.T dot_product(DZ3)


DZ2 = DA2 * derivative_tanh( Z2 )
DW2 = ( DZ2 dot_product A1.T ) / total_number_of_samples
DB2 = np.sum( DZ2, .. ) / total_number_of_samples
DA1 = W2.T dot_product(DZ2)



DZ1 = DA1 * derivative_tanh( Z1 )
DW1 = ( DZ1 dot_product X.T ) / total_number_of_samples
DB1 = np.sum( DZ1, .. ) / total_number_of_samples

这是我的 tanh 实现

def tanh_activation(x):
return np.tanh(x)


我的 tanh 导数实现

def derivative_tanh(x):
return ( 1 - np.power(x,2))

在上述反向传播步骤之后,我使用梯度下降及其各自的导数更新了权重和偏差。但是,无论我运行该算法多少次,该模型都不会将其损失改善到超过 0.69,并且输出权重的导数(在我的例子中 dW4)非常低1e-7。我假设我的 derivative_tanh 函数或 dZ 计算确实关闭,这导致不良损失值传播回网络。无论我的反向传播实现是否有效,请分享您的想法。 TIA。我经历了 back propagation gradient descent calculus

how to optimize weights of neural network ..和许多其他博客,但找不到我要找的东西。

最佳答案

我找到了问题的解决方案并在这里回答:What's the proper way to do back propagtion in deep fully connected neural network 。我建议关闭该线程。

关于python - 在深度全连接神经网络中进行二元分类反向传播的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57983117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com