美文网首页
神经网络

神经网络

作者: 格物致知Lee | 来源:发表于2019-04-01 22:32 被阅读0次

    1.1 感知机

        你可以把感知机(Perceptron)通俗理解为一个函数f,向函数f输入变量x_1,x_2,x_3...x_n,函数会输出0或1。哪函数f是如何做到的呢?很简单,我们为每个x_i分配一个权重w_i,根据\sum\nolimits_{i=1}^nx_iw_i 大于或小于阈值,输出不同的结果。其公式如下:

    f = \begin{cases} 1& {\sum\nolimits_{i=1}^nx_iw_i \geq  阈值}\\ 0 & {\sum\nolimits_{i=1}^nx_iw_i < 阈值 } \end{cases}

    我们设:阈值=-b,则上式可以简化一下:

    z = \begin{cases} 1& {\sum\nolimits_{i=1}^nx_iw_i +b\geq  0}\\ 0 & {\sum\nolimits_{i=1}^nx_iw_i + b< 0 } \end{cases}

    通俗解释下:一个女生选男票,x_1代表身高,x_2代表性格,x_3代表长相。如果女生更青睐性格好的男生,那么x_2对应的w_2取值就会大,不在乎长相,那么x_3对应的w_3取值就会小。同时b衡量了女生想谈恋爱的程度,b越大说明女生越渴望恋爱。反之亦然。

    1.2 S型神经元

        我们对上面的\sum\nolimits_{i=1}^nx_iw_i+b,做一下处理有:\sigma (\sum\nolimits_{i=1}^nx_iw_i+b),其中\sigma 为:\sigma (z) = \frac{1}{1 + e^{-z}} ,也叫sigmoid function。于是有:

    \sigma (\sum\nolimits_{i=1}^nx_iw_i+b) =  \frac{1}{1 + e^{-\sum\nolimits_{i=1}^nx_iw_i-b}}

    你可能会问我,为什么要这样做?因为sigmoid function 可以将\sum\nolimits_{i=1}^nx_iw_i+b的结果压缩到[0,1]\lim\nolimits_{(\sum\nolimits_{i=1}^nx_iw_i+b)\to+∞ } \sigma  = 1\lim\nolimits_{(\sum\nolimits_{i=1}^nx_iw_i+b)\to-∞ } \sigma  = 0。并且sigmoid function 是一个可导函数,我们可以用导数进一步研究输出值与w_i,b之间的关系。

    1.3 神经网络的架构

    其中hidden layer中每一个圈都代表一个S型神经元。这样的一个神经网络中我们有输入值x_1,x_2,...x_n和输出值y。我们希望有⼀个算法,能让我们找到w_1,w_2....w_m(m为上图中的箭头数)和b_1,b_2...b_k(k为hidden layer,output layer神经元个数),以⾄于⽹络的输出 y(x) 能够拟合所有的训练输⼊ x。为了量化我们如何实现这个⽬标,我们定义⼀个代价函数 :

    其中a表示预测值

    我们的目标很明确就是寻找对应所有输入\vec{x} 使函数C取最小值时的\vec{w} ,\vec{b}

    1.4梯度下降法

        分析一下上面的函数C(loss function):\vec{x} 是输入模型的所有样本,\vec{y} 为对应的标签,两者都是不变的。所以C的大小只与\vec{w} , \vec{b}
有关。于是便想:我们可不可以逐步探索,调整\vec{w} ,\vec{b} 使C的取值越来越小?于是有了梯度下降法(Gradient descent)。

    对于一个函数J(\theta _0,\theta _1),梯度下降的主要思想:

    1.初始化\theta _0,\theta _1

    2.不断改变\theta _0,\theta _1的值,使J(\theta _0,\theta _1)不断减小至最小值。

    梯度下降的过程如图所示:

    现在你可能会说:鬼知道应该怎么调整\theta _0,\theta _1会使J变小。这时我们便要使用微积分工具了:

    \Delta J = \frac{\partial J}{\partial\theta_0  }\Delta \theta_0 +\frac{\partial J}{\partial\theta_1  }\Delta \theta_1

    我们要使J变小,即\Delta J<0。于是有\frac{\partial J}{\partial\theta_0  }\Delta \theta_0 +\frac{\partial J}{\partial\theta_1  }\Delta \theta_1<0。我们取\Delta \theta _0 = -\eta \frac{\partial J}{\partial\theta_0  }\Delta \theta _1 = -\eta \frac{\partial J}{\partial\theta_1  }\eta >0

    带入上式于是有-\eta [(\frac{\partial J}{\partial\theta_0  })^2+(\frac{\partial J}{\partial\theta_1  })^2]<0。好了我们只要按照以下规则更新\theta _0,\theta _1。就会使J变小。

     \theta _0 = \theta _0 -\eta \frac{\partial J}{\partial\theta_0  }, \theta _1 = \theta _1 -\eta \frac{\partial J}{\partial\theta_1  }

    重复上述过程,直到J的保持稳定。注意:\theta _0,\theta _1的值要同时更新,切记不要求一次导更新一次!

    2.1

    相关文章

      网友评论

          本文标题:神经网络

          本文链接:https://www.haomeiwen.com/subject/svnvbqtx.html