擅长:python、mysql、java
<p>作为pv。作为评论,我在计算梯度时犯了一个错误。首先,目标函数梯度的正确(数学)表达式是:</p>
<p><img src="https://i.stack.imgur.com/IzNgV.png" alt="enter image description here"/></p>
<p>(注意减号。)此外,我的Python实现完全错误,除了符号错误。以下是我更新的渐变:</p>
<pre><code>def gradient(x):
nb_comparisons = cijs + cijs.T
x = np.insert(x, 0, 0.0)
tiles = np.tile(x, (len(x), 1))
combs = tiles - tiles.T
probs = 1.0 / (np.exp(combs) + 1)
mat = (nb_comparisons * probs) - cijs
grad = np.sum(mat, axis=1)
return grad[1:] # Don't return the first element.
</code></pre>
<p>为了调试它,我使用了:</p>
<ul>
<li><code>scipy.optimize.check_grad</code>:表明我的梯度函数产生的结果与近似(有限差分)梯度非常遥远。在</li>
<li><code>scipy.optimize.approx_fprime</code>要了解这些值,应该是这样的。在</li>
<li>一些手工挑选的简单示例可以在需要时手动分析,还有一些Wolfram Alpha查询用于健全性检查。在</li>
</ul>