用单层感知器完成逻辑或运算的学习过程
这道题目是我“认知科学”(专业必修/doge)课程的结课作业题之一,目的在于加深对单层感知器的理解,对于后续学习神经网络打下基础。
有关知识:
B站有关视频
单层感知器的学习过程
比较简单
,其主要目的在于对给出值域进行一个线性划分。主要步骤为:
- 初始化连接权值和阈值(一般为为零的较小随机数);
-
取样本域中数据作为输入,在每一条输入边上进行加权求和,t表示迭代次数;
in
p
u
t
=
∑
i
=
1
n
w
i
(
t
)
x
i
+
b
θ
(
t
)
input=\sum_{i=1}^n{w_i(t)x_i} + b\theta(t)
i
n
p
u
t
=
i
=
1
∑
n
w
i
(
t
)
x
i
+
b
θ
(
t
)
-
将2中求和结果带入激活函数 f (在此取符号函数) 进行判断;
ou
t
p
u
t
=
y
=
s
e
g
(
i
n
p
u
t
)
=
{
1
i
n
p
u
t
≥
0
0
i
n
p
u
t
<
0
output = y=seg(input) = \begin{cases} 1 & input\geq0\\ 0 & input<0 \end{cases}
o
u
t
p
u
t
=
y
=
s
e
g
(
i
n
p
u
t
)
=
{
1
0
i
n
p
u
t
≥
0
i
n
p
u
t
<
0
-
如果输出值和期望值相同则取下一组数据,回到 2 ;否则根据如下规则进行调整,然后 t 加一,调整之后接着取下一组数据。
{w
i
(
t
+
1
)
=
w
i
(
t
)
+
η
(
d
−
y
)
x
i
θ
(
t
+
1
)
=
θ
(
t
)
+
η
(
d
−
y
)
(
−
1
)
\begin{cases} w_i(t+1)=w_i(t)+\eta(d-y)x_i \\ \theta(t+1)=\theta(t)+\eta(d-y)(-1) \end{cases}
{
w
i
(
t
+
1
)
=
w
i
(
t
)
+
η
(
d
−
y
)
x
i
θ
(
t
+
1
)
=
θ
(
t
)
+
η
(
d
−
y
)
(
−
1
)
- 直至样本域中所有数据输出值与期望值相同。
这里要注意的是,
i 表示输入数据的组内序号,不是第 i 组数据。
题目:假设w
1
(0)=0.2, w
2
(0)=0.4, θ(0)=0.3, η(0)=0.4, 请用单层感知器完成逻辑或运算的学习过程。
由题意可以构造下图的单层感知器,需要迭代求解出中分界线使得分界线可以分割值域。
根据逻辑或的关系可以得到下图的真值表。
-
步骤1:取第①组输入值:x
1
=0, x
2
=0, 期望输出:d=0,实际上:y=f(w
1
(0)x
1
+w
2
(0)x
2
-θ(0))=f(-0.3)=0,与期望输出相同; -
步骤2:取第②组输入值:x
1
=0, x
2
=1, 期望输出:d=1,实际上:y=f(w
1
(0)x
1
+w
2
(0)x
2
-θ(0))=f(0.1)=1,与期望输出相同; -
步骤3:取第③组输入值:x
1
=1, x
2
=0, 期望输出:d=1,实际上:y=f(w
1
(0)x
1
+w
2
(0)x
2
-θ(0))=f(-0.1)=0,与期望输出不相同;- 调整:
- θ(1)=θ(0)+η(d-y)*(-1)=-0.1;
-
w
1
(1)=w
1
(0)+η(d-y)x
1
=0.6; -
w
2
(1)=w
2
(0)+η(d-y)x
2
=0.4;
-
步骤4:取第④组输入值:x
1
=1, x
2
=1, 期望输出:d=1,实际上:y=f(w
1
(1)x
1
+w
2
(1)x
2
-θ(1))=f(1.1)=1,与期望输出相同; -
步骤5:取第①组输入值:x
1
=0, x
2
=0, 期望输出:d=0,实际上:y=f(w
1
(1)x
1
+w
2
(1)x
2
-θ(1))=f(0.1)=1,与期望输出不相同;- 调整:
- θ(2)=θ(1)+η(d-y)*(-1)=0.3;
-
w
1
(2)= w
1
(1)+η(d-y)x
1
=0.6; -
w
2
(2)= w
2
(1)+η(d-y)x
2
=0.4;
-
步骤6:取第②组输入值:x
1
=0, x
2
=1, 期望输出:d=1,实际上:y=f(w
1
(2)x
1
+w
2
(2)x
2
-θ(2))=f(0.1)=1,与期望输出相同; -
步骤7:取第③组输入值:x
1
=1, x
2
=0, 期望输出:d=1,实际上:y=f(w
1
(2)x
1
+w
2
(2)x
2
-θ(2))=f(0.3)=1,与期望输出相同; -
步骤8:取第④组输入值:x
1
=1, x
2
=1, 期望输出:d=1,实际上:y=f(w
1
(2)x
1
+w
2
(2)x
2
-θ(2))=f(0.7)=1,与期望输出相同; -
步骤9:取第①组输入值:x
1
=0, x
2
=0, 期望输出:d=0,实际上:y=f(w
1
(2)x
1
+w
2
(2)x
2
-θ(2))=f(-0.3)=0,与期望输出相同。
由于步骤6~步骤9已经遍历了所有输入数据且实际输出结果均与期望输出相同,故可以结束迭代,此时阈值和连接权值以满足结束条件。
得到:w
1
=0.6, w
2
=0.4, θ=0.3
通过可视化也可以验证(如下图)
如有错误还望指出!