1.神经网络

1.1动机

在现实生活中会存在很多非线性问题,线性回归和逻辑回归在解决非线性问题时,特征值的大小随着n的增加呈指数增长,增加了计算的复杂性。而特征太多,容易出现过拟合的问题。

1.2举例

与门(AND)、或门(OR)、异或门(XOR),都是以最简单的二元输入为例,很容易理解。其中,异或门的例子中在隐藏层使用到了两个单元。神经网络可以通过多层计算,将一个复杂的模型由简到难地一层一层搭上去。

  • 问:**函数为何得是非线性函数?

    因为如果是线性函数,无论神经网络有多少层,输出的都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机。

2.代价函数

J(Θ)=1mi=1mj=1k[yj(i)log(hΘ(xj(i)))+(1yj(i))log(1hΘ(xj(i)))]+λ2ml=1L1i=1sl+1j=1sl(Θijl)2 J(\Theta)=-\frac1m\sum_{i=1}^m\sum_{j=1}^k[y_j^{(i)}log(h_\Theta(x_j^{(i)}))+(1-y_j^{(i)})log(1-h_\Theta(x_j^{(i)}))]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l+1}}\sum_{j=1}^{s_l}(\Theta_{ij}^l)^2\\

3.参数优化

3.1反向传播

J(Θ)=1mi=1mj=1k[yj(i)log(hΘ(xj(i)))+(1yj(i))log(1hΘ(xj(i)))]+λ2ml=1L1i=1sl+1j=1sl(Θijl)2 \begin{aligned} J(\Theta)=-\frac1m\sum_{i=1}^m\sum_{j=1}^k[y_j^{(i)}log(h_\Theta(x_j^{(i)}))+(1-y_j^{(i)})log(1-h_\Theta(x_j^{(i)}))]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l+1}}\sum_{j=1}^{s_l}(\Theta_{ij}^l)^2\\ \end{aligned}

结合吴恩达视频和西瓜书自行推导整理过程如下:

1.对单个训练样例(xix_i,yiy_i)的误差记为EiE_i

则:
Ei=j=1k[yj(i)log(hΘ(xj(i)))+(1yj(i))log(1hΘ(xj(i)))]J(Θ)=1mi=1mEi+ E_i = \sum_{j=1}^k[y_j^{(i)}log(h_\Theta(x_j^{(i)}))+(1-y_j^{(i)})log(1-h_\Theta(x_j^{(i)}))]\\ J(\Theta) = -\frac1m \sum_{i=1}^mE_i+正则化
2.δ(l)\delta^{(l)}的含义是EiE_i对于**值z(l)z^{(l)}的偏导,梯度跟δ\delta的关系如下:
EiΘ(l)=Eiz(l+1)z(l+1)Θ(l)=Eiz(l+1)a(l)T=δ(l+1)a(l)T \begin{aligned} \frac{\partial E_i}{\Theta^{(l)}} & = \frac{\partial E_i}{z^{(l+1)}} \frac{\partial z^{(l+1)}}{\partial \Theta^{(l)}}\\ & = \frac{\partial E_i}{z^{(l+1)}} a^{(l)T}\\ & = \delta^{(l+1)} a^{(l)T} \end{aligned}\\
3.δ(l)\delta^{( l )}的值推导过程如下:
Eiz(l)=Eia(l)a(l)z(l)=Eiz(l+1)z(l+1)a(l).a(l)(1a(l))=(Θ(l))Tδ(l+1).a(l)(1a(l)) \begin{aligned} \frac{\partial E_i}{z^{(l)}} & = \frac{\partial E_i}{a^{(l)}} \frac{\partial a^{(l)}}{z^{(l)}}\\ & = \frac{\partial E_i}{z^{(l+1)}} \frac{\partial z^{(l+1)}}{a^{(l)}} .*a^{(l)}(1-a^{(l)})\\ & = (\Theta^{(l)})^T \delta^{(l+1)} .* a^{(l)}(1-a^{(l)}) \end{aligned}
(这里可以看出sigmoid函数梯度消失问题:a(l)z(l)\frac{\partial a^{(l)}}{z^{(l)}}接近0)

4.所以δ(l)\delta^{( l )}是一个由后向前的推导过程,那么δ(L)\delta^{( L )}如何推导呢?
δ(L)=Eiz(L)=EihΘ(x(i))hΘ(x(i))z(L)=Eiz(l+1)z(l+1)a(l)hΘ(x(i))(1hΘ(x(i)))=(yhΘ(x(i))+y(i)11hΘ(x(i)))hΘ(x(i))(1hΘ(x(i)))=y(1hΘ(x(i)))+(y1)hΘ(x(i))hΘ(x(i))(1hΘ(x))hΘ(x(i))(1hΘ(x(i)))=y(i)hΘ(x(i)) \begin{aligned} \delta^{( L )} & = \frac{\partial E_i}{z^{(L)}}\\ & = \frac{\partial E_i}{h_\Theta(x^{(i)})} \frac{\partial h_\Theta(x^{(i)})}{z^{(L)}}\\ & = \frac{\partial E_i}{z^{(l+1)}} \frac{\partial z^{(l+1)}}{a^{(l)}} h_\Theta(x^{(i)})(1-h_\Theta(x^{(i)}))\\ & = (\frac{y}{h_\Theta(x^{(i)})} +\frac{y^{(i)}-1}{1-h_\Theta(x^{(i)})})*h_\Theta(x^{(i)})(1-h_\Theta(x^{(i)}))\\ & = \frac{y(1-h_\Theta(x^{(i)}))+(y-1)h_\Theta(x^{(i)})}{h_\Theta(x^{(i)})(1-h_\Theta(x))} *h_\Theta(x^{(i)})(1-h_\Theta(x^{(i)}))\\ & = y^{(i)}-h_\Theta(x^{(i)}) \end{aligned}

反向传播的步骤如下:

repeat
   for i to m:
     根据当前参数计算出hΘ(x(i))h_\Theta(x^{(i)})
     计算δ(L)\delta^{(L)},并依次推导出δ(L1)\delta^{(L-1)}直至δ(2)\delta^{(2)}
     计算梯度EiΘ\frac{\partial E_i}{\Theta},记为Δ(i)\Delta^{(i)}
     对梯度进行累加Δ=Δ+Δ(i)\Delta = \Delta+\Delta^{(i)}
  计算总梯度:D=1mΔ+λmΘD = -\frac1m\Delta+\frac\lambda m\Theta(注意第0项没参与正则化,不需要添加最后一部分)
util 达到停止条件

  • 上述过程是累积反向传播(BP)算法,而类似与梯度下降和随机梯度下降,还存在一个算法叫标准BP算法。一般来说,标准BP算法每次更新只针对单个阳历,参数更新十分频繁,而且对于不同样例进行更新的效果可能出现抵消的现象。而累积BP算法直接针对累计误差最小化。

3.2 优化算法

梯度下降或者其它高级优化算法。但都存在局部最优问题。

注意!!!反向传播算法的作用是得到偏导,而梯度下降一种需要使用偏导的优化算法。

4.应用

4.1 选择网络结构

输入特征向量,输入节点的个数等于类别数目
一般选择一个隐藏层,当有多个隐藏层的时候,各个隐藏层的节点数目相等。隐藏层节点越多越好,但是计算量会很大,一般使用特征的数目或者其倍数
吴恩达机器学习笔记之神经网络

4.2随机初始化参数

初始化为一样的值会造成神经网络的高度冗余(简单理解为因为参数一致导致正向传播计算节点值一致以及反向传播参数更新一致,节点冗余),学习不出真实有效的东西。所以要有随机初始化的思想。
吴恩达机器学习笔记之神经网络

4.3 梯度检测

梯度检测的作用是使用偏导数的定义求得偏导从而用来验证BP算法的正确性。

在验证正确之后,需要关闭梯度检测,因为它的计算量非常大。

关键公式:
J(θ)θi=J(θ0,θ1,...,θi+ϵ,....θn)J(θ0,θ1,...,θiϵ,....θn)2ϵ \frac{\partial J(\theta)}{\partial\theta_i} = \frac {J(\theta_0,\theta_1,...,\theta_i+\epsilon,....\theta_n)-J(\theta_0,\theta_1,...,\theta_i-\epsilon,....\theta_n)}{2\epsilon}
步骤:

1.使用前向传播求得所有hΘ(x)h_\Theta(x)

2.计算J(θ)J(\theta)

3.使用反向传播求得所有的偏导D

4.使用上述公式求的所有偏导并于D进行比较。如果相同就证明反向传播是对的。

4.4优化参数

使用梯度下降和优化算法进行参数优化

相关文章: