• 【民科笔记】神经网络的本质


    https://www.bilibili.com/read/cv12359258

    笔记所有素材均来源于网络

    近来,深度神经网络在人工智能领域被广泛应用,还记得我在当初学习时走了不少弯路……

    一些 “教程” 一上来就大谈 “偏导数” “矩阵” 之类的概念,让人云里雾里

    这篇文章会尝试讲清楚最本质的东西,一种类似于直觉或哲学的东西,所以 不涉及计算。一旦你明白它的本质,如何计算应该是心中有数的……

    (这是我本人的个人理解,若有什么不对,望不吝指正)


    什么是神经网络?以及它解决了什么?
    一直以来,计算机都只能处理具有明确步骤 精确任务:例如加减乘除、查找数据、求解方程等。但对于 模糊任务:手写识别、图片分类、聊天对话等,却无能为力……

    一个原因是:即使是一个简单的手写数字识别任务,世界上最聪明的工程师也无法给一大堆 凌乱的像素 与 抽象的数字 找到明确的关系

    模糊任务处理本质是一个 数据处理 问题,问题在于如何找到处理方法……
    于是人们发明了 神经网络,用模型里的参数表示出通用的数据处理流程
    也就是说,只要找到合适的 模型参数,就可以把输入的凌乱的数据(猫狗图片、评价文本等),变成抽象概念(猫、狗、好评度等)【下面看看 —— 什么是模型?】


    先让我们看看一个简单 全连接神经网络 的结构:
    由许多许多 人工神经元 (说是受人脑启发,但更像是蹭热度)组成,用于处理数据
    信号一层层的被传递、处理,最终产生输出(但我们尚未知晓里面发生了什么)

    (图1)简单全连接神经网络结构图
    而且,一大堆乱七八糟的连线,所以还是先看看 单神经元 结构图:

    (图2)单人工神经元【可以看作一个数据加工厂】
    单神经元运算过程如下:

    将对应的 输入X 与对应的 权重W 相乘并求和(权重可以理解为重要程度)

    将 加权和 加上 偏置B 送入 激活函数 ,最后输出……

    现在再看(图1)是否有了一些头绪?那些写着 +1 的圈圈就是 偏置B
    这么多东西怎么来,一会儿再说……
    而乱成一锅粥的箭头是 输入与输出的流向 和 权重,只要弄清什么是 激活函数 即可
    激活函数 顾名思义,是一个函数。常用的是 Leaky ReLU,图像如下:

    Leaky ReLU
    Leaky ReLU 的函数表达式很容易写出来:

    所以完整单神经元的表达式呼之欲出!

    现在只要按照(图1)的数据流向,将一层网络的输出作为下层网络输入,层层嵌套计算即可,最后一层便是整个网络的输出

    重点,激活函数是固定的,在输入确定的情况下,权重 与 偏置 决定着模型的输出!这些东
    就是模型的 参数,像网络层数,每层个数等叫 超参数,因为一旦确定一般不更改
    因此我们所需要的便是找到合适的 参数,使得模型可以正确的将数据转化为概念

    假若我们有一张猫图,应该如何将其输入模型,看看它到底是不是猫呢?最简单粗暴的方法就是把它变成黑白猫:从上到下,从左往右把所有像素点的亮度值输入进去……

    假设图片有n个像素点,那么输入层就有n个神经元
    我们并不知道合适的参数是什么,所以可以试着随机初始化它们。但这样的模型是不可以使用的,因为它完全在瞎搞,甚至可能把老鼠的图片判定为猫
    我们构建网络模型的目的,是为了判定图片是否是猫,我们当然希望 准确率 越高越好!
    而那数不尽的参数让我们发愁:想象有一台机器,可以 计算模型的准确率,我们便可以依据这台神奇的机器来确定参数

    旋钮是参数,绿色的条是准确率
    然后我们就可以 对每个参数 这样做:
    增大这个参数,如果 准确率提升,说明我们做对了,尝试 增大些
    增大这个参数,如果 准确率降低,说明我们做错了,尝试 减小些
    这便是 神经网络的奥秘 —— 根据参数对结果的影响,进行针对性调整。这个过程叫做 训练
    可能有人会问:梯度呢?偏导呢?网上一堆吓人的概念那里去了?【下面讲 梯度 是什么】
    既然我们要根据每个参数对准确率的影响,来针对性调整。总不能人工一个个调吧?
    要想把这个过程 自动化,就要 定量衡量参数对准确率的影响!
    同样的改动大小,不同参数对准确率的影响不同,因此,可以 将影响定义为一个比值:

    当  被设定得越小,它就越接近所谓的 梯度(这事实上是数学上的极限值)
    但是,准确率 怎么得到?事实上,我们一般不用准确率作为标准,而是以 错误程度 为标准。请原谅我上文为了解释清楚,故意偷换了标准……(本质是一样的)

    所以,上文的调整步骤应该变为:
    增大这个参数,如果 错误程度 降低,说明我们做对了,尝试增大些
    增大这个参数,如果 错误程度 提升,,说明我们做错了,减少参数值
    梯度的近似表达为:

    现在,我们需要计算模型的 错误程度。假若模型最后只有一个输出 —— 是猫输出1,否则为0
    那么,当输入单张图片的时候,我们可以这样计量 错误
      图片为多个时,将所有的的错误求平均即可
    (比如可以用0代表不是猫,1代表是猫)
    这里的 真实值 指的是模型 应该输出的值 (而 真实值 确实需要人类手动提供……)
    像这样,用来衡量错误程度的标准,叫 损失函数!训练的目的便是 让损失函数值最小
    把一堆猫图输入模型,有了人类提供的标签,神经网络便可以知道自己与理想的差距。根据损失函数的指引,调整每一个参数的大小,直至完全正确的达到预期!


    对于最后一层有多个神经元的情况,你应该知道 什么是正确的输出,给模型一个 标准答案,然后再用损失函数,衡量错误程度……

    当然,有的时候也会出岔子,模型把我们给的所有数据 死记硬背 下来,导致它实际上效果不好。它没有真正的做判断,而是在 背答案,这种现象被称之为 过拟合

    下期利用全连接拟合  图像,带大家熟悉流程! 作者:若小仟 https://www.bilibili.com/read/cv12359258 出处:bilibili

  • 相关阅读:
    查找质数的算法优化版
    一些新闻链接
    spring的自动装配基础
    Spring中的Autowired注解和Resource注解的区别
    动态规划:01背包 复习
    贪心问题 POJ 2393 Yogurt factory
    穷竭搜索:POJ 3187 Backward Digit Sums
    穷竭搜索: POJ 2718 Smallest Difference
    何凯文每日一句打卡||DAY1~DAY3
    贪心问题:区间覆盖 POJ 1328 Rader Installation
  • 原文地址:https://www.cnblogs.com/chinasoft/p/16247244.html
Copyright © 2020-2023  润新知