儿童神经网络:解释尽可能简单

大家好。众所周知,我们博客上的几乎所有文章都已发布以启动本课程或该课程。下一篇文章可以安排为“ Python中的神经网络”课程的发布时间,但是鉴于材料的简单性,我不想将其与该课程相关联,而只是将其作为奖励材料发布,作为针对最小课程的小教程。预测问题时,我想立即说这篇文章与课程无关,不是由老师写的。如果您想了解有关该课程的更多信息,则可以在相应的页面上进行




大家好!今天,我想谈谈神经网络的排列方式,但是它是如此简单,以至于即使只精通Python基础知识的初学者也可以理解。

一般而言,神经网络和人工智能是什么?


在AI哲学中,有两种类型的人工智能-强和弱。强大的人工智能理论表明,计算机可以独立思考和意识到自己的能力(嗯,就像《底特律成为人类》中发生的事情)。弱人工智能理论表明,这种智力无法或非常难以构建,尽管科学能够创建仅部分重复活生物神经网络工作的神经网络。但是哲学只是不适用于科学,因为在那里没有任何证据可以证明,因此我们将不关注这一点。弱神经网络目前在数据科学中占据主导地位,并被广泛使用:视觉图像识别,商品智能购买,甚至是车辆的OBS系统-因此,现在开始学习AI变得不再重要。

什么是神经网络?


神经网络是真实的生物神经网络运行的数学模型。只需将数学模型转移到程序中就足够了(因此,Python在神经网络编程中得到了如此广泛的应用,因此为对数学问题的解决方案进行编程非常方便。实际上,神经网络可以用几乎任何支持任何数学的编程语言来编写即使在划痕,这是最初创建教编程为低年级学生的基础知识,你可以看到这里)。

神经网络的基本概念


神经网络的操作有很多算法(现在正在积极开发此问题的数学方面)。初学者的经典解决方案是反向传播方法,这是一种用于更新多层感知器权重的梯度计算方法。以初学者通常研究的形式(具有S型激活功能),神经网络速度很慢,但相对准确。

我们将要编写的程序被称为神经网络的延伸。

在进行描述之前,让我们讨论一下神经网络的一般功能。

如果简化,神经网络在做什么?


如果我们稍微简化一下神经网络的概念,那么在按照“刺激-反应”原理进行训练后,根据正确的答案,根据老师的学习原则进行教学的神经网络就可以与陌生人一起工作。数据。换句话说,如果您向输入神经网络提出了一组特定的单词(例如,一组关于电影搜索的评论,无论是正面还是负面的,无论采用哪种格式,至少是txt,至少是json,问题都只在处理此数据的程序中存在)。要成功创建神经网络,您将需要两个数据集:一个测试集和一个训练集,可用于评估创建的神经网络的性能;训练集中的数据被标记为正/负(此处由于存在较长的数据,因此会出现分类大数据的问题和沉闷的职业)。在训练了神经网络(这可能会花费大量时间和计算机资源,具体取决于数据的维数,数据的处理以及最重要的是所使用的算法)之后,它将能够尝试为了准确预测她的输入是正面还是负面。但是神经网络(以及真实的人)具有一定百分比的错误。优化的任务是使其最小化,但是评估神经网络质量的问题可能永远不会解决。例如,他们给您一张热狗的照片,您肯定会说它是热狗。但是,如果照片模糊不清怎么办?黑和白?拍摄的能见度差?在这里,即使您一生中已经准备或吃了很多热狗,您也只能以一定程度的肯定。



开始对玩具神经网络进行编程


好了,走吧。我们的玩具神经网络将没有测试和训练数据,我们的玩具神经网络将尝试查找任何数据之间比率之比

停止。有什么意义呢?在一个简单的数学表达式中也发现了同样的情况。
毫无疑问。但是,我现在采用了这种表达方式来展示学习神经网络的过程。假设我们面临着找出英寸和厘米之间的转换因子的任务。一英寸长多少厘米?对于至少懂数学五年级(甚至更早)的人,不难记住什么翻译系数是2.54。

但是现在,我们会暂时忘记这一点,并想象我们需要创建一个简单的算法来通用地计算该参数。然而,问题还在于神经网络不是具有现成系数值的某些常数,否则它们将不会进行“实时”训练。

总体而言,我们处于一个孩子的位置,他正坐在一组立方体前,将要把它们第一次拿到自己的手中,这是他一生中第一个炮塔。他只大致了解物体的物理原理;就像我们一样,他也知道存在一定的特定比率(在他的情况下是重力)。那孩子会怎么做?

他会拿,并随机放一些骰子。同样,我们只能随机猜测我们将拥有的系数(而真正的成人神经网络也可以这样做,通常仅以正态分布的数字为指导)。
只是随机地,假设英寸和厘米的耦合系数(让我们开始称它为weight,就像在成人神经网络中一样)将为2.4。然后我们得到最复杂的数学表达式:

1 * 2.4 = 2.4

太好了,我们几乎猜到了,我们取得了一些结果。但这是不正确的,对于学习过程来说是正常的,我们有一些错误。正如在具有反馈的神经系统中一样,我们需要以某种方式对错误做出响应。但是首先,您需要了解其大小。就像我已经说过的那样,在与老师一起训练神经网络时,数据首先在标记的数据上运行,然后才发送到分类中以获取相似但不是标记的数据。我们也知道应该得到正确的结果,因此,我可以计算出错误:

t_target = 2.54
t_now = 2.40
e = t_target - t_now
//  ,   0.14

现在我们知道怎么了。但是该怎么办?自然,我们的玩具神经网络应该读取尽可能低的数据。在这种情况下,神经网络的另一个水下特征得以体现-最常见的是在训练过程中它们具有一定的损耗因子,数据科学中称为优化的部分致力于最小化误差

但是,现在还不行。毫无疑问,我们需要一步一步地改变耦合系数,但是又要怎么做呢?显然,您不必太大,否则我们的耦合系数将变得不准确且不会太小,否则我们将不得不训练相当长的时间。没有找到此步骤的100%正确选项,大多数情况下,比基于某些公式或算法更直观地选择真实神经网络中的这些参数(尽管这也是可能的)。现在,我们可以随机选择步骤的值(在神经网络的语言中,我们的步骤称为learning_rate),例如,值0.05可以达到最佳效果。另外,您需要同意以学习率缩进多少次。与成人神经网络一样,这些缩进的数量也称为时代。现在,凭借所有这些知识,您可以尝试编写一个小的Python程序,它将运行我们的玩具神经网络程序。

import random

#    Python  random,        

inches = 40  #    40    101, 6 
centimetre = 101.6

#  ,        , learning rate  

def kid_neuro(epoch, lr, accur):
    W_coef = random.uniform(0, 2)  #     
    print("    : ", W_coef)
    for i in range(epoch):  #    
        Error = centimetre - (inches * W_coef)
        print("  ", Error)  #      
        if Error > 0:
            W_coef += lr  #    ,    

        if Error < 0:
            W_coef -= lr  #   ,    

        if Error < accur:
            print("  ", W_coef)
            return  #  ,      

epoch = int(input("epoch: "))  #      ""
lr = float(input("enter learning rate: "))  #   
accur = float(input("enter accurancy:  "))  #   ,     ,         

kid_neuro(epoch, lr, accur)  #    -

我让读者尝试自行运行带有各种参数的孩子的神经网络。结果证明,在时期= 100-,学习率= 0.01,accur = 0.1时,效果很好。

尽管该程序看似无用,但我们已经与您讨论了神经网络的工作和基本概念,这些概念也被用于构建大型神经网络,例如反向传播算法。

简要地讲,这些基本概念:

  • W — . - , . — , ,
  • lr — learning rate, .
  • epoch ,

作为一种实践,您可以尝试编写自己的孩子的神经网络,该网络会将例如公里数转换为英里数。借助本文中获得的知识例如您可以轻松地来到这里,并且已经尝试更有意义地启动神经网络。

如果要继续学习神经网络,可以使用一些有用的链接:


All Articles