读书笔记(3)

page25 继续往下,

2.3 感知机的实现

2.3.1 简单地实现:

我们用python 来实现刚才的逻辑的电路。这里先定义一个接受参数x1 和 x2的AND 函数。


读书笔记-深度学习入门-(3)

AND逻辑

def OR(x1,x2):
w1,w2,theta = 1.5,1.5,1
tmp = x1*w1 + x2*w2
if tmp<= theta:
return 0
elif tmp>theta:
return 1

print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))
读书笔记-深度学习入门-(3)

OR逻辑

2.3.2 导入权重和偏值

我们把式2.1 的θ换成-b,用式 2.2来表示感知机的行为。

读书笔记-深度学习入门-(3)

式2.1

读书笔记-深度学习入门-(3)

式2.2

此处,b 称为偏置,w1 和 w2称为权重。

如上图:式2.2 所示,感知机会计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0,下面使用Numpy,按照式2.2 来实现感知机。


读书笔记-深度学习入门-(3)


如上例所示,在NumPy数组的乘法运算中,当数组的元素个数相同时,各个元素分别相乘,因此wx的结果就是他们的各个元素分别相乘([0,1] *[0.5,0.5]==>[0,0.5]),之后np.sum(w*x)再计算相乘后各个元素的总和,完成了式2.2的计算。

2.3.3 使用权重和偏置的实现

import numpy as np
def OR(x1,x2):
w1,w2,b = 1.5,1.5,-1
W = np.array([w1,w2])
X = np.array([x1,x2])
sum = np.sum(W*X) + b
if sum>0:
return 1
elif sum<0:
return 0

print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))
读书笔记-深度学习入门-(3)

OR 的代码实现

可以看到实现了OR的代码。

我们把-θ 命名为偏置b,但是请注意,偏置和权重w1,w2的作用是不一致的。具体地说,w1和w2 是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度的参数。

如果b为-0.1 则只要输入信号加权综合必须超过20.0,神经元才会被激活。而如果b为-20,则输入信号的加权综合必须超过20.0, 神经元才被激活。我们将w1和w2称为权重,将b称为偏置,但是根据上下文,有时会将b,w1,w2这些参数统称为权重。


2.4 感知机的局限性

使用感知机可以实现与门、与非门、或门三种逻辑电路。

读书笔记-深度学习入门-(3)

公式2.1

现在我们考虑下异或门:

读书笔记-深度学习入门-(3)

异或门的真值表

把上面的公式带入,怎么设定w1, w2,θ 才能满足上图呢?

代公式应该可以算出来:

w1 * x1 + w2 * x2 <= θ

w1 * x1 + w2 * x2 > θ

带入上图的x1, x2 , y(θ) 可以得到:

这样 导出结论是:

第2,第3 和 第4 明显是结论冲突的。

书里面用了另外一个画图的思路:

先看或门的逻辑,或门的逻辑如下图2.3:


读书笔记-深度学习入门-(3)

或门逻辑2.3

如果用二元一次方程来表示,其实就是一条直线。

二元一次方程就是直线,参考 https://web.ntnu.edu.tw/~498403294/teach/s.htm


读书笔记-深度学习入门-(3)

-0.5+x1+x2=0 直线分割了平面

这里看到-0.5+x1+x2=0 直线 分割了整个平面,直线下半部分平面的阴影其实就是y=0 的情况,上半部分是1的情况。

或门的场景,如果把(x1,x2) 作为上图的坐标, 就是要求(0,0) 坐标在下面,其它(0,1),(1,0),(1,1)等输入场景下,数值都是>0。

如果制作与门也很简单了,(0,0),(0,1),(1,0)都要在直线坐标下面,而(1,1)在坐标上面。



读书笔记-深度学习入门-(3)

与门实现 x1+x2-1.1 =0


从这里看,异或门的要求就比较奇葩了,要求直线把(0,0)(1,1)放在1边,(0,1) (1,0)放在另一边,这个是没法做到的。


读书笔记-深度学习入门-(3)


这里引入了一个新的概念。

2.4.2 线性和非线性

我们知道二元一次方程是一条直线,无法实现上面异或门的分割要求。但是用二元二次方程其实可以满足要求,是一条曲线。


读书笔记-深度学习入门-(3)


这里感知机的局限在于它只能表示由一条直线分割的空间,上图的曲线分割方法需要用非线性的空间来进行划分。

2.5 多层感知机

感知机不能表示异或门让人深感遗憾,但也无需悲观。实际上,感知机的绝妙之处是可以叠加,通过多层来求解。


2.5.1 已有门电路的组合

异或门的制作方法很多,其中之一就是可以通过前面做好的与门、与非门、或门进行配置。


读书笔记-深度学习入门-(3)


读书笔记-深度学习入门-(3)

2.5.2 异或门的代码层实现


import numpy as np
def OR(x1,x2):
w1,w2,b = 1.5,1.5,-1
W = np.array([w1,w2])
X = np.array([x1,x2])
sum = np.sum(W*X) + b
if sum>0:
return 1
elif sum<0:
return 0


def AND(x1,x2):
w1,w2,b = 0.5,0.5,-0.7
W = np.array([w1,w2])
X = np.array([x1,x2])
sum = np.sum(W*X) + b
if sum>0:
return 1
elif sum<0:
return 0


def NOT_AND(x1,x2):
w1,w2,b = 0.5,0.5,-0.7
W = np.array([w1,w2])
X = np.array([x1,x2])
sum = np.sum(W*X) + b
if sum>0:
return 0
elif sum<0:
return 1

def XOR(x1,x2):
return AND(NOT_AND(x1,x2),OR(x1,x2))

print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))

print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))

print("------------------")
print(NOT_AND(0,0))
print(NOT_AND(0,1))
print(NOT_AND(1,0))
print(NOT_AND(1,1))

print("-----result of xor------")
print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))


读书笔记-深度学习入门-(3)

XOR 运行效果图

这样异或门就实现了。异或门是一种多层结构的神经网络,这里,最左边一列是0层,中间的一列是第1层,最右边的一列称为第2层。

叠加了多层的感知机也称为多层感知机(multi-layered perceptron)


读书笔记-深度学习入门-(3)

二层感知机

这里我们叫做二层感知机。

具体如下逻辑:

  1. 第0层的两个神经元接受输入信号,并将信号发送到第一层的神经元
  2. 第1层的神经元将信号发送至第2层的神经元,第2层的神经元输出y.

2.6 从与非门到计算机

多层感知机可以实现比前见到的电路更复杂的电路。比如进行加法运算的加法器,比如二进制到十进制转换的编码器。

书里介绍,《计算机系统要素:从零开始构建现代计算机》,论述了通过NAND来构建可运行俄罗斯方块的计算机的过程。通过简单地NAND元件就可以实现计算机这样复杂的系统。

严格来说,2层感知机,激活函数使用了非线性的sigmoid函数的感知机可以表示任意函数。

本节学到,感受最大的是:

单层感知机智能表示线性空间,而多层感知机可以表示非线性空间。-by 飞霜

展开阅读全文

页面更新:2024-04-20

标签:与非门   神经元   权重   多层   直线   函数   逻辑   信号   元素   计算机

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top