【2017CS231n】第四讲:介绍神经网络

一.反向传播

    在说反向传播前,先介绍计算图的概念,我觉得计算图是个利器。

1.1 计算图

    我们可以把f=W*x用一张类似流程图的东西表达出来,如下图所示,我们成这张图叫做计算图。其实就是把公式分解成小的计算单元。

    在这张图中,输入的训练数据x和权重W通过*连接到一起,运算后得到分数s,s经过hinge loss计算得到损失项Li,通过加法符号与正则项R连接得到结果L。

    

    为什么要用计算图呢,下面我们举个例子说明应用计算图的好处。

    这个式子f(x,y,z)=(x+y)z。我们取几个中间变量,q=x+y,这样整个式子就可以写成f=qz。我们可以从计算图中直观地来看。

我们的目的是求f分别对x,y,z的梯度。

    首先求f对f的梯度,我们知道是1。


    下面我们求f对z的梯度,很容易得是3。


    接下来我们想求f对x和y的梯度,但是我们没办法直接求,因为他们中间隔了一个中间变量q。所以我们用链式求导法,先求f对q的偏导,再分别求q对x和y的偏导。f对q的梯度是-4。    

   

    下面求f对y的梯度,我们利用链式求导,f对q的偏导乘以q对y的偏导,就得到了f对y的偏导。在这里我们只需要用到上一个偏导值f对q的偏导,和本次的偏导q对y。


    再求f对x的偏导,同样利用链式求导。


    通过这个例子我们可以看到,求f对x和y的梯度,我们从后向前依次求每个节点的梯度。到了x和y输入的节点上,我们只需要将上一次的偏导乘以这一次的偏导,就可以求得我们想要的结果。比如对x来说,我们最终要求的f对x的梯度,我们从后往前算梯度,到最后跟x有关的节点时,只需要考虑本地梯度和上游梯度。

    通过计算图的使用,我们从后向前计算梯度,只需简单的加法和乘法,每次只需要考虑本地梯度和上游梯度就可以求得结果。当式子很复杂时,计算图的方法优势更为明显。

    前向传播中计算节点输出,反向传播中计算梯度。

二.神经网络

    我们先看下面一个两层神经网络的例子。

    第一层W1*x再经过max函数得到输出h(h是W1所有样本的加权得分)

    第二层W2*h得到输出:(第二层的输出是每个分类得分的最终输出)

    其实就是线性分类函数的结果通过一个非线性的筛选,在与权重W相乘,得到另一层网络,不断这样嵌套下去就能得到任意深度的网络:


    下面是神经网络的结构:

两层神经网络也可以叫单隐藏层网络

三层神经网络也是双隐藏层网络


下面是几种激活函数:


猜你喜欢

转载自blog.csdn.net/poulang5786/article/details/79981764
今日推荐