• 神经网络(neural network)


    在这一章中我们将进入深度学习算法,学习一些神经网络相关的知识,这些是有更加强大的作用,更加广泛的用途。

    神经元和大脑(neurons and the brain):

    我们对于我们的编程的进步主要来自我们对于大脑的研究,根据我们对于大脑的研究我们发现了神经元这一个最基础的部分,如图所示,

    有树突来收集信号,轴突用来传递信号,而我们的细胞则可以来处理我们的信息,在大量的神经元的连接就可以对一些数据进行处理,当然我们不光只是对人脑进行研究,其实我们在很多的动物中也有类似的探讨,当然我们的科学家并没有完全吃透我们的脑部科学原理,这就是为什么当我们的科学家在我们的脑部科学方面有进步时,我们的神经网络也会有许多的进步,在之前我们学到的线性回归和逻辑回归这样的基础算法ai,并不能完成这种深度算法学习,而需要我们对于神经网络的创建,这与我们在我们的神经网络中创建的神经元的数量有着巨大的联系。

    当然是我们的神经元越多我们的算法的表现就会更好。当然这与我们所有的数据数量也有着关系。

    需求分析(demand prediction):

    怎么样的结构才是我们的神经网络呢?我们通过以下的图片进行了解:

    从左往右我们有三个部分:

    第一个就是我们的黄色字体部分,我们把输入的特征向量称为我们的输入层(input layer),它是我们输入的部分。

    第二个就是我们中间蓝色部分的,我们在这里称他为隐藏层(hidden layer),它的作用是收到我们从输入层得到的数据,从而发出一种叫做激发值(activations)的数值.

    第三层也就是在最右侧也就是,我们的输出层(output layer),顾名思义,它就是我们通过根据从隐藏层中得到的激发值我们从而当我们输入我们的预测的特征值,从而我们可以从中获得到我们所需要的预测值。

    接下来,详细说一下其中的细节。假如我们的输入特征总共有四个,而我们在隐藏层的神经元有三个,我们输入我们对应神经元的特征值我们可以得到不同的激发值,而这些激发你会进一步到我们的输出层,从而来根据数据得到的最准确的预测,这就是我们大概的一个神经网络的概念图。

    当然我们的隐藏层在不同的神经网络中,也可以是多层的,这只与你对于你的神经网络的要求有关 

    例子:图像识别(image recognization)  :

    我们在图像识别中我们的图片会被分为很多块像素块,我们通过把这些数据收集起来,就变成了在我们左侧的的这个特征向量就变成了我们的输入值,我们来看一下我们对于图像识别的神经网络。

    我们往里面输入一个我们的输入值,我们第一层隐藏层会根据我们的比较细小的线条,到第二层隐藏层寻找人脸比较小的部分,到后面隐藏层我们也会去寻找脸部的数据,到最后我们会输出,识别的姐结果。我们在汽车识别中,也用到了类似的方法。

    其中这些神经元都是我们通过一些数据,拟合到的一个比较好的算法。

    神经网络的层(neural network layer):

     

    在下图中,我们看到了我们的一个比较简单的神经网络,我们从第一个输入的值开始,它是有四个特征值,我们把这个特征向量代入我们的第一个隐藏层神经元中,看到上面三个线性函数,从而由三个sigmoid函数,我们得到了我们需要的三个激发值,在这里我们需要了解的是我们用的是上标[n]来代表我们的层数,比如:\(\vec{w}^{[1]}\)。然后我们把我们的激发值放入我们的第二层。

    来到了我们第二层,我们这里的输入值就是我们在第一层的激发值。也是同样的方法,由我们的逻辑函数得到了我们的值,值的大小大概在0到1之间,这里我们把激发值一般写成是\(\vec{a}^{[1 ]}\)。所以我们在这里输出的也就是我们的\(\vec{a}^{[2]}\)

    最后根据我们的sigmoid函数的特点我们知道是以0.5为分界线一般,就可以得到我们的值了。

    这里我们要知道sigmoid方程也被叫做是激发函数。我们一般写成上标L下标是J。

    \(a_{j}^{[l]}=g(\vec{w}_{j}^{[l]}\cdot a^{[l-1]}+b_{j}^{[l]})\) ,在这里我们的输入层被我们称为是0层。我们的前一层的激发值是我们第二层的输入值。 

    我们把这种从右往左传递进行的算法叫做正向传递算法,在后面我们也会学到逆向传递算法。 

    在我们的numpy中并没有数组,所以我们要用一个方式把我们得到的值转化成矩阵的形式。

    x = np.array([[1,2,3]])
    

    比如以下这个我们就可以得到[1,2,3],这样1✖️3的矩阵。

    我们在这里用到了我们的tensor flow框架,用它来实现我们的逻辑回归,在这里我们的tensor它是一个保持我们的数据维持在矩阵的一个比较好的属性,我们也可以通过numpy()方法,把矩阵从而再转化为我们的数组的属性。

     同理我们在后面的神经元层也是一样的操作。所以在这里我们需要去配置一下tensor flow框架。

    创建神经网络:

    我们在学习到了用tensor flow之后,我们就可以来开始着手创建一个神经网络。

    我们在这里用到了一个全新的函数,它叫做Sequential(),它的作用相当于我们对神经网络的一层一层的正向传递。model会在之后的学习中学到暂时只需要理解它的意思即可。

    我们还可以进行一定的化简,我们得到的式子就变成了。 

  • 相关阅读:
    手握Python这柄宝剑,我一举拿下4个offer
    【web】TCP/UDP协议详解(字节二面:TCP三次握手、四次挥手)
    java毕业设计LIS检验系统2021mybatis+源码+调试部署+系统+数据库+lw
    数据结构 2 第二章 线性结构 代码实现
    9、8锁现象彻底的理解锁(锁的只有两个东西,一个是对象,一个是Class模板(static修饰))
    反序列化 [网鼎杯 2020 青龙组]AreUSerialz 1
    STM32 CAN使用记录:FDCAN基础通讯
    rosdep init 错误解决终极方法(药到病除)
    Geode多节点集群实验
    WinGet 换国内源使用帮助
  • 原文地址:https://blog.csdn.net/princess_pig/article/details/136515812