感知机异或实现(前馈神经网络入门)

昨天刚开始学神经网络,做完与或非门之后,手贱想做一做异或,真是初生牛犊不怕虎,后来查了下资料,直接查到了深度学习,害,无意入坑。不过既来之,则安之。我准备把这个功能实现,无所谓翻山越岭,但求有所收获。

先看了花书:
第六章 深度前馈网络
第一节XOR 的实现
但是没有看懂,然后再B站看了shuhuai008的白板推导系列的(二十三)-前馈神经网络的第三p ,有种豁然开朗的感觉。但是并没有写出具体的代码实现。我下面的内容有一大部分基于那个视频。大家也可以去看看 白板推导系列的(二十三)-前馈神经网络

下面开始写我思考过程:其实我完全没有思路~
先做做头脑风暴吧:

  • 什么是异或
  • 异或可以用其他逻辑表示吗
  • 如何用其他逻辑表示呢
    首先,异或表示两个状态不同时输出1,相同时输出0
    可是计算机看不懂语言,我们还是将他转化为公式,才更好理解。

x 1 ⊕ x 2 = ( ! x 1 ∧ x 2 ) ∨ ( x 1 ∧ ! x 2 ) x_1\oplus x_2 = (!x_1 \wedge x_2)\vee(x_1 \wedge ! x_2) x1x2=(!x1x2)(x1!x2)
但是这个公式怎么来呢? 凭什么是这个公式呢? 杠精已上线
当然是有根据的:
我们看下异或取正样本的条件;
当 输入
(1,0)-》1
(0,1)-》1
这两个都能输出1对吧,那要是想让异或输出1 ,这两个式子应该是什么关系呢? 答 或关系,很好,就是或的关系
下面就有了两个式子的联系
( 1 , 0 ) ∨ ( 0 , 1 ) (1,0)\vee (0,1) (1,0)(0,1)
下面继续考虑,什么情况下可以保证 输入(1,0) 输出是1呢?
有两种情况:
情况一:原来的函数是一个或函数 这样输入(1,0 )-》1
情况二:原来是一个与函数,同时x2的输入后进行了非操作,这样有(1,!0)-》1
那究竟是哪一种呢? 我们在做一个假设:
如果情况一满足异或操作的话,那么输入(1,1) 此时,输出的也为1 ,加之外层的或关系,可见我们最终的输出为1 ,这明显与异或函数(1,1)-》0 不符合。因此,情况二才是真正我们想要的函数。
这样我们就合理的推出了这个式子:
x 1 ⊕ x 2 = ( ! x 1 ∧ x 2 ) ∨ ( x 1 ∧ ! x 2 ) x_1\oplus x_2 = (!x_1 \wedge x_2)\vee(x_1 \wedge ! x_2) x1x2=(!x1x2)(x1!x2)
[至此,再次感谢抒怀兄,给予的指点]

【思考时间】推出来这个式子有什么用? 难道说我们知道了之间的逻辑关系就可以做一个多层感知机(MLP)? 好像也不是不可以,大胆想象一下:
在这里插入图片描述这不就是三个感知机嘛! -灵魂画师已上线
对比下周志华老师的图
在这里插入图片描述还不错嘛,哈哈。
有一个无赖的想法,就是用上一篇文章的内容得到与门和或门的阈值和权重,然后直接搬到这里来。根据上面的分析构建出来一个异或函数。可这根本不是直接训练的结果,不过有胜于无。我准备先用这种方式试一下。

w1w2b
与门11-1
或门33-1

写写函数,由于我们之前那些函数输出的都是1,-1 ,但是输入的是1,0 所以,我们要进行一次统一,就是将输出的-1 转化为零。函数中有标注

import numpy as np
def sign(p):
    return 1 if p>0 else -1
def and_(x1,x2):
    x=np.array([x1,x2])
    return 0 if sign(np.dot(x,[1,1])-1)==-1 else 1
def or_(x1,x2):
    x=np.array([x1,x2])
    return 0 if sign(np.dot(x,[3,3])-1)==-1 else 1
def not_(x1):
    return 0 if x1==1 else 1
def xor_(x1,x2):
    h1=and_(not_(x1),x2)
    h2=and_(x1,not_(x2))
    return or_(h1,h2)
print("1 xor 1=",xor_(1,1))
print("1 xor 0=",xor_(1,0))
print("0 xor 1=",xor_(0,1))
print("0 xor 0=",xor_(0,0))

输出结果为:

1 xor 1= 0
1 xor 0= 1
0 xor 1= 1
0 xor 0= 0

完美实现,不过这肯定不是我想要的,我想要用数据集自己训练出来一个模型,而不是手动分析,这样等数据集复杂化后,手动根本无法计算。

下面重新开始,使用花书上面的方式:


我准备先存档,【存档时间,】2020/10/10 早晨8:54分
【读档时间】2020/10/14 早晨9:44分
异或感知机的训练,看我写的另一篇文章:误差逆传播算法-实现异或感知机

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值