深度学习系列(3.1)——神经网络-感知机(Perceptrons)

1、神经网络的起始——感知机(perceptrons)

说到神经网络,先要讲的当然是 感知机 ,感知机 在上世纪50年代末和60年代初由科学家  Frank Rosenblatt 取得了进展,灵感来自早期由  Warren  McCulloch 与 沃尔特·皮兹 的神经研究工作。

如今,越来越多的算法使用人工神经元模型,在许多现代神经网络的研究中,主要的神经网络模型是一种叫做乙状结肠神经元的神经网络模型。接下来很快就会讲到 乙状结肠 神经元。这就是我们 神经网络中的  Sigmoid 激活函数的机理,但要明白  Sigmoid 神经元以什么样的方式定义他们,这就得先了解下 感知器(  perceptrons )。

2、感知机-perceptrons

2.1 原理阐述

先简单的构思下,你觉得感知机是如何工作的?感知机需要几个二进制输入,  X1X2Xn ,并产生一个二进制输出:

这里写图片描述

上图所示的  Perceptron 有三个输入,但是实际的输入可能远多于三个或是少与三个。  Rosenblatt 提出了一个简单的规则来计算输出,他首先引入了  weights (权重)概念,  ω1ω2,... 。以实数权重  ω 表示输入到输出的重要性,神经元的输出 0 或 1 ,这取决于加权因子(即  weights 这里写图片描述小于或大于某一阈值。就像权重,阈值为一个实数,是一个神经元的参数。

公式表示为:
这里写图片描述 (1)

这就是我们熟知的激活函数的最初形态,  0 状态代表抑制,  1 状态代表激活。这简单的数学公式帮助我们了解  perceptrons 是如何工作的。姑且我们把它理解为: 它是一种通过权衡输入信息的重要性来决定你的输出。

2.2 实例理解

举个简单的例子,假设在这个周末,你听说你的城市将有一个摇滚音乐节,你喜欢摇滚,现在想做决定看是否去音乐节。假设你通过权衡三个因素来做出你的决定:

1)当天的天气好吗?
2)你的男朋友或女朋友是否想陪你一起去?
3)到达目的地的交通是否便利。

下面我们把它公式化,我们以相应的二进制变量来表示这三个因素  x1,x2,x3 。假设我们把天气好表示为  x1=1 ,反之  x1=0 。相似地假设,有人陪  x2=1 , 反之  x2=0 ; 交通便利  x3=1 ,反之  x3=0

现在,假设:
1、你非常喜欢摇滚音乐,所以即使的男、女朋友不去,你也很可能会去参加这个摇滚音乐节。
2、但也许你真的讨厌的坏天气,如果初先坏天气,你很可能就不去了。

你可以使用感知器模型来做这类决策,这时我们设置权重因子  w1=6,w2=2,w3=2.  w1 值越大,表明天气因素对你有更重要的意义,远不如是否有人陪伴或是交通情况。最后,假设你选择一个 阈值为  5 的感知器。有了这些选择,感知机可实现你理想的决策模型,当天气好的时候,输出  1  0 表示天气不好。这时,无论你的男朋友或女朋友是否想去,或是交通情况是否便利,这两项将不再影响你的输出。

通过不同的权重和阈值,我们可以得到不同的决策模型。例如,假设我们选择了一个阈值为  3 。然后,如果天气好,感知器 会判定你应该去参加这个音乐节。亦或是天气不好,但是你的男、女朋友愿意陪你去并且交通便利,感知器 也会判定定你应该去参加这个音乐节。总而言之,权值或是阈值的改变,它将会是一个不同的决策模型。

显然,感知器不是人类的一个完整的决策模型,人的神经网络要复杂得多!但是,例子说明的是一个感知器是如何衡量不同种类的约束条件的重要性,以作出决定。就这方面而言,举例还算是恰当。当然,一个复杂的网络感知器就可以做出非常微妙的决定:

2.3 多层网络

下面是一个多层网络结构:

这里写图片描述

在这个相对复杂的网络中,通过感知(  inputs )我们将综合权衡  3 个感知器(即考虑权重因子的大小),第一层做出三个非常简单的决策。那么关于第二层感知器呢?我们做出的决策是通过权衡感知所做出的决策,这样,在第二层感知器就会在比第一层感知器更复杂、更抽象的层次上作出决定。那么第三层就可能做出更复杂,更加抽象的决策。由此可知,多感知层网络可以从事复杂的决策。

* 这里要提醒的一下的是,可能有些刚接触的神经网络的朋友们,这里的感知器都是单输出。图示网络造成的错觉,感知器看起来有多个输出,事实上,它们仍然是单一输出(下面随手画了下,凑活着看),多输出箭头仅仅是表明从感知器的输出作为其他几个感知器输入的有效途径。又通过赋予不同的权重因子来做出下一层的决策,这样来逐层学习。

这里写图片描述

2.4 感知规则

接下来简单描述下感知规则: jwjxj> 阈值  (threshold) 我们以多个感知器加权求和的方式与设定的阈值比较做出决策,显然这种方式显得比较繁琐,我们可以这样去简化它。

1)将 jwjxj 改写成点积的形式, wjwjxj jwjxj ,这里 w x 均为向量,代表着 权重(weights) 和输入 (inputs)

2)将阈值移动到不等式的另一边,并将其替换为感知器的偏置 b (神经网中看到的偏置 b, bthreshold

这里使用的是偏置而不是 threshold ,那么感知规则可以改写为:

这里写图片描述

* 这里在简单描述下偏置,你可以把这种偏见当作衡量一个感知器到输出 1 的决策的一个衡量指标。对于一个真正的大偏差的感知(这里就有点我们特征工程中的显著特征的意味了),它是非常容易的感知到输出 1 。但是,如果偏置是负的,那么它是很难输出一个 1 <script type="math/tex" id="MathJax-Element-191">1</script> 。显然,就目前而言引入偏差对于我们描述感知规则仅产生了很小的公式变化,但是后续的学习中,它会导致更多的符号的简化。

代码实现:

class Network(object):

    def __init__(self, sizes):
        self.num_layers = len(sizes)
        self.sizes = sizes
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
        self.weights = [np.random.randn(y, x) 
                        for x, y in zip(sizes[:-1], sizes[1:])]

明天继续!!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值