V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
BBrother
V2EX  ›  问与答

最近入门神经网络,遇到个问题想请教一下

  •  
  •   BBrother · 2019-07-26 15:21:59 +08:00 · 1737 次点击
    这是一个创建于 1948 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最简单的神经网络是单层神经网络(没有隐藏层),单层神经网络如果只有一个输出节点,那么可以称为感知器(好像也有单层神经网络就是感知器的说法?)

    我的问题是这样的:

    有多个输出节点的单层神经网络也是只能做线性分割吗?比如鸢尾花的数据集,可以通过一个输出节点判断是不是某种鸢尾花,那么我只要用 3 个输出节点是不是就能判断数据集里的 3 种鸢尾花了?

    那么对于异或运算

    https://i.loli.net/2019/07/26/5d3aa925e109111365.jpg

    如果一个输出节点能画一条线的话,两个输出节点不就能分割了吗?

    9 条回复    2019-07-26 18:38:23 +08:00
    wutiantong
        1
    wutiantong  
       2019-07-26 15:33:11 +08:00
    没问题啊
    wqzjk393
        2
    wqzjk393  
       2019-07-26 15:41:56 +08:00
    多输入一输出,理论上是能分割两种类别,一个是输入的加权和通过激活函数以后的值 a,另一个则是 1-a,那么判断 a 和 1-a 的大小就可以定义分到哪一类了(这个激活函数如果不用 sigmoid,改用 softmax,那基本上就可以完全理解成输出为某一类的概率了,然后 1-a 就是另外一类的概率了)。
    如果你往后继续看的话,就会看到使用 mnist 数据集做手写识别的时候,一般设计最后一层是 10 个神经元分布代表 1 到 10,用 0 和 1 代表是不是这一个分类。当然如果你要想定义 9 个神经元也没问题,就是全 0 的输出的时候定义为某个特定的值罢了,这只是神经网络结构设计上个人选择而已。类似 python 里面的 df.get_dummies,就是删掉一个输出结果,用其他的输出结果组合(例如全零)来表示这个删掉的
    wqzjk393
        3
    wqzjk393  
       2019-07-26 15:46:00 +08:00   ❤️ 1
    @wqzjk393 10 个神经元分布代表 1 到 10,用 0 和 1 代表是不是这一个分类。
    这个说的可能有点问题。。10 个神经元分布代表 0 到 9,用使用这 10 个输出里面最大的的那一个结果作为最后的预测分类。如果你采用 9 个神经元的话,可以定义一个 threshold 值,如果 9 个输出都小于这个值,那么就认为是最后那个分类。
    Vinty
        4
    Vinty  
       2019-07-26 16:07:20 +08:00 via Android
    不能的吧,单层神经网络多个输出节点它也仍然是一个线性分类器。你说的画两条线,输出节点对应的并不是最后的分类结果,实际上就是隐含层。
    Philippa
        5
    Philippa  
       2019-07-26 16:24:47 +08:00 via iPhone
    看看 PyTorch 的官方视频教程免费的,质量非常高。大部分都有英语字幕,少部分含中文字幕。
    BBrother
        6
    BBrother  
    OP
       2019-07-26 17:08:26 +08:00
    @wqzjk393 您说的这个我能理解,但是我想知道的是,输入直接到输出(多个输出节点的)神经网络为什么只能用来线性分类呢?


    @Vinty 是这样吗?😂
    013231
        7
    013231  
       2019-07-26 17:44:24 +08:00
    就以异或那个例子来说, 你的两个输出节点画出了两条线, 那分类结果到底是看那条线?

    你的想法大概是, 一条线把数据分成了(上, 下)两类, 另一条线把数据分成了(左, 右)两类, 然后我们可以判断(上右, 下左)是红, (上左, 下右)是蓝.

    但这样一来, 分类过程实际上根本不是由神经网络完成的, 是在你知道分类方法的前提下手写出来的. 神经网络只是按上下左右对数据分类, 这种分类方式确实可以由线性分类器实现.
    TobiahShaw
        8
    TobiahShaw  
       2019-07-26 17:52:40 +08:00
    感觉楼主说的输出多条线就不是单层感知机,就示例那张图来讲,可以用 SVM 来弄两条 margin。单就楼主说的” 3 个输出节点“,拿结果应该是特征的另一种表示形式,而不是分类结果。
    BBrother
        9
    BBrother  
    OP
       2019-07-26 18:38:23 +08:00
    @TobiahShaw
    @013231

    好吧,大概理解了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2466 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.