上次做验证码识别的时候遇到一个cost function不收敛的问题,其原因在于我cost function的实现有问题。我正确的返回了偏导数,但是返回的函数值是错的,所以导致了fminunc函数优化出错。而Gradient Descent由于不依赖函数值仅仅使用偏导数,故可以正常运行。

今天Debug的时候我又重新推导了一下求𝐽(𝜃)的向量写法。

在Logistic Regression里,cost function如下所示:

其中

等价于以下形式:

ps:这里的log函数其实是数学上的ln函数

所以:

由于

其中g(z)函数是sigmoid函数,即:

在octave/matlab里,这些函数都支持以向量作为输入,故

相应的偏导数如下: