当前位置 博文首页 > shelgi的博客:机器学习---7.神经网络基础
神经网络最基本的成分是神经元模型,当输入值超过了神经元的阈值,神经元就被激活了。然后通过激活函数就可以将输出值对应为0或者1。
感知机是由两层神经元组成,输入层接收数据,输出层经过激活函数可以输出0或者1,所以感知机能实现一些基本的逻辑运算,下面来看看其中的数学原理。
公式: f ( x ) = s i g n ( w ? x + b ) f(x)=sign(w*x+b) f(x)=sign(w?x+b)
其中 s i g n ( x ) = { 1 x ≥ 0 0 x < 0 \begin{aligned} sign(x)=\left\{ \begin{aligned} 1 &&x \geq 0\\ 0 &&x<0 \end{aligned} \right. \end{aligned} sign(x)={10??x≥0x<0??
x是输入,w是权重,b是偏差(偏置项)
x1 | x2 | x1 AND X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
对应的不等式为:
b<0
w2+b<0
w1+b<0
w1+w2+b>=0
综上:只要权重满足w1,w2<-b,w1+w2>-b就可以实现与运算;
# 1.与运算
import numpy as np
def AND(x1,x2):
x=np.array([x1,x2])
w=np.array([1,1])
b=-1.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(AND(1,1))
print(AND(0,1))
print(AND(1,0))
print(AND(0,0))
x1 | x2 | x1 OR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
对应的不等式为:OR
b<0
w2+b>=0
w1+b>=0
w1+w2+b>=0
综上:只要权重满足w1,w2>=-b就可以实现与运算;
def OR(x1,x2):
x=np.array([x1,x2])
w=np.array([1,1])
b=-0.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(OR(1,1))
print(OR(0,1))
print(OR(1,0))
print(OR(0,0))
x | NOT x |
---|---|
0 | 1 |
1 | 0 |
对应的不等式为:
b>=0
w+b<0
综上:只要权重满足w<-b,b>=0就可以实现非运算;
def NOT(x):
x=np.array([x])
w=np.array([-1])
b=0.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(NOT(1))
print(NOT(0))
x1 | x2 | x1 XOR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
对应的不等式为:
b<0
w2+b>=0
x1+b>=0
w1+w2+b<0
这个不等式无解,所以这就是单层感知机的弊端,不能进行异或运算。
所以这个时候就要用多层感知机去解决这个问题了
#用多层感知机来解决这个问题
def XOR(x1,x2):
a=NOT(x1)
b=NOT(x2)
X1=AND(a,x2)
X2=AND(x1,b)
Y=OR(X1,X2)
print(Y)
XOR(0,0)
XOR(1,1)
XOR(0,1)
XOR(1,0)
通过这几个例子我们就知道了单层感知机只能解决线性可分问题,对于非线性可分问题的求解还得通过多层感知机(神经网络)。
需要训练多层网络,就需要更强大的学习算法—BP算法(反向传播算法)
对训练集假设神经网络的输出为
y
^
j
k
=
f
(
β
j
?
θ
j
)
\hat{y}_{j}^{k}=f(\beta_j-\theta_j)
y^?jk?=f(βj??θj?)
则均方误差为:
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
?
y
j
k
)
2
E_k=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_j^k-y_j^k)^2
Ek?=21?j=1∑l?(y^?