神经网络基础模型--Logistic Regression的理论和实践

  • 概述

        Logistic Regression 即 逻辑回归,属于监督学习,输入x(特征数据),输出为0或1(显然是二分类)。为什么要用逻辑回归讲神经网络基础呢?我觉得这个相对比较简单,易懂,而且有神经网络基本都会用到的激活函数(Activation Function)。

  • 正向传播,搭建神经网络 

        比如我们要给二维平面的点做分类,则输入的是特征有x_{1},x_{2}(即点的x,y坐标)。参数我们设置三个(一个特征配一个参数,再加一个biase),这里我设为w_{1}w_{2},在加上一个biase  b。这样我们就得到了一个函数值:

                                                         z = w_{1}x_{1} + w_{2}x_{2} + b

我们设置值为z,则此时我们已经对原始数据进行了第一次处理,也就是得到我们第一个神经元

                                                        神经网络基础模型--Logistic Regression的理论和实践_第1张图片

(注:我们也可以把参数w_{1}w_{2}放到x_{1}x_{2}的对应线上)

       可是我们目的是为了分类0或1,也就是输出的结果起码得在0-1之间。可是我们根本不知道z的值有多大,也就无法控制范围,所以我们用一个函数来完美起到可以把结果限制到0-1范围内,这个函数是长这个样子,我们对它做个测验(->趋近于):

       当x->正无穷,值->1;

       当x->负无穷时,值->0;

       当x=0时,值=1/2。

大概图像长这个样子:

                                                        神经网络基础模型--Logistic Regression的理论和实践_第2张图片

像这样将结果做一次函数特殊处理的,我们称之为Activation Function,记这个函数为sigmod

        因为接下来要用到它的导数,这里我推导下它的求导过程,以后记住结果就行:

         神经网络基础模型--Logistic Regression的理论和实践_第3张图片

        这次我们第二次对数据做了处理,就可以再添加一个神经元了:

                                                 神经网络基础模型--Logistic Regression的理论和实践_第4张图片

        其中\sigma这里表示sigmod,a表示它的值。

        结果我们已经计算出来了,是a,那么我们怎样才能更新我们的参数呢?当然是赶紧找到损失函数啦。

        我们先回顾下我们之前所用过的最简单的损失函数L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^{2} (其中\hat{y}为预测值,y为真实值)。可是这种损失函数在参数w大于1个的时候,就很有可能出现多个极值点(比如它的函数这个样子),而导致梯度下降法无法得到最优解

        逻辑回归损失函数是这样的L(\hat{y},y) = -(ylog\hat{y} + (1-y)log(1-\hat{y}))

        if y=1,则L(\hat{y},y) = - log\hat{y},想要\hat{y}越大,则就要L(\hat{y},y)越小。

        if y=0,则L(\hat{y},y) = - log(1-\hat{y}),想要\hat{y}越小,则就要L(\hat{y},y)越小。

        综上所述,要想使\large \hat{y}精确地靠近y,仅仅使L(\hat{y},y)达到最小即可。

这次就是我们的第三次也是最后一次处理数据了,所以又添加了一个损失函数神经元:

                                    神经网络基础模型--Logistic Regression的理论和实践_第5张图片

(其中的a就是上面的\large \hat{y})

上面的整个数据传送过程,我们称之为正向传播

 

  • 反向传播,更新参数

       要想通过损失函数L对\large w_{1}w_{2}进行更新,就得求L的\large w_{1}w_{2}上的梯度,怎么求梯度呢?很显然,链式求导呀。

       我推导了下:

       神经网络基础模型--Logistic Regression的理论和实践_第6张图片

     (上图我标出的神经网络基础模型--Logistic Regression的理论和实践_第7张图片是因为如果下面的代码dz没看懂的话瞅瞅这个)

     然后我们对参数进行更新:

     \large w_{1} := w_{1} - \alpha dw_{1}

     \large w_{2} := w_{2} - \alpha dw_{2}

     \large b := b - \alpha db

     (alpha为学习率)

     这个过程就是反向传播

 

  • 代码实现

        生成数据

               初始化数据点,绿点为1类,红点为0类。  

               神经网络基础模型--Logistic Regression的理论和实践_第8张图片

              图像显示:

               神经网络基础模型--Logistic Regression的理论和实践_第9张图片

              规范数据(缩小到-1 — 1,不清楚原因的可以看前面的梯度下降算法的相关说明)

              神经网络基础模型--Logistic Regression的理论和实践_第10张图片

              图为:

              神经网络基础模型--Logistic Regression的理论和实践_第11张图片

       sigmod函数

             

       初始化参数

             

             初始成的数据:

              神经网络基础模型--Logistic Regression的理论和实践_第12张图片

        画图函数

              神经网络基础模型--Logistic Regression的理论和实践_第13张图片

        训练过程

             上面讲的很详细了,应该能看懂

             神经网络基础模型--Logistic Regression的理论和实践_第14张图片

            第一个图:

             神经网络基础模型--Logistic Regression的理论和实践_第15张图片

            第二张图:

            神经网络基础模型--Logistic Regression的理论和实践_第16张图片

            后面的一张图:

            神经网络基础模型--Logistic Regression的理论和实践_第17张图片

            成功

       画损失函数

           

            损失函数图:

             神经网络基础模型--Logistic Regression的理论和实践_第18张图片


更多精彩内容,请关注 深度学习自然语言处理 公众号,就是下方啦!跟随小博主,每天进步一丢丢!哈哈!

神经网络基础模型--Logistic Regression的理论和实践_第19张图片

你可能感兴趣的:(机器学习,机器学习,深度学习)