#Week7 Neural Networks : Learning

一、Cost Function and Backpropagation

神经网络的损失函数:
J ( Θ ) = − 1 m ∑ i = 1 m ∑ k = 1 K [ y k ( i ) log ⁡ ( ( h Θ ( x ( i ) ) ) k ) + ( 1 − y k ( i ) ) log ⁡ ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j , i ( l ) ) 2 J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2 J(Θ)=m1i=1mk=1K[yk(i)log((hΘ(x(i)))k)+(1yk(i))log(1(hΘ(x(i)))k)]+2mλl=1L1i=1slj=1sl+1(Θj,i(l))2
#Week7 Neural Networks : Learning_第1张图片
这个cost function是在logistic regression基础上演变而来,只是神经网络有很多输出结点,而logistic regression只有一个输出结点,所以这个cost function只是把所有的K个输出结点的损失函数进行累加。

得到cost function后,为了寻找使得 J ( θ ) J(\theta) J(θ)最小的那组参数 θ \theta θ,我们需要知道 J ( θ ) J(\theta) J(θ)关于每个 θ \theta θ的偏导数,而后向传播算法可以帮助我们计算偏导数:
#Week7 Neural Networks : Learning_第2张图片
对于每个训练样本,先利用forward propagation计算每一层的 a a a
#Week7 Neural Networks : Learning_第3张图片
接着利用样本真实标签 y ( t ) y^{(t)} y(t)计算最后一层的误差值;

之后从右向左计算每一层(输入层除外)的误差:
在这里插入图片描述
这样每个样本一次正向、一次反向来更新误差矩阵:
在这里插入图片描述
向量化表示:
在这里插入图片描述
最后,就可以得到偏导数:
在这里插入图片描述
#Week7 Neural Networks : Learning_第4张图片

二、Backpropagation in Pratice

为了使用fminunc等高级的优化方法来求得cost function的最小值,所以将 θ \theta θ这个矩阵展成向量传入fminunc,完成后可以通过reshape从向量中提取 θ ( 1 ) 、 θ ( 2 ) \theta^{(1)}、\theta^{(2)} θ(1)θ(2)等:
#Week7 Neural Networks : Learning_第5张图片

为了确保我们使用Backpropagation求得的偏导数的正确性,可以使用Gradient Checking(很慢)来检验:
根据偏导数定义:
∂ ∂ Θ j J ( Θ ) ≈ J ( Θ 1 , … , Θ j + ϵ , … , Θ n ) − J ( Θ 1 , … , Θ j − ϵ , … , Θ n ) 2 ϵ \dfrac{\partial}{\partial\Theta_j}J(\Theta) \approx \dfrac{J(\Theta_1, \dots, \Theta_j + \epsilon, \dots, \Theta_n) - J(\Theta_1, \dots, \Theta_j - \epsilon, \dots, \Theta_n)}{2\epsilon} ΘjJ(Θ)2ϵJ(Θ1,,Θj+ϵ,,Θn)J(Θ1,,Θjϵ,,Θn)
一 般 ϵ = 1 0 − 4 一般\epsilon=10^{-4} ϵ=104
通过将这种方式计算的偏导数与之前Backpropagation求得的偏导数比较,即可得知Backpropagation的正确性。

之前在Linear Regression和Logistic Regression,我们可以用全0来初始化 θ \theta θ,但在神经网络中,这样做会有问题,所以采用随机初始化
#Week7 Neural Networks : Learning_第6张图片
最后,从整体捋一遍流程:
1、选择网络结构:
#Week7 Neural Networks : Learning_第7张图片
2、训练神经网络:

对每一个训练样本:
#Week7 Neural Networks : Learning_第8张图片

你可能感兴趣的:(Machine,Learning)