目录
1 神经网络学习
1.1 成本函数
我们先来规定几个变量:
对于Logistic Regression二分类问题,,其成本函数$J(\theta)$在正则化条件下如下:
对于Netural Network多分类问题,其成本函数$J(\theta)$在正则化条件下可以表示成如下形式:
回顾一下在Neutral Network中,我们的output layer 可能有很多nodes。我们将其第$k$个node表示成$h_\theta(x)_k$
其中:
-
double sum 表示对output layer每一行logistic regression costs的累加;
-
triple sum 表示将entire network中的$\Theta^2$累加;
1.2 反向传播算法
Backpropagation: an abbreviation for “backward propagation of errors”, is a common method of training artificial neural networks used in conjunction with an optimization method such as gradient descent. The method calculates the gradient of a loss function with respect to all the weights in the network.
Backpropagation(反向传播)是Netural Network中用来获取 $ \frac {\partial J(\Theta)} {\partial{\Theta_{i,j}^{(l)}}} $,类似于$ \frac {\partial J(\theta)} {\partial{\theta_{j}}} = \frac 1 m \sum_{i=1}^m \lbrace[h_\theta(x^{(i)})-y^{(i)}]x^{(i)}\rbrace $在Linear Regression和Logistic Regression中的作用。
1.2.1 反向传播算法介绍
1.2.2 反向传播算法直觉
反向传播算法初一看稍显复杂,那么如何从直觉上理解它呢。关键在于理解$ \delta_j^{(l)}=\frac {\partial cost(i)} {\partial{z_j^{(l)}}} = a_j^{(l)}-y_j^{(l)} $是预测值和实际值在layer L中的差值。
成本函数是:
在只有一个输出和没有正则化情况下,成本函数是:
对于该成本函数:

1.3 实现细节
1.3.1 展开参数
由于fminunc和costfunction的theta是vector而不是matrix,因此当用神经网络的Back Propagation算法时,需要将matrix展开成vector,计算完再将vector转回成matrix.

1.3.2 梯度检查
由于Back Propagation实现起来比较tricky,有时候看起来$J(θ)$在下降,但是结果却是不对的。为了避免这种情况,我们利用数值斜率来校准Back Propagation算法的实现(称为Gradient Checking)。当两者在多种情况下都相近的时候,我们就认定Back Propagation算法的实现没有问题。这个时候再关掉Gradient Checking用Back Propagation算法来算J的gradient就在正确性的基础上又有速率(因为Back Propagation远比数值斜率快)

1.3.3 Theta随机初始化
由于fminunc需要一个initialTheta值,而Neutral Network若用0作为所有theta的初始值,则会导致每一个hidden layer里的unit都是一样,使得最终输出错误。因此为了打破这种对称,我们需要随机生成$[-ϵ,+ϵ]$范围的initialTheta。

1.3.4 整合

最后请观看一个利用Neural Network实现 无人驾驶的视频。
2 作业
见这里。附上一张跑分图。

3 总结
神经网络的$\Theta$求解可以通过梯度下降结合Back Propagation Algorithm(该算法用来计算$\frac {\partial J(\Theta)} {\partial{\Theta_{i,j}^{(l)}}}$)来获取$J_{min}(\Theta)$下的$\Theta$。Back Propagation Algorithm稍显复杂,一种直观理解是先用Forward Propagation算出$a^L$,然后计算$\delta^{(L)} = a^{(L)}-y$,再将$\delta^{(L)}$反向传播到$a_j^{(l)}$,求出$\delta_j^{(l)}$。最后将$\delta_j^{(l)}$表示成和$\Theta_{i,j}^{(l)}$相关的值,即$\frac {\partial J(\Theta)} {\partial{\Theta_{i,j}^{(l)}}}$。