cyb*_*ric 4 deep-learning keras
在keras-vis
文档中是这样说的:
为了可视化最终密集层输出的激活,我们需要将 softmax 激活切换为线性,因为输出节点的梯度将取决于所有其他节点激活
我仍然不明白为什么我们需要切换 softmax 层以及这个和其他节点激活之间的关系是什么。那么,我们为什么要这样做?
当它说 softmax 是唯一依赖于其他输出的时候,那是因为 sofmax 有一个条件,即所有输出总和为 1。
在那里使用术语“节点”是一个非常糟糕的选择,因为 keras 对“节点”有完全不同的定义(在 keras 中,节点是图中的一个点,层在其中进行计算)
定期激活:
所有其他激活单独作用于“每个”输出值。
假设您的输出形状为(None, 3)
. 每个样本有 3 个输出值。(文档称这些“节点”)。
这些激活将获取 3 个输出中的每一个并单独转换它们。
activatedOutput[:,0] = functionOf(originalOutput[:,0])
activatedOutput[:,1] = functionOf(originalOutput[:,1])
activatedOutput[:,2] = functionOf(originalOutput[:,2])
Run Code Online (Sandbox Code Playgroud)
尽管 keras 用一个函数一次完成所有工作,但从数学上讲,它们可以像这样分开。
Softmax 激活:
另一方面,Softmax 将确保 3 个输出值的总和为 1。
这意味着:所有 3 个值都参与了所有 3 个值的转换。我们不能像以前那样将激活分成 3 行:
activatedOutput[:,0] = functionOf(originalOutput[:,0],
originalOutput[:,1],
originalOutput[:,2])
activatedOutput[:,1] = functionOf(originalOutput[:,0],
originalOutput[:,1],
originalOutput[:,2])
activatedOutput[:,2] = functionOf(originalOutput[:,0],
originalOutput[:,1],
originalOutput[:,2])
#where the sum of the 3 outputs will always be 1:
assert activatedOutput.sum(axis=-1) == 1
Run Code Online (Sandbox Code Playgroud)
比较:
为什么要避免 sofmax?
从你引用的句子中:
为了可视化最终密集层输出的激活,我们需要将 softmax 激活切换为线性,因为输出节点的梯度将取决于所有其他节点激活。
我们可以假设这种显着性可视化取决于特定输出值(文档称之为“节点”)的梯度。
然后,当您使用 softmax 时,梯度不是只考虑一个输出值,而是将它们全部考虑在内。每个类的结果(激活前)影响所有其他结果(激活后)。
归档时间: |
|
查看次数: |
866 次 |
最近记录: |