深度学习入门

 

1.感知机

感知机算法是由美国学者 Frank Rosenblatt 在1957年提出来的。感知机算法自己很是简单,可是它是神经网络(深度学习)的起源的算法。下面,就简单介绍下这个算法。python

1.1 感知机算法简介

感知机接收多个输入信号,输出一个信号。感知机的信号只有(1/0)两种取值。算法

下图是一个接收两个输入信号的感知机的例子。x1 和 x2是输入信号, y是输出信号,ω1、ω2 是权重。图中的 ⭕️表示神经元(或者节点)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ 表示。网络

那么感知机的公式就能够很容易表示出来了 :ide

   

(公式 1.1)学习

1.2 简单逻辑电路

简单逻辑电路其实是感知机的一个简单的应用场景,这里定义3个概念:与门(AND gate)、 与非门(NAND gate)、或门(OR gate)、异或门(XOR gate)。spa

这和逻辑条件的判断类似,对于参数肯定的感知机模型,x和 x2取相应的值时,对应的y值以下图: 3d

 针对每个电路实例,很容易获得结论: 前3种能够有多种不一样类型的感知机,不一样的模型,参数不一致。code

下面,是用python实现3种感知机模型(肯定ω1、ω2,让它们知足与门、与非门和或门的条件):blog

 1 def AndGate(x1,x2):
 2     theata = 0.6
 3     w1 = 0.5
 4     w2 = 0.5
 5     sum = w1*x1 + w2*x2
 6     if sum <= theata:
 7         return 0
 8     else: return 1
 9 
10 def NotAndGate(x1,x2):
11     theata = -0.6
12     w1 = -0.5
13     w2 = -0.5
14     sum = w1*x1 + w2*x2
15     if sum <= theata:
16         return 0
17     else: return 1
18 
19 def OrGate(x1,x2):
20     theata = 0.3
21     w1 = 0.5
22     w2 = 0.5
23     sum = w1*x1 + w2*x2
24     if sum <= theata:
25         return 0
26     else: return 1
View Code

 下面,想象着对感知机的公式作一个变体,让θ = -b,那么公式就变成了:深度学习

(公式1.2)

 固然,这时候问题变成了,若是肯定了 b、ω1、ω2,也能够肯定感知机模型,下面一样道理,咱们快速写出该模型的python代码(只要让 b= -θ 便可):

 1 import numpy as np 
 2 
 3 def AndGateSecond(x1,x2):
 4     X = np.array([x1,x2])
 5     w1,w2 = 0.5,0.5 
 6     b=-0.6 
 7 #     print (np.array([w1,w2])*X)
 8     sum = b + np.sum(np.array([w1,w2])*X)
 9     if sum<=0 : 
10         return 0
11     else:
12         return 1 
13 
14 def NotAndGateSecond(x1,x2):  
15     X = np.array([x1,x2])
16     w1,w2 = -0.5,-0.5 
17     b=0.6 
18 #     print (np.array([w1,w2])*X)
19     sum = b + np.sum(np.array([w1,w2])*X)
20     if sum<=0 : 
21         return 0
22     else:
23         return 1
24     
25 def OrGateSecond(x1,x2):  
26     X = np.array([x1,x2])
27     w1,w2 = 0.5, 0.5 
28     b = -0.3
29 #     print (np.array([w1,w2])*X)
30     sum = b + np.sum(np.array([w1,w2])*X)
31     if sum<=0 : 
32         return 0
33     else:
34         return 1
View Code

 1.3 感知机的局限性

异或门,不能用感知机表示,下面用图形的方式来解释缘由。

y = ω1*x1ω2*x1 + b 能够理解为一条直线,二维空间。若是 ω1 = 1 , ω2 = 1 , b = -0.5 ,是知足或门的参数。下图是该参数的直线,将三角和圆形符号区分开了。

三角形符号: (1,0) ,  (0,1) ,  (1,1)   圆形符号:(0,0) 

 

那么,异或门,实际上找到一条曲线,将下图中的三角和圆形符号区分开。

 

很明显,用直线没法将上图中三角和圆形符号区分开。 只能用曲线了:

 

 

感知机的局限性就在于它只能表示由一条直线分割的空间。而没法解决上边异或门的曲线问题。

  1.4 多层感知机

上一节中,提到了感知机的局限性,没法实现异或门。也就是说,在线性空间中,感知机没法实现异或门。 

可是,咱们能够经过前边3个感知机的组合来实现异或门,看下边的真值表:

 

容易发现,咱们使用与非门、或门和与门组合完成了异或门的实现。这样,python实现代码也容易完成: 

1 def NotOrGate(x1,x2):
2     s1=NotAndGateSecond(x1,x2)
3     s2=OrGateSecond(x1,x2)
4     y=AndGateSecond(s1,s2)
5     return y
6 
7 NotOrGate(0,0),NotOrGate(1,0),NotOrGate(0,1),NotOrGate(1,1)
View Code

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

图形化表示异或门,以下:

相关文章
相关标签/搜索