吴恩达机器学习-5-神经网络学习Neural Networks Learning

出品:尤而小屋
作者:Peter
编辑:Peter

吴恩达机器学习-5-神经网络学习Neural Networks Learning

本文是在上节神经网络的基础上,做了进一步的阐述,内容包含:

  • 神经网络代价函数
  • 反向传播法及解释
  • 梯度检验
  • 神经网络的小结

神经网络代价函数

参数解释

对几个参数的标记方法进行说明解释:

  • mm:训练样本个数
  • xyx,y:输入和输出信号
  • LL:代表神经网络层数
  • SI{S}_{I}:每层的神经元个数
  • Sl{S}_{l}:表示输出神经元个数

分类讨论

主要是两类:二分类和多类分类

二类分类:SL=0,y=0/1S_L=0,y=0/1;输出是一个实数

KK类分类:SL=k,yi=1S_L=k,y_i=1表示分到第ii类的情况。输出是一个多维向量

代价函数

逻辑斯蒂回归(LR)中的代价函数:

J\left(\theta \right)=-\frac{1}{m}\left[\sum_\limits{i=1}^{m}{y}^{(i)}\log{h_\theta({x}^{(i)})}+\left(1-{y}^{(i)}\right)log\left(1-h_\theta\left({x}^{(i)}\right)\right)\right]+\frac{\lambda}{2m}\sum_\limits{j=1}^{n}{\theta_j}^{2}

在逻辑斯蒂回归中,只有一个输出变量称之为标量scalar

但是在神经网络中会有多个输出变量,hθ(x)h_\theta(x)是一个KK维的向量。

假设第ii个输出函数:

\newcommand{\subk}[1]{ #1_k } hθ(x)RKh_\theta\left(x\right)\in \mathbb{R}^{K} (hθ(x))i=ithoutput{\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output}

代价函数JJ表示为:

J(Θ)=1m[i=1mk=1kyk(i)log\subk(hΘ(x(i)))+(1yk(i))log(1\subk(hΘ(x(i))))]+λ2ml=1L1i=1slj=1sl+1(Θji(l))2J(\Theta) = -\frac{1}{m} \left[ \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{k} {y_k}^{(i)} \log \subk{(h_\Theta(x^{(i)}))} + \left( 1 – y_k^{(i)} \right) \log \left( 1- \subk{\left( h_\Theta \left( x^{(i)} \right) \right)} \right) \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2

解释说明:

  1. 期望通过代价函数来观察算法预测的结果和真实情况的误差
  2. 每行特征会有KK个预测,利用循环对每行进行预测
  3. KK个预测中选择出可能性最高的那个,将其和实际的数据yy进行比较
  4. 正则化项是排除了每个偏置θ0\theta_0之后,每层θ\theta矩阵的求和
  5. 参数jj(由sl+1s_l+1层的激活单元数决定)循环所有的行,ii(由sls_l层的激活单元数决定)循环所有的列

反向传播法Backpropagation Algorithm

为了计算神经网络中代价函数的偏导数J(Θ)Θij(l)\frac{\partial J(\Theta)}{\partial \Theta_{ij^{(l)}}},需要使用反向传播法

  • 首先计算最后一层的误差
  • 再一层层地反向求出各层的误差,直到倒数第二层

前向传播例子

假设有一个数据样本:

(x(1),y(1))({x^{(1)}},{y^{(1)}})

神经网络是4层的,其中K=SL=L=4{K=S_L=L=4}

前向传播法就是通过一层层地按照神经网络的顺序从输入层到输出层计算下去。

反向传播例子

  1. 从最后一层的误差开始计算:

    误差=激活单元的预测a(4){a}^{(4)}和实际值之间的y(k)y^{(k)}之间的差

  2. δ\delta表示误差,误差=模型预测值-真实值

    δ(4)=a(4)y\delta^{(4)} = a^{(4)} -y

  3. 前一层的误差

δ(3)=(Θ(3))Tδ(4)g(z(3))\delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}\ast g’\left(z^{(3)}\right)

其中 g(z(3))g'(z^{(3)})SS 形函数的导数,具体表达式为:

g(z(3))=a(3)(1a(3))g'(z^{(3)})=a^{(3)}\ast(1-a^{(3)})

  1. 再前一层的误差

δ(2)=(Θ(2))Tδ(3)g(z(2)) \delta^{(2)}=(\Theta^{(2)})^{T}\delta^{(3)}\ast g'(z^{(2)})

第一层是输入变量,不存在误差

  1. 假设λ=0\lambda=0,如果不做正则化处理时

J(Θ)Θijl=aj(l)θi(l+1)\frac{\partial J(\Theta)}{\partial \Theta_{ij}^{l}}=a_j^{(l)}\theta_i^{(l+1)}

对上面的式子中各个上下标的含义进行解释:

  • ll代表的是第几层

  • jj代表的是计算层中的激活单元的下标

  • ii代表的是误差单元的下标

算法

  • 利用正向传播方法计算每层的激活单元

  • 利用训练集的真实结果与神经网络的预测结果求出最后一层的误差

  • 最后利用该误差运用反向传播法计算出直至第二层的所有误差。

    在求出:(l)ij\triangle {(l)}_{ij}之后,便可以计算代价函数的偏导数之后,便可以计算代价函数的偏导数:

    D(l)ijD{(l)}_{ij}

反向传播的直观理解

前向传播原理

  • 2个输入单元;2个隐藏层(不包含偏置单元);1个输出单元
  • 上标ii表示的是第几层,下标表示的是第几个特征或者说属性

图中有个小问题,看截图的右下角!!!

根据上面的反向传播法得到的结论

Z1(3)=Θ10(2)1+Θ11(2)a1(2)+Θ12(2)a2(2)Z^{(3)}_{1}=\Theta_{10}^{(2)}*1+\Theta_{11}^{(2)}*a^{(2)}_1+\Theta_{12}^{(2)}*a^{(2)}_2

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享