最简单的神经网络是单层神经网络(没有隐藏层),单层神经网络如果只有一个输出节点,那么可以称为感知器(好像也有单层神经网络就是感知器的说法?)
我的问题是这样的:
有多个输出节点的单层神经网络也是只能做线性分割吗?比如鸢尾花的数据集,可以通过一个输出节点判断是不是某种鸢尾花,那么我只要用 3 个输出节点是不是就能判断数据集里的 3 种鸢尾花了?
那么对于异或运算
https://i.loli.net/2019/07/26/5d3aa925e109111365.jpg
如果一个输出节点能画一条线的话,两个输出节点不就能分割了吗?
1
wutiantong 2019-07-26 15:33:11 +08:00
没问题啊
|
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,就是删掉一个输出结果,用其他的输出结果组合(例如全零)来表示这个删掉的 |
3
wqzjk393 2019-07-26 15:46:00 +08:00 1
@wqzjk393 10 个神经元分布代表 1 到 10,用 0 和 1 代表是不是这一个分类。
这个说的可能有点问题。。10 个神经元分布代表 0 到 9,用使用这 10 个输出里面最大的的那一个结果作为最后的预测分类。如果你采用 9 个神经元的话,可以定义一个 threshold 值,如果 9 个输出都小于这个值,那么就认为是最后那个分类。 |
4
Vinty 2019-07-26 16:07:20 +08:00 via Android
不能的吧,单层神经网络多个输出节点它也仍然是一个线性分类器。你说的画两条线,输出节点对应的并不是最后的分类结果,实际上就是隐含层。
|
5
Philippa 2019-07-26 16:24:47 +08:00 via iPhone
看看 PyTorch 的官方视频教程免费的,质量非常高。大部分都有英语字幕,少部分含中文字幕。
|
6
BBrother OP |
7
013231 2019-07-26 17:44:24 +08:00
就以异或那个例子来说, 你的两个输出节点画出了两条线, 那分类结果到底是看那条线?
你的想法大概是, 一条线把数据分成了(上, 下)两类, 另一条线把数据分成了(左, 右)两类, 然后我们可以判断(上右, 下左)是红, (上左, 下右)是蓝. 但这样一来, 分类过程实际上根本不是由神经网络完成的, 是在你知道分类方法的前提下手写出来的. 神经网络只是按上下左右对数据分类, 这种分类方式确实可以由线性分类器实现. |
8
TobiahShaw 2019-07-26 17:52:40 +08:00
感觉楼主说的输出多条线就不是单层感知机,就示例那张图来讲,可以用 SVM 来弄两条 margin。单就楼主说的” 3 个输出节点“,拿结果应该是特征的另一种表示形式,而不是分类结果。
|
9
BBrother OP |