内容目录
合集请查看:深度学习入门合集
参考书籍:深度学习入门 基于Python的理论与实现 作者:斋藤康毅
是什么
感知机接收多个输入信号,输出一个信号。感知机的信号只有“流/不流”(1/0)两种取值。在本书中,0对应“不传递信号”,1对应“传递信号”。
下图是一个接收两个输入信号的感知机的例子。x1、x2是输入信号,y是输出信号,w1、w2是权重。图中的○称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号θ表示。
用数学式表达出来就是
逻辑电路
与门
当(w1, w2, θ) = (0.5, 0.5, 0.7) 时,相当于一个与门,实际上有无限种方案
与非门
当(w1, w2, θ) = (−0.5, −0.5, −0.7) 时,相当于一个与门,实际上有无限种方案
其它
其它同理,在写符合逻辑电路的权重的时候,权重和界限值人为的去设定,这就是一种训练数据。而机器学习/深度学习中则有计算机去决定这些参数值
感知机实现
与门的python实现
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
权重与偏置
其中b为偏置,两个w是权重
这里把−θ命名为偏置b,但是请注意,偏置和权重w1、w2的作用是不一样的。具体地说,w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。
但是根据上下文,有时也会将b、w1、w2这些参数统称为权重
代码实现(以与门为例)
import numpy as np
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5]) # 仅权重和偏置与AND不同!
b = -0.2
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
局限
我们无法用感知机实现异或门(严格的讲,应该是单层感知机)
图形化表述或门,三角形表示1输出,圆形表示0输出,则我们可以用一条线将三角形和圆形分开,一边为0,一边为1。
然而异或门不行
很明显,无法用一条线将圆形和三角形分隔开
线性和非线性
感知机只能表示一条由直线分割的空间,而无法表示曲线
多层感知机
多层感知机实现异或门
上图为2层感知机(只计算权重层)
感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理