gpt4 book ai didi

numpy - 怎么理解这个: `db = np.sum(dscores, axis=0, keepdims=True)`

转载 作者:行者123 更新时间:2023-11-30 08:36:13 25 4
gpt4 key购买 nike

cs231n 2017 class ,当我们反向传播梯度时,我们会像这样更新偏差:

db = np.sum(dscores, axis=0, keepdims=True)

sum 运算背后的基本思想是什么?谢谢

最佳答案

这是损失函数相对于偏差的导数(更准确地说是梯度)的公式(参见 this questionthis post for derivation details )。

numpy.sum调用计算沿 0 轴的每列总和。示例:

dscores = np.array([[1, 2, 3],[2, 3, 4]])    # a 2D matrix
db = np.sum(dscores, axis=0, keepdims=True) # result: [[3 5 7]]

结果正是按元素求和[1, 2, 3] + [2, 3, 4] = [3 5 7]。此外, keepdims=True 保留原始矩阵的秩,这就是为什么结果是 [[3 5 7]] 而不是 [3 5 7] .

顺便说一句,如果我们要计算np.sum(dscores, axis=1, keepdims=True),结果将是[[6] [9]].

[更新]

显然,这个问题的焦点是公式本身。我不想在这里过多偏离主题,只是尝试讲述主要想法。由于在前向传递中对小批量进行了广播,因此总和出现在公式中。如果一次只举一个例子,偏差导数只是误差信号,即dscores(请参阅上面的链接详细解释)。但对于一批示例,由于线性,梯度会被累加。这就是为什么我们沿着batch axis=0求和。

关于numpy - 怎么理解这个: `db = np.sum(dscores, axis=0, keepdims=True)` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175259/

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